CMAKE_MINIMUM_REQUIRED (VERSION 3.0)

SET (CMAKE_C_COMPILER "gcc")

PROJECT (ervu-sign-module VERSION 1.4.2 LANGUAGES C)

IF (CMAKE_VERBOSE)
    SET (CMAKE_VERBOSE_MAKEFILE 1)
ENDIF ()

SET (CMAKE_C_FLAGS "-Wall -Wextra -Werror -Wno-unused-parameter")
SET (CMAKE_C_FLAGS_DEBUG "-g -O0 -DDEBUG")
SET (CMAKE_C_FLAGS_RELEASE "-g -O2 -DNDEBUG")
SET (CMAKE_EXE_LINKER_FLAGS "-Wl,--no-undefined")

SET (SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)
SET (UTILS_DIR ${SOURCE_DIR}/utils)
SET (FCGISRV_DIR ${SOURCE_DIR}/fcgisrv)
SET (MODULES_DIR ${SOURCE_DIR}/modules)

INCLUDE_DIRECTORIES (${SOURCE_DIR})

# PKG-CONFIG
FIND_PACKAGE (PkgConfig REQUIRED)

# GLIB2
MESSAGE ("")
MESSAGE ("Try to find the glib-2.0..")
PKG_CHECK_MODULES (GLIB2 REQUIRED glib-2.0)

IF (NOT GLIB2_FOUND)
        MESSAGE (SEND_ERROR "Can not find glib-2.0")
ELSE ()
        MESSAGE ("glib-2.0 is found: ")
        MESSAGE ("GLIB2_LIB_INCLUDE_DIR                 : "	${GLIB2_LIB_INCLUDE_DIR})
        MESSAGE ("GLIB2_INCLUDE_DIR                     : "	${GLIB2_INCLUDE_DIR})
        MESSAGE ("GLIB2_LIBRARY_DIR                     : "	${GLIB2_LIBRARY_DIR})
        MESSAGE ("GLIB2_INCLUDE_DIRS                    : "	${GLIB2_INCLUDE_DIRS})
        MESSAGE ("GLIB2_LIBRARY_DIRS                    : "	${GLIB2_LIBRARY_DIRS})
        MESSAGE ("GLIB2_LIBRARIES                       : "	${GLIB2_LIBRARIES})
ENDIF (NOT GLIB2_FOUND)
MESSAGE ("")

# set glib2 path vars
INCLUDE_DIRECTORIES (${GLIB2_INCLUDE_DIRS})

SET (DEP_LIBS
     -lpthread
     -lfcgi
     -lglib-2.0
     -ldl
     -ljson-glib-1.0
     -lgobject-2.0
     -luuid
)

# JSON-GLIB
MESSAGE ("")
MESSAGE ("Try to find the JSON-glib-1.0..")
pkg_check_modules (JSONGLIB REQUIRED json-glib-1.0)

IF (NOT JSONGLIB_FOUND)
	MESSAGE(SEND_ERROR "Can not find json-glib-1.0")
ELSE ()
	MESSAGE ("json-glib-1.0 is found: ")
	MESSAGE ("JSONGLIB_LIB_INCLUDE_DIR              : "	${JSONGLIB_LIB_INCLUDE_DIR})
	MESSAGE ("JSONGLIB_INCLUDE_DIR                  : "	${JSONGLIB_INCLUDE_DIR})
	MESSAGE ("JSONGLIB_LIBRARY_DIR                  : "	${JSONGLIB_LIBRARY_DIR})
	MESSAGE ("JSONGLIB_INCLUDE_DIRS                 : "	${JSONGLIB_INCLUDE_DIRS})
	MESSAGE ("JSONGLIB_LIBRARY_DIRS                 : "	${JSONGLIB_LIBRARY_DIRS})
	MESSAGE ("JSONGLIB_LIBRARIES                    : " ${JSONGLIB_LIBRARIES})
ENDIF (NOT JSONGLIB_FOUND)
MESSAGE ("")

INCLUDE_DIRECTORIES ("${JSONGLIB_INCLUDE_DIRS}")

# version.h
CONFIGURE_FILE (${SOURCE_DIR}/version.h.in ${SOURCE_DIR}/version.h)

# config.h
IF (NOT DEFINED CONFIG_NAME)
    SET (CONFIG_NAME "/etc/${PROJECT_NAME}.conf")
ENDIF ()

MESSAGE ("CONFIG_NAME: " ${CONFIG_NAME})
MESSAGE ("")

CONFIGURE_FILE (${SOURCE_DIR}/config.h.in ${SOURCE_DIR}/config.h)

SET (CRYPTOPRO_INCLUDE_DIRS
    /opt/cprocsp/include
    /opt/cprocsp/include/cpcsp
    /opt/cprocsp/include/pki
)
MESSAGE("CRYPTOPRO_INCLUDE_DIRS         : " ${CRYPTOPRO_INCLUDE_DIRS})

ADD_DEFINITIONS(-DUNIX)
INCLUDE_DIRECTORIES ("${CRYPTOPRO_INCLUDE_DIRS}")

FILE (GLOB_RECURSE HEADERS "${SOURCE_DIR}/*.h")

# tests
option(WITH_TESTS "Build with tests" OFF)
IF (WITH_TESTS)
    MESSAGE ("Build with tests: ON")
    enable_testing()
    add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/tests/)
ENDIF ()

ADD_EXECUTABLE (${PROJECT_NAME}
    ${HEADERS}
    ${SOURCE_DIR}/main.c
    ${SOURCE_DIR}/main_conf.c
    ${SOURCE_DIR}/master.c
    ${SOURCE_DIR}/service_manager.c
    ${SOURCE_DIR}/worker.c
    ${UTILS_DIR}/base64.c
    ${UTILS_DIR}/capi.c
    ${UTILS_DIR}/conf_file_context.c
    ${UTILS_DIR}/cryptopro.c
    ${UTILS_DIR}/detached_sign_payload_parser.c
    ${UTILS_DIR}/gconf_file.c
    ${UTILS_DIR}/glib_utils.c
    ${UTILS_DIR}/json_parser.c
    ${UTILS_DIR}/json_writer.c
    ${UTILS_DIR}/jwt.c
    ${UTILS_DIR}/library.c
    ${UTILS_DIR}/logger.c
    ${UTILS_DIR}/multipart_parser.c
    ${UTILS_DIR}/response_builder.c
    ${UTILS_DIR}/str_t.c
    ${UTILS_DIR}/timer.c
    ${UTILS_DIR}/uuid.c
    ${FCGISRV_DIR}/fcgi_map.c
    ${FCGISRV_DIR}/fcgi_server.c
    ${FCGISRV_DIR}/fcgi_thread.c
    ${FCGISRV_DIR}/fcgi_utils.c
    ${FCGISRV_DIR}/fcgi_worker.c
    ${MODULES_DIR}/service_sign.c
    ${MODULES_DIR}/service_verify_detached.c
    ${MODULES_DIR}/service_verify.c
    ${MODULES_DIR}/service_version.c
)

TARGET_LINK_LIBRARIES (${PROJECT_NAME} ${DEP_LIBS})
