diff options
author | Maarten Bezemer <maarten.bezemer@gmail.com> | 2014-11-16 16:07:45 +0100 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2014-12-18 07:42:39 +0000 |
commit | cb345eb4bd0149b4a71d6069f957600a83cc3417 (patch) | |
tree | 34b53f01e4f6f894a9ab59d2479e5d997e01aeac /cmake | |
parent | 0885d2945103236f7f475963f66048291f0b18f1 (diff) | |
download | wireshark-cb345eb4bd0149b4a71d6069f957600a83cc3417.tar.gz |
Use LocatePythonModule to find make-dissector-reg.py in order to make UseMakeDissectorReg.cmake more generally (out-of-source) usable.
Add make-dissector-reg.py to the Debian packages.
Making it possible to generate out-of-source wireshark plugins.
Change-Id: I0bbe5b46205d39e229d31812341540b26a7336d6
Reviewed-on: https://code.wireshark.org/review/5802
Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/modules/LocatePythonModule.cmake | 51 | ||||
-rw-r--r-- | cmake/modules/UseMakeDissectorReg.cmake | 8 |
2 files changed, 56 insertions, 3 deletions
diff --git a/cmake/modules/LocatePythonModule.cmake b/cmake/modules/LocatePythonModule.cmake new file mode 100644 index 0000000000..813cf25b53 --- /dev/null +++ b/cmake/modules/LocatePythonModule.cmake @@ -0,0 +1,51 @@ +#LOCATE_PYTHON_MODULE(<module> [PATHS <path1> ... <pathN>] [REQUIRED]) +# +# This function tries to find the given python module. +# If found the path is provided in <PY_<module> and <<module>_FOUND> is set to TRUE. +# +# After PATHS additional paths for python to search can be provided. +# When REQUIRED is set, the function will abort the cmake execution is the module is not found +function(LOCATE_PYTHON_MODULE module) + find_package(PythonInterp) + + # Parse (additional) arguments + set(options REQUIRED) + set(multiValueArgs PATHS) + cmake_parse_arguments(LPM "${options}" "" "${multiValueArgs}" ${ARGN}) + + string(TOUPPER ${module} module_upper) + if(NOT PY_${module_upper}) + + if(LPM_PATHS) + # Append LPM_PATHS to PYTHONPATH to search at provided location (first) + file(TO_CMAKE_PATH "$ENV{PYTHONPATH}" CMAKE_PATH) + list(INSERT CMAKE_PATH 0 ${LPM_PATHS}) + file(TO_NATIVE_PATH "${CMAKE_PATH}" NATIVE_PATH) + if(UNIX) + string(REPLACE ";" ":" NATIVE_PATH "${NATIVE_PATH}") + endif(UNIX) + set(ENV{PYTHONPATH} "${NATIVE_PATH}") + endif(LPM_PATHS) + + # Use the (native) python impl module to find the location of the requested module + execute_process(COMMAND "${PYTHON_EXECUTABLE}" "-c" + "import imp; print imp.find_module('${module}')[1]" + RESULT_VARIABLE _${module}_status + OUTPUT_VARIABLE _${module}_location + ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) + + if(NOT _${module}_status) + set(PY_${module_upper} ${_${module}_location} CACHE STRING + "Location of Python module ${module}") + set(${module_upper}_FOUND TRUE) + message(STATUS "Found python module ${module}: ${PY_${module_upper}}") + else(NOT _${module}_status) + set(${module_upper}_FOUND FALSE) + if(LPM_REQUIRED) + message(FATAL_ERROR "Could NOT find python module ${module}") + else(LPM_REQUIRED) + message(STATUS "Could NOT find python module ${module}") + endif(LPM_REQUIRED) + endif(NOT _${module}_status) + endif(NOT PY_${module_upper}) +endfunction(LOCATE_PYTHON_MODULE) diff --git a/cmake/modules/UseMakeDissectorReg.cmake b/cmake/modules/UseMakeDissectorReg.cmake index 6c1cda5cba..d805ef20e1 100644 --- a/cmake/modules/UseMakeDissectorReg.cmake +++ b/cmake/modules/UseMakeDissectorReg.cmake @@ -1,5 +1,8 @@ # MACRO(REGISTER_DISSECTOR_FILES _outputfile _registertype ) + include(LocatePythonModule) + locate_python_module(make-dissector-reg REQUIRED PATHS ${CMAKE_SOURCE_DIR}/tools) + if(${_registertype} STREQUAL "dissectors" ) set( _makeregistertype "dissectorsinfile" ) set( _ftmp "${CMAKE_CURRENT_BINARY_DIR}/_regc.tmp" ) @@ -18,13 +21,12 @@ MACRO(REGISTER_DISSECTOR_FILES _outputfile _registertype ) OUTPUT ${_outputfile} COMMAND ${PYTHON_EXECUTABLE} - ${CMAKE_SOURCE_DIR}/tools/make-dissector-reg.py + ${PY_MAKE-DISSECTOR-REG} ${CMAKE_CURRENT_SOURCE_DIR} ${_makeregistertype} ${_sources} DEPENDS ${_depends} - ${CMAKE_SOURCE_DIR}/tools/make-dissector-reg.py + ${PY_MAKE-DISSECTOR-REG} ) ENDMACRO(REGISTER_DISSECTOR_FILES) - |