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 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
|
# 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.
``Erlang_OTP_VERSION``
Current Erlang OTP version
#]=======================================================================]
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
)
EXECUTE_PROCESS(
COMMAND erl -noshell -eval "io:format(\"~s\", [erlang:system_info(otp_release)])" -s erlang halt
OUTPUT_VARIABLE Erlang_OTP_VERSION
)
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
Erlang_OTP_VERSION
)
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::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
)
endif()
endif(Erlang_FOUND)
#[[
https://gist.github.com/JayKickliter/dd0016bd5545de466e7ca158d4b19417
How I compile Erlang from source on macOS
CFLAGS="-Og -ggdb3 -fno-omit-frame-pointer" \
CXXFLAGS="-Og -ggdb3 -fno-omit-frame-pointer" \
./configure \
--prefix=$HOME/.local \
--disable-silent-rules \
--enable-dynamic-ssl-lib \
--with-ssl=/usr/local/opt/openssl \
--disable-hipe \
--enable-sctp \
--enable-shared-zlib \
--enable-smp-support \
--enable-threads \
--enable-wx \
--without-javac \
--enable-darwin-64bit
]]
|