mirror of
https://github.com/OpenFOAM/ThirdParty-6.git
synced 2025-12-08 06:57:43 +00:00
95 lines
2.9 KiB
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}")
|