Select Git revision
CMakeLists.txt
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()