# Libsimpa #---------------------------------------# # DEPENDENCY & EXECUTABLE (OR LIB) #---------------------------------------# # require swig > v3 find_package(SWIG REQUIRED) include(UseSWIG) list(APPEND CMAKE_SWIG_FLAGS "-doxygen") if(UNIX AND NOT APPLE) list(APPEND CMAKE_SWIG_FLAGS "-DSWIGWORDSIZE64") endif() # Find Python 3 find_package(Python3 REQUIRED COMPONENTS Interpreter Development.Module) list(APPEND CMAKE_SWIG_FLAGS "-py3" "-DPY3") INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH}) INCLUDE_DIRECTORIES("${PROJECT_SOURCE_DIR}/src/lib_interface") INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) SET_SOURCE_FILES_PROPERTIES(libsimpa.i PROPERTIES CPLUSPLUS ON) SWIG_ADD_LIBRARY(libsimpa LANGUAGE python SOURCES libsimpa.i) SWIG_LINK_LIBRARIES(libsimpa lib_interface) SetupBoost() # Force use of release Python library even in debug builds if(WIN32 AND CMAKE_BUILD_TYPE MATCHES Debug) # Remove the _d suffix that CMake adds for debug builds set_target_properties(Python3::Module PROPERTIES IMPORTED_LOCATION_DEBUG "${Python3_LIBRARY_RELEASE}" ) # Prevent automatic _d suffix addition add_compile_definitions(SWIG_PYTHON_INTERPRETER_NO_DEBUG) endif() target_link_libraries(${SWIG_MODULE_libsimpa_REAL_NAME} Boost::python Boost::thread) # Creates a folder "libraries" and adds target project (lib_interface.vcproj) under it set_property(TARGET ${SWIG_MODULE_libsimpa_REAL_NAME} PROPERTY FOLDER "libraries") add_custom_command( TARGET libsimpa POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_BINARY_DIR}/libsimpa.py "$/__init__.py" COMMENT "Renaming libsimpa.py to __init__.py for Python package" ) #--------------# # INSTALL #--------------# # Detect if building for Flatpak if(DEFINED ENV{FLATPAK_ID}) set(IS_FLATPAK TRUE) message(STATUS "Building for Flatpak environment") else() set(IS_FLATPAK FALSE) endif() if(LIBSIMPA_ONLY) # Set installation directories based on build type # Flatpak and pip uses standard FHS paths set(PYTHON_SITE_PACKAGES "${CMAKE_INSTALL_PREFIX}/lib/python${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}/site-packages") # Install the SWIG-generated extension module install (TARGETS ${SWIG_MODULE_libsimpa_REAL_NAME} LIBRARY DESTINATION ${PYTHON_SITE_PACKAGES}/libsimpa/ RUNTIME DESTINATION ${PYTHON_SITE_PACKAGES}/libsimpa/ COMPONENT libsimpa ) if( CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS ) install(PROGRAMS ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} DESTINATION ${PYTHON_SITE_PACKAGES}/libsimpa COMPONENT libsimpa_dependencies ) endif( CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS ) # Install Python files install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/__init__.py DESTINATION ${PYTHON_SITE_PACKAGES}/libsimpa/ COMPONENT libsimpa ) if(WIN32) get_filename_component(PYTHON_PATH ${Python3_EXECUTABLE} DIRECTORY) #Fetch required Dll's set(DIRS ${Boost_LIBRARY_DIR_DEBUG} ${Boost_LIBRARY_DIR_RELEASE} ${PYTHON_PATH} ) install(CODE " include(BundleUtilities) # Rename to .exe as cmake check if the file ends with .exe in windows before gathering dependencies.. file(RENAME \"${PYTHON_SITE_PACKAGES}/libsimpa/_libsimpa.pyd\" \"${PYTHON_SITE_PACKAGES}/libsimpa/_libsimpa.exe\") fixup_bundle(\"${PYTHON_SITE_PACKAGES}/libsimpa/_libsimpa.exe\" \"\" \"${DIRS}\") file(RENAME \"${PYTHON_SITE_PACKAGES}/libsimpa/_libsimpa.exe\" \"${PYTHON_SITE_PACKAGES}/libsimpa/_libsimpa.pyd\") " COMPONENT libsimpa_dependencies) endif() endif () #------------# # TEST #------------# enable_testing() # If you add tests, do not forget to add the name to set_property(TEST .. MESSAGE(STATUS "Run test in ${CMAKE_CURRENT_BINARY_DIR}") add_test(NAME test_modelio COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/tests/model_io.py ${PROJECT_BINARY_DIR}/Testing/Temporary/) add_test(NAME check_retrocompat COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/tests/check_retrocompat.py ${CMAKE_CURRENT_SOURCE_DIR}/tests/mesh.cbin ${PROJECT_BINARY_DIR}/Testing/Temporary/) add_test(NAME check_retrocompat_mesh COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/tests/check_retrocompat_mesh.py ${CMAKE_CURRENT_SOURCE_DIR}/tests/tetramesh.mbin ${PROJECT_BINARY_DIR}/Testing/Temporary/) add_test(NAME check_retrocompat_gabe COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/tests/check_retrocompat_gabe.py ${PROJECT_BINARY_DIR}/Testing/Temporary/) add_test(NAME test_math COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/tests/test_math.py) add_test(NAME check_retrocompat_recsurf COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/tests/check_retrocompat_recsurf.py) set_property(TEST test_modelio check_retrocompat check_retrocompat_mesh check_retrocompat_gabe test_math check_retrocompat_recsurf PROPERTY ENVIRONMENT "PYTHONPATH=${PYTHON_SITE_PACKAGES}" )