# We require 2.8.12+ for three reasons: # 1) CMake 3 is so common these days that it's really not a burden on the user # to expect them to have it. # 2) As of this writing, this is the oldest version included in a supported # release of Ubuntu. Older versions are actually somewhat difficult to track # down, so we don't test against them. # 3) CMake's INTERFACE_INCLUDE_DIRECTORIES feature, which we rely on # extensively, finally became stable in this release. cmake_minimum_required(VERSION 2.8.12) set(CMAKE_DISABLE_SOURCE_CHANGES ON) # Must go before project() below set(CMAKE_DISABLE_IN_SOURCE_BUILD ON) # Must go before project() below project(Panda3D) enable_testing() # Panda3D is now a C++11 project. Newer versions of CMake support this out of # the box; for older versions we take a shot in the dark: if(CMAKE_VERSION VERSION_LESS "3.1") include(CheckCXXCompilerFlag) check_cxx_compiler_flag("-std=gnu++11" COMPILER_SUPPORTS_CXX11) if(COMPILER_SUPPORTS_CXX11) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11") else() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++0x") endif() else() set(CMAKE_CXX_STANDARD 11) endif() # Add generic modules to cmake module path, # and add Panda3D specific modules to cmake module path set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/") set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/macros/") # Set certain CMake flags we expect set(CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE ON) set(CMAKE_INCLUDE_CURRENT_DIR ON) # Set up the output directory structure, mimicking that of makepanda set(CMAKE_BINARY_DIR "${CMAKE_BINARY_DIR}/cmake") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin") set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib") set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib") # Include global modules needed for configure scripts include(PackageConfig) # Defines package_option AND target_use_packages # Configure Panda3D include(dtool/PandaVersion.cmake) include(dtool/Package.cmake) include(dtool/Config.cmake) # Include global modules include(AddBisonTarget) # Defines add_bison_target function include(AddFlexTarget) # Defines add_flex_target function include(CompositeSources) # Defines composite_sources function include(Interrogate) # Defines target_interrogate AND add_python_module include(RunPzip) # Defines run_pzip function # Add the include path for source and header files generated by CMake include_directories("${PROJECT_BINARY_DIR}/include") # Determine which trees to build. option(BUILD_DTOOL "Build the dtool source tree." ON) option(BUILD_PANDA "Build the panda source tree." ON) option(BUILD_DIRECT "Build the direct source tree." ON) option(BUILD_PANDATOOL "Build the pandatool source tree." ON) option(BUILD_MODELS "Build/install the built-in models." ON) # Include Panda3D packages if(BUILD_DTOOL) add_subdirectory(dtool "${CMAKE_BINARY_DIR}/dtool") endif() if(BUILD_PANDA) add_subdirectory(panda "${CMAKE_BINARY_DIR}/panda") endif() if(BUILD_DIRECT) add_subdirectory(direct "${CMAKE_BINARY_DIR}/direct") endif() if(BUILD_PANDATOOL) add_subdirectory(pandatool "${CMAKE_BINARY_DIR}/pandatool") endif() if(BUILD_MODELS) # We don't really "build" the models, just pzip them file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/models/maps/" DESTINATION "${PROJECT_BINARY_DIR}/models/maps" ) run_pzip(models "${CMAKE_CURRENT_SOURCE_DIR}/models" "${PROJECT_BINARY_DIR}/models" *.egg ) file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/dmodels/src/" DESTINATION "${PROJECT_BINARY_DIR}/models" FILES_MATCHING PATTERN *.rgb PATTERN *.png PATTERN *.jpg PATTERN *.wav ) run_pzip(dmodels "${CMAKE_CURRENT_SOURCE_DIR}/dmodels/src" "${PROJECT_BINARY_DIR}/models" *.egg ) install(DIRECTORY "${PROJECT_BINARY_DIR}/models" DESTINATION share/panda3d) endif() # This bit is to generate the 'pandac' compatibility shim. It's deprecated now, # but in older versions of Panda3D, one would use # from pandac.PandaModules import * # instead of # from panda3d.FOO import * if(HAVE_PYTHON) # Generate PandaModules: file(WRITE "${PROJECT_BINARY_DIR}/pandac/PandaModules.py" "\"This module is deprecated. Import from panda3d.core and other panda3d.* modules instead.\" print(\"Warning: pandac.PandaModules is deprecated, import from panda3d.core instead\")\n") foreach(module ${ALL_INTERROGATE_MODULES}) file(APPEND "${PROJECT_BINARY_DIR}/pandac/PandaModules.py" " try: from panda3d.${module} import * except ImportError as err: if \"No module named %s\" not in str(err): raise ") endforeach() file(WRITE "${PROJECT_BINARY_DIR}/pandac/__init__.py" "") # Now install ourselves: install( FILES "${PROJECT_BINARY_DIR}/pandac/__init__.py" "${PROJECT_BINARY_DIR}/pandac/PandaModules.py" DESTINATION "${PYTHON_LIB_INSTALL_DIR}/pandac") endif()