Skip to content
Snippets Groups Projects
Select Git revision
  • c6de1c5b1991305a12778e70a90f384f5be7c446
  • master default protected
  • enxhi_issue460_remove_TOAR-I_access
  • michael_issue459_preprocess_german_stations
  • sh_pollutants
  • develop protected
  • release_v2.4.0
  • michael_issue450_feat_load-ifs-data
  • lukas_issue457_feat_set-config-paths-as-parameter
  • lukas_issue454_feat_use-toar-statistics-api-v2
  • lukas_issue453_refac_advanced-retry-strategy
  • lukas_issue452_bug_update-proj-version
  • lukas_issue449_refac_load-era5-data-from-toar-db
  • lukas_issue451_feat_robust-apriori-estimate-for-short-timeseries
  • lukas_issue448_feat_load-model-from-path
  • lukas_issue447_feat_store-and-load-local-clim-apriori-data
  • lukas_issue445_feat_data-insight-plot-monthly-distribution
  • lukas_issue442_feat_bias-free-evaluation
  • lukas_issue444_feat_choose-interp-method-cams
  • 414-include-crps-analysis-and-other-ens-verif-methods-or-plots
  • lukas_issue384_feat_aqw-data-handler
  • v2.4.0 protected
  • v2.3.0 protected
  • v2.2.0 protected
  • v2.1.0 protected
  • Kleinert_etal_2022_initial_submission
  • v2.0.0 protected
  • v1.5.0 protected
  • v1.4.0 protected
  • v1.3.0 protected
  • v1.2.1 protected
  • v1.2.0 protected
  • v1.1.0 protected
  • IntelliO3-ts-v1.0_R1-submit
  • v1.0.0 protected
  • v0.12.2 protected
  • v0.12.1 protected
  • v0.12.0 protected
  • v0.11.0 protected
  • v0.10.0 protected
  • IntelliO3-ts-v1.0_initial-submit
41 results

run_HPC.py

