Description: Update source code for Python 3 Python 2 reaches End-of-Life in January 2020. The latest patch completely removes Python 2 support per release team guidance. Author: Olek Wojnar Last-Update: 2019-12-08 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ ################################################################################ # Top-level CMakeLists.txt file for Crazy Eddie's GUI System ################################################################################ -cmake_minimum_required(VERSION 2.8.11) +cmake_minimum_required(VERSION 3.12.4) if (POLICY CMP0017) cmake_policy(SET CMP0017 OLD) endif() @@ -117,16 +117,26 @@ find_package(Lua51) find_package(TOLUAPP) -find_package(PythonInterp) -## ensure python3 not picked up as default -find_package(PythonVersion) -if (UNIX AND PYTHON_VERSION_FOUND) - find_package(PythonLibs ${PYTHON_VERSION_STRING} EXACT) +find_package(Python3 COMPONENTS Interpreter Development) +find_package(Boost) +if(${Boost_VERSION} GREATER_EQUAL 1.67) + if (Python3_FOUND) + set(CEGUI_PYTHON3_VERSION_NUM ${Python3_VERSION_MAJOR}${Python3_VERSION_MINOR}) + find_package(Boost COMPONENTS python${CEGUI_PYTHON3_VERSION_NUM}) + set(CEGUI_Boost_PYTHON3_LIBRARY_VARIABLE Boost_PYTHON${CEGUI_PYTHON3_VERSION_NUM}_LIBRARY) + set(CEGUI_Boost_PYTHON3_LIBRARY ${${CEGUI_Boost_PYTHON3_LIBRARY_VARIABLE}}) + endif() else() - find_package(PythonLibs) + find_package(Boost COMPONENTS python) +endif() + +if (Python3_Interpreter_FOUND) + set (PYTHONINTERP_FOUND TRUE) +endif() +if (DEFINED Python3_LIBRARIES) + set (PYTHONLIBS_FOUND TRUE) endif() -find_package(Boost) find_package(Doxygen) find_package(GTK2 COMPONENTS gtk) --- a/cegui/src/ScriptModules/Python/bindings/CMakeLists.txt +++ b/cegui/src/ScriptModules/Python/bindings/CMakeLists.txt @@ -1,26 +1,4 @@ -execute_process( - COMMAND ${PYTHON_EXECUTABLE} -c "import distutils.sysconfig; print distutils.sysconfig.get_python_lib(plat_specific=True, prefix=\"\")" - OUTPUT_VARIABLE CEGUI_PYTHON_INSTALL_DIR - OUTPUT_STRIP_TRAILING_WHITESPACE -) - -set( CEGUI_PYTHON_INSTALL_DIR "${CEGUI_PYTHON_INSTALL_DIR}/${CMAKE_PROJECT_NAME}-${CEGUI_VERSION_MAJOR}.${CEGUI_VERSION_MINOR}" ) - -include_directories(${CMAKE_CURRENT_SOURCE_DIR} - ${PYTHON_INCLUDE_DIR} - ${Boost_INCLUDE_DIR}) - -cegui_add_python_module( ${CEGUI_PYCEGUI_CORE_LIBNAME} "output/CEGUI" "" ) - -if (CEGUI_BUILD_RENDERER_NULL) - cegui_add_python_module( ${CEGUI_PYCEGUI_NULL_RENDERER_LIBNAME} "output/CEGUINullRenderer" ${CEGUI_NULL_RENDERER_LIBNAME} ) -endif() - -if (CEGUI_BUILD_RENDERER_OGRE) - cegui_add_python_module( ${CEGUI_PYCEGUI_OGRE_RENDERER_LIBNAME} "output/CEGUIOgreRenderer" ${CEGUI_OGRE_RENDERER_LIBNAME} ) -endif() - -if (CEGUI_BUILD_RENDERER_OPENGL) - cegui_add_python_module( ${CEGUI_PYCEGUI_OPENGL_RENDERER_LIBNAME} "output/CEGUIOpenGLRenderer" ${CEGUI_OPENGL_RENDERER_LIBNAME} ) +if (Python3_FOUND AND Python3_Development_FOUND) + include(python3.cmake) endif() --- a/cmake/CEGUIMacros.cmake +++ b/cmake/CEGUIMacros.cmake @@ -447,12 +447,15 @@ # # Define a PyCEGUI* extension module # -macro( cegui_add_python_module PYTHON_MODULE_NAME SOURCE_DIR EXTRA_LIBS ) +macro( cegui_add_python_module PYTHON_MODULE_NAME_GENERIC SOURCE_DIR EXTRA_LIBS ) + set(PYTHON_MODULE_NAME ${PYTHON_MODULE_NAME_GENERIC}_${MODULE_SUFFIX}) file( GLOB ${PYTHON_MODULE_NAME}_SOURCE_FILES ${SOURCE_DIR}/*.cpp ) - include_directories(BEFORE ${SOURCE_DIR}) - add_library(${PYTHON_MODULE_NAME} MODULE ${${PYTHON_MODULE_NAME}_SOURCE_FILES}) + target_include_directories(${PYTHON_MODULE_NAME} PRIVATE ${SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR} + ${PYTHON_INCLUDE_DIR} + ${Boost_INCLUDE_DIR}) target_link_libraries(${PYTHON_MODULE_NAME} ${CEGUI_BASE_LIBNAME} ${Boost_PYTHON_LIBRARY} ${PYTHON_LIBRARIES} ${EXTRA_LIBS} ) set_target_properties(${PYTHON_MODULE_NAME} PROPERTIES PREFIX "") @@ -467,7 +470,7 @@ endif() if (CMAKE_COMPILER_IS_GNUCXX) - set_target_properties(${PYTHON_MODULE_NAME} PROPERTIES COMPILE_FLAGS "-fvisibility=hidden") + set_target_properties(${PYTHON_MODULE_NAME} PROPERTIES COMPILE_FLAGS "-fvisibility=hidden" ARCHIVE_OUTPUT_NAME ${PYTHON_MODULE_NAME} OUTPUT_NAME ${PYTHON_MODULE_NAME_GENERIC} LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${MODULE_SUFFIX}") endif() install(TARGETS ${PYTHON_MODULE_NAME} LIBRARY DESTINATION "${CEGUI_PYTHON_INSTALL_DIR}") --- /dev/null +++ b/cegui/src/ScriptModules/Python/bindings/python3.cmake @@ -0,0 +1,13 @@ +set(MODULE_SUFFIX python3) +set(PYTHON_INCLUDE_DIR ${Python3_INCLUDE_DIRS}) +set(CEGUI_PYTHON_INSTALL_DIR "${Python3_SITEARCH}/${CMAKE_PROJECT_NAME}-${CEGUI_VERSION_MAJOR}.${CEGUI_VERSION_MINOR}") +set(PYTHON_LIBRARIES ${Python3_LIBRARIES}) +set(Boost_PYTHON_LIBRARY ${CEGUI_Boost_PYTHON3_LIBRARY}) + +include(common.cmake) + +unset(MODULE_SUFFIX) +unset(PYTHON_INCLUDE_DIR) +unset(CEGUI_PYTHON_INSTALL_DIR) +unset(PYTHON_LIBRARIES) +unset(Boost_PYTHON_LIBRARY) --- /dev/null +++ b/cegui/src/ScriptModules/Python/bindings/common.cmake @@ -0,0 +1,14 @@ +cegui_add_python_module( ${CEGUI_PYCEGUI_CORE_LIBNAME} "output/CEGUI" "" ) + +if (CEGUI_BUILD_RENDERER_NULL) + cegui_add_python_module( ${CEGUI_PYCEGUI_NULL_RENDERER_LIBNAME} "output/CEGUINullRenderer" ${CEGUI_NULL_RENDERER_LIBNAME} ) +endif() + +if (CEGUI_BUILD_RENDERER_OGRE) + cegui_add_python_module( ${CEGUI_PYCEGUI_OGRE_RENDERER_LIBNAME} "output/CEGUIOgreRenderer" ${CEGUI_OGRE_RENDERER_LIBNAME} ) +endif() + +if (CEGUI_BUILD_RENDERER_OPENGL) + cegui_add_python_module( ${CEGUI_PYCEGUI_OPENGL_RENDERER_LIBNAME} "output/CEGUIOpenGLRenderer" ${CEGUI_OPENGL_RENDERER_LIBNAME} ) +endif() +