CMake/Modules/FindPerlLibs.cmake

160 lines
5.0 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
)