ENH: Improve detection of perl.h/libperl, issue #7898
This commit is contained in:
parent
eb5d0a7f61
commit
a94af4df64
@ -3,63 +3,226 @@
|
|||||||
# and libraries are. It also determines what the name of the library is. This
|
# and libraries are. It also determines what the name of the library is. This
|
||||||
# code sets the following variables:
|
# 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_INCLUDE_PATH = path to where perl.h is found
|
||||||
|
# PERL_LIBRARY = path to libperl
|
||||||
# PERL_EXECUTABLE = full path to the perl binary
|
# PERL_EXECUTABLE = full path to the perl binary
|
||||||
#
|
#
|
||||||
|
# The following variables are also available if needed
|
||||||
SET(PERL_POSSIBLE_INCLUDE_PATHS
|
# (introduced after CMake 2.6.4)
|
||||||
/usr/lib/perl/5.8.3/CORE
|
#
|
||||||
/usr/lib/perl/5.8.2/CORE
|
# PERL_SITESEARCH = path to the sitesearch install dir
|
||||||
/usr/lib/perl/5.8.1/CORE
|
# PERL_SITELIB = path to the sitelib install directory
|
||||||
/usr/lib/perl/5.8.0/CORE
|
# PERL_VENDORARCH = path to the vendor arch install directory
|
||||||
/usr/lib/perl/5.8/CORE
|
# PERL_VENDORLIB = path to the vendor lib install directory
|
||||||
)
|
# PERL_ARCHLIB = path to the arch lib install directory
|
||||||
|
# PERL_PRIVLIB = path to the priv lib install directory
|
||||||
SET(PERL_POSSIBLE_LIB_PATHS
|
# PERL_EXTRA_C_FLAGS = Compilation flags used to build perl
|
||||||
/usr/lib
|
#
|
||||||
)
|
|
||||||
|
|
||||||
FIND_PATH(PERL_INCLUDE_PATH perl.h
|
|
||||||
${PERL_POSSIBLE_INCLUDE_PATHS})
|
|
||||||
|
|
||||||
# find the perl executable
|
# find the perl executable
|
||||||
INCLUDE(FindPerl)
|
include(FindPerl)
|
||||||
|
|
||||||
|
if (PERL_EXECUTABLE)
|
||||||
IF(PERL_EXECUTABLE)
|
### PERL_PREFIX
|
||||||
EXEC_PROGRAM(${PERL_EXECUTABLE}
|
execute_process(
|
||||||
ARGS -e "'use Config; print \$Config{libperl}, \"\\n\"'"
|
COMMAND
|
||||||
OUTPUT_VARIABLE PERL_LIBRARY_OUTPUT_VARIABLE
|
${PERL_EXECUTABLE} -V:prefix
|
||||||
RETURN_VALUE PERL_LIBRARY_RETURN_VALUE
|
OUTPUT_VARIABLE
|
||||||
)
|
PERL_PREFIX_OUTPUT_VARIABLE
|
||||||
IF(NOT PERL_LIBRARY_RETURN_VALUE)
|
RESULT_VARIABLE
|
||||||
FOREACH(path ${PERL_POSSIBLE_LIB_PATHS})
|
PERL_PREFIX_RESULT_VARIABLE
|
||||||
SET(PERL_POSSIBLE_LIBRARY_NAME ${PERL_POSSIBLE_LIBRARY_NAME} "${path}/${PERL_LIBRARY_OUTPUT_VARIABLE}")
|
|
||||||
ENDFOREACH(path ${PERL_POSSIBLE_LIB_PATHS})
|
|
||||||
ENDIF(NOT PERL_LIBRARY_RETURN_VALUE)
|
|
||||||
EXEC_PROGRAM(${PERL_EXECUTABLE}
|
|
||||||
ARGS -e "'use Config; print \$Config{cppflags}, \"\\n\"'"
|
|
||||||
OUTPUT_VARIABLE PERL_CPPFLAGS_OUTPUT_VARIABLE
|
|
||||||
RETURN_VALUE PERL_CPPFLAGS_RETURN_VALUE
|
|
||||||
)
|
|
||||||
IF(NOT PERL_CPPFLAGS_RETURN_VALUE)
|
|
||||||
SET(PERL_EXTRA_C_FLAGS ${PERL_CPPFLAGS_OUTPUT_VARIABLE})
|
|
||||||
ENDIF(NOT PERL_CPPFLAGS_RETURN_VALUE)
|
|
||||||
ENDIF(PERL_EXECUTABLE)
|
|
||||||
|
|
||||||
FIND_LIBRARY(PERL_LIBRARY
|
|
||||||
NAMES ${PERL_POSSIBLE_LIBRARY_NAME} perl5.8.0
|
|
||||||
PATHS ${PERL_POSSIBLE_LIB_PATHS}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (NOT PERL_PREFIX_RESULT_VARIABLE)
|
||||||
|
string(REGEX REPLACE "prefix='([^']+)'.*" "\\1" PERL_PREFIX ${PERL_PREFIX_OUTPUT_VARIABLE})
|
||||||
|
endif (NOT PERL_PREFIX_RESULT_VARIABLE)
|
||||||
|
|
||||||
|
### PERL_VERSION
|
||||||
|
execute_process(
|
||||||
|
COMMAND
|
||||||
|
${PERL_EXECUTABLE} -V:version
|
||||||
|
OUTPUT_VARIABLE
|
||||||
|
PERL_VERSION_OUTPUT_VARIABLE
|
||||||
|
RESULT_VARIABLE
|
||||||
|
PERL_VERSION_RESULT_VARIABLE
|
||||||
|
)
|
||||||
|
if (NOT PERL_VERSION_RESULT_VARIABLE)
|
||||||
|
string(REGEX REPLACE "version='([^']+)'.*" "\\1" PERL_VERSION ${PERL_VERSION_OUTPUT_VARIABLE})
|
||||||
|
endif (NOT PERL_VERSION_RESULT_VARIABLE)
|
||||||
|
|
||||||
|
### PERL_ARCHNAME
|
||||||
|
execute_process(
|
||||||
|
COMMAND
|
||||||
|
${PERL_EXECUTABLE} -V:archname
|
||||||
|
OUTPUT_VARIABLE
|
||||||
|
PERL_ARCHNAME_OUTPUT_VARIABLE
|
||||||
|
RESULT_VARIABLE
|
||||||
|
PERL_ARCHNAME_RESULT_VARIABLE
|
||||||
|
)
|
||||||
|
if (NOT PERL_ARCHNAME_RESULT_VARIABLE)
|
||||||
|
string(REGEX REPLACE "archname='([^']+)'.*" "\\1" PERL_ARCHNAME ${PERL_ARCHNAME_OUTPUT_VARIABLE})
|
||||||
|
endif (NOT PERL_ARCHNAME_RESULT_VARIABLE)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### PERL_EXTRA_C_FLAGS
|
||||||
|
execute_process(
|
||||||
|
COMMAND
|
||||||
|
${PERL_EXECUTABLE} -V:cppflags
|
||||||
|
OUTPUT_VARIABLE
|
||||||
|
PERL_CPPFLAGS_OUTPUT_VARIABLE
|
||||||
|
RESULT_VARIABLE
|
||||||
|
PERL_CPPFLAGS_RESULT_VARIABLE
|
||||||
|
)
|
||||||
|
if (NOT PERL_CPPFLAGS_RESULT_VARIABLE)
|
||||||
|
string(REGEX REPLACE "cppflags='([^']+)'.*" "\\1" PERL_EXTRA_C_FLAGS ${PERL_CPPFLAGS_OUTPUT_VARIABLE})
|
||||||
|
endif (NOT PERL_CPPFLAGS_RESULT_VARIABLE)
|
||||||
|
|
||||||
|
### PERL_SITESEARCH
|
||||||
|
execute_process(
|
||||||
|
COMMAND
|
||||||
|
${PERL_EXECUTABLE} -V:installsitesearch
|
||||||
|
OUTPUT_VARIABLE
|
||||||
|
PERL_SITESEARCH_OUTPUT_VARIABLE
|
||||||
|
RESULT_VARIABLE
|
||||||
|
PERL_SITESEARCH_RESULT_VARIABLE
|
||||||
|
)
|
||||||
|
if (NOT PERL_SITESEARCH_RESULT_VARIABLE)
|
||||||
|
string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_SITESEARCH ${PERL_SITESEARCH_OUTPUT_VARIABLE})
|
||||||
|
endif (NOT PERL_SITESEARCH_RESULT_VARIABLE)
|
||||||
|
|
||||||
|
### PERL_SITELIB
|
||||||
|
execute_process(
|
||||||
|
COMMAND
|
||||||
|
${PERL_EXECUTABLE} -V:installsitelib
|
||||||
|
OUTPUT_VARIABLE
|
||||||
|
PERL_SITELIB_OUTPUT_VARIABLE
|
||||||
|
RESULT_VARIABLE
|
||||||
|
PERL_SITELIB_RESULT_VARIABLE
|
||||||
|
)
|
||||||
|
if (NOT PERL_SITELIB_RESULT_VARIABLE)
|
||||||
|
string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_SITELIB ${PERL_SITELIB_OUTPUT_VARIABLE})
|
||||||
|
endif (NOT PERL_SITELIB_RESULT_VARIABLE)
|
||||||
|
|
||||||
|
### PERL_VENDORARCH
|
||||||
|
execute_process(
|
||||||
|
COMMAND
|
||||||
|
${PERL_EXECUTABLE} -V:installvendorarch
|
||||||
|
OUTPUT_VARIABLE
|
||||||
|
PERL_VENDORARCH_OUTPUT_VARIABLE
|
||||||
|
RESULT_VARIABLE
|
||||||
|
PERL_VENDORARCH_RESULT_VARIABLE
|
||||||
|
)
|
||||||
|
if (NOT PERL_VENDORARCH_RESULT_VARIABLE)
|
||||||
|
string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_VENDORARCH ${PERL_VENDORARCH_OUTPUT_VARIABLE})
|
||||||
|
endif (NOT PERL_VENDORARCH_RESULT_VARIABLE)
|
||||||
|
|
||||||
|
### PERL_VENDORLIB
|
||||||
|
execute_process(
|
||||||
|
COMMAND
|
||||||
|
${PERL_EXECUTABLE} -V:installvendorlib
|
||||||
|
OUTPUT_VARIABLE
|
||||||
|
PERL_VENDORLIB_OUTPUT_VARIABLE
|
||||||
|
RESULT_VARIABLE
|
||||||
|
PERL_VENDORLIB_RESULT_VARIABLE
|
||||||
|
)
|
||||||
|
if (NOT PERL_VENDORLIB_RESULT_VARIABLE)
|
||||||
|
string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_VENDORLIB ${PERL_VENDORLIB_OUTPUT_VARIABLE})
|
||||||
|
endif (NOT PERL_VENDORLIB_RESULT_VARIABLE)
|
||||||
|
|
||||||
|
### PERL_ARCHLIB
|
||||||
|
execute_process(
|
||||||
|
COMMAND
|
||||||
|
${PERL_EXECUTABLE} -V:installarchlib
|
||||||
|
OUTPUT_VARIABLE
|
||||||
|
PERL_ARCHLIB_OUTPUT_VARIABLE
|
||||||
|
RESULT_VARIABLE
|
||||||
|
PERL_ARCHLIB_RESULT_VARIABLE
|
||||||
|
)
|
||||||
|
if (NOT PERL_ARCHLIB_RESULT_VARIABLE)
|
||||||
|
string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_ARCHLIB ${PERL_ARCHLIB_OUTPUT_VARIABLE})
|
||||||
|
endif (NOT PERL_ARCHLIB_RESULT_VARIABLE)
|
||||||
|
|
||||||
|
### PERL_PRIVLIB
|
||||||
|
execute_process(
|
||||||
|
COMMAND
|
||||||
|
${PERL_EXECUTABLE} -V:installprivlib
|
||||||
|
OUTPUT_VARIABLE
|
||||||
|
PERL_PRIVLIB_OUTPUT_VARIABLE
|
||||||
|
RESULT_VARIABLE
|
||||||
|
PERL_PRIVLIB_RESULT_VARIABLE
|
||||||
|
)
|
||||||
|
if (NOT PERL_PRIVLIB_RESULT_VARIABLE)
|
||||||
|
string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_PRIVLIB ${PERL_PRIVLIB_OUTPUT_VARIABLE})
|
||||||
|
endif (NOT PERL_PRIVLIB_RESULT_VARIABLE)
|
||||||
|
|
||||||
|
|
||||||
|
### PERL_POSSIBLE_INCLUDE_PATHS
|
||||||
|
set(PERL_POSSIBLE_INCLUDE_PATHS
|
||||||
|
/usr/lib/perl5/${PERL_VERSION}/${PERL_ARCHNAME}/CORE
|
||||||
|
/usr/lib/perl/${PERL_VERSION}/${PERL_ARCHNAME}/CORE
|
||||||
|
/usr/lib/perl5/${PERL_VERSION}/CORE
|
||||||
|
/usr/lib/perl/${PERL_VERSION}/CORE
|
||||||
|
)
|
||||||
|
|
||||||
|
### PERL_POSSIBLE_LIB_PATHS
|
||||||
|
set(PERL_POSSIBLE_LIB_PATHS
|
||||||
|
${PERL_ARCHLIB}/CORE
|
||||||
|
/usr/lib/perl5/${PERL_VERSION}/${PERL_ARCHNAME}/CORE
|
||||||
|
/usr/lib/perl/${PERL_VERSION}/${PERL_ARCHNAME}/CORE
|
||||||
|
/usr/lib/perl5/${PERL_VERSION}/CORE
|
||||||
|
/usr/lib/perl/${PERL_VERSION}/CORE
|
||||||
|
)
|
||||||
|
|
||||||
|
### PERL_POSSIBLE_LIBRARY_NAME
|
||||||
|
execute_process(
|
||||||
|
COMMAND
|
||||||
|
${PERL_EXECUTABLE} -V:libperl
|
||||||
|
OUTPUT_VARIABLE
|
||||||
|
PERL_LIBRARY_OUTPUT_VARIABLE
|
||||||
|
RESULT_VARIABLE
|
||||||
|
PERL_LIBRARY_RESULT_VARIABLE
|
||||||
|
)
|
||||||
|
if (NOT PERL_LIBRARY_RESULT_VARIABLE)
|
||||||
|
foreach(_perl_lib_path ${PERL_POSSIBLE_LIB_PATHS})
|
||||||
|
string(REGEX REPLACE "libperl='([^']+)'" "\\1" PERL_LIBRARY_OUTPUT_VARIABLE ${PERL_LIBRARY_OUTPUT_VARIABLE})
|
||||||
|
set(PERL_POSSIBLE_LIBRARY_NAME ${PERL_POSSIBLE_LIBRARY_NAME} "${_perl_lib_path}/${PERL_LIBRARY_OUTPUT_VARIABLE}")
|
||||||
|
endforeach(_perl_lib_path ${PERL_POSSIBLE_LIB_PATHS})
|
||||||
|
endif (NOT PERL_LIBRARY_RESULT_VARIABLE)
|
||||||
|
|
||||||
|
### PERL_INCLUDE_PATH
|
||||||
|
find_path(PERL_INCLUDE_PATH
|
||||||
|
NAMES
|
||||||
|
perl.h
|
||||||
|
PATHS
|
||||||
|
${PERL_POSSIBLE_INCLUDE_PATHS}
|
||||||
|
)
|
||||||
|
|
||||||
|
### PERL_LIBRARY
|
||||||
|
find_library(PERL_LIBRARY
|
||||||
|
NAMES
|
||||||
|
${PERL_POSSIBLE_LIBRARY_NAME}
|
||||||
|
perl${PERL_VERSION}
|
||||||
|
perl
|
||||||
|
PATHS
|
||||||
|
${PERL_POSSIBLE_LIB_PATHS}
|
||||||
|
)
|
||||||
|
|
||||||
|
endif (PERL_EXECUTABLE)
|
||||||
|
|
||||||
# handle the QUIETLY and REQUIRED arguments and set PERLLIBS_FOUND to TRUE if
|
# handle the QUIETLY and REQUIRED arguments and set PERLLIBS_FOUND to TRUE if
|
||||||
# all listed variables are TRUE
|
# all listed variables are TRUE
|
||||||
INCLUDE(FindPackageHandleStandardArgs)
|
INCLUDE(FindPackageHandleStandardArgs)
|
||||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(PerlLibs DEFAULT_MSG PERL_LIBRARY PERL_INCLUDE_PATH)
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(PerlLibs DEFAULT_MSG PERL_LIBRARY PERL_INCLUDE_PATH)
|
||||||
|
|
||||||
|
# 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})
|
||||||
|
|
||||||
MARK_AS_ADVANCED(
|
mark_as_advanced(
|
||||||
PERL_INCLUDE_PATH
|
PERL_INCLUDE_PATH
|
||||||
PERL_EXECUTABLE
|
PERL_EXECUTABLE
|
||||||
PERL_LIBRARY
|
PERL_LIBRARY
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user