Blame
  • CMakeLists.txt 35.38 KiB
    # Documentation: Some useful options:
    # -DCMAKE_CXX_COMPILER:STRING=clang++   -DCMAKE_C_COMPILER:STRING=clang .
    # -DCMAKE_BUILD_TYPE:STRING=Debug (default Release)
    # -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON (default OFF)
    # -DBUILD_TESTING=ON (default OFF) for python tests
    # -DBUILD_CPPUNIT_TEST=ON (default OFF) for unit tests
    # -DUSE_DUAL_ABI=ON (default OFF)  https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html
    # -D Boost_NO_SYSTEM_PATHS=true (default false) -D BOOST_ROOT=PATH_where_to_find_boost
    # -D AIROUTER=true (default false)
    # -D JPSFIRE=true (default false)
    #--------------------------------------------------------------------------
    
    cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
    set(CMAKE_LEGACY_CYGWIN_WIN32 0)
    IF (POLICY CMP0054)
        cmake_policy(SET CMP0054 NEW)
    ENDIF (POLICY CMP0054)
    IF (POLICY CMP0077)
        cmake_policy(SET CMP0077 OLD)
    ENDIF (POLICY CMP0077)
    
    project(JPScore LANGUAGES CXX)
    
    # Options for  jpscore
    if(NOT AIROUTER)
        set(AIROUTER false)
    else()
        set(AIROUTER true)
    endif()
    
    if(NOT JPSFIRE)
        set(JPSFIRE false)
    else()
        set(JPSFIRE true)
    endif()
    
    message(STATUS "BUILD_TESTING01: " ${BUILD_TESTING})
    
    set(CMAKE_COLOR_MAKEFILE ON)
    set(JPSCORE_MAJOR_VERSION 0)
    set(JPSCORE_MINOR_VERSION 8)
    set(JPSCORE_PATCH_VERSION 4)
    set(JPSCORE_VERSION
    ${JPSCORE_MAJOR_VERSION}.${JPSCORE_MINOR_VERSION}.${JPSCORE_PATCH_VERSION})
    message(STATUS "JPSCORE_VERSION: " ${JPSCORE_VERSION})
    add_definitions("-DJPSCORE_VERSION=\"${JPSCORE_VERSION}\"")
    if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR
    "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
        set(warnings "-Wall -Wextra")
        # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
    elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
        set(warnings "/W4 /WX /EHsc")
    elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
        message(STATUS "Compiling with Intel settings")
        set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -w")
        set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -O0 -w -tcheck")
    elseif ()
    endif ()
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${warnings}")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${warnings}")
    
    message(STATUS "BUILD_TESTING02: " ${BUILD_TESTING})
    
    if (NOT BUILD_TESTING)
        set(BUILD_TESTING OFF) # test units & python tests are not generated.
    endif (NOT BUILD_TESTING)
    message(STATUS "BUILD_TESTING: " ${BUILD_TESTING})
    
    if (NOT BUILD_CPPUNIT_TEST)
        set(BUILD_CPPUNIT_TEST OFF)
    endif (NOT BUILD_CPPUNIT_TEST)
    message(STATUS "BUILD_CPPUNIT_TEST: " ${BUILD_CPPUNIT_TEST})
    
    if (NOT CMAKE_EXPORT_COMPILE_COMMANDS)
        # To generate a compilation database "compilation_commands.json" for clang_check
        set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
    endif (NOT CMAKE_EXPORT_COMPILE_COMMANDS)
    
    set(CTEST_BUILD_FLAGS "-j")
    
    if (NOT CMAKE_BUILD_TYPE)
        #  set (CMAKE_BUILD_TYPE Release)
        set(CMAKE_BUILD_TYPE Debug)
    endif (NOT CMAKE_BUILD_TYPE)
    message(STATUS "CMAKE_BUILD_TYPE: " ${CMAKE_BUILD_TYPE})
    if(NOT USE_DUAL_ABI)
        set (USE_DUAL_ABI FALSE)
    endif()
    #------------------ set important directories --------------------
    if (NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY)
      set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
    endif()
    
    if(NOT EXECUTABLE_OUTPUT_PATH)
      set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin")
    endif()
    set(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/lib/${CMAKE_BUILD_TYPE})
    set(CMAKE_TEST_DIR ${CMAKE_SOURCE_DIR}/Utest)
    message(STATUS "BUILD_TESTING03: " ${BUILD_TESTING})
    
    # Debug messages
    message(STATUS "CMAKE_BINARY_DIR: " ${CMAKE_BINARY_DIR})
    message(STATUS "CMAKE_SOURCE_DIR: " ${CMAKE_SOURCE_DIR})
    message(STATUS "CMAKE_TEST_DIR: " ${CMAKE_TEST_DIR})
    message(STATUS "RUN TIME " ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
    message(STATUS "EXECUTABE" ${EXECUTABLE_OUTPUT_PATH})
    # ========================== build platform ==========================
    message(STATUS "")
    message(STATUS "Platform: ")
    message(STATUS "    Host: " ${CMAKE_HOST_SYSTEM_NAME} ${CMAKE_HOST_SYSTEM_VERSION} ${CMAKE_HOST_SYSTEM_PROCESSOR})
    if (CMAKE_CROSSCOMPILING)
        message(STATUS "    Target: " ${CMAKE_SYSTEM_NAME} ${CMAKE_SYSTEM_VERSION} ${CMAKE_SYSTEM_PROCESSOR})
    endif ()
    message(STATUS "    CMake: " ${CMAKE_VERSION})
    message(STATUS "    CMake generator: " ${CMAKE_GENERATOR})
    message(STATUS "    CMake build tool: " ${CMAKE_BUILD_TOOL})
    if (MSVC)
        message(STATUS "    MSVC: " ${MSVC_VERSION})
    #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ZLIB_WINAPI)
    endif ()
    if (CMAKE_GENERATOR MATCHES Xcode)
        message(STATUS "    Xcode: " ${XCODE_VERSION})
    endif ()
    if (NOT CMAKE_GENERATOR MATCHES "Xcode|Visual Studio")
        message(STATUS "    Configuration: " ${CMAKE_BUILD_TYPE})
    endif ()
    message(STATUS "")
    
    find_package(Git QUIET) # no need for this msg. It comes from cmake.findgit()
    find_program(GIT_SCM git DOC "Git version control")
    mark_as_advanced(GIT_SCM)
    find_file(GITDIR NAMES .git PATHS ${CMAKE_SOURCE_DIR} NO_DEFAULT_PATH)
    if (GIT_SCM AND GITDIR)
        # the commit's SHA1, and whether the building workspace was dirty or not
        # describe --match=NeVeRmAtCh --always --tags --abbrev=40 --dirty
        execute_process(COMMAND
        "${GIT_EXECUTABLE}" --no-pager describe --tags --always --dirty
        WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
        OUTPUT_VARIABLE GIT_SHA1
        ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
    
        # branch
        execute_process(
        COMMAND "${GIT_EXECUTABLE}" rev-parse --abbrev-ref HEAD
        WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
        OUTPUT_VARIABLE GIT_BRANCH
        OUTPUT_STRIP_TRAILING_WHITESPACE
        )
    
        # the date of the commit
        execute_process(COMMAND
        "${GIT_EXECUTABLE}" log -1 --format=%ad --date=local
        WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
        OUTPUT_VARIABLE GIT_DATE
        ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
    
        # the subject of the commit
        execute_process(COMMAND
        "${GIT_EXECUTABLE}" log -1 --format=%s
        WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
        OUTPUT_VARIABLE GIT_COMMIT_SUBJECT
        ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
    else()
        message(STATUS "Not in a git repo")
      endif()
    
    # string(REGEX REPLACE "\#" "" GIT_COMMIT_SUBJECT ${GIT_COMMIT_SUBJECT})
    
    # even if not in a git repository we need to define these
    add_definitions("-DGIT_COMMIT_HASH=\"${GIT_SHA1}\"")
    add_definitions("-DGIT_COMMIT_DATE=\"${GIT_DATE}\"")
    add_definitions("-DGIT_COMMIT_SUBJECT=\"${GIT_COMMIT_SUBJECT}\"")
    add_definitions("-DGIT_BRANCH=\"${GIT_BRANCH}\"")
    
    # add a target to generate API documentation with Doxygen
    find_package(Doxygen)
    if (DOXYGEN_FOUND)
        configure_file(${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
        add_custom_target(doc
                ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
                WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
                COMMENT "Generating API documentation with Doxygen" VERBATIM)
    endif (DOXYGEN_FOUND)
    #http://stackoverflow.com/questions/1487752/how-do-i-instruct-cmake-to-look-for-libraries-installed-by-macports
    if (APPLE)
        # Detect if the "port" command is valid on this system; if so, return full path
        execute_process(COMMAND which port RESULT_VARIABLE DETECT_MACPORTS OUTPUT_VARIABLE MACPORTS_PREFIX ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
        if (${DETECT_MACPORTS} EQUAL 0)
            # "/opt/local/bin/port" doesn't have libs, so we get the parent directory
            get_filename_component(MACPORTS_PREFIX ${MACPORTS_PREFIX} DIRECTORY)
            # "/opt/local/bin" doesn't have libs, so we get the parent directory
            get_filename_component(MACPORTS_PREFIX ${MACPORTS_PREFIX} DIRECTORY)
            # "/opt/local" is where MacPorts lives, add `/lib` suffix and link
            link_directories(${MACPORTS_PREFIX}/lib)
            message(STATUS "Macports detected: ${MACPORTS_PREFIX}/lib")
            # SET(CMAKE_SYSTEM_NAME Darwin)
            # # Add MacPorts
            # INCLUDE_DIRECTORIES(/opt/local/include)
    
            # LINK_DIRECTORIES(/opt/local/lib)
    
        else ()
            # Recommendation, also add a "brew --prefix" custom command to detect a homebrew build environment
            execute_process(COMMAND brew --prefix RESULT_VARIABLE DETECT_BREW OUTPUT_VARIABLE BREW_PREFIX ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
            if (${DETECT_BREW} EQUAL 0)
                link_directories(${BREW_PREFIX}/lib)
                message(STATUS "Brew detected: ${BREW_PREFIX}")
            endif ()
        endif ()
    endif (APPLE)
    
    
    
    if (Boost_NO_SYSTEM_PATHS)
        set(Boost_NO_SYSTEM_PATHS ON)
        set(BOOST_INCLUDE_DIRS "${BOOST_ROOT}/include")
        set(BOOST_LIBRARY_DIRS "${BOOST_ROOT}/stage/lib")
        set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} ${BOOST_ROOT})
        set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} ${BOOST_LIBRARY_DIRS})
    endif (Boost_NO_SYSTEM_PATHS)
    # in case boost is a non-default location
    # SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "C:/win32libs/boost")
    # SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "C:/win32libs/boost/lib")
    
    
    # find the correct OpenMP flag
    FIND_PACKAGE(OpenMP)
    if (OPENMP_FOUND)
        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
        set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
    else (OPENMP_FOUND)
        if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
            #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
            # somehow find_package(openmp) does not work properly with clang
        else (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
            message(STATUS "Disabling OpenMP support")
        endif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
    endif (OPENMP_FOUND)
    
    #statically link all gcc stuffs
    #set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static")
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
    
    #boost
    if(MSVC)
       find_package(Boost COMPONENTS  QUIET)
    else()
       find_package(Boost COMPONENTS  REQUIRED)
    
    endif()
    
    message(STATUS "BUILD_TESTING0: " ${BUILD_TESTING})
    if(AIROUTER)
        #CGAL
        find_package(CGAL REQUIRED) # for AI router
    endif()
    
    # test all cpp-files in Utest
    if (BUILD_TESTING OR BUILD_CPPUNIT_TEST)
            IF (CMAKE_COMPILER_IS_GNUCXX)
            set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fprofile-arcs -ftest-coverage")
        IF (USE_DUAL_ABI)
            set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_GLIBCXX_USE_CXX11_ABI=0")
        ENDIF(USE_DUAL_ABI)
            set(CMAKE_EXE_LINKER_FLAGS "-fprofile-arcs -ftest-coverage")
            set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake_modules/")
            INCLUDE(CodeCoverage)
            set(ENABLE_COVERAGE ON)
            SETUP_TARGET_FOR_COVERAGE(
            cov  # Name for custom target.
            ctest         # Name of the test driver executable that runs the tests.
            # NOTE! This should always have a ZERO as exit code
            # otherwise the coverage generation will not complete.
            coverage            # Name of output directory.
            )
        endif (CMAKE_COMPILER_IS_GNUCXX)
        file(GLOB_RECURSE test_files "${CMAKE_TEST_DIR}/*.cpp")
        #  file(GLOB test_py_files "${CMAKE_TEST_DIR}/*/runtest*.py")
    endif (BUILD_TESTING OR BUILD_CPPUNIT_TEST)
    
    if (BUILD_TESTING)
        file(GLOB_RECURSE test_py_files "${CMAKE_TEST_DIR}/*runtest_*.py")
    endif (BUILD_TESTING)
    
    # add sources and headers
    set(source_files
    Simulation.cpp
    general/ArgumentParser.cpp
    IO/progress_bar.cpp
    
    geometry/Building.cpp
    geometry/Line.cpp
    geometry/Point.cpp
    geometry/Transition.cpp
    geometry/Hline.cpp
    geometry/Obstacle.cpp
    geometry/SubRoom.cpp
    geometry/Crossing.cpp
    geometry/NavLine.cpp
    geometry/Room.cpp
    geometry/Wall.cpp
    geometry/Goal.cpp
    geometry/WaitingArea.cpp
    
    IO/GeoFileParser.cpp
    IO/IniFileParser.cpp
    IO/IODispatcher.cpp
    IO/OutputHandler.cpp
    IO/PedDistributionParser.cpp
    IO/TraVisToClient.cpp
    
    math/ForceModel.cpp
    math/Mathematics.cpp
    math/ODESolver.cpp
    math/GCFMModel.cpp
    math/GompertzModel.cpp
    math/GradientModel.cpp
    math/VelocityModel.cpp
    math/OperationalModel.cpp
    
    
    mpi/LCGrid.cpp
    
    pedestrian/Ellipse.cpp
    pedestrian/PedDistributor.cpp
    pedestrian/Pedestrian.cpp
    pedestrian/AgentsParameters.cpp
    pedestrian/Knowledge.cpp
    pedestrian/AgentsQueue.cpp
    pedestrian/AgentsSource.cpp
    pedestrian/Pedestrian.cpp
    pedestrian/AgentsSourcesManager.cpp
    pedestrian/StartDistribution.cpp
    
    
    #voronoi/VoronoiDiagramGenerator.cpp
    voronoi-boost/VoronoiPositionGenerator.cpp
    
    #floorfield
    routing/ff_router/ffRouter.cpp
    #routing/ff_router/LocalFloorfieldViaFM.cpp
    routing/ff_router/FloorfieldViaFM.cpp
    #routing/ff_router/FFKit.cpp
    routing/ff_router/UnivFFviaFM.cpp
    
    #floorfield
    routing/ff_router_trips/ffRouterTrips.cpp
    routing/ff_router_trips/FloorfieldViaFMTrips.cpp
    routing/ff_router_trips/UnivFFviaFMTrips.cpp
    
            #global_shortest
    routing/global_shortest/AccessPoint.cpp
    routing/global_shortest/GlobalRouter.cpp
    routing/global_shortest/DTriangulation.cpp
    
    #global_shortest
    routing/global_shortest_trips/AccessPoint.cpp
    routing/global_shortest_trips/GlobalRouterTrips.cpp
    routing/global_shortest_trips/DTriangulation.cpp
    
    #general
    routing/DirectionStrategy.cpp
    routing/Router.cpp
    routing/RoutingEngine.cpp
    
    
    #quickest
    routing/quickest/QuickestPathRouter.cpp
    
    #Smoke router
    routing/smoke_router/SmokeRouter.cpp
    routing/smoke_router/GraphNetwork.cpp
    routing/smoke_router/NavigationGraph.cpp
    routing/smoke_router/BrainStorage.cpp
    routing/smoke_router/navigation_graph/GraphEdge.cpp
    routing/smoke_router/navigation_graph/GraphVertex.cpp
    routing/smoke_router/sensor/RoomToFloorSensor.cpp
    routing/smoke_router/sensor/SensorManager.cpp
    routing/smoke_router/sensor/AbstractSensor.cpp
    routing/smoke_router/sensor/DiscoverDoorsSensor.cpp
    routing/smoke_router/sensor/JamSensor.cpp
    routing/smoke_router/sensor/LastDestinationsSensor.cpp
    routing/smoke_router/sensor/locater.cpp
    routing/smoke_router/cognitiveMap/associations.cpp
    routing/smoke_router/cognitiveMap/connection.cpp
    routing/smoke_router/cognitiveMap/cognitivemap.cpp
    routing/smoke_router/cognitiveMap/landmark.cpp
    routing/smoke_router/cognitiveMap/region.cpp
    routing/smoke_router/cognitiveMap/youareherepointer.cpp
    routing/smoke_router/cognitiveMap/cogmapoutputhandler.cpp
    routing/smoke_router/cognitiveMap/landmarknetwork.cpp
    routing/smoke_router/Brain.cpp
    routing/smoke_router/cognitiveMap/internnavigationnetwork.cpp
    
    
    events/EventManager.cpp
    events/Event.cpp
    
    geometry/Trips.cpp
    routing/trips_router/TripsRouter.cpp
    
    forms/jpscore.rc
    math/KrauszModel.cpp geometry/GoalManager.cpp geometry/GoalManager.h)
    
    set(THIRD_PARTY_SRC
      tinyxml/tinystr.cpp
      tinyxml/tinyxml.cpp
      tinyxml/tinyxmlerror.cpp
      tinyxml/tinyxmlparser.cpp
    
      poly2tri/common/shapes.cpp
      poly2tri/sweep/sweep_context.cpp
      poly2tri/sweep/advancing_front.cpp
      poly2tri/sweep/sweep.cpp
      poly2tri/sweep/cdt.cpp
    
      visiLibity/source_code/visilibity.cpp
      )
    set(THIRD_PARTY_HDR
      tinyxml/tinyxml.h
      tinyxml/tinystr.h
    
      poly2tri/poly2tri.h
      poly2tri/common/shapes.h
      poly2tri/sweep/cdt.h
      poly2tri/common/utils.h
      poly2tri/sweep/sweep_context.h
      poly2tri/sweep/advancing_front.h
      poly2tri/sweep/sweep.h
    
      visiLibity/source_code/visilibity.hpp
      )
    
    set(JPSFIRE_SRC
    JPSfire/generic/FDSMesh.cpp
    JPSfire/generic/Knot.cpp
    JPSfire/generic/FDSMeshStorage.cpp
    JPSfire/A_smoke_sensor/SmokeSensor.cpp
    JPSfire/B_walking_speed/WalkingSpeed.cpp
    JPSfire/C_toxicity_analysis/ToxicityAnalysis.cpp
    JPSfire/C_toxicity_analysis/ToxicityOutputhandler.cpp
    )
    set(header_files
    
    #floorfield
    routing/ff_router/ffRouter.h
    routing/ff_router/RectGrid.h
    routing/ff_router/Trial.h
    #routing/ff_router/LocalFloorfieldViaFM.h
    routing/ff_router/FloorfieldViaFM.h
    #routing/ff_router/FFKit.h
    routing/ff_router/UnivFFviaFM.h
    
    #floorfield
    routing/ff_router_trips/ffRouterTrips.h
    routing/ff_router_trips/RectGrid.h
    routing/ff_router_trips/Trial.h
    routing/ff_router_trips/FloorfieldViaFMTrips.h
    routing/ff_router_trips/UnivFFviaFMTrips.h
    
    #general
    routing/DirectionStrategy.h
    routing/DummyRouter.h
    routing/GlobalRouter.h
    routing/QuickestPathRouter.h
    routing/SafestPathRouter.h
    routing/Router.h
    routing/RoutingEngine.h
    
    #global_shortest
    routing/global_shortest/GlobalRouter.h
    routing/global_shortest/AccessPoint.h
    routing/global_shortest/DTriangulation.h
    
    #global_shortest trips
    routing/global_shortest_trips/AccessPoint.h
    routing/global_shortest_trips/GlobalRouterTrips.h
    routing/global_shortest_trips/DTriangulation.h
    
    #quickest
    routing/quickest/QuickestPathRouter.h
    
    #Smoke router
    routing/smoke_router/SmokeRouter.h
    routing/smoke_router/GraphNetwork.h
    routing/smoke_router/NavigationGraph.h
    routing/smoke_router/BrainStorage.h
    routing/smoke_router/navigation_graph/GraphEdge.h
    routing/smoke_router/navigation_graph/GraphVertex.h
    routing/smoke_router/sensor/AbstractSensor.h
    routing/smoke_router/sensor/RoomToFloorSensor.h
    routing/smoke_router/sensor/SensorManager.h
    routing/smoke_router/sensor/DiscoverDoorsSensor.h
    routing/smoke_router/sensor/JamSensor.h
    routing/smoke_router/sensor/LastDestinationsSensor.h
    routing/smoke_router/sensor/locater.h
    routing/smoke_router/cognitiveMap/associations.h
    routing/smoke_router/cognitiveMap/connection.cpp
    routing/smoke_router/cognitiveMap/cognitivemap.h
    routing/smoke_router/cognitiveMap/landmark.h
    routing/smoke_router/cognitiveMap/region.h
    routing/smoke_router/cognitiveMap/youareherepointer.h
    routing/smoke_router/cognitiveMap/cogmapoutputhandler.h
    routing/smoke_router/cognitiveMap/landmarknetwork.h
    routing/smoke_router/Brain.h
    routing/smoke_router/cognitiveMap/internnavigationnetwork.h
    
    pedestrian/Pedestrian.h
    pedestrian/PedDistributor.h
    pedestrian/Ellipse.h
    pedestrian/AgentsParameters.h
    pedestrian/Knowledge.h
    pedestrian/AgentsQueue.h
    pedestrian/AgentsSource.h
    pedestrian/Pedestrian.h
    pedestrian/AgentsSourcesManager.h
    pedestrian/StartDistribution.h
    #voronoi/VoronoiDiagramGenerator.h
    
    voronoi-boost/VoronoiPositionGenerator.h
    
    mpi/LCGrid.h
    
    
    general/ArgumentParser.h
    general/Configuration.h
    general/Macros.h
    general/randomnumbergenerator.h
    
    geometry/Crossing.h
    geometry/NavLine.h
    geometry/Room.h
    geometry/Building.h
    geometry/Wall.h
    geometry/Line.h
    geometry/Point.h
    geometry/Transition.h
    geometry/Hline.h
    geometry/Obstacle.h
    geometry/SubRoom.h
    geometry/Goal.h
    geometry/WaitingArea.h
    
    IO/GeoFileParser.h
    IO/IniFileParser.h
    IO/IODispatcher.h
    IO/OutputHandler.h
    IO/PedDistributionParser.h
    IO/TraVisToClient.h
    
    math/ForceModel.h
    math/Mathematics.h
    math/ODESolver.h
    math/GCFMModel.h
    math/GompertzModel.h
    math/GradientModel.h
    math/VelocityModel.h
    math/OperationalModel.h
    
    events/EventManager.h
    events/Event.h
    
            geometry/Trips.h
            routing/trips_router/TripsRouter.h
    
            )
    
    set(JPSFIRE_HDR
    JPSfire/generic/FDSMesh.h
    JPSfire/generic/Knot.h
    JPSfire/generic/FDSMeshStorage.h
    JPSfire/A_smoke_sensor/SmokeSensor.h
    JPSfire/B_walking_speed/WalkingSpeed.h
    JPSfire/C_toxicity_analysis/ToxicityAnalysis.h
    JPSfire/C_toxicity_analysis/ToxicityOutputhandler.h
    
    )
    SET(AIROUTER_SRC
    #AI router
    routing/ai_router/AIRouter.cpp
    routing/ai_router/BrainStorage.cpp
    routing/ai_router/cognitiveMap/associations.cpp
    routing/ai_router/cognitiveMap/connection.cpp
    routing/ai_router/cognitiveMap/cognitivemap.cpp
    routing/ai_router/cognitiveMap/landmark.cpp
    routing/ai_router/cognitiveMap/region.cpp
    routing/ai_router/cognitiveMap/landmarknetwork.cpp
    routing/ai_router/cognitiveMap/internnavigationnetwork.cpp
    routing/ai_router/perception/visualsystem.cpp
    routing/ai_router/perception/visibleenvironment.cpp
    routing/ai_router/perception/cgalgeometry.cpp
    routing/ai_router/perception/sign.cpp
    routing/ai_router/Cortex.cpp
    
    #AI router trips
    #routing/ai_router_trips/AIRouterTrips.cpp
    #routing/ai_router_trips/BrainStorage.cpp
    #routing/ai_router_trips/cognitiveMap/associations.cpp
    #routing/ai_router_trips/cognitiveMap/connection.cpp
    #routing/ai_router_trips/cognitiveMap/cognitivemap.cpp
    #routing/ai_router_trips/cognitiveMap/landmark.cpp
    #routing/ai_router_trips/cognitiveMap/region.cpp
    #routing/ai_router_trips/cognitiveMap/landmarknetwork.cpp
    #routing/ai_router_trips/cognitiveMap/internnavigationnetwork.cpp
    #routing/ai_router_trips/perception/visualsystem.cpp
    #routing/ai_router_trips/perception/visibleenvironment.cpp
    #routing/ai_router_trips/perception/cgalgeometry.cpp
    #routing/ai_router_trips/perception/sign.cpp
    #routing/ai_router_trips/Cortex.cpp
    )
    
    SET(AIROUTER_HDR
    #AI router
    routing/ai_router/AIRouter.h
    routing/ai_router/BrainStorage.h
    routing/ai_router/cognitiveMap/associations.h
    routing/ai_router/cognitiveMap/connection.cpp
    routing/ai_router/cognitiveMap/cognitivemap.h
    routing/ai_router/cognitiveMap/landmark.h
    routing/ai_router/cognitiveMap/region.h
    routing/ai_router/cognitiveMap/landmarknetwork.h
    routing/ai_router/cognitiveMap/internnavigationnetwork.h
    routing/ai_router/perception/visualsystem.h
    routing/ai_router/perception/visibleenvironment.h
    routing/ai_router/perception/cgalgeometry.h
    routing/ai_router/perception/sign.h
    routing/ai_router/Cortex.h
    
    #AI router trips
    routing/ai_router_trips/AIRouterTrips.h
    routing/ai_router_trips/BrainStorage.h
    routing/ai_router_trips/cognitiveMap/associations.h
    routing/ai_router_trips/cognitiveMap/connection.cpp
    routing/ai_router_trips/cognitiveMap/cognitivemap.h
    routing/ai_router_trips/cognitiveMap/landmark.h
    routing/ai_router_trips/cognitiveMap/region.h
    routing/ai_router_trips/cognitiveMap/landmarknetwork.h
    routing/ai_router_trips/cognitiveMap/internnavigationnetwork.h
    routing/ai_router_trips/perception/visualsystem.h
    routing/ai_router_trips/perception/visibleenvironment.h
    routing/ai_router_trips/perception/cgalgeometry.h
    routing/ai_router_trips/perception/sign.h
    routing/ai_router_trips/Cortex.h
    )
    
    message(STATUS "AIROUTER: ${AIROUTER}")
    if(CGAL_FOUND AND AIROUTER)
        SET(source_files ${source_files} ${AIROUTER_SRC})
        SET(header_files ${header_files} ${AIROUTER_HDR})
        message(STATUS "USE AI ROUTER")
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DAIROUTER")
    endif()
    
    if(JPSFIRE)
        SET(source_files ${source_files} ${JPSFIRE_SRC})
        SET(header_files ${header_files} ${JPSFIRE_HDR})
        message(STATUS "USE JPSFIRE")
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DJPSFIRE")
    endif()
    
    message(STATUS "JPSFIRE: ${JPSFIRE}")
    # ----- add here 3th party
    if(JPSFIRE)
        find_package(ZLIB REQUIRED)
        include_directories(${ZLIB_INCLUDE_DIRS})
        add_library(cnpy STATIC "cnpy/cnpy.cpp")
        target_link_libraries(cnpy ${ZLIB_LIBRARIES})
    endif()
    
    # todo make this system
    add_library(thirdParty STATIC ${THIRD_PARTY_SRC})
    
    add_library(core STATIC ${source_files})
    # c++17 ----
    set(CMAKE_CXX_EXTENSIONS OFF)
    set_property(TARGET core PROPERTY CXX_STANDARD 17)
    set_property(TARGET core PROPERTY CXX_STANDARD_REQUIRED ON)
    if(CMAKE_COMPILER_IS_GNUCXX)
      target_link_libraries(core thirdParty stdc++fs) # link to lib filesystem
    else()
      target_link_libraries(core thirdParty)
      #message(WARNING "I don't know how to link filesystem with ${CMAKE_CXX_COMPILER_ID}")
    endif()
    
    
    #add_library ( core SHARED ${source_files} )
    add_executable(jpscore main.cpp ${CMAKE_SOURCE_DIR}/forms/JPScore.ico)
    if (Boost_FOUND)
        set(Boost_USE_STATIC_LIBS ON)
        set(Boost_USE_STATIC_RUNTIME ON)
        add_definitions(${Boost_LIB_DIAGNOSTIC_DEFINITIONS})
    
        if(WIN32)
            add_definitions( -DBOOST_ALL_NO_LIB )
            # force all boost libraries to dynamic link (we already disabled
            # autolinking, so I don't know why we need this, but we do!)
            add_definitions( -DBOOST_ALL_DYN_LINK )
            # add_definitions(${Boost_LIB_DIAGNOSTIC_DEFINITIONS})
        endif()
        message(STATUS "BOOST FOUND: " ${Boost_LIB_VERSION})
        message(STATUS "Boost_LIBRARY_DIRS: " ${Boost_LIBRARY_DIRS})
        message(STATUS "Boost_INCLUDE_DIR: " ${Boost_INCLUDE_DIR})
        message(STATUS "Boost_LIB_VERSION: " ${Boost_LIB_VERSION})
        message(STATUS "Boost_libraries: " ${Boost_LIBRARIES})
        link_directories(${Boost_LIBRARY_DIRS})
        # suppress warnings in boost libraries with attribute SYSTEM
        include_directories(SYSTEM ${Boost_INCLUDE_DIR})
    
        if(JPSFIRE)
            target_link_libraries(core cnpy)
        else()
            target_link_libraries(core)
        endif()
    else()
        message(WARNING did not find BOOST)
    endif()
    
    if (GMP_FOUND)
        message(STATUS "GMP FOUND: " ${GMP_FOUND})
        message(STATUS "GMP_LIBRARY: " ${GMP_LIBRARIES})
        message(STATUS "GMP_INCLUDE_DIR: " ${GMP_INCLUDE_DIR})
        include_directories(SYSTEM ${GMP_INCLUDE_DIR})
    endif()
    
    if (MPFR_FOUND)
        message(STATUS "MPFR FOUND: " ${MPFR_FOUND})
        message(STATUS "MPFR_LIBRARY: " ${MPFR_LIBRARIES})
        message(STATUS "MPFR_INCLUDE_DIR: " ${MPFR_INCLUDE_DIR})
        include_directories(SYSTEM ${MPFR_INCLUDE_DIR})
        #target_link_libraries(jpscore ${MPFR_LIBRARIES})
    endif()
    
    
    if (CGAL_FOUND)
        message(STATUS "CGAL FOUND: " ${CGAL_FOUND})
        message(STATUS "CGAL_LIBRARY_DIRS: " ${CGAL_LIBRARIES_DIR})
        message(STATUS "CGAL_INCLUDE_DIRS: " ${CGAL_INCLUDE_DIRS})
        #message(STATUS "CGAL_LIB_VERSION: " ${CGAL_LIB_VERSION})
        message(STATUS "CGAL_libraries: " ${CGAL_LIBRARY})
        #link_directories(${CGAL_LIBRARIES_DIR})
        #link_directories(${)
        include_directories(SYSTEM ${CGAL_INCLUDE_DIRS})
        #message(STATUS "CGAL_3rdparty" ${CGAL_3RD_PARTY_LIBRARIES})
        #target_link_libraries(jpscore ${CGAL_LIBRARIES})
    endif()
    
    
    target_link_libraries(jpscore core)
    
    if (WIN32)
        target_link_libraries(jpscore core wsock32)
    endif (WIN32)
    
    if(CGAL_FOUND AND GMP_FOUND AND MPFR_FOUND)
        target_link_libraries(jpscore ${GMP_LIBRARIES} ${MPFR_LIBRARIES} ${CGAL_LIBRARY} ${CGAL_3RD_PARTY_LIBRARIES})
    endif()
    
    ##if (JPS_AS_A_SERVICE)
    #find_package(Protobuf REQUIRED)
    #set(GRPC_DIR "${CMAKE_SOURCE_DIR}/cmake_modules/")
    #find_package(GRPC REQUIRED)
    #file(GLOB ProtoFiles "${CMAKE_SOURCE_DIR}/hybrid/*.proto")
    #PROTOBUF_GENERATE_CPP(ProtoSources ProtoHeaders ${ProtoFiles})
    #PROTOBUF_GENERATE_GRPC_CPP(ProtoGRPCSources ProtoGRPCHeaders ${ProtoFiles})
    #
    #include_directories(${CMAKE_CURRENT_BINARY_DIR})
    #set(hybrid_source_files
    #        ${ProtoSources}
    #        ${ProtoGRPCSources}
    #        hybrid/JPSserver.cpp
    #        hybrid/HybridSimulationManager.cpp
    #        hybrid/Latches.cpp
    #        hybrid/GeometryFromProtobufLoader.cpp
    #        hybrid/PedDistributionFromProtobufLoader.cpp
    #        hybrid/IniFromProtobufLoader.cpp
    #        hybrid/IniFileWriter.cpp hybrid/SimObserver.cpp hybrid/SimObserver.h)
    #
    #set(hybrid_header_files
    #        ${ProtoHeaders}
    #        ${ProtoGRPCHeaders}
    #        hybrid/JPSserver.h
    #        hybrid/HybridSimulationManager.h
    #        hybrid/Latches.h
    #        hybrid/GeometryFromProtobufLoader.h
    #        hybrid/PedDistributionFromProtobufLoader.h
    #        hybrid/IniFromProtobufLoader.h
    #        hybrid/IniFileWriter.h)
    #add_library(hybrid STATIC ${hybrid_source_files})
    #target_link_libraries(hybrid grpc++ grpc protobuf dl)
    #target_link_libraries(core hybrid)
    ##endif (JPS_AS_A_SERVICE)
    
    #----------------------------------------------------------------------
    # enable as many warnings as possible
    set(warning_flags "-Wall -Wextra")
    # issue all the warnings demanded by strict iso c and iso c++
    # set(warning_flags "${warning_flags} -pedantic")
    # treat warnings as errors
    #set(warning_flags "${warning_flags} -Werror")
    # definition shadows another
    #set(warning_flags "${warning_flags} -Wshadow")
    # do not issue warnings for system headers
    # set(warning_flags "${warning_flags} -Wno-system-headers")
    # overloaded virtual function has a different signature
    # set(warning_flags "${warning_flags} -Woverloaded-virtual")
    # make string constants const char*
    # set(warning_flags "${warning_flags} -Wwrite-strings")
    #----------------------------------------------------------------------
    #---------------------------- compiler -------------------------------
    # Initialize CXXFLAGS.
    if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${warning_flags}")
        set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${warning_flags} -Wunused-variable -Wunused-parameter -Wunused-function -Wshadow -Wunused -DTRACE_LOGGING")
    #    set(CMAKE_CXX_FLAGS_RELEASE        "${CMAKE_CXX_FLAGS_RELEASE} -O3 -DNDEBUG")
    endif ()
    
    #--------------------
    # if (APPLE AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
    #     SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
    #     SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
    #     SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++")
    #     SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -stdlib=libc++")
    #     SET(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -stdlib=libc++")
    # endif (APPLE AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
    
    # #if (NOT CMAKE_GENERATOR MATCHES "Xcode|Visual Studio")
    # include(CheckCXXCompilerFlag)
    # CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
    # CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
    
    # if (COMPILER_SUPPORTS_CXX11)
    #     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
    # elseif (COMPILER_SUPPORTS_CXX0X)
    #     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
    # else ()
    #     message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
    # endif ()
    #endif ()
    
    
    if (MSVC)
        message(STATUS "MSVC: " ${MSVC})
        #add_compile_options(cnpy PRIVATE "/W4" "WX-")
        set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT /WX-")
        set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd /WX-")
    elseif (MSVC_IDE)
        message(STATUS "MSVC_IDE: " ${MSVC_IDE})
    elseif(MSVC60)
        message(STATUS "MSVC60: " ${MSVC60})
    elseif(MSVC71)
        message(STATUS "MSVC71: " ${MSVC71})
    elseif(MSVC80)
        message(STATUS "MSVC80: " ${MSVC80})
    elseif(MSVC90)
        message(STATUS "MSVC90: " ${MSVC90})
    elseif(MSVC10)
        message(STATUS "MSVC10: " ${MSVC10})
    elseif(MSVC12)
        message(STATUS "MSVC12: " ${MSVC12})
    elseif(MSVC13)
        message(STATUS "MSVC13: " ${MSVC13})
    elseif(MSVC14)
        message(STATUS "MSVC14: " ${MSVC14})
    endif()
    #---------------------
    message(STATUS "C++ Compiler: " ${CMAKE_CXX_COMPILER})
    if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
        message(STATUS "Using Clang " ${CMAKE_CXX_COMPILER_VERSION})
    endif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
    if (CMAKE_COMPILER_IS_GNUCXX)
        message(STATUS "Using g++ " ${CMAKE_CXX_COMPILER_VERSION})
    endif (CMAKE_COMPILER_IS_GNUCXX)
    
    if (CMAKE_BUILD_TYPE MATCHES Debug)
        set(CMAKE_CXX_LDFLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fprofile-arcs -ftest-coverage")
        message(STATUS "Debug flags: " ${CMAKE_CXX_FLAGS} " " ${CMAKE_CXX_FLAGS_DEBUG})
    else (CMAKE_BUILD_TYPE MATCHES Debug)
        message(STATUS "Release flags: " ${CMAKE_CXX_FLAGS} " ,  " ${CMAKE_CXX_FLAGS_RELEASE})
    endif (CMAKE_BUILD_TYPE MATCHES Debug)
    
    # PGI ++ Flags
    # if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "PGI")
    #     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --c++11 -Minform=inform")
    # endif ()
    
    if(WIN32)
      if(MSVC)
        set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT jpscore)
        message(STATUS "set start project for VS")
      endif()
    endif()
    
    # ----------------------------- cTest ------------------------------------------
    if (BUILD_TESTING OR BUILD_CPPUNIT_TEST)
      set(counter "0")
      set(BUILD_TEST_TIMEOUT 10800 CACHE STRING "Global timeout on all tests (seconds).")
      set(DART_TESTING_TIMEOUT "${BUILD_TEST_TIMEOUT}" CACHE STRING "" FORCE)
      message(STATUS "Timeout: " ${BUILD_TEST_TIMEOUT} " s")
      enable_testing() # adds another build target, which is test for Makefile generators
      include(CTest) # adding Dart support
    
      # test if code compiles and runs default setting. Takes about 30 seconds
      if(BUILD_CPPUNIT_TEST)
        foreach (test_src ${test_files})
          MATH(EXPR counter "${counter}+1")
          GET_FILENAME_COMPONENT(test ${test_src} NAME_WE)
          message(STATUS "Add test " ${counter} "  : " ${test})
          add_executable(${test} ${test_src})
          target_link_libraries(${test} core ${Boost_LIBRARIES})
          add_test(NAME ${test} COMMAND ${test})
        endforeach (test_src ${test_files})
      endif()
      # -- new clean geometry tests
      file(GLOB_RECURSE cgeo_inifiles "${CMAKE_TEST_DIR}/test_geometry/clean_geometry/ini*.xml")
      set(ini_counter "0")
      foreach (cgeo-ini ${cgeo_inifiles})
        MATH(EXPR ini_counter "${ini_counter}+1")
        set(testName "test_clean_geometry_${ini_counter}")
        message(STATUS "Add " ${testName})
        add_test(NAME "${testName}" COMMAND jpscore "${cgeo-ini}")
      endforeach()
    
    
    endif (BUILD_TESTING OR BUILD_CPPUNIT_TEST)
    
    if (BUILD_TESTING)
    find_package(PythonInterp)
    if (PYTHONINTERP_FOUND)
    message(STATUS "Found Python: " ${PYTHON_EXECUTABLE})
            foreach (test_src ${test_py_files})
                MATH(EXPR counter "${counter}+1")
                GET_FILENAME_COMPONENT(test ${test_src} NAME_WE)
                message(STATUS "Add py test " ${counter} "  : " ${test})
                # message (STATUS "Add python test: " ${test} " | test_src: " ${PYTHON_EXECUTABLE} " " ${test_src})
                add_test(NAME ${test} COMMAND ${PYTHON_EXECUTABLE} ${test_src})
            endforeach (test_src ${test_py_files})
            # set (test_parameters "${CMAKE_SOURCE_DIR}")
            # add_test(NAME flow  COMMAND "${CMAKE_TEST_DIR}/testflow.py" "${test_parameters}")
        endif (PYTHONINTERP_FOUND)
    endif (BUILD_TESTING)
    
    
    install(TARGETS jpscore
            DESTINATION bin
            COMPONENT applications)
    if(WIN32)
        set(CT_DATA_FILE_DIR "demos")
        file(GLOB CT_FILES "${CMAKE_SOURCE_DIR}/${CT_DATA_FILE_DIR}/*/*")
        install(FILES ${CT_FILES}
                DESTINATION ${CT_DATA_FILE_DIR}
                COMPONENT demos)
    endif()
    # ------------- CPACK ------------------------------
    IF(UNIX)
        SET(CPACK_GENERATOR "DEB")
        SET(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
        SET( CPACK_DEBIAN_PACKAGE_HOMEPAGE "http://jupedsim.org")
        SET(CPACK_DEBIAN_PACKAGE_SUGGESTS, "jpsvis, jpsreport, jpseditor")
        SET(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
        SET(CPACK_DEBIAN_PACKAGE_SECTION "science")
        SET(CPACK_DEBIAN_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR})
    endif()
    if(WIN32 AND NOT UNIX)
        message(STATUS "Package generation - Windows")
        set(CPACK_GENERATOR "NSIS")
        find_program(NSIS_PATH nsis PATH_SUFFIXES nsis)
        if(NSIS_PATH)
            set(CPACK_GENERATOR "${CPACK_GENERATOR};NSIS")
            message(STATUS "   + NSIS                                 YES ")
        else(NSIS_PATH)
            message(STATUS "   + NSIS                                 NO ")
        endif(NSIS_PATH)
    
        #CPACK_NSIS_URL_INFO_ABOUT
        set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP TRUE)
        include(InstallRequiredSystemLibraries)
    
        message(STATUS "System Dependencies: " ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS})
        install(PROGRAMS ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS}
                DESTINATION sys
                COMPONENT applications)
    
        # install(FILES "${Boost_INCLUDE_DIR}/../bin/boost_system-vc141-mt-x32-1_67.dll"
        #         "${Boost_INCLUDE_DIR}/../bin/boost_filesystem-vc141-mt-x32-1_67.dll"
        #         "${Boost_INCLUDE_DIR}/../bin/zlib1.dll"
        #         DESTINATION bin
        #         COMPONENT applications)
    elseif(APPLE)
        set(DEFAULT_CPACK_GENERATOR "DragNDrop")
    endif()
    
    set(CPACK_COMPONENTS_ALL applications)
    set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE")
    set(CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/LICENSE")
    #set(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}\\\\hw.bmp")
    set(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/forms/jpscore.ico")
    set(CPACK_NSIS_MUI_UNIICON "${CMAKE_SOURCE_DIR}/forms/jpscore.ico")
    
    #install(DIRECTORY "${PROJECT_SOURCE_DIR}/demos/" DESTINATION "demos")
    
    
    set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON)
    set(CPACK_NSIS_MODIFY_PATH ON)
    set(CPACK_COMPONENTS_ALL applications demos)
    set(CPACK_COMPONENT_CTDATA_GROUP "Demos")
    set(CPACK_COMPONENT_APPLICATIONS_DISPLAY_NAME "jpscore and dlls")
    set(CPACK_COMPONENT_GROUP_DATA_DESCRIPTION "demo files")
    set(CPACK_COMPONENT_DATA_FILES_DESCRIPTION "demo files to get started")
    SET(CPACK_PACKAGE_DESCRIPTION "Simulation core of JuPedSim")
    SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "The simulation core of JuPedSim, a framework for simulation and analysis of pedestrian dynamics")
    SET(CPACK_PACKAGE_VENDOR "Forschungszentrum Juelich GmbH")
    SET(CPACK_PACKAGE_NAME "jpscore")
    SET(CPACK_PACKAGE_CONTACT "m.chraibi@fz-juelich.de")
    SET(CPACK_PACKAGE_VERSION_MAJOR "${JPSCORE_MAJOR_VERSION}")
    SET(CPACK_PACKAGE_VERSION_MINOR "${JPSCORE_MINOR_VERSION}")
    SET(CPACK_PACKAGE_VERSION_PATCH "${JPSCORE_PATCH_VERSION}")
    SET(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}_${JPSCORE_VERSION}")
    SET(CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}_${JPSCORE_VERSION}")
    
    INCLUDE(CPack)