CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(Nccmp)
ENABLE_LANGUAGE(C)

SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/")

INCLUDE(CheckIncludeFiles)
CHECK_INCLUDE_FILES(errno.h     HAVE_ERRNO_H) 
CHECK_INCLUDE_FILES(fcntl.h     HAVE_FCNTL_H)
CHECK_INCLUDE_FILES(getopt.h    HAVE_GETOPT_H)
CHECK_INCLUDE_FILES(inttypes.h  HAVE_INTTYPES_H)
CHECK_INCLUDE_FILES(limits.h    HAVE_LIMITS_H)
CHECK_INCLUDE_FILES(memory.h    HAVE_MEMORY_H)
CHECK_INCLUDE_FILES(stdbool.h   HAVE_STDBOOL_H) 
CHECK_INCLUDE_FILES("stddef.h;stdlib.h" STDC_HEADERS)
CHECK_INCLUDE_FILES(stdint.h    HAVE_STDINT_H) 
CHECK_INCLUDE_FILES(stdlib.h    HAVE_STDLIB_H) 
CHECK_INCLUDE_FILES(string.h    HAVE_STRING_H) 
CHECK_INCLUDE_FILES(strings.h   HAVE_STRINGS_H) 
CHECK_INCLUDE_FILES(sys/stat.h  HAVE_SYS_STAT_H) 
CHECK_INCLUDE_FILES(sys/types.h HAVE_SYS_TYPES_H) 
CHECK_INCLUDE_FILES(unistd.h    HAVE_UNISTD_H) 

FIND_PATH(NETCDF_INC_DIR netcdf.h
          DOC "Path of directory containing netcdf.h")
IF (NOT NETCDF_INC_DIR)
    MESSAGE(FATAL_ERROR "Cannot find directory containing netcdf.h; please set NETCDF_INC_DIR.")
ENDIF()
INCLUDE_DIRECTORIES(${NETCDF_INC_DIR})
SET(HAVE_NETCDF_H ${NETCDF_INC_DIR})

INCLUDE(CheckSymbolExists)
CHECK_SYMBOL_EXISTS(NC_FIRSTUSERTYPEID "${NETCDF_INC_DIR}/netcdf.h" HAVE_NC_FIRSTUSERTYPEID)
CHECK_SYMBOL_EXISTS(nc_inq_path "${NETCDF_INC_DIR}/netcdf.h" HAVE_NC_INQ_PATH)
CHECK_SYMBOL_EXISTS(_Bool "stdbool.h" HAVE__BOOL)

FIND_LIBRARY(M_LIB_PATH m DOC "Math library file path")
SET(HAVE_LIBM ${M_LIB_PATH})

FIND_LIBRARY(NETCDF_LIB_PATH
             NAMES netcdf
             DOC "Netcdf library file path")
IF (NOT NETCDF_LIB_PATH)
    MESSAGE(FATAL_ERROR "Cannot find netcdf library file path; please set NETCDF_LIB_PATH.")
ENDIF()
SET(HAVE_LIBNETCDF ${NETCDF_LIB_PATH})

FIND_PACKAGE(Threads REQUIRED)
IF(THREADS_HAVE_PTHREAD_ARG)
  TARGET_COMPILE_OPTIONS(nccmp PUBLIC "-pthread")
ENDIF()
IF(CMAKE_THREAD_LIBS_INIT)
  CHECK_INCLUDE_FILES(pthread.h HAVE_PTHREAD)
ENDIF()

INCLUDE(CheckFileOffsetBits)
INCLUDE(CheckLFS)

SET(CMAKE_EXTRA_INCLUDE_FILES stddef.h)
CHECK_TYPE_SIZE(size_t SIZE_T)
SET(CMAKE_EXTRA_INCLUDE_FILES) 

INCLUDE(CheckCSourceCompiles)
CHECK_C_SOURCE_COMPILES("int main() { const int i = 1; }" HAVE_CONST)

SET(WITH_NETCDF "" CACHE PATH "Path to full NetCDF source package. Enables header-pad comparison if set.")
FIND_FILE(NC_H_PATH nc.h
          DOC "Path of nc.h file if exists in WITH_NETCDF/include."
          PATHS ${WITH_NETCDF}/include)
IF (NOT NC_H_PATH)
    MESSAGE(STATUS "Cannot find nc.h in WITH_NETCDF/include; header-pad feature will be disabled.")
ELSE()
    SET(HAVE_NC_H 1)
ENDIF()

SET(PACKAGE "\"nccmp\"")
SET(PACKAGE_NAME ${PACKAGE})
SET(PACKAGE_STRING ${PACKAGE})
SET(PACKAGE_BUGREPORT "\"https://gitlab.com/remikz/nccmp\"")
SET(PACKAGE_URL "\"https://gitlab.com/remikz/nccmp\"")
SET(VERSION "\"1.9.1.0\"")
SET(PACKAGE_VERSION ${VERSION})
SET(PACKAGE_TARNAME "\"nccmp-\"" ${VERSION} "\".tgz\"")
SET(BUILD_HOST "\"${CMAKE_HOST_SYSTEM}\"")
SET(BUILD_USER "\"$ENV{USERNAME}\"")
SET(CONFIG_CC "\"${CMAKE_C_COMPILER}\"")
SET(CONFIG_CFLAGS "\"${CMAKE_C_FLAGS}\"")
SET(CONFIG_CPP "\"\"")
SET(CONFIG_CPPFLAGS "\"\"")
SET(CONFIG_FLAGS "\"\"")
SET(CONFIG_LDFLAGS "\"${CMAKE_EXE_LINKER_FLAGS}\"")
SET(CONFIG_LIBS "\"${LINK_LIBRARIES}\"")

INCLUDE(Date)
DATE(BUILD_DATE_RAW)
SET(BUILD_DATE "\"${BUILD_DATE_RAW}\"")

CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/cmake/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
ADD_DEFINITIONS(-DHAVE_CONFIG_H)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})

ADD_SUBDIRECTORY(man)
ADD_SUBDIRECTORY(src)

INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/org.nccmp.nccmp.appdata.xml DESTINATION ${CMAKE_INSTALL_PREFIX}/share/appdata)

ENABLE_TESTING()
ADD_SUBDIRECTORY(test)

