set(SIMPUT_CMAKE_VERSION 3.16)
cmake_minimum_required(VERSION ${SIMPUT_CMAKE_VERSION})

project(simput VERSION 2.7.1)

include(CTest)
include(ExternalProject)
include(GNUInstallDirs)

message(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}")


# Throw an error if CMAKE_INSTALL_PREFIX is not set by the user.
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
    message(FATAL_ERROR "CMAKE_INSTALL_PREFIX not set!\n"
            "Use -DCMAKE_INSTALL_PREFIX=simputdir to specify the SIMPUT installation directory.")
endif()


### Global compiler flags ###
set(GLOBAL_COMPILER_FLAGS
        -g -O2 -D_GNU_SOURCE -Wall -Wextra -Wshadow -Wformat=2 -Wunused -fPIC -Dg77Fortran)
add_library(compiler_flags INTERFACE)
target_compile_features(compiler_flags INTERFACE c_std_99)
target_compile_options(compiler_flags INTERFACE
        $<BUILD_INTERFACE:${GLOBAL_COMPILER_FLAGS}>)


### External packages ###
set(EXT_INCLUDE_DIRS)
set(EXT_LIBRARY_DIRS)
set(EXT_LIBRARIES)

# CURSES
set(CURSES_NEED_NCURSES TRUE)
find_package(Curses REQUIRED)
list(APPEND EXT_INCLUDE_DIRS ${CURSES_INCLUDE_DIRS})
list(APPEND EXT_LIBRARIES ${CURSES_LIBRARIES})
message(STATUS "Using CURSES_INCLUDE_DIRS at ${CURSES_INCLUDE_DIRS}")
message(STATUS "Using CURSES_LIBRARIES at ${CURSES_LIBRARIES}")

# SIMPUT extlibs
list(APPEND EXT_INCLUDE_DIRS
        ${CMAKE_SOURCE_DIR}/extlib/cfitsio
        ${CMAKE_SOURCE_DIR}/extlib/fftw/api
        ${CMAKE_SOURCE_DIR}/extlib/wcslib/C
        ${CMAKE_SOURCE_DIR}/extlib/ape/include)
list(APPEND EXT_LIBRARY_DIRS ${CMAKE_SOURCE_DIR}/extlib/wcslib/C)
list(APPEND EXT_LIBRARIES
        ape_simput atFunctions_simput cfitsio_simput fftw3_simput heainit_simput
        heaio_simput heasp_simput heautils_simput wcs_simput)

# Additional libraries
list(APPEND EXT_LIBRARIES m)


### Configured header file ###
configure_file(simputconfig.h.in simputconfig.h)
install(FILES "${PROJECT_BINARY_DIR}/simputconfig.h" DESTINATION include)


### Install simput-install.sh/csh scripts ###
configure_file(simput-install.sh.in simput-install.sh @ONLY)
configure_file(simput-install.csh.in simput-install.csh @ONLY)
install(FILES "${PROJECT_BINARY_DIR}/simput-install.sh"
              "${PROJECT_BINARY_DIR}/simput-install.csh"
        DESTINATION ${CMAKE_INSTALL_BINDIR})

# manually add libraries to RPATH -- fixes some MacOS issues
list( APPEND CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR})

### Project subdirectories ###
add_subdirectory(extlib)
add_subdirectory(libsimput)
add_subdirectory(tools)
add_subdirectory(test/tests)


# TODO: Do we still need mac_solve_simput_dependencies.sh?


### Packaging ###
set(CPACK_SOURCE_IGNORE_FILES
        /\\\\.gitignore$ /\\\\.idea/ /\\\\.git/ /\\\\.gitlab-ci.yml$
        /\\\\.gitmodules$ /\\\\.tags$ /\\\\.tags1$
        /build/ /cmake-build-debug/ /install/ /output/
        /extlib/wcslib/C/.*\.o$
        /extlib/wcslib/C/libwcs.*
        /extlib/wcslib/C/fitshdr.c
        /extlib/wcslib/C/wcsbth.c
        /extlib/wcslib/C/wcspih.c
        /extlib/wcslib/C/wcsulex.c
        /extlib/wcslib/C/wcsutrn.c
        /extlib/wcslib/C/lib.lock
        /extlib/wcslib/Fortran/.*\.o$
        /extlib/wcslib/utils/tofits.dSYM
        /extlib/wcslib/utils/HPXcvt$
	/extlib/wcslib/utils/wcsgrid$
	/extlib/wcslib/utils/wcsware$
        /extlib/wcslib/pgsbox/libpgsbox-7.7_simput.*
	/extlib/wcslib/pgsbox/libpgsbox-PIC.*
        /extlib/wcslib/autom4te.cache
        /extlib/wcslib/configure$
        /extlib/wcslib/config.log
        /extlib/wcslib/config.status
        /extlib/wcslib/makedefs$
        /extlib/wcslib/wcsconfig.h.in
        /extlib/wcslib/utils/fitshdr$
        /extlib/wcslib/utils/sundazel$
        /extlib/wcslib/utils/tofits$
        /extlib/wcslib/wcsconfig.h$
        /extlib/wcslib/wcsconfig_f77.h$
        /extlib/wcslib/wcsconfig_tests.h$
        /extlib/wcslib/wcsconfig_utils.h$
        /extlib/wcslib/wcslib.pc$)

set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${CMAKE_PROJECT_VERSION}")
set(CPACK_SOURCE_GENERATOR "TGZ")
include(CPack)
