X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=CMakeLists.txt;h=4616736126ca97928ad356089aabbf0d1f909aad;hb=fce2a53fc7cf5fb8e392a5e0570ad81f24e3ab0c;hp=150c3931d276e7e571aec0c9a53ff2081529107d;hpb=f563bea192989fdcd9518528aa3fdc16736a3be0;p=flightgear.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 150c3931d..461673612 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,6 +26,10 @@ if(InSourceBuild) 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") @@ -33,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 @@ -76,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) @@ -107,36 +127,35 @@ 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(ENABLE_FGELEV "Set to ON to build the fgelev application (default)" ON) +option(WITH_FGPANEL "Set to ON to build the fgpanel application (default)" ON) +option(ENABLE_FGVIEWER "Set to ON to build the fgviewer application (default)" ON) +option(ENABLE_GPSSMOOTH "Set to ON to build the GPSsmooth application (default)" ON) +option(ENABLE_TERRASYNC "Set to ON to build the terrasync application (default)" ON) + +option(ENABLE_FGJS "Set to ON to build the fgjs application (default)" ON) +option(ENABLE_JS_DEMO "Set to ON to build the js_demo application (default)" ON) + +option(ENABLE_METAR "Set to ON to build the metar application (default)" ON) + +option(ENABLE_TESTS "Set to ON to build test applications (default)" ON) if(LOGGING) # nothing @@ -148,46 +167,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. @@ -202,7 +197,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) @@ -230,13 +224,43 @@ 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 -find_package(SimGear ${FLIGHTGEAR_VERSION} REQUIRED) +if (EMBEDDED_SIMGEAR) + message(STATUS "Using embedded SimGear") + # create the same variables that FindSimGear would define + set(SIMGEAR_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/simgear) + set(SIMGEAR_CORE_LIBRARIES SimGearCore) + set(SIMGEAR_LIBRARIES SimGearScene) + + if (NOT SIMGEAR_SHARED) + set(SIMGEAR_CORE_LIBRARY_DEPENDENCIES + ${CMAKE_THREAD_LIBS_INIT} + ${ZLIB_LIBRARY} + ${LIBSVN_LIBRARIES} + ${WINMM_LIBRARY}) + + set(SIMGEAR_SCENE_LIBRARY_DEPENDENCIES + ${OPENAL_LIBRARY}) + endif() +else(EMBEDDED_SIMGEAR) + # FlightGear and SimGear versions need to match + find_package(SimGear ${FLIGHTGEAR_VERSION} REQUIRED) +endif (EMBEDDED_SIMGEAR) if (JPEG_FACTORY) # check simgear was built with JPEG-factory support @@ -262,11 +286,20 @@ 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) + message(STATUS "RTI: ENABLED") find_package(RTI) if(RTI_FOUND) set(FG_HAVE_HLA 1) endif(RTI_FOUND) +else() + message(STATUS "RTI: DISABLED") endif(ENABLE_RTI) if(CMAKE_COMPILER_IS_GNUCXX) @@ -288,9 +321,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) @@ -305,7 +338,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} @@ -335,6 +367,14 @@ configure_file ( "${PROJECT_BINARY_DIR}/src/Include/version.h" ) +if (EMBEDDED_SIMGEAR) + add_subdirectory(simgear) + # since we build without SimGear installed, we need to + # search this path directly to find the generated + # simgear_config.h + include_directories(${PROJECT_BINARY_DIR}/simgear) +endif(EMBEDDED_SIMGEAR) + add_subdirectory(src) add_subdirectory(utils) add_subdirectory(man)