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
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()
|