diff --git a/recipes/gsoap/all/CMakeLists.txt b/recipes/gsoap/all/CMakeLists.txt index e27ef444fdb05..8b0d9950ce3cc 100644 --- a/recipes/gsoap/all/CMakeLists.txt +++ b/recipes/gsoap/all/CMakeLists.txt @@ -9,7 +9,7 @@ if(EXISTS "${CMAKE_BINARY_DIR}/conanbuildinfo.cmake") else() include(conanbuildinfo.cmake) endif() -conan_basic_setup() +conan_basic_setup(TARGETS) message("Generate gSOAP from sources at ${GSOAP_PATH}") diff --git a/recipes/gsoap/all/conandata.yml b/recipes/gsoap/all/conandata.yml index 1d468f628b6d8..a2f12292f2c06 100644 --- a/recipes/gsoap/all/conandata.yml +++ b/recipes/gsoap/all/conandata.yml @@ -1,13 +1,13 @@ sources: "2.8.103": sha256: "7ddafb1aa016bf5cedde689267b4149f68a48ee848f712bbda92947cecf6d6c4" - url: "https://github.com/conan-io/cci-sources-backup/raw/main/gsoap/gsoap2-code-r186.zip" + url: "https://c3i.jfrog.io/artifactory/cci-sources-backup/sources/gsoap/gsoap2-code-r186.zip" "2.8.104": sha256: "2ed385f2aeb753f0a17007f0e6fdb08770185ad7cd2f531ae051cc322411abcc" - url: "https://github.com/conan-io/cci-sources-backup/raw/main/gsoap/gsoap2-code-r187.zip" + url: "https://c3i.jfrog.io/artifactory/cci-sources-backup/sources/gsoap/gsoap2-code-r187.zip" "2.8.105": sha256: "c60b973a1c23574ca673da86f018bd36b38fc810f1fa23b0fae2430889c9be4c" - url: "https://github.com/conan-io/cci-sources-backup/raw/main/gsoap/gsoap2-code-r188.zip" + url: "https://c3i.jfrog.io/artifactory/cci-sources-backup/sources/gsoap/gsoap2-code-r188.zip" "2.8.106": sha256: "be001b765be9ad2ad0a560d64d84ae10a30a961a2904bfe86f9f57f49a5555d7" - url: "https://github.com/conan-io/cci-sources-backup/raw/main/gsoap/gsoap2-code-r189.zip" + url: "https://c3i.jfrog.io/artifactory/cci-sources-backup/sources/gsoap/gsoap2-code-r189.zip" diff --git a/recipes/gsoap/all/conanfile.py b/recipes/gsoap/all/conanfile.py index b0beeeb45fa81..6e2f6ea1821bb 100644 --- a/recipes/gsoap/all/conanfile.py +++ b/recipes/gsoap/all/conanfile.py @@ -11,7 +11,7 @@ class ConanFileDefault(ConanFile): homepage = "https://sourceforge.net/projects/gsoap2" license = ("gSOAP-1.3b", "GPL-2.0-or-later") exports_sources = ["CMakeLists.txt", "src/*.cmake", "src/*.txt"] - generators = "cmake" + generators = "cmake", "cmake_find_package" short_paths = True _cmake = None @@ -44,15 +44,18 @@ def build(self): cmake.build() def build_requirements(self): - if tools.os_info.is_windows: - self.build_requires("winflexbison/2.5.22") + if tools.cross_building(self, skip_x64_x86=True) and hasattr(self, 'settings_build'): + self.build_requires("gsoap/{}".format(self.version)) + + if hasattr(self, "settings_build") and self.settings_build.os == "Windows": + self.build_requires("winflexbison/2.5.24") else: - self.build_requires("bison/3.5.3") + self.build_requires("bison/3.7.6") self.build_requires("flex/2.6.4") def requirements(self): if self.options.with_openssl: - self.requires("openssl/1.1.1h") + self.requires("openssl/1.1.1l") self.requires("zlib/1.2.11") def _configure_cmake(self): diff --git a/recipes/gsoap/all/src/gsoap.cmake b/recipes/gsoap/all/src/gsoap.cmake index 4a3bf38834072..09c5729cce303 100644 --- a/recipes/gsoap/all/src/gsoap.cmake +++ b/recipes/gsoap/all/src/gsoap.cmake @@ -49,16 +49,17 @@ install(TARGETS gsoap++ # Add SSL if requested if(${WITH_OPENSSL}) + find_package(OpenSSL REQUIRED) target_include_directories(gsoap PRIVATE ${GSOAP_PATH}/gsoap/plugin) target_compile_definitions(gsoap PUBLIC WITH_OPENSSL WITH_GZIP) set_target_properties(gsoap PROPERTIES OUTPUT_NAME gsoapssl) - target_link_libraries(gsoap ${CONAN_LIBS}) + target_link_libraries(gsoap PUBLIC OpenSSL::OpenSSL) target_include_directories(gsoap++ PRIVATE ${GSOAP_PATH}/gsoap/plugin) target_compile_definitions(gsoap++ PUBLIC WITH_OPENSSL WITH_GZIP) set_target_properties(gsoap++ PROPERTIES OUTPUT_NAME gsoapssl++) - target_link_libraries(gsoap++ ${CONAN_LIBS}) + target_link_libraries(gsoap++ PUBLIC OpenSSL::OpenSSL) endif() if(${WITH_IPV6}) target_compile_definitions(gsoap PUBLIC WITH_IPV6) diff --git a/recipes/gsoap/all/src/soapcpp2.cmake b/recipes/gsoap/all/src/soapcpp2.cmake index 29f6014673d14..bf82832d8b2e5 100644 --- a/recipes/gsoap/all/src/soapcpp2.cmake +++ b/recipes/gsoap/all/src/soapcpp2.cmake @@ -22,26 +22,26 @@ add_custom_target(create-generated-folder ALL if(WIN32) add_custom_command( OUTPUT ${CMAKE_BINARY_DIR}/generated/soapcpp2_yacc.tab.c - COMMAND ${CONAN_WINFLEXBISON_ROOT}/bin/win_bison.exe -d -v -o ${CMAKE_BINARY_DIR}/generated/soapcpp2_yacc.tab.c ${STDCPP2_PATH}/soapcpp2_yacc.y + COMMAND win_bison.exe -d -v -o ${CMAKE_BINARY_DIR}/generated/soapcpp2_yacc.tab.c ${STDCPP2_PATH}/soapcpp2_yacc.y COMMENT "Run BISON on soapcpp2" ) add_custom_command( OUTPUT ${CMAKE_BINARY_DIR}/generated/lex.yy.c - COMMAND ${CONAN_WINFLEXBISON_ROOT}/bin/win_flex.exe -o ${CMAKE_BINARY_DIR}/generated/lex.yy.c ${STDCPP2_PATH}/soapcpp2_lex.l + COMMAND win_flex.exe -o ${CMAKE_BINARY_DIR}/generated/lex.yy.c ${STDCPP2_PATH}/soapcpp2_lex.l COMMENT "Run FLEX on soapcpp2" ) else() add_custom_command( OUTPUT ${CMAKE_BINARY_DIR}/generated/soapcpp2_yacc.tab.c - COMMAND ${CONAN_BISON_ROOT}/bin/yacc -d -v -o ${CMAKE_BINARY_DIR}/generated/soapcpp2_yacc.tab.c ${STDCPP2_PATH}/soapcpp2_yacc.y + COMMAND yacc -d -v -o ${CMAKE_BINARY_DIR}/generated/soapcpp2_yacc.tab.c ${STDCPP2_PATH}/soapcpp2_yacc.y COMMENT "Run YACC on soapcpp2" ) add_custom_command( OUTPUT ${CMAKE_BINARY_DIR}/generated/lex.yy.c - COMMAND ${CONAN_FLEX_ROOT}/bin/flex -o ${CMAKE_BINARY_DIR}/generated/lex.yy.c ${STDCPP2_PATH}/soapcpp2_lex.l + COMMAND flex -o ${CMAKE_BINARY_DIR}/generated/lex.yy.c ${STDCPP2_PATH}/soapcpp2_lex.l COMMENT "Run FLEX on soapcpp2" ) endif() @@ -55,6 +55,10 @@ add_custom_target(FLEXBISON_GENERATORS add_dependencies(FLEXBISON_GENERATORS create-generated-folder) add_executable(soapcpp2 ${SRC_CPP}) +if(${WITH_OPENSSL}) + target_compile_definitions(soapcpp2 PUBLIC WITH_OPENSSL WITH_GZIP) + target_link_libraries(soapcpp2 PUBLIC OpenSSL::OpenSSL) +endif() target_include_directories(soapcpp2 PRIVATE ${STDCPP2_PATH}) set_source_files_properties(${SRC_CPP} PROPERTIES LANGUAGE C) add_dependencies(soapcpp2 FLEXBISON_GENERATORS) diff --git a/recipes/gsoap/all/src/wsdl2h.cmake b/recipes/gsoap/all/src/wsdl2h.cmake index 7dcd71312a08c..d7bf630f5818b 100644 --- a/recipes/gsoap/all/src/wsdl2h.cmake +++ b/recipes/gsoap/all/src/wsdl2h.cmake @@ -29,9 +29,17 @@ endif() set_source_files_properties(${SRC_CPP} PROPERTIES LANGUAGE CXX) set_source_files_properties(${CMAKE_BINARY_DIR}/generated/wsdlC.cpp PROPERTIES GENERATED TRUE) +# Search for soapcpp2 executable +if(CMAKE_CROSSCOMPILING) + find_program(SOAPCPP2_PROGRAM soapcpp2 PATHS ENV PATH NO_DEFAULT_PATH) +endif() +if(NOT SOAPCPP2_PROGRAM) + set(SOAPCPP2_PROGRAM $) +endif() + add_custom_command( OUTPUT ${CMAKE_BINARY_DIR}/generated/wsdlC.cpp - COMMAND $ -I${GSOAP_PATH}/gsoap/import -SC -pwsdl -d${CMAKE_BINARY_DIR}/generated ${WSDL2H_PATH}/wsdl.h + COMMAND ${SOAPCPP2_PROGRAM} -I${GSOAP_PATH}/gsoap/import -SC -pwsdl -d${CMAKE_BINARY_DIR}/generated ${WSDL2H_PATH}/wsdl.h COMMENT "Parsing WSDL and Schema definitions" WORKING_DIRECTORY ${WSDL2H_PATH} ) @@ -47,9 +55,10 @@ target_include_directories(wsdl2h PRIVATE ${WSDL2H_PATH}) add_dependencies(wsdl2h WSDL2H_GENERATORS) if(${WITH_OPENSSL}) + find_package(ZLIB REQUIRED) target_include_directories(wsdl2h PRIVATE ${GSOAP_PATH}/gsoap/plugin) target_compile_definitions(wsdl2h PRIVATE WITH_OPENSSL WITH_GZIP) - target_link_libraries(wsdl2h ${CONAN_LIBS}) + target_link_libraries(wsdl2h OpenSSL::OpenSSL ZLIB::ZLIB) endif() install(TARGETS wsdl2h RUNTIME DESTINATION bin) diff --git a/recipes/gsoap/all/test_package/CMakeLists.txt b/recipes/gsoap/all/test_package/CMakeLists.txt index 4722f48984645..91a58b87f9c81 100644 --- a/recipes/gsoap/all/test_package/CMakeLists.txt +++ b/recipes/gsoap/all/test_package/CMakeLists.txt @@ -4,11 +4,12 @@ project(gsoap_example CXX) include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) conan_basic_setup(TARGETS) -add_executable(${PROJECT_NAME} - example.cpp - ${CMAKE_BINARY_DIR}/soapC.cpp - ${CMAKE_BINARY_DIR}/soapcalcProxy.cpp) - -target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_BINARY_DIR} ${GSOAP_INCLUDE_DIR}) +find_package(gsoap REQUIRED) -target_link_libraries(${PROJECT_NAME} CONAN_PKG::gsoap) +add_executable(${PROJECT_NAME} + example.cpp + ${CMAKE_BINARY_DIR}/soapC.cpp + ${CMAKE_BINARY_DIR}/soapcalcProxy.cpp +) +target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_BINARY_DIR}) +target_link_libraries(${PROJECT_NAME} gsoap::gsoap) diff --git a/recipes/gsoap/all/test_package/conanfile.py b/recipes/gsoap/all/test_package/conanfile.py index 658d2370d13f9..0d67f37b94195 100644 --- a/recipes/gsoap/all/test_package/conanfile.py +++ b/recipes/gsoap/all/test_package/conanfile.py @@ -3,18 +3,22 @@ class TestGsoapConan(ConanFile): settings = "os", "compiler", "build_type", "arch" - generators = "cmake" + generators = "cmake", "cmake_find_package" def build(self): - calc_wsdl = os.path.join(os.path.dirname(__file__), 'calc.wsdl') - self.run("wsdl2h -o calc.h {}".format(calc_wsdl), run_environment=True) - self.run("soapcpp2 -j -CL -I{} calc.h".format(os.path.join(self.deps_cpp_info["gsoap"].rootpath, 'bin', 'import')), run_environment=True) + # TODO: Add some test for the cross-building scenario - cmake = CMake(self) - cmake.configure() - cmake.build() + if not tools.cross_building(self): + calc_wsdl = os.path.join(os.path.dirname(__file__), 'calc.wsdl') + self.output.info("Generating code from WSDL '{}'".format(calc_wsdl)) + self.run("wsdl2h -o calc.h {}".format(calc_wsdl), run_environment=True) + self.run("soapcpp2 -j -CL -I{} calc.h".format(os.path.join(self.deps_cpp_info["gsoap"].rootpath, 'bin', 'import')), run_environment=True) + + cmake = CMake(self) + cmake.configure() + cmake.build() def test(self): - if not tools.cross_building(self.settings, skip_x64_x86=True): + if not tools.cross_building(self): bin_path = os.path.join("bin", "gsoap_example") self.run(bin_path, run_environment=True) diff --git a/recipes/gsoap/all/test_package/example.cpp b/recipes/gsoap/all/test_package/example.cpp index c4c654374a074..bf5391ec2d579 100644 --- a/recipes/gsoap/all/test_package/example.cpp +++ b/recipes/gsoap/all/test_package/example.cpp @@ -13,6 +13,7 @@ int main() } else { + std::cout << "Cannot sum" << std::endl; calc.soap_stream_fault(std::cerr); } calc.destroy(); // same as: soap_destroy(calc.soap); soap_end(calc.soap);