You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

199 lines
4.7 KiB
CMake

cmake_minimum_required(VERSION 3.15)
message(STATUS "Generator is set to: ${CMAKE_GENERATOR}")
#set(CMAKE_VERBOSE_MAKEFILE ON)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
message(STATUS "No CMAKE_BUILD_TYPE specified, force set to: ${CMAKE_BUILD_TYPE}")
endif()
set(DAEMON_NAME wsdd)
set(DAEMON_MAJOR_VERSION 3)
set(DAEMON_MINOR_VERSION 0)
set(DAEMON_PATCH_VERSION patch)
# variants: patch - set PATCH_VERSION == number of commits(patches) between head and last tag
# variants: xxx - set PATCH_VERSION == xxx (your variant)
set(DAEMON_PID_FILE_NAME ${DAEMON_NAME}.pid)
set(DAEMON_LOG_FILE_NAME ${DAEMON_NAME}.log)
set(DAEMON_NO_CHDIR 1)
set(DAEMON_NO_CLOSE_STDIO $<STREQUAL:$<LOWER_CASE:${CMAKE_BUILD_TYPE}>,debug>) # 1 (NO_CLOSE if debug)
project(${DAEMON_NAME} LANGUAGES C)
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS ON)
set(CMAKE_C_FLAGS_DEBUG "-DDEBUG -g")
set(CMAKE_C_FLAGS_RELEASE "-DNDEBUG")
set(CMAKE_C_FLAGS "-O2")
add_compile_options(
-Wall
-Wextra
)
add_compile_definitions(
DAEMON_NAME="${DAEMON_NAME}"
DAEMON_PID_FILE_NAME="${DAEMON_PID_FILE_NAME}"
DAEMON_LOG_FILE_NAME="${DAEMON_LOG_FILE_NAME}"
DAEMON_NO_CHDIR=${DAEMON_NO_CHDIR}
DAEMON_NO_CLOSE_STDIO=${DAEMON_NO_CLOSE_STDIO}
)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
if(USE_SYSTEM_GSOAP)
#set(GSOAP_DIR "${CMAKE_BINARY_DIR}/gsoap-2.8/gsoap")
find_package(gSOAP REQUIRED)
else()
set(GSOAP_VERSION 2.8.138)
set(GSOAP_INSTALL_DIR "${CMAKE_SOURCE_DIR}")
set(GSOAP_ARCHIVE_DIR "${CMAKE_SOURCE_DIR}/SDK")
# set(GSOAP_PATCHES soapcpp2_lex.l.patch)
set(GSOAP_CONFIGURE --disable-c-locale --disable-ssl)
include(build_gsoap)
endif()
set(COMMON_DIR "${CMAKE_SOURCE_DIR}/src")
set(WSDL_DIR "${CMAKE_SOURCE_DIR}/wsdl")
set(GENERATED_DIR "${CMAKE_BINARY_DIR}/generated")
set(SOAP_SOURCES
${GSOAP_PLUGIN_DIR}/wsaapi.c
${GSOAP_PLUGIN_DIR}/wsddapi.c
${GENERATED_DIR}/soapClient.c
${GENERATED_DIR}/soapC.c
)
if(NOT USE_SYSTEM_GSOAP AND NOT USE_GSOAP_STATIC_LIB)
set(SOAP_SOURCES ${SOAP_SOURCES} ${GSOAP_DIR}/stdsoap2.c)
endif()
set(SOURCES
${COMMON_DIR}/${DAEMON_NAME}.c
${COMMON_DIR}/daemon.c
${COMMON_DIR}/net_utils.c
${COMMON_DIR}/file_utils.c
${COMMON_DIR}/wsdd_utils.c
${COMMON_DIR}/client_events.c
${SOAP_SOURCES}
)
set(SOAP_HEADERS
${GSOAP_INCLUDE_DIR}/stdsoap2.h
${GSOAP_PLUGIN_DIR}/wsaapi.h
${GSOAP_PLUGIN_DIR}/wsddapi.h
${GENERATED_DIR}/soapH.h
${GENERATED_DIR}/soapStub.h
${GENERATED_DIR}/wsdd.h
)
set(HEADERS
${COMMON_DIR}/smacros.h
${COMMON_DIR}/daemon.h
${COMMON_DIR}/net_utils.h
${COMMON_DIR}/file_utils.h
${COMMON_DIR}/wsdd_param.h
${GENERATED_DIR}/version.h
${SOAP_HEADERS}
)
add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS})
target_include_directories(${PROJECT_NAME} PUBLIC
${COMMON_DIR}
${GENERATED_DIR}
${GSOAP_INCLUDE_DIR}
${GSOAP_PLUGIN_DIR}
${GSOAP_IMPORT_DIR}
)
#Create a cmake target that generate gsoap files
add_custom_command(
OUTPUT ${GENERATED_DIR}/wsdd.h
COMMAND "${CMAKE_COMMAND}" -E make_directory ${GENERATED_DIR}
COMMAND ${GSOAP_WSDL2H} -cg -t ${GSOAP_WS_DIR}/typemap.dat
-o ${GENERATED_DIR}/wsdd.h ${WSDL_DIR}/remotediscovery.wsdl
COMMENT "Creating gSOAP binding file"
)
add_custom_command(
OUTPUT ${GENERATED_DIR}/soapC.c
COMMAND ${GSOAP_SOAPCPP2} -C -L -x -c -2 -d ${GENERATED_DIR}
-I${GSOAP_INCLUDE_DIR}:${GSOAP_IMPORT_DIR} ${GENERATED_DIR}/wsdd.h
DEPENDS ${GENERATED_DIR}/wsdd.h
COMMENT "Creating gSOAP stubs and glue code"
)
add_custom_target(gsoap_generation
DEPENDS ${GENERATED_DIR}/soapC.c
)
add_custom_target(generate_version ALL)
add_custom_command(
TARGET generate_version
COMMAND ${CMAKE_COMMAND}
-DWORK_DIR="${CMAKE_SOURCE_DIR}"
-DIN_FILE="${CMAKE_SOURCE_DIR}/cmake/version.h.in"
-DOUT_FILE="${GENERATED_DIR}/version.h"
-DDAEMON_MAJOR_VERSION=${DAEMON_MAJOR_VERSION}
-DDAEMON_MINOR_VERSION=${DAEMON_MINOR_VERSION}
-DDAEMON_PATCH_VERSION=${DAEMON_PATCH_VERSION}
-P "${CMAKE_SOURCE_DIR}/cmake/version.cmake"
DEPENDS ${SOURCES}
)
add_dependencies(${PROJECT_NAME} generate_version)
set_source_files_properties(
${GENERATED_DIR}/soapClient.c
${GENERATED_DIR}/soapC.c
${GENERATED_DIR}/soapH.h
${GENERATED_DIR}/soapStub.h
${GENERATED_DIR}/wsdd.h
${GENERATED_DIR}/version.h
PROPERTIES GENERATED TRUE
)
if(USE_SYSTEM_GSOAP OR USE_GSOAP_STATIC_LIB)
target_link_libraries(${PROJECT_NAME} ${GSOAP_C_LIBRARY})
endif()