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.
228 lines
6.0 KiB
CMake
228 lines
6.0 KiB
CMake
# SPDX-License-Identifier: MIT
|
|
#
|
|
# Copyright (C) Koynov Stas - skojnov@yandex.ru
|
|
#
|
|
#
|
|
# This module build local gsoap
|
|
#
|
|
# This code sets the following variables:
|
|
#
|
|
# GSOAP_VERSION = gSOAP version
|
|
#
|
|
# GSOAP_DIR = "${GSOAP_INSTALL_DIR}/gsoap-2.8/gsoap"
|
|
# GSOAP_INCLUDE_DIR = "${GSOAP_DIR}"
|
|
# GSOAP_CUSTOM_DIR = "${GSOAP_DIR}/custom"
|
|
# GSOAP_IMPORT_DIR = "${GSOAP_DIR}/import"
|
|
# GSOAP_PLUGIN_DIR = "${GSOAP_DIR}/plugin"
|
|
# GSOAP_WS_DIR = "${GSOAP_DIR}/WS"
|
|
#
|
|
# GSOAP_C_LIBRARY = "${GSOAP_DIR}/libgsoap.a"
|
|
# GSOAP_CK_C_LIBRARY = "${GSOAP_DIR}/libgsoapck.a"
|
|
# GSOAP_SSL_C_LIBRARY = "${GSOAP_DIR}/libgsoapssl.a"
|
|
# GSOAP_CXX_LIBRARY = "${GSOAP_DIR}/libgsoap++.a"
|
|
# GSOAP_CK_CXX_LIBRARY = "${GSOAP_DIR}/libgsoapck++.a"
|
|
# GSOAP_SSL_CXX_LIBRARY = "${GSOAP_DIR}/libgsoapssl++.a"
|
|
#
|
|
# GSOAP_WSDL2H = wsdl2h binary
|
|
# GSOAP_SOAPCPP2 = soapcpp2 binary
|
|
|
|
|
|
|
|
if(NOT DEFINED GSOAP_VERSION)
|
|
set(GSOAP_VERSION 2.8.66)
|
|
message(STATUS "No GSOAP_VERSION specified, use default version: ${GSOAP_VERSION}")
|
|
endif()
|
|
|
|
|
|
if(NOT DEFINED GSOAP_INSTALL_DIR)
|
|
set(GSOAP_INSTALL_DIR "${CMAKE_BINARY_DIR}")
|
|
message(STATUS "No GSOAP_INSTALL_DIR specified, use default path: ${GSOAP_INSTALL_DIR}")
|
|
endif()
|
|
|
|
|
|
if(NOT DEFINED GSOAP_ARCHIVE_DIR)
|
|
set(GSOAP_ARCHIVE_DIR "${CMAKE_BINARY_DIR}")
|
|
message(STATUS "No GSOAP_ARCHIVE_DIR specified, use default path: ${GSOAP_ARCHIVE_DIR}")
|
|
endif()
|
|
|
|
|
|
if(DEFINED GSOAP_CONFIGURE)
|
|
message(STATUS "GSOAP_CONFIGURE: ${GSOAP_CONFIGURE}")
|
|
endif()
|
|
|
|
|
|
if(DEFINED GSOAP_PATCHES)
|
|
message(STATUS "GSOAP_PATCHES: ${GSOAP_PATCHES}")
|
|
endif()
|
|
|
|
|
|
|
|
|
|
set(GSOAP_ARCHIVE "${GSOAP_ARCHIVE_DIR}/gsoap_${GSOAP_VERSION}.zip")
|
|
set(GSOAP_DIR "${GSOAP_INSTALL_DIR}/gsoap-2.8/gsoap")
|
|
set(GSOAP_INCLUDE_DIR "${GSOAP_DIR}")
|
|
set(GSOAP_CUSTOM_DIR "${GSOAP_DIR}/custom")
|
|
set(GSOAP_IMPORT_DIR "${GSOAP_DIR}/import")
|
|
set(GSOAP_PLUGIN_DIR "${GSOAP_DIR}/plugin")
|
|
set(GSOAP_WS_DIR "${GSOAP_DIR}/WS")
|
|
|
|
set(GSOAP_C_LIBRARY "${GSOAP_DIR}/libgsoap.a")
|
|
set(GSOAP_CK_C_LIBRARY "${GSOAP_DIR}/libgsoapck.a")
|
|
set(GSOAP_SSL_C_LIBRARY "${GSOAP_DIR}/libgsoapssl.a")
|
|
set(GSOAP_CXX_LIBRARY "${GSOAP_DIR}/libgsoap++.a")
|
|
set(GSOAP_CK_CXX_LIBRARY "${GSOAP_DIR}/libgsoapck++.a")
|
|
set(GSOAP_SSL_CXX_LIBRARY "${GSOAP_DIR}/libgsoapssl++.a")
|
|
|
|
set(GSOAP_SOAPCPP2 "${GSOAP_DIR}/src/soapcpp2")
|
|
set(GSOAP_WSDL2H "${GSOAP_DIR}/wsdl/wsdl2h")
|
|
|
|
|
|
|
|
function(gsoap_get_archive)
|
|
|
|
if(EXISTS ${GSOAP_ARCHIVE})
|
|
return()
|
|
endif()
|
|
|
|
|
|
find_package(Wget REQUIRED)
|
|
file(MAKE_DIRECTORY ${GSOAP_ARCHIVE_DIR})
|
|
|
|
|
|
set(GSOAP_ARCHIVE_URLs
|
|
"https://github.com/SrcBackup/gsoap/releases/download/v2.8.x/gsoap_${GSOAP_VERSION}.zip"
|
|
"https://sourceforge.net/projects/gsoap2/files/gsoap_${GSOAP_VERSION}.zip/download"
|
|
)
|
|
|
|
# download archive
|
|
foreach(url ${GSOAP_ARCHIVE_URLs})
|
|
execute_process(COMMAND
|
|
"${WGET_EXECUTABLE}" --continue -O ${GSOAP_ARCHIVE}.tmp ${url}
|
|
WORKING_DIRECTORY ${GSOAP_ARCHIVE_DIR}
|
|
RESULT_VARIABLE exit_code
|
|
)
|
|
|
|
if(exit_code EQUAL 0)
|
|
file(RENAME ${GSOAP_ARCHIVE}.tmp ${GSOAP_ARCHIVE})
|
|
break()
|
|
endif()
|
|
endforeach()
|
|
|
|
|
|
if(NOT EXISTS ${GSOAP_ARCHIVE})
|
|
message(FATAL_ERROR "Can't download ${GSOAP_ARCHIVE}")
|
|
endif()
|
|
|
|
endfunction()
|
|
|
|
|
|
|
|
function(gsoap_unzip_archive)
|
|
|
|
if(EXISTS ${GSOAP_DIR}/../README.txt)
|
|
return()
|
|
endif()
|
|
|
|
execute_process(COMMAND
|
|
unzip ${GSOAP_ARCHIVE} -d ${GSOAP_INSTALL_DIR}
|
|
WORKING_DIRECTORY ${GSOAP_ARCHIVE_DIR}
|
|
RESULT_VARIABLE exit_code
|
|
)
|
|
if(NOT exit_code EQUAL 0)
|
|
message(FATAL_ERROR "Can't unzip ${GSOAP_ARCHIVE} to ${GSOAP_INSTALL_DIR}")
|
|
endif()
|
|
|
|
endfunction()
|
|
|
|
|
|
|
|
function(gsoap_add_patches)
|
|
|
|
if(NOT DEFINED GSOAP_PATCHES)
|
|
return()
|
|
endif()
|
|
|
|
# add patches
|
|
foreach(p ${GSOAP_PATCHES})
|
|
|
|
set(patch_done_file ${GSOAP_DIR}/${p}.done)
|
|
if(EXISTS ${patch_done_file})
|
|
continue()
|
|
endif()
|
|
|
|
execute_process(COMMAND
|
|
patch -p0 -i ${CMAKE_SOURCE_DIR}/patch/${p}
|
|
WORKING_DIRECTORY ${GSOAP_DIR}/../
|
|
RESULT_VARIABLE exit_code
|
|
)
|
|
|
|
if(NOT exit_code EQUAL 0)
|
|
message(FATAL_ERROR "Can't add patch: ${p}")
|
|
break()
|
|
endif()
|
|
|
|
file(TOUCH ${patch_done_file})
|
|
endforeach()
|
|
|
|
endfunction()
|
|
|
|
|
|
|
|
function(gsoap_build)
|
|
|
|
if(EXISTS ${GSOAP_WSDL2H} AND EXISTS ${GSOAP_SOAPCPP2})
|
|
return()
|
|
endif()
|
|
|
|
gsoap_get_archive()
|
|
gsoap_unzip_archive()
|
|
gsoap_add_patches()
|
|
|
|
execute_process(COMMAND
|
|
./configure ${GSOAP_CONFIGURE}
|
|
WORKING_DIRECTORY ${GSOAP_DIR}/..
|
|
RESULT_VARIABLE exit_code
|
|
)
|
|
|
|
if(NOT exit_code EQUAL 0)
|
|
message(FATAL_ERROR "Can't configure gSOAP")
|
|
endif()
|
|
|
|
|
|
execute_process(COMMAND
|
|
make -j1
|
|
WORKING_DIRECTORY ${GSOAP_DIR}/..
|
|
RESULT_VARIABLE exit_code
|
|
)
|
|
|
|
if(NOT exit_code EQUAL 0)
|
|
message(FATAL_ERROR "Can't build gSOAP")
|
|
endif()
|
|
|
|
endfunction()
|
|
|
|
|
|
|
|
# process
|
|
gsoap_build()
|
|
|
|
unset(GSOAP_ARCHIVE)
|
|
|
|
message(STATUS "GSOAP_VERSION = ${GSOAP_VERSION}")
|
|
message(STATUS "GSOAP_DIR = ${GSOAP_DIR}")
|
|
message(STATUS "GSOAP_INCLUDE_DIR = ${GSOAP_INCLUDE_DIR}")
|
|
message(STATUS "GSOAP_CUSTOM_DIR = ${GSOAP_CUSTOM_DIR}")
|
|
message(STATUS "GSOAP_IMPORT_DIR = ${GSOAP_IMPORT_DIR}")
|
|
message(STATUS "GSOAP_PLUGIN_DIR = ${GSOAP_PLUGIN_DIR}")
|
|
message(STATUS "GSOAP_WS_DIR = ${GSOAP_WS_DIR}")
|
|
|
|
message(STATUS "GSOAP_C_LIBRARY = ${GSOAP_C_LIBRARY}")
|
|
message(STATUS "GSOAP_CK_C_LIBRARY = ${GSOAP_CK_C_LIBRARY}")
|
|
message(STATUS "GSOAP_SSL_C_LIBRARY = ${GSOAP_SSL_C_LIBRARY}")
|
|
message(STATUS "GSOAP_CXX_LIBRARY = ${GSOAP_CXX_LIBRARY}")
|
|
message(STATUS "GSOAP_CK_CXX_LIBRARY = ${GSOAP_CK_CXX_LIBRARY}")
|
|
message(STATUS "GSOAP_SSL_CXX_LIBRARY = ${GSOAP_SSL_CXX_LIBRARY}")
|
|
|
|
message(STATUS "GSOAP_SOAPCPP2 = ${GSOAP_SOAPCPP2}")
|
|
message(STATUS "GSOAP_WSDL2H = ${GSOAP_WSDL2H}")
|