mirror of https://github.com/sipwise/kamailio.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
176 lines
5.2 KiB
176 lines
5.2 KiB
# https://gist.github.com/JayKickliter/c79cad0c3e3acfc3465cac41b7051fa9
|
|
# 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"
|
|
CACHE STRING "Semicolon-separated list of paths to search for Erlang binaries"
|
|
)
|
|
|
|
find_program(
|
|
Erlang_RUNTIME
|
|
NAMES erl
|
|
PATHS ${Erlang_BIN_PATH}
|
|
)
|
|
|
|
find_program(
|
|
Erlang_COMPILE
|
|
NAMES erlc
|
|
PATHS ${Erlang_BIN_PATH}
|
|
)
|
|
|
|
set(Erlang_OTP_LIB_DIR
|
|
""
|
|
CACHE STRING "Erlang OTP library directory. Will be determined by erl bin if not set."
|
|
)
|
|
if(NOT Erlang_OTP_LIB_DIR)
|
|
execute_process(
|
|
COMMAND erl -noshell -eval "io:format(\"~s\", [code:lib_dir()])" -s erlang halt
|
|
OUTPUT_VARIABLE Erlang_OTP_LIB_DIR
|
|
)
|
|
endif()
|
|
|
|
set(Erlang_OTP_ROOT_DIR
|
|
""
|
|
CACHE STRING "Erlang OTP root directory. Will be determined by erl bin if not set."
|
|
)
|
|
if(NOT Erlang_OTP_ROOT_DIR)
|
|
execute_process(
|
|
COMMAND erl -noshell -eval "io:format(\"~s\", [code:root_dir()])" -s erlang halt
|
|
OUTPUT_VARIABLE Erlang_OTP_ROOT_DIR
|
|
)
|
|
endif()
|
|
|
|
set(Erlang_EI_DIR
|
|
""
|
|
CACHE STRING "Erlang erl_interface directory name. Will be determined by erl bin if not set."
|
|
)
|
|
if(NOT Erlang_EI_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
|
|
)
|
|
endif()
|
|
|
|
set(Erlang_ERTS_DIR
|
|
""
|
|
CACHE STRING "Erlang ERTS directory name. Will be determined by erl bin if not set."
|
|
)
|
|
if(NOT Erlang_ERTS_DIR)
|
|
execute_process(
|
|
COMMAND erl -noshell -eval "io:format(\"~s\",[filename:basename(code:lib_dir('erts'))])" -s
|
|
erlang halt OUTPUT_VARIABLE Erlang_ERTS_DIR
|
|
)
|
|
endif()
|
|
|
|
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 the version of Erlang
|
|
execute_process(
|
|
COMMAND
|
|
erl -eval
|
|
"{ok, Version} = file:read_file(filename:join([code:root_dir(), 'releases', erlang:system_info(otp_release), 'OTP_VERSION'])), io:fwrite(Version), halt()."
|
|
-noshell
|
|
OUTPUT_VARIABLE Erlang_VERSION
|
|
)
|
|
string(STRIP "${Erlang_VERSION}" Erlang_VERSION)
|
|
|
|
find_package_handle_standard_args(
|
|
Erlang
|
|
REQUIRED_VARS Erlang_RUNTIME Erlang_COMPILE Erlang_OTP_LIB_DIR Erlang_OTP_ROOT_DIR Erlang_EI_DIR
|
|
Erlang_ERTS_DIR
|
|
VERSION_VAR Erlang_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 INTERFACE IMPORTED)
|
|
|
|
add_library(erlang_ei STATIC IMPORTED)
|
|
set_property(TARGET erlang_ei PROPERTY IMPORTED_LOCATION ${Erlang_EI_LIBRARY_PATH}/libei.a)
|
|
if(Erlang_VERSION VERSION_LESS "23")
|
|
add_library(erlang_erl_interface STATIC IMPORTED)
|
|
set_property(
|
|
TARGET erlang_erl_interface PROPERTY IMPORTED_LOCATION
|
|
${Erlang_EI_LIBRARY_PATH}/liberl_interface.a
|
|
)
|
|
set_property(TARGET Erlang::EI PROPERTY INTERFACE_LINK_LIBRARIES erlang_erl_interface)
|
|
endif()
|
|
set_property(TARGET Erlang::EI PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${Erlang_EI_INCLUDE_DIRS})
|
|
set_property(
|
|
TARGET Erlang::EI
|
|
APPEND
|
|
PROPERTY INTERFACE_LINK_LIBRARIES erlang_ei
|
|
)
|
|
endif()
|
|
endif(Erlang_FOUND)
|