CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR)
PROJECT(med CXX C)
ENABLE_LANGUAGE(Fortran OPTIONAL)

SET(MED_NUM_MAJEUR 3)
SET(MED_NUM_MINEUR 0)
SET(MED_NUM_RELEASE 5)

SET(MED_NUM_MAJEUR ${MED_NUM_MAJEUR})
SET(MED_NUM_MINEUR ${MED_NUM_MINEUR})
SET(MED_NUM_RELEASE ${MED_NUM_RELEASE})
SET(MED_STR_VERSION "${MED_NUM_MAJEUR}.${MED_NUM_MINEUR}.${MED_NUM_RELEASE}")
SET(LONG_OR_INT int)

ENABLE_TESTING()

SET(PLATFORM_CFLAGS)
IF(WIN32)
  SET(PLATFORM_CFLAGS ${PLATFORM_CFLAGS} /W0)
  SET(PLATFORM_CFLAGS ${PLATFORM_CFLAGS} -D_CRT_SECURE_NO_WARNINGS)  # To disable windows warnings for strcpy, fopen, ...
  SET(PLATFORM_CFLAGS ${PLATFORM_CFLAGS} -D_SCL_SECURE_NO_WARNINGS)  # To disable windows warnings std::copy, std::transform, ...
  SET(PLATFORM_CFLAGS ${PLATFORM_CFLAGS} -DWNT)
  SET(PLATFORM_CFLAGS ${PLATFORM_CFLAGS} -DWIN32)
  SET(PLATFORM_CFLAGS ${PLATFORM_CFLAGS} -D_WIN32_WINNT=0x0500) # Windows 2000 or later API is required
  SET(PLATFORM_CFLAGS ${PLATFORM_CFLAGS} -DPPRO_NT) # For medfile
  set(FORTRAN_STR_ARGS_ORDER /iface:mixed_str_len_arg)
ENDIF(WIN32)
INCLUDE(${CMAKE_SOURCE_DIR}/config/cmake_files/FindMPI.cmake)
INCLUDE(${CMAKE_SOURCE_DIR}/config/cmake_files/FindHDF5.cmake)
INCLUDE(${CMAKE_SOURCE_DIR}/config/cmake_files/medMacros.cmake)

#Creation med_config.h.cmake
SET(f_content_new "")
FILE(READ ${CMAKE_SOURCE_DIR}/include/med_config.h.in f_content)
STRING(REPLACE "\n" ";" list_f_content ${f_content})
FOREACH(ln ${list_f_content})
    STRING(REGEX MATCH "#undef.*" flag_name "${ln}")
    STRING(REPLACE "#undef" "" flag_name "${flag_name}")
    STRING(STRIP "${flag_name}" flag_name)
    STRING(LENGTH "${flag_name}" len)
    IF(${len} GREATER 0)
        STRING(STRIP "${flag_name}" flag_name)
        IF("${flag_name}" MATCHES "^F77_FUNC.*")
           SET(ln "#cmakedefine ${flag_name}@${flag_name}@")
        ELSE("${flag_name}" MATCHES "^F77_FUNC.*")
           SET(ln "#cmakedefine ${flag_name} @${flag_name}@")
        ENDIF("${flag_name}" MATCHES "^F77_FUNC.*")
    ENDIF(${len} GREATER 0)
    SET(f_content_new "${f_content_new}${ln}\n")
ENDFOREACH(ln ${list_f_content})

FILE(WRITE ${CMAKE_BINARY_DIR}/include/med_config.h.cmake "${f_content_new}")
FILE(WRITE ${CMAKE_BINARY_DIR}/include/2.3.6/med_config.h.cmake "${f_content_new}")

MED_CHECK_HEADERS()
MED_CHECK_FUNCTIONS()
MED_CHECK_SIZE()
MED_C_FORTRAN_INTERFACE()
MED_TIME_SYS_TIME()

CONFIGURE_FILE(${CMAKE_BINARY_DIR}/include/med_config.h.cmake ${CMAKE_BINARY_DIR}/include/med_config.h)
CONFIGURE_FILE(${CMAKE_BINARY_DIR}/include/2.3.6/med_config.h.cmake ${CMAKE_BINARY_DIR}/include/2.3.6/med_config.h)

ADD_SUBDIRECTORY(include)
ADD_SUBDIRECTORY(src)
ADD_SUBDIRECTORY(tools)
ADD_SUBDIRECTORY(tests)

INSTALL(DIRECTORY doc DESTINATION ${CMAKE_INSTALL_PREFIX})
