Files
ThirdParty-6/ParaView-5.0.1/ThirdParty/FreezePython/vtkFreezePython.cmake

95 lines
2.9 KiB
CMake

# Script used to freeze Python
# Usage:
# cmake
# -DOUTPUT_DIRECTORY:PATH="..."
# -DPACKAGE_ROOT:PATH="..."
# -DPYTHON_EXECUTABLE:FILEPATH="Python executable"
# -DOUTPUT_HEADER_PREFIX:STRING"..."
# -P vtkFreezePython.cmake
# Example:
# cmake -DOUTPUT_HEADER_PREFIX:STRING=FrozenPython
# -DOUTPUT_DIRECTORY:PATH=/tmp/frozen_paraview
# -DPACKAGE_ROOT=/home/utkarsh/Kitware/ParaView3/ParaViewBin/lib/site-packages
# -DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/python
# -P ThirdParty/FreezePython/vtkFreezePython.cmake
if (NOT OUTPUT_DIRECTORY)
message(FATAL_ERROR "No OUTPUT_DIRECTORY specified.")
endif()
if (NOT PACKAGE_ROOT)
message(FATAL_ERROR "No PACKAGE_ROOT specified.")
endif()
if (NOT IS_DIRECTORY "${PACKAGE_ROOT}")
message(FATAL_ERROR "PACKAGE_ROOT must be a directory.")
endif()
if (NOT PYTHON_EXECUTABLE)
message(FATAL_ERROR "PYTHON_EXECUTABLE must be specified.")
endif()
if (NOT OUTPUT_HEADER_PREFIX)
message(FATAL_ERROR "OUTPUT_HEADER_PREFIX must be specified.")
endif()
# cleanup output directory.
message("Removing ${OUTPUT_DIRECTORY}")
file(REMOVE_RECURSE "${OUTPUT_DIRECTORY}")
file(MAKE_DIRECTORY "${OUTPUT_DIRECTORY}")
set(ENV{PYTHONPATH} "${PACKAGE_ROOT}")
execute_process(
COMMAND ${PYTHON_EXECUTABLE}
"${CMAKE_CURRENT_LIST_DIR}/freeze/freeze_paraview.py"
-o "${OUTPUT_DIRECTORY}"
-X distutils
-X locale
-X macpath
-X matplotlib
-X ntpath
-X os2emxpath
-X popen2
-X pydoc
-X readline
-X setuptools
-X _warnings
-X zope
-X twisted
-X autobahn
"${CMAKE_CURRENT_LIST_DIR}/dummy.py"
-p "${PACKAGE_ROOT}"
WORKING_DIRECTORY "${OUTPUT_DIRECTORY}"
RESULT_VARIABLE failed
)
if (failed)
message(FATAL_ERROR "freeze_paraview failed (${failed})")
endif()
# Move all *.c files to *.h files.
file(GLOB c_files "${OUTPUT_DIRECTORY}/M_*.c")
set (include_headers)
foreach (c_file IN LISTS c_files)
get_filename_component(h_file "${c_file}" NAME_WE)
set (h_file "${h_file}.h")
set (include_headers "${include_headers}#include \"${h_file}\"\n")
configure_file("${c_file}" "${OUTPUT_DIRECTORY}/${h_file}" COPYONLY)
file(REMOVE "${c_file}")
endforeach()
# Convert frozen.c to a header file.
file(READ "${OUTPUT_DIRECTORY}/frozen.c" frozen_c_txt)
string(REGEX REPLACE "extern unsigned char (M[a-zA-Z0-9_]+)\\[\\];"
"#include \"\\1.h\""
frozen_h_txt "${frozen_c_txt}")
string(REGEX REPLACE "main\\([^)]+\\).*{.*}"
"${OUTPUT_HEADER_PREFIX}()
{
PyImport_FrozenModules = _PyImport_FrozenModules;
Py_FrozenFlag = 1;
Py_NoSiteFlag = 1;
return 1;
}"
frozen_h_txt
"${frozen_h_txt}")
file(WRITE "${OUTPUT_DIRECTORY}/${OUTPUT_HEADER_PREFIX}.h"
"${frozen_h_txt}")