diff options
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 227 |
1 files changed, 123 insertions, 104 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 9d07364..845c847 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,146 +1,165 @@ -PROJECT(XTrkCAD) -enable_testing() -cmake_minimum_required(VERSION 2.8) +# Main CMake file for XTrackCAD -# where to look first for cmake modules, before ${CMAKE_ROOT}/Modules/ is checked +cmake_minimum_required(VERSION 3.20.0) +project(XTrkCAD) + +cmake_policy(SET CMP0076 NEW) +cmake_policy(SET CMP0079 NEW) +# where to look first for cmake modules, before ${CMAKE_ROOT}/Modules/ is checked # additional CMake modules can be found here set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/CMake") -# Setup high-level build options ... -if(UNIX) - include(FindPkgConfig) - set(XTRKCAD_USE_GTK_DEFAULT ON) - if(APPLE) - SET(XTRKCAD_USE_GETTEXT_DEFAULT OFF) - else() - set(XTRKCAD_USE_GETTEXT_DEFAULT ON) - add_compile_options("-std=gnu99") - PKG_CHECK_MODULES(GTK_WEBKIT "webkit-1.0") - if(GTK_WEBKIT_FOUND) - set(XTRKCAD_USE_BROWSER_DEFAULT OFF) - else() - set(XTRKCAD_USE_BROWSER_DEFAULT ON) - endif() - endif(APPLE) -endif(UNIX) +# Include CMake defaults +include(CMakeDefaults) -IF(WIN32) - SET(XTRKCAD_USE_GTK_DEFAULT OFF) - SET(XTRKCAD_USE_GETTEXT_DEFAULT ON) +include(CheckIncludeFiles) - SET(CMAKE_C_FLAGS_DEBUG "/D_DEBUG /MTd /Zi /Ob0 /Od /RTC1" CACHE STRING "Flags used by the compiler during debug builds" FORCE) - SET(CMAKE_C_FLAGS_MINSIZEREL "/MT /O1 /Ob1 /D NDEBUG" CACHE STRING "Flags used by the compiler during release minumum size builds" FORCE) - SET(CMAKE_C_FLAGS_RELEASE "/MT /O2 /Ob2 /D NDEBUG" CACHE STRING "Flags used by the compiler during release builds" FORCE) - SET(CMAKE_C_FLAGS_RELWITHDEBINFO "/MT /Zi /O2 /Ob1 /D NDEBUG" CACHE STRING "Flags used by the compiler during release with debug info builds" FORCE) +include(ProgramVersion.cmake) +include(PlatformSettings.cmake) - ADD_DEFINITIONS(-DWINDOWS) - ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS) -ENDIF(WIN32) +enable_testing() -if(COMMAND cmake_policy) - cmake_policy(SET CMP0003 NEW) - if( POLICY CMP0026 ) - cmake_policy(SET CMP0026 OLD) - endif( POLICY CMP0026 ) -endif(COMMAND cmake_policy) +# Find all dependencies +# +# Additional libraries -SET(XTRKCAD_USE_DOXYGEN_DEFAULT OFF) +find_package(Libzip) +find_package(Zlib) -OPTION(XTRKCAD_USE_GTK "Use GTK for the graphical user interface back-end" ${XTRKCAD_USE_GTK_DEFAULT}) -OPTION(XTRKCAD_USE_GETTEXT "Use gettext for internationalization" ${XTRKCAD_USE_GETTEXT_DEFAULT}) -OPTION(XTRKCAD_USE_DOXYGEN "Generate internals documentation using doxygen" ${XTRKCAD_USE_DOXYGEN_DEFAULT}) -if(UNIX AND NOT APPLE) - option(XTRKCAD_USE_BROWSER "Show help in default browser" ${XTRKCAD_USE_BROWSER_DEFAULT}) +# Optionally enable SVG export +find_package(MiniXML) +if(MiniXML_FOUND) + set(XTRKCAD_CREATE_SVG 1) + message( STATUS "MiniXML found: SVG export is enabled") +else() + message( STATUS "MiniXML not found: no SVG export") endif() -IF(UNIX) - PKG_CHECK_MODULES(GTK REQUIRED "gtk+-2.0") -ENDIF() - -IF(APPLE) - OPTION(XTRKCAD_USE_PACKAGEMAKER "Generate an OSX PackageMaker package for distribution." OFF) -ENDIF(APPLE) - -# Hide the advanced stuff ... -MARK_AS_ADVANCED(CMAKE_BACKWARDS_COMPATIBILITY) -MARK_AS_ADVANCED(CMAKE_EXECUTABLE_FORMAT) -MARK_AS_ADVANCED(CMAKE_OSX_ARCHITECTURES) -MARK_AS_ADVANCED(CMAKE_OSX_SYSROOT) -MARK_AS_ADVANCED(CMAKE_USE_CHRPATH) -MARK_AS_ADVANCED(EXECUTABLE_OUTPUT_PATH) -MARK_AS_ADVANCED(LIBRARY_OUTPUT_PATH) - -# Test for dependencies ... -IF(WIN32 AND NOT XTRKCAD_USE_GTK) - FIND_PACKAGE(HTMLHelp REQUIRED) -ENDIF(WIN32 AND NOT XTRKCAD_USE_GTK) - -IF(XTRKCAD_USE_PACKAGEMAKER) - IF(NOT CMAKE_INSTALL_PREFIX STREQUAL "/usr") - MESSAGE(SEND_ERROR "XTRKCAD_USE_PACKAGEMAKER requires CMAKE_INSTALL_PREFIX set to /usr.") - ENDIF(NOT CMAKE_INSTALL_PREFIX STREQUAL "/usr") -ENDIF(XTRKCAD_USE_PACKAGEMAKER) - # Find unit testing framework find_package(CMocka) if(CMOCKA_FOUND) - include_directories(${CMOCKA_INCLUDE_DIR}) - set(LIBS ${LIBS} ${CMOCKA_LIBRARIES}) - option( XTRKCAD_TESTING "Build unittests" ON) + include_directories(${CMOCKA_INCLUDE_DIR}) + set(LIBS ${LIBS} ${CMOCKA_LIBRARIES}) + option(XTRKCAD_TESTING "Build unittests" ON) endif() +# Tools # Find document conversion tool find_package(Pandoc) +# For handling and creation of bitmaps the FreeImage library is required +find_package(FreeImage REQUIRED) + +# check for GTK+ 2.0 +if(UNIX) + pkg_check_modules(GTK REQUIRED "gtk+-2.0") + set(XTRKCAD_USE_GTK_DEFAULT ON) +endif(UNIX) + +if(WIN32 AND NOT XTRKCAD_USE_GTK) + # use the Windows HTMLHelp tool + find_package(HTMLHelp REQUIRED) +endif(WIN32 AND NOT XTRKCAD_USE_GTK) + +# +# Configure options +# + +option(XTRKCAD_USE_GTK "Use GTK for the graphical user interface back-end" ${XTRKCAD_USE_GTK_DEFAULT}) +option(XTRKCAD_USE_GETTEXT "Use gettext for internationalization" ${XTRKCAD_USE_GETTEXT_DEFAULT}) +option(XTRKCAD_USE_DOXYGEN "Generate internals documentation using doxygen" OFF) + +if(UNIX AND NOT APPLE) + option(XTRKCAD_USE_BROWSER "Show help in default browser" ${XTRKCAD_USE_BROWSER_DEFAULT}) +endif() + +if(APPLE) + option(XTRKCAD_USE_APPLEHELP "Show help in Apple Help" ${XTRKCAD_USE_APPLEHELP_DEFAULT}) + option(XTRKCAD_USE_BROWSER "Show help in default browser" ${XTRKCAD_USE_BROWSER_DEFAULT}) + option(XTRKCAD_USE_PACKAGEMAKER "Generate an OSX PackageMaker package for distribution." OFF) +endif() + +# Hide the advanced stuff ... +mark_as_advanced(CMAKE_BACKWARDS_COMPATIBILITY) +mark_as_advanced(CMAKE_EXECUTABLE_FORMAT) +mark_as_advanced(CMAKE_OSX_ARCHITECTURES) +mark_as_advanced(CMAKE_OSX_SYSROOT) +mark_as_advanced(CMAKE_USE_CHRPATH) +mark_as_advanced(EXECUTABLE_OUTPUT_PATH) +mark_as_advanced(LIBRARY_OUTPUT_PATH) + # Test for headers and libraries for portability ... +# check_include_files (malloc.h HAVE_MALLOC_H) +# if(HAVE_MALLOC_H) +# add_definitions(-DHAVE_MALLOC_H) +# endif() -INCLUDE (CheckIncludeFiles) -CHECK_INCLUDE_FILES (malloc.h HAVE_MALLOC_H) +#packaging related stuff -# Setup some global options for installation ... -SET(XTRKCAD_MAJOR_VERSION "5") -SET(XTRKCAD_MINOR_VERSION "1") -SET(XTRKCAD_RELEASE_VERSION "2") -SET(XTRKCAD_VERSION_MODIFIER "a") -SET(XTRKCAD_VERSION "${XTRKCAD_MAJOR_VERSION}.${XTRKCAD_MINOR_VERSION}.${XTRKCAD_RELEASE_VERSION}${XTRKCAD_VERSION_MODIFIER}") +if(XTRKCAD_USE_PACKAGEMAKER) + if(NOT CMAKE_INSTALL_PREFIX STREQUAL "/usr") + message(SEND_ERROR "XTRKCAD_USE_PACKAGEMAKER requires CMAKE_INSTALL_PREFIX set to /usr.") + endif() +endif() + +# +# configure installation directories +if(WIN32) + set( CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX} ${XTRKCAD_VERSION}" ) +endif() -IF(WIN32) - SET( CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX} ${XTRKCAD_VERSION}" ) -ENDIF(WIN32) -SET(XTRKCAD_BIN_INSTALL_DIR "bin") -SET(XTRKCAD_LOCALE_INSTALL_DIR "share/locale") -SET(XTRKCAD_PACKAGE "xtrkcad") -SET(XTRKCAD_SHARE_INSTALL_DIR "share/xtrkcad") +set(XTRKCAD_BIN_INSTALL_DIR "bin") +set(XTRKCAD_LOCALE_INSTALL_DIR "share/locale") +set(XTRKCAD_PACKAGE "xtrkcad") +set(XTRKCAD_BETA "") +if(UNIX AND NOT APPLE) + if(XTRKCAD_VERSION_MODIFIER MATCHES "^Beta") + set(XTRKCAD_BETA "-beta") + endif() +endif() +set(XTRKCAD_SHARE_INSTALL_DIR "share/xtrkcad${XTRKCAD_BETA}") # Enable use of a configuration file ... -ADD_DEFINITIONS(-DXTRKCAD_CMAKE_BUILD) -CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/xtrkcad-config.h.in ${CMAKE_CURRENT_BINARY_DIR}/xtrkcad-config.h) +add_definitions(-DXTRKCAD_CMAKE_BUILD) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/xtrkcad-config.h.in ${CMAKE_CURRENT_BINARY_DIR}/xtrkcad-config.h) -IF(XTRKCAD_USE_GETTEXT) - SET(GENHELP_OPTS "-bhi") +# find the config.h include file +include_directories( + ${CMAKE_CURRENT_BINARY_DIR} +) + +# +# I18N related dependencies + +if(XTRKCAD_USE_GETTEXT) # # Find the GnuWin32 installation directory, the gettext include should be located in subdir include # - IF(WIN32) + if(WIN32) if(MSVC) # use supplied gettext library for Visual Studio message( STATUS "Use simple_gettext module included with XTrackCAD" ) - ADD_DEFINITIONS(-DUSE_SIMPLE_GETTEXT ) + add_definitions(-DUSE_SIMPLE_GETTEXT ) else() # for mingw & co. find libintl.h and use it find_path ( INTL_PATH libintl.h ) if(INTL_PATH) message( STATUS "Use installed gettext module" ) - INCLUDE_DIRECTORIES(${INTL_PATH}) - endif(INTL_PATH) + include_directories(${INTL_PATH}) + endif() endif() - ENDIF(WIN32) -ELSE(XTRKCAD_USE_GETTEXT) - SET(GENHELP_OPTS "-bh") -ENDIF(XTRKCAD_USE_GETTEXT) + endif() + if(APPLE) + find_path ( INTL_PATH libintl.h ) + if(INTL_PATH) + message( STATUS "Use installed gettext module" ) + include_directories(${INTL_PATH}) + endif() + endif() +endif() # Setup the rest of the build ... -ADD_SUBDIRECTORY(app) -ADD_SUBDIRECTORY(distribution) -ADD_SUBDIRECTORY(docs) +add_subdirectory(app) +add_subdirectory(distribution) +add_subdirectory(docs) |