X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=CMakeLists.txt;h=20f367733f6a55f3b3212e6a21d9c22ed8b6c9ac;hb=12076bce0e9fb66286f14931e8f4eb12fc0b9b82;hp=3549c89eaf45dcce7e6d29a13afb738a1978561b;hpb=9fa790bcac7e535bb06cd228ae15178f1b10b26f;p=flightgear.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 3549c89ea..20f367733 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,6 +18,18 @@ else(${CMAKE_VERSION} VERSION_GREATER 2.8.4) include(OldGNUInstallDirs) endif(${CMAKE_VERSION} VERSION_GREATER 2.8.4) +# Warning when build is not an out-of-source build. +string(COMPARE EQUAL "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" InSourceBuild) +if(InSourceBuild) + message(WARNING "Avoid building inside the source tree!") + message(WARNING "Create a separate build directory instead (i.e. 'fgbuild') and call CMake from there: ") + message(WARNING " mkdir ../fgbuild && cd ../fgbuild && cmake ${CMAKE_SOURCE_DIR}") +endif(InSourceBuild) + +# System detection/default settings +include( DetectDistro ) +include( DetectBrowser ) + set(CMAKE_DEBUG_POSTFIX "d" CACHE STRING "add a postfix, usually d on windows") set(CMAKE_RELEASE_POSTFIX "" CACHE STRING "add a postfix, usually empty on windows") set(CMAKE_RELWITHDEBINFO_POSTFIX "" CACHE STRING "add a postfix, usually empty on windows") @@ -25,37 +37,20 @@ set(CMAKE_MINSIZEREL_POSTFIX "" CACHE STRING "add a postfix, usually empty # read 'version' file into a variable (stripping any newlines or spaces) file(READ version versionFile) -string(STRIP ${versionFile} FLIGHTGEAR_VERSION) - -#packaging -if(EXISTS ${PROJECT_SOURCE_DIR}/.gitignore) - file(READ .gitignore CPACK_SOURCE_IGNORE_FILES) -else() - # clean tar-balls do not contain SCM (.git/.gitignore/...) files. - set(CPACK_SOURCE_IGNORE_FILES - "Makefile.am;~$;${CPACK_SOURCE_IGNORE_FILES}") +if (NOT versionFile) + message(FATAL_ERROR "Unable to determine FlightGear version. Version file is missing.") endif() +string(STRIP "${versionFile}" FLIGHTGEAR_VERSION) -list (APPEND CPACK_SOURCE_IGNORE_FILES "${PROJECT_SOURCE_DIR}/.git;\\\\.gitignore") - -# split version string into components, note CMAKE_MATCH_0 is the entire regexp match -string(REGEX MATCH "([0-9]+)\\.([0-9]+)\\.([0-9]+)" CPACK_PACKAGE_VERSION ${FLIGHTGEAR_VERSION} ) -set(CPACK_PACKAGE_VERSION_MAJOR ${CMAKE_MATCH_1}) -set(CPACK_PACKAGE_VERSION_MINOR ${CMAKE_MATCH_2}) -set(CPACK_PACKAGE_VERSION_PATCH ${CMAKE_MATCH_3}) -set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/COPYING") -set(CPACK_RESOURCE_FILE_README "${PROJECT_SOURCE_DIR}/README") - -set(CPACK_SOURCE_GENERATOR TBZ2) -set(CPACK_SOURCE_PACKAGE_FILE_NAME "flightgear-${FLIGHTGEAR_VERSION}" CACHE INTERNAL "tarball basename") - -include (CPack) +# FlightGear packaging (to build a source tarball) +include( ConfigureCPack ) +# FlightGear base package path if (FG_DATA_DIR) - message(STATUS "Using explicit data-dir: ${FG_DATA_DIR}") + message(STATUS "Using explicit data directory for base package: ${FG_DATA_DIR}") else() set(FG_DATA_DIR "${CMAKE_INSTALL_PREFIX}/lib/FlightGear" CACHE PATH "Default location where data files are located") - message(STATUS "Using default data-dir: ${FG_DATA_DIR}") + message(STATUS "Using default data directory for base package: ${FG_DATA_DIR}") endif() # Change the default build type to something fast @@ -68,12 +63,45 @@ endif(NOT CMAKE_BUILD_TYPE) if(NOT "$ENV{BUILD_ID}" STREQUAL "") set(HUDSON_BUILD_ID $ENV{BUILD_ID}) set(HUDSON_BUILD_NUMBER $ENV{BUILD_NUMBER}) - message(STATUS "running under Hudson, build-number is ${HUDSON_BUILD_NUMBER}") + message(STATUS "running under Hudson/Jenkins, build-number is ${HUDSON_BUILD_NUMBER}") else() set(HUDSON_BUILD_NUMBER 0) set(HUDSON_BUILD_ID "none") endif() +##################################################################################### +# Configure library search paths +##################################################################################### + +if(APPLE) + # Custom library directories for Mac, which should have precedence over any other + list(APPEND ADDITIONAL_LIBRARY_PATHS + ~/Library/Frameworks + /Library/Frameworks) +endif(APPLE) + +if(NOT "${CMAKE_LIBRARY_ARCHITECTURE}" STREQUAL "") + # Workaround for Ubuntu/Debian which introduced the "multiarch" library + # directory structure, which is unsupported by CMake < 2.8.10, so we need to + # add paths manually + # see http://www.cmake.org/Bug/view.php?id=12049 and + # http://www.cmake.org/Bug/view.php?id=12037 + list(APPEND ADDITIONAL_LIBRARY_PATHS + /usr/local/lib/${CMAKE_LIBRARY_ARCHITECTURE} + /usr/lib/${CMAKE_LIBRARY_ARCHITECTURE} + /lib/${CMAKE_LIBRARY_ARCHITECTURE}) + message(STATUS "additional library directories: ${ADDITIONAL_LIBRARY_PATHS}") +endif() + +if(NOT MSVC) + # TBD: are these really necessary? Aren't they considered by cmake automatically? + list(APPEND ADDITIONAL_LIBRARY_PATHS + /opt/local + /usr/local + /usr) +endif() +##################################################################################### + IF(APPLE) set(EVENT_INPUT_DEFAULT 1) @@ -99,36 +127,25 @@ else() set(REVISION "none") endif() -option(LOGGING "Set to OFF to build FlightGear without logging" ON) +# FlightGear build options +option(SIMGEAR_SHARED "Set to ON when SimGear was built as a shared library" OFF) +option(LOGGING "Set to ON to build FlightGear with logging support (default)" ON) option(SP_FDMS "Set to ON to build FlightGear with special-purpose FDMs" OFF) option(ENABLE_UIUC_MODEL "Set to ON to build FlightGear with UIUCModel FDM" OFF) option(ENABLE_LARCSIM "Set to ON to build FlightGear with LaRCsim FDM" OFF) -option(ENABLE_YASIM "Set to ON to build FlightGear with YASIM FDM" ON) -option(ENABLE_JSBSIM "Set to ON to build FlightGear with JSBSim FDM" ON) -option(ENABLE_FGADMIN "Set to ON to build FlightGear with FGADMIN" ON) +option(ENABLE_YASIM "Set to ON to build FlightGear with YASIM FDM (default)" ON) +option(ENABLE_JSBSIM "Set to ON to build FlightGear with JSBSim FDM (default)" ON) option(EVENT_INPUT "Set to ON to build FlightGear with event-based Input support" ${EVENT_INPUT_DEFAULT}) -option(ENABLE_LIBSVN "Set to ON to build FlightGear/terrasync with libsvnclient support" ON) -option(ENABLE_RTI "Set to ON to build SimGear with RTI support" OFF) -option(WITH_FGPANEL "Set to ON to build the fgpanel application" ON) -option(JPEG_FACTORY "Enable JPEG-factory support" OFF) -option(ENABLE_TESTS "Set to OFF to disable building test applications" ON) - -if (MSVC) - GET_FILENAME_COMPONENT(PARENT_DIR ${PROJECT_SOURCE_DIR} PATH) - if (CMAKE_CL_64) - SET(TEST_3RDPARTY_DIR "${PARENT_DIR}/3rdparty.x64") - else (CMAKE_CL_64) - SET(TEST_3RDPARTY_DIR "${PARENT_DIR}/3rdparty") - endif (CMAKE_CL_64) - if (EXISTS ${TEST_3RDPARTY_DIR}) - set(MSVC_3RDPARTY_ROOT ${PARENT_DIR} CACHE PATH "Location where the third-party dependencies are extracted") - else (EXISTS ${TEST_3RDPARTY_DIR}) - set(MSVC_3RDPARTY_ROOT NOT_FOUND CACHE PATH "Location where the third-party dependencies are extracted") - endif (EXISTS ${TEST_3RDPARTY_DIR}) - list(APPEND PLATFORM_LIBS "winmm.lib") -else (MSVC) - set(MSVC_3RDPARTY_ROOT NOT_FOUND CACHE PATH "Location where the third-party dependencies are extracted") -endif (MSVC) +option(ENABLE_LIBSVN "Set to ON to build FlightGear/terrasync with libsvnclient support (default)" ON) +option(ENABLE_RTI "Set to ON to build FlightGear with RTI support" OFF) +option(ENABLE_PROFILE "Set to ON to build FlightGear with gperftools profiling support" OFF) +option(JPEG_FACTORY "Set to ON to build FlightGear with JPEG-factory support" OFF) +option(SYSTEM_SQLITE "Set to ON to build FlightGear with the system's SQLite3 library" OFF) + +# additional utilities +option(ENABLE_FGADMIN "Set to ON to build the FGADMIN application (default)" ON) +option(WITH_FGPANEL "Set to ON to build the fgpanel application (default)" ON) +option(ENABLE_TESTS "Set to ON to build test applications (default)" ON) if(LOGGING) # nothing @@ -140,46 +157,22 @@ if(SP_FDMS) set(ENABLE_SP_FDM 1) endif() -if (MSVC AND MSVC_3RDPARTY_ROOT) - message(STATUS "3rdparty files located in ${MSVC_3RDPARTY_ROOT}") - set( OSG_MSVC "msvc" ) - if (${MSVC_VERSION} EQUAL 1600) - set( OSG_MSVC ${OSG_MSVC}100 ) - else (${MSVC_VERSION} EQUAL 1600) - set( OSG_MSVC ${OSG_MSVC}90 ) - endif (${MSVC_VERSION} EQUAL 1600) - if (CMAKE_CL_64) - set( OSG_MSVC ${OSG_MSVC}-64 ) - set( MSVC_3RDPARTY_DIR 3rdParty.x64 ) - set( BOOST_LIB lib64 ) - else (CMAKE_CL_64) - set( MSVC_3RDPARTY_DIR 3rdParty ) - set( BOOST_LIB lib ) - endif (CMAKE_CL_64) - - set (CMAKE_LIBRARY_PATH ${MSVC_3RDPARTY_ROOT}/${MSVC_3RDPARTY_DIR}/lib ${MSVC_3RDPARTY_ROOT}/install/${OSG_MSVC}/OpenScenegraph/lib ${MSVC_3RDPARTY_ROOT}/install/${OSG_MSVC}/SimGear/lib $(BOOST_ROOT)/$(BOOST_LIB) ) - set (CMAKE_INCLUDE_PATH ${MSVC_3RDPARTY_ROOT}/${MSVC_3RDPARTY_DIR}/include ${MSVC_3RDPARTY_ROOT}/install/${OSG_MSVC}/OpenScenegraph/include ${MSVC_3RDPARTY_ROOT}/install/${OSG_MSVC}/SimGear/include) - set (BOOST_ROOT ${MSVC_3RDPARTY_ROOT}/boost_1_44_0) - set (OPENAL_INCLUDE_DIR ${MSVC_3RDPARTY_ROOT}/${MSVC_3RDPARTY_DIR}/include) - set (ALUT_INCLUDE_DIR ${MSVC_3RDPARTY_ROOT}/${MSVC_3RDPARTY_DIR}/include) - set (OPENAL_LIBRARY_DIR ${MSVC_3RDPARTY_ROOT}/${MSVC_3RDPARTY_DIR}/lib) -endif (MSVC AND MSVC_3RDPARTY_ROOT) +# Setup MSVC 3rd party directories +include( ConfigureMsvc3rdParty ) if(EVENT_INPUT) - message(STATUS "checking event-based Input") - - IF(APPLE) - + if(APPLE) elseif(CMAKE_SYSTEM_NAME MATCHES "Linux") if(NOT UDEV_FOUND) message(WARNING "UDev not found, event input is disabled!") set(EVENT_INPUT 0) else() + add_definitions(-DWITH_EVENTINPUT) set(EVENT_INPUT_LIBRARIES ${UDEV_LIBRARIES}) + message(STATUS "event-based input enabled. Using ${UDEV_LIBRARIES}") endif() - else() - message(WARNING "event input is not supported on this platform yet") + message(WARNING "event-based input is not supported on this platform yet") endif() # Keep PLIB INPUT enabled as long as EventInput does not replace current joystick configurations. @@ -194,7 +187,6 @@ find_package(ZLIB REQUIRED) find_package(Threads REQUIRED) find_package(OpenGL REQUIRED) find_package(OpenAL REQUIRED) -find_package(ALUT REQUIRED) find_package(OpenSceneGraph 3.0.0 REQUIRED osgText osgSim osgDB osgParticle osgFX osgUtil osgViewer osgGA) if(ENABLE_FGADMIN) @@ -222,9 +214,20 @@ if(ENABLE_LIBSVN) message(STATUS "libsvn found, enabling in terrasync") set(HAVE_SVN_CLIENT_H 1) set(HAVE_LIBSVN_CLIENT_1 1) + else() + message(STATUS "libsvn missing. Disabling...") endif(LIBSVN_FOUND) endif(ENABLE_LIBSVN) +if (SYSTEM_SQLITE) + find_package(SQLite3 REQUIRED) + set(CMAKE_REQUIRED_INCLUDES ${SQLITE3_INCLUDED_DIR}) + message(STATUS "Using system SQLite3 library") +endif (SYSTEM_SQLITE) + +# Sqlite always depends on the threading lib +list(APPEND SQLITE3_LIBRARY ${CMAKE_THREAD_LIBS_INIT}) + find_package(PLIB REQUIRED puaux pu js fnt) # FlightGear and SimGear versions need to match @@ -254,6 +257,12 @@ check_include_file(unistd.h HAVE_UNISTD_H) check_include_file(sys/time.h HAVE_SYS_TIME_H) check_include_file(windows.h HAVE_WINDOWS_H) +if(ENABLE_PROFILE) + find_package(GooglePerfTools REQUIRED) + set(FG_HAVE_GPERFTOOLS 1) + message(STATUS "Built-in profiler using gperftools available") +endif() + if(ENABLE_RTI) find_package(RTI) if(RTI_FOUND) @@ -280,9 +289,9 @@ if(WIN32) # endforeach(warning) set(MSVC_FLAGS "-DNOMINMAX -D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS -D__CRT_NONSTDC_NO_WARNINGS") - if (${MSVC_VERSION} EQUAL 1600) + if (${MSVC_VERSION} GREATER 1599) set( MSVC_LD_FLAGS "/FORCE:MULTIPLE" ) - endif (${MSVC_VERSION} EQUAL 1600) + endif (${MSVC_VERSION} GREATER 1599) endif(MSVC) set(NOMINMAX 1) @@ -297,7 +306,6 @@ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${MSVC_LD_FLAGS}") include_directories(${OPENSCENEGRAPH_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIR} - ${ALUT_INCLUDE_DIR} ${OPENGL_INCLUDE_DIR} ${OPENAL_INCLUDE_DIR} ${SIMGEAR_INCLUDE_DIR}