-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathFindErlang.cmake
More file actions
144 lines (120 loc) · 3.93 KB
/
FindErlang.cmake
File metadata and controls
144 lines (120 loc) · 3.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.
#[=======================================================================[.rst:
FindErlang
-------
Finds Erlang libraries.
Imported Targets
^^^^^^^^^^^^^^^^
This module provides the following imported targets, if found:
``Erlang::Erlang``
Header only interface library suitible for compiling NIFs.
``Erlang::EI``
Erlang interface library.
``Erlang::ERTS``
Erlang runtime system library.
Result Variables
^^^^^^^^^^^^^^^^
This will define the following variables:
``Erlang_FOUND``
True if the system has the Erlang library.
``Erlang_RUNTIME``
The path to the Erlang runtime.
``Erlang_COMPILE``
The path to the Erlang compiler.
``Erlang_EI_PATH``
The path to the Erlang erl_interface path.
``Erlang_ERTS_PATH``
The path to the Erlang erts path.
``Erlang_EI_INCLUDE_DIRS``
/include appended to Erlang_EI_PATH.
``Erlang_EI_LIBRARY_PATH``
/lib appended to Erlang_EI_PATH.
``Erlang_ERTS_INCLUDE_DIRS``
/include appended to Erlang_ERTS_PATH.
``Erlang_ERTS_LIBRARY_PATH``
/lib appended to Erlang_ERTS_PATH.
#]=======================================================================]
include(FindPackageHandleStandardArgs)
SET(Erlang_BIN_PATH
$ENV{ERLANG_HOME}/bin
/opt/bin
/sw/bin
/usr/bin
/usr/local/bin
/opt/local/bin
)
FIND_PROGRAM(Erlang_RUNTIME
NAMES erl
PATHS ${Erlang_BIN_PATH}
)
FIND_PROGRAM(Erlang_COMPILE
NAMES erlc
PATHS ${Erlang_BIN_PATH}
)
EXECUTE_PROCESS(
COMMAND erl -noshell -eval "io:format(\"~s\", [code:lib_dir()])" -s erlang halt
OUTPUT_VARIABLE Erlang_OTP_LIB_DIR
)
EXECUTE_PROCESS(
COMMAND erl -noshell -eval "io:format(\"~s\", [code:root_dir()])" -s erlang halt
OUTPUT_VARIABLE Erlang_OTP_ROOT_DIR
)
EXECUTE_PROCESS(
COMMAND erl -noshell -eval "io:format(\"~s\",[filename:basename(code:lib_dir('erl_interface'))])" -s erlang halt
OUTPUT_VARIABLE Erlang_EI_DIR
)
EXECUTE_PROCESS(
COMMAND erl -noshell -eval "io:format(\"~s\",[filename:basename(code:lib_dir('erts'))])" -s erlang halt
OUTPUT_VARIABLE Erlang_ERTS_DIR
)
SET(Erlang_EI_PATH ${Erlang_OTP_LIB_DIR}/${Erlang_EI_DIR})
SET(Erlang_EI_INCLUDE_DIRS ${Erlang_OTP_LIB_DIR}/${Erlang_EI_DIR}/include)
SET(Erlang_EI_LIBRARY_PATH ${Erlang_OTP_LIB_DIR}/${Erlang_EI_DIR}/lib)
SET(Erlang_ERTS_PATH ${Erlang_OTP_ROOT_DIR}/${Erlang_ERTS_DIR})
SET(Erlang_ERTS_INCLUDE_DIRS ${Erlang_OTP_ROOT_DIR}/${Erlang_ERTS_DIR}/include)
SET(Erlang_ERTS_LIBRARY_PATH ${Erlang_OTP_ROOT_DIR}/${Erlang_ERTS_DIR}/lib)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(
Erlang
DEFAULT_MSG
Erlang_RUNTIME
Erlang_COMPILE
Erlang_OTP_LIB_DIR
Erlang_OTP_ROOT_DIR
Erlang_EI_DIR
Erlang_ERTS_DIR
)
if(Erlang_FOUND)
if(NOT TARGET Erlang::Erlang)
add_library(Erlang::Erlang INTERFACE IMPORTED)
set_target_properties(Erlang::Erlang
PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ${Erlang_OTP_ROOT_DIR}/usr/include
)
endif()
if(NOT TARGET Erlang::ERTS)
add_library(Erlang::ERTS STATIC IMPORTED)
set_target_properties(Erlang::ERTS
PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ${Erlang_ERTS_INCLUDE_DIRS}
IMPORTED_LOCATION ${Erlang_ERTS_LIBRARY_PATH}/liberts.a
)
endif()
if(NOT TARGET Erlang::EI)
add_library(erlang_ei STATIC IMPORTED)
set_property(TARGET erlang_ei PROPERTY
IMPORTED_LOCATION ${Erlang_EI_LIBRARY_PATH}/libei.a
)
add_library(erlang_erl_interface STATIC IMPORTED)
set_property(TARGET erlang_erl_interface PROPERTY
IMPORTED_LOCATION ${Erlang_EI_LIBRARY_PATH}/liberl_interface.a
)
add_library(Erlang::EI INTERFACE IMPORTED)
set_property(TARGET Erlang::EI PROPERTY
INTERFACE_INCLUDE_DIRECTORIES ${Erlang_EI_INCLUDE_DIRS}
)
set_property(TARGET Erlang::EI PROPERTY
INTERFACE_LINK_LIBRARIES erlang_ei erlang_erl_interface
)
endif()
endif(Erlang_FOUND)