Skip to content
Snippets Groups Projects
Select Git revision
  • 0764662d61121fb1502ed5ebfb5105cd1f41a145
  • main default protected
  • Kelvinrr-patch-3
  • radius_update
  • revert-616-apollo_pan
  • vims
  • 0.10
  • Kelvinrr-patch-2
  • revert-563-minirf_fix
  • Kelvinrr-patch-1
  • 0.9
  • acpaquette-patch-3
  • acpaquette-patch-2
  • acpaquette-patch-1
  • spiceql
  • ci-coverage
  • 0.10.0
  • 0.9.1
  • 0.9.0
  • 0.8.7
  • 0.8.8
  • 0.8.6
  • 0.8.3
  • 0.8.4
  • 0.8.5
  • 0.8.2
  • 0.8.1
  • 0.8.0
  • 0.7.3
  • 0.7.2
  • 0.7.1
  • 0.7.0
  • 0.6.5
  • 0.6.4
  • 0.6.3
  • 0.6.2
36 results

Distortion.h

Blame
  • CMakeLists.txt 25.95 KiB
    #===============================================================================
    #      The main build file for building ISIS using CMake.
    #===============================================================================
    # CMake initialization
    
    # Specify the required version of CMake.  If your machine does not
    #  have this, it should be easy to build from https://cmake.org/download/
    cmake_minimum_required(VERSION 3.10)
    
    # Point cmake to our other CMake files.
    list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
    
    set(CMAKE_FRAMEWORK_PATH /System/Library/Frameworks/)
    set(CMAKE_FIND_FRAMEWORK LAST)
    
    # Enable use of @rpath on Mac
    set(CMAKE_MACOSX_RPATH 1)
    
    include(AddIsisModule)
    include(Utilities)
    include(TestSetup)
    include(InstallThirdParty)
    
    include(CMakePrintHelpers)
    
    #===============================================================================
    #===============================================================================
    # Project information
    
    project (USGS_ISIS)
    
    # Short and long name of this package
    set(PACKAGE            "ISIS")
    set(PACKAGE_NAME       "USGS ISIS")
    
    # Version number
    set(VERSION            "8.3.0")
    string(REPLACE "." ";" VERSION_LIST ${VERSION})
    list(GET VERSION_LIST 0 VERSION_MAJOR)
    list(GET VERSION_LIST 1 VERSION_MINOR)
    
    set(PACKAGE_VERSION    ${VERSION})
    
    # Full name and version number
    set(PACKAGE_STRING     "${PACKAGE_NAME} ${VERSION}")
    
    # Other release information
    string(TIMESTAMP VERSION_DATE "%Y-%m-%d" UTC)
    set(RELEASE_STAGE             "stable") # (alpha, beta, stable)
    
    # Define to the address where bug reports for this package should be sent.
    set(PACKAGE_BUGREPORT  "https://github.com/USGS-Astrogeology/ISIS3/issues")
    
    # Main website associated with the software package
    set(PACKAGE_URL        "https://isis.astrogeology.usgs.gov/")
    
    # Retrieve a string describing the OS this is built on.
    get_os_version(osVersionString)
    message("Detected Operating System: ${osVersionString}")
    
    #===============================================================================
    #===============================================================================
    # Configuration options
    
    # make sure to leave rpaths untouched on install
    set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
    
    # Specify user options that can be passed in with the initial CMake command.
    option(isisData        "Directory containing IsisData"                  OFF )
    option(isisTestData    "Directory containing IsisTestData"              OFF )
    option(testOutputDir   "Directory to store app test output folders"     OFF )
    option(buildCore       "Build the core ISIS modules"                    ON  )
    option(buildMissions   "Build the mission specific modules"             ON  )
    option(buildStaticCore "Build libisis static as well as dynamic"        OFF )
    option(buildTests      "Set up unit, application, and module tests."    ON  )
    option(JP2KFLAG        "Whether or not to build using JPEG2000 support" OFF )
    option(pybindings      "Turn on to build Python bindings"               ON )
    
    # if cmake install prefix is not set, and conda env is activated, use the
    # conda env as the install directory.
    if(DEFINED ENV{CONDA_PREFIX} AND CMAKE_INSTALL_PREFIX STREQUAL "/usr/local")
     set(CMAKE_INSTALL_PREFIX $ENV{CONDA_PREFIX})
    endif()
    
    # Prioritize passed in variables over env vars, probably a better way to do this
    if(DEFINED ENV{ISISDATA} AND NOT isisData)
     set(isisData $ENV{ISISDATA})
    endif()
    if(DEFINED ENV{ISISTESTDATA} AND NOT isisTestData)
     set(isisTestData $ENV{ISISTESTDATA})
    endif()
    
    if(EXISTS ${isisData})
     set(ENV{ISISDATA} "${isisData}")
    else()
     message(WARNING "Isis Data directory ${isisData} not found, unit tests will fail.")
     set(isisData OFF)
    endif()
    
    if(EXISTS ${isisTestData})
     set(ENV{ISISTESTDATA} "${isisTestData}")
    else()
     message(WARNING "IsisTestData directory ${isisTestData} not found, application and module tests will fail.")
     set(isisTestData OFF)
    endif()
    
    if(${testOutputDir} STREQUAL "OFF")
     message("Writing test data folders to = ${CMAKE_BINARY_DIR}/testOutputDir")
     set(testOutputDir "${CMAKE_BINARY_DIR}/testOutputDir")
     execute_process(COMMAND mkdir -p ${CMAKE_BINARY_DIR}/testOutputDir)
    else()
     # User specified a test output folder, make sure it exists.
     message("Writing test data folders to = ${testOutputDir}")
     execute_process(COMMAND mkdir -p ${testOutputDir})
    endif()
    
    # inject ISISROOT
    add_definitions( -DISISROOT="${CMAKE_SOURCE_DIR}" )
    add_definitions( -DISISBUILDDIR="${CMAKE_BINARY_DIR}" )
    
    message("CONFIGURATION")
    message("\tBUILD STATIC CORE: ${buildStaticCore}")
    message("\tBUILD TESTS: ${buildTests}")
    message("\tBUILD CORE: ${buildCore}")
    message("\tBUILD MISSIONS: ${buildMissions}")
    message("\tJP2K SUPPORT: ${JP2KFLAG}")
    message("\tPYTHON BINDINGS: ${pybindings}")
    message("\tISISDATA: ${isisData}")
    message("\tISISTESTDATA: ${isisTestData}")
    message("\tTEST OUTPUT DIR: ${testOutputDir}")
    message("\tINSTALL PREFIX: ${CMAKE_INSTALL_PREFIX}")
    
    #===============================================================================
    #===============================================================================
    
    # Set up Anaconda prefix in the case with a non-default conda env is activated
    if(EXISTS $ENV{CONDA_PREFIX})
      message("CONDA PREFIX: $ENV{CONDA_PREFIX}")
      list(APPEND CMAKE_FIND_ROOT_PATH $ENV{CONDA_PREFIX}
                                       $ENV{CONDA_PREFIX}/lib/cmake/Qt5)
    endif()
    
    # options only allow on/off but this flag is piped into ISIS as ENABLEJP2K
    # needs to be either 1 or 0 for C style true false
    if(JP2KFLAG)
     set(JP2KFLAG 1)
    endif()
    
    if(buildTests)
      include(CTest)
      enable_testing()
    endif()
    
    
    # Specify flags used
    # on linux, add the conda prefix to handle possible issues with rpaths at link time
    # sometimes third parties do not set their rpaths correctly
    set(thirdPartyCppFlags -Wall
                           -fPIC
                           -std=c++17
                           -DISIS_LITTLE_ENDIAN=1
                           -Wno-unused-parameter
                           -Wno-overloaded-virtual
                           -Wno-strict-aliasing
                           -DUSE_UNSTABLE_GEOS_CPP_API=1
                           -Wno-strict-overflow
                           -DENABLEJP2K=${JP2KFLAG}
                         )
    
    set(CMAKE_CXX_STANDARD 17)
    
    # Append CPP flags set in the third party lib file to the string set in this file.
    string(REPLACE ";" " " FLAGS_STR "${thirdPartyCppFlags}")
    
    set(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} ${FLAGS_STR}" )
    
    
    # Flag to fix numeric literals problem with boost on linux
    # Add gold linker (and therefore, phtread) to speed up linux (spec. Ubuntu18.04) builds
    if(NOT APPLE)
      set(thirdPartyCppFlags ${thirdPartyCppFlags} -fuse-ld=gold
    	                                             -pthread
    					                                     -fext-numeric-literals
                                                   -Wl,-rpath,$ENV{CONDA_PREFIX}/lib)
    endif()
    
    # Append CPP flags set in the third party lib file to the string set in this file.
    string(REPLACE ";" " " FLAGS_STR "${thirdPartyCppFlags}")
    set(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} ${FLAGS_STR}" )
    
    if(NOT CMAKE_BUILD_TYPE)
       set(CMAKE_BUILD_TYPE "RELEASE")
    endif()
    
    if(APPLE)
      set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -O0")
    else()
      set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -Og")
    endif()
    
    # Paths to required executables
    find_program(XALAN Xalan REQUIRED)
    find_program(LATEX latex)
    find_program(DOXYGEN NAME doxygen PATH_SUFFIXES doxygen REQUIRED)
    find_program(UIC uic REQUIRED)
    find_program(MOC moc REQUIRED)
    find_program(RCC rcc REQUIRED)
    find_program(PROTOC protoc REQUIRED)
    
    find_package(Qt5 COMPONENTS
                    Core
                    Concurrent
                    Gui
                    Multimedia
                    MultimediaWidgets
                    Network
                    OpenGL # Needed to install mesa-common-dev for this!
                    PrintSupport
                    Qml
                    Quick
                    Script
                    ScriptTools
                    Sql
                    Svg
                    Test
                    WebChannel
                    Widgets
                    Xml
                    XmlPatterns
                    # Search this path explicitly for MacOS OpenGL Framework
                    PATHS /System/Library/Frameworks/ REQUIRED)
    
    find_package(Boost 1.59.0 REQUIRED atomic
                                            log
                                            regex
                                            log_setup
                                            serialization
                                            chrono
                                            math_c99
                                            container
                                            math_c99f
                                            context
                                            math_c99l
                                            system
                                            math_tr1
                                            math_tr1f
                                            math_tr1l
                                            test_exec_monitor
                                            date_time
                                            thread
                                            exception
                                            timer
                                            filesystem
                                            prg_exec_monitor
                                            program_options
                                            unit_test_framework
                                            iostreams
                                            wave
                                            random
                                            wserialization)
    
    find_package(Ale               REQUIRED)
    find_package(Json              REQUIRED)
    find_package(Bullet    2.86    REQUIRED)
    find_package(Cholmod   4.4.5   REQUIRED)
    find_package(CSM       3.0.3.3 REQUIRED)
    find_package(CSPICE    65      REQUIRED)
    find_package(Eigen             REQUIRED)
    find_package(Embree    3.13.0  REQUIRED)
    find_package(GeoTIFF   2       REQUIRED)
    SET(GSL_ROOT_DIR $ENV{CONDA_PREFIX})
    find_package(GSL       2.2.1   REQUIRED)
    find_package(HDF5      1.8.15  REQUIRED)
    find_package(Jama      125     REQUIRED)
    find_package(NN                REQUIRED)
    find_package(OpenCV    3.1.0   REQUIRED)
    find_package(PCL               REQUIRED)
    find_package(Protobuf          REQUIRED)
    find_package(Qwt       6       REQUIRED)
    find_package(SuperLU   4.3     REQUIRED)
    find_package(TIFF      4.0.0   REQUIRED)
    find_package(TNT       126     REQUIRED)
    find_package(XercesC   3.1.2   REQUIRED)
    find_package(X11       6       REQUIRED)
    find_package(nanoflann         REQUIRED)
    find_package(PNG               REQUIRED)
    find_package(Kakadu)
    find_package(Geos    3.5.0     REQUIRED)
    find_package(Armadillo         REQUIRED)
    find_package(Threads)
    find_package(inja              REQUIRED)
    
    # Setup for googletest/googlemock before adding SensorUtilities so we build its tests
    if(buildTests)
      set(INSTALL_GTEST OFF)
      add_subdirectory(../gtest gtest)
    else()
      set(SENSOR_UTILITIES_BUILD_TESTS OFF CACHE BOOL "Disable SensorUtilities Tests")
    endif()
    
    
    # All libraries are build as shared.  The main library is also built
    #  as a static library using some specialized code in Utilities.cmake.
    set(BUILD_SHARED_LIBS ON)
    
    add_subdirectory(../SensorUtilities SensorUtilities)
    
    # In this case, we specify the version numbers being searched for in the non-traditional installs.
    if(APPLE)
      find_package(OpenGL REQUIRED)
    endif(APPLE)
    
    # Iterate through all variables and extract the libraries and include directories
    get_cmake_property(_variableNames VARIABLES) # Get All VARIABLES
    
    set(ALLLIBDIRS "")
    set(ALLLIBS "")
    set(ALLINCDIRS "")
    
    # Get all include dir variables
    foreach (_variableName ${_variableNames})
      if (_variableName MATCHES ".+_INCLUDE_DIR$")
        list(APPEND ALLINCDIRS "${${_variableName}}")
      elseif (_variableName MATCHES ".+_INCLUDE_PATH$")
        list(APPEND ALLINCDIRS "${${_variableName}}")
      endif()
    endforeach()
    
    # get all Library variables
    foreach (_variableName ${_variableNames})
      get_filename_component(LIBDIR "${${_variableName}}" DIRECTORY)
      get_filename_component(LIBNAME "${${_variableName}}" NAME)
    
      if (_variableName MATCHES "^CMAKE+")
      elseif (_variableName MATCHES ".+_LIBRARY$|.+_LIBRARIES")
        foreach(ITEM IN LISTS ${_variableName})
          get_filename_component(LIBDIR ${ITEM} DIRECTORY)
          get_filename_component(LIBNAME ${ITEM} NAME)
          # Some library dependencies identified by the find_package commands are not
          # libraries (i.e., *.so,*.dylib,*.a) or name spaces (e.g., Qt5::Xml).
          # Remove the ones that are not libraries or name spaces  (e.g., OPENGL.framework).
          if(LIBNAME MATCHES ".+\.so$|.+\.dylib$|.+\.a$|.+::.+$|.+\.SO$|.+\.DYLIB$|.+\.A$")
            # For MacOS, .so's are not the same as .dylib's, need to add the full path to the .so
            if((APPLE) AND (LIBNAME MATCHES ".+\.so$|.+\.SO"))
              list(APPEND ALLLIBS "${ITEM}")
            else()
              list(APPEND ALLLIBDIRS ${LIBDIR})
              list(APPEND ALLLIBS ${LIBNAME})
            endif()
          endif()
        endforeach()
      endif()
    endforeach()
    
    # add target based linkages to ALLLIBS variable
    list(APPEND ALLLIBS pantor::inja sensorutilities protobuf::libprotobuf embree)
    
    # Sometimes we add the same lib more than once (especially with LIBDIRS)
    list(REMOVE_DUPLICATES ALLLIBDIRS)
    list(REMOVE_DUPLICATES ALLLIBS)
    list(REMOVE_DUPLICATES ALLINCDIRS)
    
    #===============================================================================
    #===============================================================================
    
    # Start setting up the build
    # Add extension to find fortran until .so symlink can be added to /usr/lib64
    list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES .so.3 .so.6 .so.5)
    
    # Allow everything to include the 3rd party libraries
    include_directories(SYSTEM ${ALLINCDIRS})
    link_directories(${ALLLIBDIRS})
    
    include_directories(${CMAKE_BINARY_DIR}/inc)
    set(CORE_LIB_NAME isis)
    message(STATUS "CORE LIB:  ${CORE_LIB_NAME}")
    
    if(pybindings)
     add_subdirectory(python_bindings)
    endif()
    
    # Specify relative library include paths which will be set up on
    #  the installed files.
    if(APPLE)
      set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH};@loader_path/../lib;@loader_path/../3rdParty/lib")
    else()
      set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH};$ORIGIN/../lib;$ORIGIN/../3rdParty/lib")
    endif()
    
    # We will set up some links with these files at the end of the install process so
    #  make sure they are cleared at the start of the install process.
    install(CODE "EXECUTE_PROCESS(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/libisis${VERSION}${SO})")
    install(CODE "EXECUTE_PROCESS(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/libisis${VERSION_MAJOR}.${VERSION_MINOR}${SO})")
    install(CODE "EXECUTE_PROCESS(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/libisis${VERSION_MAJOR}${SO})")
    EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/TestPreferences ${CMAKE_BINARY_DIR}/)
    install(CODE "EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/IsisPreferences ${CMAKE_INSTALL_PREFIX}/)")
    
    # Install the header files
    install(CODE "EXECUTE_PROCESS(COMMAND mkdir -p ${CMAKE_INSTALL_PREFIX}/include/isis)")
    file(GLOB ISIS_INCLUDE_FILES ${CMAKE_BINARY_DIR}/inc/*)
    install(DIRECTORY ${CMAKE_BINARY_DIR}/inc/ DESTINATION  ${CMAKE_INSTALL_PREFIX}/include/isis)
    
    # Delete any existing plugin files in the build folder so they
    #  don't get filled with duplicate entries.
    file(GLOB existingPlugins "${CMAKE_BINARY_DIR}/plugins/*.plugin")
    if(existingPlugins)
      file(REMOVE ${existingPlugins})
    endif()
    
    # Add a config file to the install bin directory so that QT can find the plugin libraries.
    file(WRITE "${CMAKE_BINARY_DIR}/qt.conf" "[Paths]\nPlugins=../3rdParty/plugins/\n")
    install(FILES "${CMAKE_BINARY_DIR}/qt.conf" DESTINATION ${CMAKE_INSTALL_PREFIX}/bin/xml)
    
    # Create the inc directory
    execute_process(COMMAND mkdir -p ${CMAKE_BINARY_DIR}/inc)
    
    # Create an xml folder in the source directory that we will need later
    set(sourceXmlFolder ${CMAKE_BINARY_DIR}/bin/xml)
    execute_process(COMMAND mkdir -p ${CMAKE_BINARY_DIR}/bin/xml)
    
    # Create the version file
    configure_file(${CMAKE_SOURCE_DIR}/cmake/version.in ${CMAKE_BINARY_DIR}/isis_version.txt)
    
    # Set up install of the make folder.
    install(DIRECTORY ${CMAKE_SOURCE_DIR}/make DESTINATION ${CMAKE_INSTALL_PREFIX})
    
    # Set up install of appdata folder
    install(DIRECTORY ${CMAKE_BINARY_DIR}/appdata DESTINATION ${CMAKE_INSTALL_PREFIX})
    
    # Create the appdata directory with translations directory, images directory, templates directories
    file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/appdata/translations
                        ${CMAKE_BINARY_DIR}/appdata/templates/apollo
                        ${CMAKE_BINARY_DIR}/appdata/templates/autoseed
                        ${CMAKE_BINARY_DIR}/appdata/templates/autoreg
                        ${CMAKE_BINARY_DIR}/appdata/templates/noproj
                        ${CMAKE_BINARY_DIR}/appdata/templates/cnetref
                        ${CMAKE_BINARY_DIR}/appdata/templates/cnetstats
                        ${CMAKE_BINARY_DIR}/appdata/templates/cnet_validmeasure
                        ${CMAKE_BINARY_DIR}/appdata/templates/controlnetworks
                        ${CMAKE_BINARY_DIR}/appdata/export
                        ${CMAKE_BINARY_DIR}/appdata/templates/hidtmgen
                        ${CMAKE_BINARY_DIR}/appdata/import
                        ${CMAKE_BINARY_DIR}/appdata/templates/findfeatures
                        ${CMAKE_BINARY_DIR}/appdata/templates/fullcnetdiff
                        ${CMAKE_BINARY_DIR}/appdata/templates/jigsaw
                        ${CMAKE_BINARY_DIR}/appdata/templates/kernels
                        ${CMAKE_BINARY_DIR}/appdata/templates/labels
                        ${CMAKE_BINARY_DIR}/appdata/templates/maps
                        ${CMAKE_BINARY_DIR}/appdata/templates/photometry
                        ${CMAKE_BINARY_DIR}/appdata/images/icons
                        ${CMAKE_BINARY_DIR}/appdata/images/targets)
    
    
    # Have CMake process all of the source code and tests.
    add_subdirectory(src objects)
    
    if(APPLE)
     set(SO ".dylib")
    else()
     set(SO ".so")
    endif()
    
    # Set up documentation build target.
    # - This script is called by running "ninja docs".
    # - This long call passes all desired variables to the script.
    add_custom_target(docs COMMAND ${CMAKE_COMMAND}
                      -DPROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR}
                      -DDOXYGEN=${DOXYGEN}  -DXALAN=${XALAN}
                      -DLATEX=${LATEX}
                      -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
                      -DPACKAGE_VERSION=${PACKAGE_VERSION}
                      -P ${CMAKE_MODULE_PATH}/BuildDocs.cmake)
    
    # Add custom build target to copy modified header files to the build/incs directory.
    # ALL is specified so that the target is added to the default build target, i.e. the copy command
    # will be executed when running "ninja install"
    # On a clean build, all files will be copied over.
    add_custom_target(incs ALL COMMAND ${CMAKE_COMMAND} -E copy_if_different
      ${CMAKE_SOURCE_DIR}/src/*/objs/*/*.h ${CMAKE_SOURCE_DIR}/src/*/objs/*/*.hpp
      ${CMAKE_SOURCE_DIR}/src/*/apps/*/*.h ${CMAKE_BINARY_DIR}/inc)
    add_dependencies(isis incs)
    
    # Add custom build target to copy modified translation files to the build/appdata/translations
    ## directory.
    add_custom_target(appdata ALL COMMAND ${CMAKE_COMMAND} -E copy_if_different
      ${CMAKE_SOURCE_DIR}/appdata/serialnumbers/*.trn ${CMAKE_SOURCE_DIR}/appdata/translations/*.trn
      ${CMAKE_SOURCE_DIR}/appdata/translations/*.typ ${CMAKE_SOURCE_DIR}/src/*/apps/*/*.typ
      ${CMAKE_SOURCE_DIR}/src/*/apps/*/*.trn  ${CMAKE_SOURCE_DIR}/src/*/apps/*/*.pft
      ${CMAKE_SOURCE_DIR}/src/*/apps/*/*.def ${CMAKE_SOURCE_DIR}/appdata/translations/*.def
      ${CMAKE_SOURCE_DIR}/appdata/translations/*.pvl
      ${CMAKE_BINARY_DIR}/appdata/translations)
    add_dependencies(isis appdata)
    
    # Add custom build targets to copy modified template files to build/appdata/templates
    add_custom_target(apollotemplate ALL COMMAND ${CMAKE_COMMAND} -E copy_if_different
      ${CMAKE_SOURCE_DIR}/src/*/templates/*.def ${CMAKE_BINARY_DIR}/appdata/templates/apollo/)
    add_dependencies(isis apollotemplate)
    
    add_custom_target(autoreg ALL COMMAND ${CMAKE_COMMAND} -E copy_if_different
      ${CMAKE_SOURCE_DIR}/appdata/templates/autoreg/* ${CMAKE_BINARY_DIR}/appdata/templates/autoreg/)
    add_dependencies(isis autoreg)
    
    add_custom_target(autoseed ALL COMMAND ${CMAKE_COMMAND} -E copy_if_different
      ${CMAKE_SOURCE_DIR}/appdata/templates/autoseed/* ${CMAKE_BINARY_DIR}/appdata/templates/autoseed/)
    
    add_custom_target(noproj ALL COMMAND ${CMAKE_COMMAND} -E copy_if_different
      ${CMAKE_SOURCE_DIR}/appdata/templates/noproj/* ${CMAKE_BINARY_DIR}/appdata/templates/noproj/)
    add_dependencies(isis noproj)
    
    add_custom_target(cnetref ALL COMMAND ${CMAKE_COMMAND} -E copy_if_different
      ${CMAKE_SOURCE_DIR}/appdata/templates/cnetref/* ${CMAKE_BINARY_DIR}/appdata/templates/cnetref/)
    add_dependencies(isis cnetref)
    
    add_custom_target(cnetstats ALL COMMAND ${CMAKE_COMMAND} -E copy_if_different
      ${CMAKE_SOURCE_DIR}/appdata/templates/cnetstats/* ${CMAKE_BINARY_DIR}/appdata/templates/cnetstats/)
    add_dependencies(isis cnetstats)
    
    add_custom_target(cnetvalid ALL COMMAND ${CMAKE_COMMAND} -E copy_if_different
      ${CMAKE_SOURCE_DIR}/appdata/templates/cnet_validmeasure/* ${CMAKE_BINARY_DIR}/appdata/templates/cnet_validmeasure/)
    add_dependencies(isis cnetvalid)
    
    add_custom_target(controlnetworks ALL COMMAND ${CMAKE_COMMAND} -E copy_if_different
      ${CMAKE_SOURCE_DIR}/appdata/templates/controlnetworks/* ${CMAKE_BINARY_DIR}/appdata/templates/controlnetworks/)
    add_dependencies(isis controlnetworks)
    
    add_custom_target(findfeatures ALL COMMAND ${CMAKE_COMMAND} -E copy_if_different
      ${CMAKE_SOURCE_DIR}/appdata/templates/findfeatures/* ${CMAKE_BINARY_DIR}/appdata/templates/findfeatures/)
    add_dependencies(isis findfeatures)
    
    add_custom_target(fullcnetdiff ALL COMMAND ${CMAKE_COMMAND} -E copy_if_different
      ${CMAKE_SOURCE_DIR}/appdata/templates/fullcnetdiff/* ${CMAKE_BINARY_DIR}/appdata/templates/fullcnetdiff/)
    add_dependencies(isis fullcnetdiff)
    
    add_custom_target(jigsaw ALL COMMAND ${CMAKE_COMMAND} -E copy_if_different
      ${CMAKE_SOURCE_DIR}/appdata/templates/jigsaw/* ${CMAKE_BINARY_DIR}/appdata/templates/jigsaw/)
    add_dependencies(isis jigsaw)
    
    add_custom_target(kernels ALL COMMAND ${CMAKE_COMMAND} -E copy_if_different
      ${CMAKE_SOURCE_DIR}/appdata/templates/kernels/* ${CMAKE_BINARY_DIR}/appdata/templates/kernels/)
    add_dependencies(isis kernels)
    
    add_custom_target(photometry ALL COMMAND ${CMAKE_COMMAND} -E copy_if_different
      ${CMAKE_SOURCE_DIR}/appdata/templates/photometry/* ${CMAKE_BINARY_DIR}/appdata/templates/photometry/)
    add_dependencies(isis photometry)
    
    add_custom_target(icons ALL COMMAND ${CMAKE_COMMAND} -E copy_directory
      ${CMAKE_SOURCE_DIR}/appdata/images/icons/ ${CMAKE_BINARY_DIR}/appdata/images/icons/)
    add_dependencies(isis icons)
    
    add_custom_target(targets ALL COMMAND ${CMAKE_COMMAND} -E copy_if_different
      ${CMAKE_SOURCE_DIR}/appdata/images/targets/* ${CMAKE_BINARY_DIR}/appdata/images/targets/)
    add_dependencies(isis targets)
    
    add_custom_target(maps ALL COMMAND ${CMAKE_COMMAND} -E copy_if_different
      ${CMAKE_SOURCE_DIR}/appdata/templates/maps/* ${CMAKE_BINARY_DIR}/appdata/templates/maps/)
    add_dependencies(isis maps)
    
    add_custom_target(labels ALL COMMAND ${CMAKE_COMMAND} -E copy_if_different
      ${CMAKE_SOURCE_DIR}/appdata/templates/labels/* ${CMAKE_BINARY_DIR}/appdata/templates/labels/)
    add_dependencies(isis labels)
    
    add_custom_target(hidtmgen ALL COMMAND ${CMAKE_COMMAND} -E copy_if_different
      ${CMAKE_SOURCE_DIR}/appdata/templates/hidtmgen/* ${CMAKE_BINARY_DIR}/appdata/templates/hidtmgen/)
    add_dependencies(isis hidtmgen)
    
    add_custom_target(import ALL COMMAND ${CMAKE_COMMAND} -E copy_directory
      ${CMAKE_SOURCE_DIR}/appdata/import/ ${CMAKE_BINARY_DIR}/appdata/import/)
    add_dependencies(isis import)
    
    add_custom_target(export ALL COMMAND ${CMAKE_COMMAND} -E copy_if_different
      ${CMAKE_SOURCE_DIR}/appdata/export/* ${CMAKE_BINARY_DIR}/appdata/export/)
    add_dependencies(isis export)
    
    # Create the updateBuildPlugins.sh.in file
    configure_file(${CMAKE_SOURCE_DIR}/cmake/updateBuildPlugins.sh.in ${CMAKE_BINARY_DIR}/scripts/updateBuildPlugins.sh)
    
    # Add custom build target to copy modified Camera.plugin files to the build/lib/Camera.plugin file
    add_custom_target(cameraPlugins ALL COMMAND ${CMAKE_BINARY_DIR}/scripts/updateBuildPlugins.sh)
    add_dependencies(isis cameraPlugins)
    
    # Add a custom build target to clean out everything that gets added to the source
    #  directory during the build process.
    # - Only a few things are added in order to make the tests work properly so
    #   this is very straightforward.
    add_custom_target(clean_source COMMAND rm -rf "${CMAKE_BINARY_DIR}/*" "${CMAKE_INSTALL_PREFIX}/*")
    
    # Set up a few top level files for installation.
    EXECUTE_PROCESS(COMMAND cp -f  ${CMAKE_SOURCE_DIR}/IsisPreferences   ${CMAKE_BINARY_DIR})
    EXECUTE_PROCESS(COMMAND cp -rf ${CMAKE_SOURCE_DIR}/scripts           ${CMAKE_BINARY_DIR})
    EXECUTE_PROCESS(COMMAND cp -f  ${CMAKE_SOURCE_DIR}/../LICENSE.md    ${CMAKE_BINARY_DIR})
    EXECUTE_PROCESS(COMMAND cp -rf ${CMAKE_SOURCE_DIR}/make              ${CMAKE_BINARY_DIR})
    
    # Copy the files on make install as well
    install(FILES     ${CMAKE_SOURCE_DIR}/IsisPreferences DESTINATION  ${CMAKE_INSTALL_PREFIX})
    install(FILES     ${CMAKE_SOURCE_DIR}/../LICENSE.md   DESTINATION  ${CMAKE_INSTALL_PREFIX})
    install(FILES     ${CMAKE_SOURCE_DIR}/../AUTHORS.rst  DESTINATION  ${CMAKE_INSTALL_PREFIX})
    install(FILES     ${CMAKE_SOURCE_DIR}/../CHANGELOG.md DESTINATION  ${CMAKE_INSTALL_PREFIX})
    install(FILES     ${CMAKE_BINARY_DIR}/isis_version.txt DESTINATION  ${CMAKE_INSTALL_PREFIX})
    install(DIRECTORY ${CMAKE_SOURCE_DIR}/scripts         DESTINATION  ${CMAKE_INSTALL_PREFIX})
    install(PROGRAMS ${CMAKE_BINARY_DIR}/lib/Camera.plugin DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/)
    install(PROGRAMS ${CMAKE_SOURCE_DIR}/scripts/downloadIsisData DESTINATION ${CMAKE_INSTALL_PREFIX}/bin/)
    install(FILES ${CMAKE_SOURCE_DIR}/config/rclone.conf DESTINATION ${CMAKE_INSTALL_PREFIX}/etc/isis/)
    install(FILES ${CMAKE_SOURCE_DIR}/src/system/apps/isisdataeval/tools/isisdata_mockup
                  PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
                  DESTINATION ${CMAKE_INSTALL_PREFIX}/bin/)
    
    # Trigger all post-install behavior.
    # - The only way to run commands post-install in CMake is to add a subdirectory at
    #   the end of this file containing a CMakeLists.txt file which includes all of
    #   the desired post-install commands inside.
    add_subdirectory(cmake)
    
    if(buildTests)
      add_subdirectory(tests)
    endif()