159 lines
5 KiB
CMake
159 lines
5 KiB
CMake
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
|
# file Copyright.txt or https://cmake.org/licensing for details.
|
|
|
|
#[=======================================================================[.rst:
|
|
FindPerlLibs
|
|
------------
|
|
|
|
Find Perl libraries
|
|
|
|
This module finds if PERL is installed and determines where the
|
|
include files and libraries are. It also determines what the name of
|
|
the library is. This code sets the following variables:
|
|
|
|
::
|
|
|
|
PERLLIBS_FOUND = True if perl.h & libperl were found
|
|
PERL_INCLUDE_PATH = path to where perl.h is found
|
|
PERL_LIBRARY = path to libperl
|
|
PERL_EXECUTABLE = full path to the perl binary
|
|
|
|
|
|
|
|
The minimum required version of Perl can be specified using the
|
|
standard syntax, e.g. find_package(PerlLibs 6.0)
|
|
|
|
::
|
|
|
|
The following variables are also available if needed
|
|
(introduced after CMake 2.6.4)
|
|
|
|
|
|
|
|
::
|
|
|
|
PERL_SITESEARCH = path to the sitesearch install dir (-V:installsitesearch)
|
|
PERL_SITEARCH = path to the sitelib install directory (-V:installsitearch)
|
|
PERL_SITELIB = path to the sitelib install directory (-V:installsitelib)
|
|
PERL_VENDORARCH = path to the vendor arch install directory (-V:installvendorarch)
|
|
PERL_VENDORLIB = path to the vendor lib install directory (-V:installvendorlib)
|
|
PERL_ARCHLIB = path to the core arch lib install directory (-V:archlib)
|
|
PERL_PRIVLIB = path to the core priv lib install directory (-V:privlib)
|
|
PERL_UPDATE_ARCHLIB = path to the update arch lib install directory (-V:installarchlib)
|
|
PERL_UPDATE_PRIVLIB = path to the update priv lib install directory (-V:installprivlib)
|
|
PERL_EXTRA_C_FLAGS = Compilation flags used to build perl
|
|
#]=======================================================================]
|
|
|
|
# find the perl executable
|
|
include(${CMAKE_CURRENT_LIST_DIR}/FindPerl.cmake)
|
|
|
|
if (PERL_EXECUTABLE)
|
|
|
|
function (perl_get_info _pgi_info tag)
|
|
cmake_parse_arguments(_PGI "IS_PATH" "" "" ${ARGN})
|
|
|
|
set (${_pgi_info} NOTFOUND PARENT_SCOPE)
|
|
|
|
execute_process(COMMAND "${PERL_EXECUTABLE}" -V:${tag}
|
|
OUTPUT_VARIABLE result
|
|
RESULT_VARIABLE status)
|
|
|
|
if (NOT status)
|
|
string(REGEX REPLACE "${tag}='([^']*)'.*" "\\1" result "${result}")
|
|
if (_PGI_IS_PATH)
|
|
file(TO_CMAKE_PATH "${result}" result)
|
|
endif()
|
|
set (${_pgi_info} "${result}" PARENT_SCOPE)
|
|
endif ()
|
|
endfunction()
|
|
|
|
### PERL_PREFIX
|
|
perl_get_info(PERL_PREFIX prefix IS_PATH)
|
|
|
|
### PERL_ARCHNAME
|
|
perl_get_info(PERL_ARCHNAME archname)
|
|
|
|
### PERL_EXTRA_C_FLAGS
|
|
perl_get_info(PERL_EXTRA_C_FLAGS cppflags)
|
|
|
|
### PERL_SITESEARCH
|
|
perl_get_info(PERL_SITESEARCH installsitesearch IS_PATH)
|
|
|
|
### PERL_SITEARCH
|
|
perl_get_info(PERL_SITEARCH installsitearch IS_PATH)
|
|
|
|
### PERL_SITELIB
|
|
perl_get_info(PERL_SITELIB installsitelib IS_PATH)
|
|
|
|
### PERL_VENDORARCH
|
|
perl_get_info(PERL_VENDORARCH installvendorarch IS_PATH)
|
|
|
|
### PERL_VENDORLIB
|
|
perl_get_info(PERL_VENDORLIB installvendorlib IS_PATH)
|
|
|
|
### PERL_ARCHLIB
|
|
perl_get_info(PERL_ARCHLIB archlib IS_PATH)
|
|
|
|
### PERL_PRIVLIB
|
|
perl_get_info(PERL_PRIVLIB privlib IS_PATH)
|
|
|
|
### PERL_UPDATE_ARCHLIB
|
|
perl_get_info(PERL_UPDATE_ARCHLIB installarchlib IS_PATH)
|
|
|
|
### PERL_UPDATE_PRIVLIB
|
|
perl_get_info(PERL_UPDATE_PRIVLIB installprivlib IS_PATH)
|
|
|
|
### PERL_POSSIBLE_LIBRARY_NAMES
|
|
perl_get_info(PERL_POSSIBLE_LIBRARY_NAMES libperl)
|
|
if (NOT PERL_POSSIBLE_LIBRARY_NAMES)
|
|
set(PERL_POSSIBLE_LIBRARY_NAMES perl${PERL_VERSION_STRING} perl)
|
|
endif()
|
|
if (CMAKE_SYSTEM_NAME MATCHES "MSYS|CYGWIN")
|
|
# on MSYS and CYGWIN environments, current perl -V:libperl gives shared library name
|
|
# rather than the import library. So, extends possible library names
|
|
list (APPEND PERL_POSSIBLE_LIBRARY_NAMES perl)
|
|
endif()
|
|
|
|
### PERL_INCLUDE_PATH
|
|
find_path(PERL_INCLUDE_PATH
|
|
NAMES
|
|
perl.h
|
|
PATHS
|
|
"${PERL_UPDATE_ARCHLIB}/CORE"
|
|
"${PERL_ARCHLIB}/CORE"
|
|
/usr/lib/perl5/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE
|
|
/usr/lib/perl/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE
|
|
/usr/lib/perl5/${PERL_VERSION_STRING}/CORE
|
|
/usr/lib/perl/${PERL_VERSION_STRING}/CORE
|
|
)
|
|
|
|
### PERL_LIBRARY
|
|
find_library(PERL_LIBRARY
|
|
NAMES
|
|
${PERL_POSSIBLE_LIBRARY_NAMES}
|
|
PATHS
|
|
"${PERL_UPDATE_ARCHLIB}/CORE"
|
|
"${PERL_ARCHLIB}/CORE"
|
|
/usr/lib/perl5/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE
|
|
/usr/lib/perl/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE
|
|
/usr/lib/perl5/${PERL_VERSION_STRING}/CORE
|
|
/usr/lib/perl/${PERL_VERSION_STRING}/CORE
|
|
)
|
|
|
|
endif ()
|
|
|
|
include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
|
|
find_package_handle_standard_args(PerlLibs REQUIRED_VARS PERL_LIBRARY PERL_INCLUDE_PATH
|
|
VERSION_VAR PERL_VERSION_STRING)
|
|
|
|
# Introduced after CMake 2.6.4 to bring module into compliance
|
|
set(PERL_INCLUDE_DIR ${PERL_INCLUDE_PATH})
|
|
set(PERL_INCLUDE_DIRS ${PERL_INCLUDE_PATH})
|
|
set(PERL_LIBRARIES ${PERL_LIBRARY})
|
|
# For backward compatibility with CMake before 2.8.8
|
|
set(PERL_VERSION ${PERL_VERSION_STRING})
|
|
|
|
mark_as_advanced(
|
|
PERL_INCLUDE_PATH
|
|
PERL_LIBRARY
|
|
)
|