From 051652311b03b886e6374da3f446270d02ec51e5 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 29 May 2024 11:01:31 +0800 Subject: [PATCH] add soap Signed-off-by: root --- thirdparty/soap/HPKBUILD | 162 ++++++++++++++++++ thirdparty/soap/HPKCHECK | 40 +++++ thirdparty/soap/OAT.xml | 16 ++ thirdparty/soap/README.OpenSource | 11 ++ thirdparty/soap/README_zh.md | 9 + thirdparty/soap/SHA512SUM | 1 + thirdparty/soap/docs/hap_integrate.md | 110 ++++++++++++ .../soap/docs/pic/gsoap_install_dir.png | Bin 0 -> 19771 bytes thirdparty/soap/docs/pic/gsoap_test.png | Bin 0 -> 9041 bytes thirdparty/soap/gsoap_ohos_pkg.patch | 54 ++++++ 10 files changed, 403 insertions(+) create mode 100644 thirdparty/soap/HPKBUILD create mode 100644 thirdparty/soap/HPKCHECK create mode 100644 thirdparty/soap/OAT.xml create mode 100644 thirdparty/soap/README.OpenSource create mode 100644 thirdparty/soap/README_zh.md create mode 100644 thirdparty/soap/SHA512SUM create mode 100644 thirdparty/soap/docs/hap_integrate.md create mode 100644 thirdparty/soap/docs/pic/gsoap_install_dir.png create mode 100644 thirdparty/soap/docs/pic/gsoap_test.png create mode 100644 thirdparty/soap/gsoap_ohos_pkg.patch diff --git a/thirdparty/soap/HPKBUILD b/thirdparty/soap/HPKBUILD new file mode 100644 index 00000000..35b342ae --- /dev/null +++ b/thirdparty/soap/HPKBUILD @@ -0,0 +1,162 @@ +# Copyright (c) 2023 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Contributor: Jeff Han ,alnin +# Maintainer: Jeff Han ,alnin + +pkgname=gsoap +pkgver=2.8.134 +pkgrel=0 +pkgdesc="The gSOAP toolkit is an extensive suite of portable C and C++ software to develop XML Web services with powerful type-safe XML data bindings." +url="https://sourceforge.net/projects/gsoap2/files/" +archs=("armeabi-v7a" "arm64-v8a") +license=("GPLv2 License") +depends=("openssl" "zlib") +makedepends=() + +autounpack=true +downloadpackage=true +buildtools="configure" + +packagename="$pkgname"_$pkgver.zip +source="https://nchc.dl.sourceforge.net/project/gsoap2/$packagename" + +packagedir="$pkgname"-"${pkgver:0:3}" +builddir="$pkgname"-$pkgver + +cloneflag=true +opensslpackagename=openssl-OpenSSL_1_1_1u +zlibpackagename=zlib-v1.2.13 + +source envset.sh +host= +prepare() { + if $cloneflag + then + #编译openssl + mkdir -p linux/openssl + cp -rf ${LYCIUM_ROOT}/../thirdparty/openssl/$opensslpackagename.zip . + if [ "$?" != "0" ];then + echo "copy openssl package fail" + return -1 + fi + unzip $opensslpackagename.zip >> $publicbuildlog 2>&1 + cd $opensslpackagename + mkdir build && cd build + ../config no-shared --prefix=${LYCIUM_ROOT}/../thirdparty/gsoap/linux/openssl >> $publicbuildlog 2>&1 + make VERBOSE=1 >> $publicbuildlog 2>&1 + make install >> $publicbuildlog 2>&1 + cd ../../ + + #编译zlib + mkdir -p linux/zlib + cp -rf ${LYCIUM_ROOT}/../thirdparty/zlib/$zlibpackagename.zip . + if [ "$?" != "0" ];then + echo "copy zlib package fail" + return -1 + fi + unzip $zlibpackagename.zip >> $publicbuildlog 2>&1 + cd $zlibpackagename + mkdir build && cd build + ../configure --prefix=${LYCIUM_ROOT}/../thirdparty/gsoap/linux/zlib >> $publicbuildlog 2>&1 + make VERBOSE=1 >> $publicbuildlog 2>&1 + make install >> $publicbuildlog 2>&1 + cd ../../ + + #编译gsoap + mkdir -p linux/gsoap + cp -rf $packagedir $builddir-linux-build + cd $builddir-linux-build + ./configure --prefix=${LYCIUM_ROOT}/../thirdparty/gsoap/linux/gsoap \ + --with-openssl=${LYCIUM_ROOT}/../thirdparty/gsoap/linux/openssl \ + --with-zlib=${LYCIUM_ROOT}/../thirdparty/gsoap/linux/zlib >> $publicbuildlog 2>&1 + make VERBOSE=1 >> $publicbuildlog 2>&1 + make install >> $publicbuildlog 2>&1 + cd ../ + + cloneflag=false + fi + + cp -rf $packagedir $builddir-$ARCH-build + cd $builddir-$ARCH-build + patch -p1 < `pwd`/../gsoap_ohos_pkg.patch >> $publicbuildlog 2>&1 + + mkdir temp + cp -f ${LYCIUM_ROOT}/../thirdparty/gsoap/linux/gsoap/bin/soapcpp2 ./temp + cp -f ${LYCIUM_ROOT}/../thirdparty/gsoap/linux/gsoap/bin/wsdl2h ./temp + + if [ $ARCH == "armeabi-v7a" ] + then + setarm32ENV + host=arm-linux + fi + if [ $ARCH == "arm64-v8a" ] + then + setarm64ENV + host=aarch64-linux + fi + + cd $OLDPWD +} + +build() { + cd $builddir-$ARCH-build + PKG_CONFIG_LIBDIR="${pkgconfigpath}" LDFLAGS="-L${LYCIUM_ROOT}/usr/openssl/${ARCH}/lib -lssl -lcrypto -lz -lpthread" \ + CFLAGS="$CFLAGS -I${LYCIUM_ROOT}/usr/openssl/${ARCH}/include" \ + CXXFLAGS="$CXXFLAGS -I${LYCIUM_ROOT}/usr/openssl/${ARCH}/include" \ + ./configure "$@" --host=$host --disable-c-locale --enable-samples \ + --with-openssl="${LYCIUM_ROOT}/usr/openssl/${ARCH}" \ + --with-zlib="${LYCIUM_ROOT}/usr/zlib/${ARCH}" >> $buildlog 2>&1 + + make VERBOSE=1 >> $buildlog 2>&1 + make VERBOSE=1 >> $buildlog 2>&1 + ret=$? + cd $OLDPWD + return $ret +} + +package() { + cd $builddir-$ARCH-build + make install >> $buildlog 2>&1 + + rm -f ./gsoap/src/soapcpp2 + mv ./gsoap/src/soapcpp2.bak ./gsoap/src/soapcpp2 + cp -f ./gsoap/src/soapcpp2 ${LYCIUM_ROOT}/usr/gsoap/${ARCH}/bin + rm -f ./gsoap/wsdl/wsdl2h + mv ./gsoap/wsdl/wsdl2h.bak ./gsoap/wsdl/wsdl2h + cp -f ./gsoap/wsdl/wsdl2h ${LYCIUM_ROOT}/usr/gsoap/${ARCH}/bin + rm -rf temp + + cd $OLDPWD + if [ $ARCH == "armeabi-v7a" ] + then + unsetarm32ENV + fi + if [ $ARCH == "arm64-v8a" ] + then + unsetarm64ENV + fi + unset host +} + +check() { + echo "The test must be on an OpenHarmony device!" + # 进入编译目录,执行 ctest +} + +# 清理环境 +cleanbuild() { + echo "The cleanbuild !" + rm -rf ${PWD}/$opensslpackagename ${PWD}/$zlibpackagename ${PWD}/$packagedir ${PWD}/$builddir-linux-build \ + ${PWD}/$builddir-${archs[0]}-build ${PWD}/$builddir-${archs[1]}-build #${PWD}/$packagename +} diff --git a/thirdparty/soap/HPKCHECK b/thirdparty/soap/HPKCHECK new file mode 100644 index 00000000..669cef0e --- /dev/null +++ b/thirdparty/soap/HPKCHECK @@ -0,0 +1,40 @@ +# Copyright (c) 2023 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Contributor: Jeff Han ,alnin +# Maintainer: Jeff Han ,alnin + +source HPKBUILD > /dev/null 2>&1 +logfile=${LYCIUM_THIRDPARTY_ROOT}/${pkgname}/${pkgname}_${ARCH}_${OHOS_SDK_VER}_test.log + +checkprepare(){ + return 0 +} + +# 在OH环境执行测试的接口 +openharmonycheck() { + res=0 + cd $builddir-$ARCH-build/gsoap/samples/primes + ./primes > ${logfile} 2>&1 + if [ $? -ne 0 ] + then + cd $OLDPWD + return -1 + fi + echo "test 1: pass" >> ${logfile} + + echo "Total test: 1 pass: 1" >> ${logfile} + res=$? + cd $OLDPWD + return $res +} diff --git a/thirdparty/soap/OAT.xml b/thirdparty/soap/OAT.xml new file mode 100644 index 00000000..5663c536 --- /dev/null +++ b/thirdparty/soap/OAT.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/thirdparty/soap/README.OpenSource b/thirdparty/soap/README.OpenSource new file mode 100644 index 00000000..c810d3ff --- /dev/null +++ b/thirdparty/soap/README.OpenSource @@ -0,0 +1,11 @@ +[ + { + "Name": "gsoap", + "License": "GPLv2", + "License File": "GPLv2_license", + "Version Number": "gsoap_2.8.134", + "Owner": "huangminzhong2@huawei.com", + "Upstream URL": "https://sourceforge.net/projects/gsoap2/files/", + "Description": "The gSOAP toolkit is an extensive suite of portable C and C++ software to develop XML Web services with powerful type-safe XML data bindings." + } +] diff --git a/thirdparty/soap/README_zh.md b/thirdparty/soap/README_zh.md new file mode 100644 index 00000000..e8d4aa9f --- /dev/null +++ b/thirdparty/soap/README_zh.md @@ -0,0 +1,9 @@ +# gSOAP Toolkit三方库说明 +## 功能简介 + gSOAP Toolkit是一个用于开发SOAP和XML应用的工具包,它在英文中被称为toolkit。该工具包跨平台,可用于开发webservice的客户端和服务器端。 +## 使用约束 +- SDK版本:sdk-linux-4.1.3.401 +- 三方库版本:gsoap_2.8.134 + +## 集成方式 ++ [应用hap包集成](docs/hap_integrate.md) diff --git a/thirdparty/soap/SHA512SUM b/thirdparty/soap/SHA512SUM new file mode 100644 index 00000000..6bec7b0f --- /dev/null +++ b/thirdparty/soap/SHA512SUM @@ -0,0 +1 @@ +d30cb69398544abfd6823baca8d565f85cf40336494d1eacc508ef5d8cc77d868cb2d9659a74a376954a1b6d00c99397b1de536d3f6471f3bba9282f031bded7 gsoap_2.8.134.zip diff --git a/thirdparty/soap/docs/hap_integrate.md b/thirdparty/soap/docs/hap_integrate.md new file mode 100644 index 00000000..ff4416fc --- /dev/null +++ b/thirdparty/soap/docs/hap_integrate.md @@ -0,0 +1,110 @@ +# gSOAP Toolkit集成到应用hap + +本库是在RK3568开发板上基于OpenHarmony3.2 Release版本的镜像验证的,如果是从未使用过RK3568,可以先查看[润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld)。 + +## 开发环境 + +- [开发环境准备](../../../docs/hap_integrate_environment.md) + +## 编译三方库 + +- 下载本仓库 + + ```shell + git clone https://gitee.com/openharmony-sig/tpc_c_cplusplus.git --depth=1 + ``` + +- 三方库目录结构 + + ```shell + tpc_c_cplusplus/thirdparty/gsoap #三方库gsoap的目录结构如下 + ├── docs #三方库相关文档的文件夹 + ├── HPKBUILD #构建脚本 + ├── HPKCHECK #测试脚本 + ├── OAT.xml #扫描结果文件 + ├── SHA512SUM #三方库校验文件 + ├── README.OpenSource #说明三方库源码的下载地址,版本,license等信息 + ├── README_zh.md #三方库简介 + ├── gsoap_ohos_pkg.patch #用于gsoap库编译的补丁 + ``` + +- 在lycium目录下编译三方库 + + 编译环境的搭建参考[准备三方库构建环境](../../../lycium/README.md#1编译环境准备) + + ```shell + cd lycium + ./build.sh gsoap openssl zlib + ``` + +- 三方库头文件及生成的库 + + 在lycium目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库 + + ```shell + gsoap/arm64-v8a gsoap/armeabi-v7a + ``` + +- [测试三方库](#测试三方库) + +## 应用中使用三方库 + +- 使用bin目录下的 wsdl2h 和  soapcpp2 二进制文件自动生成源代码 + + ```shell + #执行 wsdl2h 从本地文件读取 WSDL 并自动生成一个默认名称的输出文件 + wsdl2h calc.wsdl + #执行 wsdl2h 从远程 URL 读取 WSDL 并自动生成一个具有指定名称的输出文件 + wsdl2h -o calc.h http://www.genivia.com/calc.wsdl + + #执行 soapcpp2 从 calc.h 文件中自动生成客户端的源代码,-c 选项指定了生成客户端代码 + soapcpp2 -c calc.h + + #自动生成客户端的源代码 + #calc.nsmap + #soapC.cpp + #soapcalcProxy.cpp + #soapcalcProxy.h + #soapH.h + #soapStub.h + ``` + +- 在IDE的cpp目录下新增thirdparty目录,将编译生成的头文件拷贝到该目录下;在IDE的cpp目录下新增lib目录,将编译生成的.a文件拷贝到该目录下;在IDE的cpp目录下将自动生成客户端的源代码文件拷贝到该目录下。如下图所示: + + ![thirdparty_install_dir](pic/gsoap_install_dir.png) + +- 在最外层(cpp目录下)CMakeLists.txt中添加如下语句,libz.a需要自己编译仓库里面的 + + ```cmake + #将执行 soapcpp2 自动生成的 soapC.cpp 和 soapcalcProxy.cpp 依赖文件加入工程中 + add_library(entry SHARED soapC.cpp soapcalcProxy.cpp napi_init.cpp) + + #将三方库加入工程中 + target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/gsoap/${OHOS_ARCH}/lib/libgsoap++.a) + #将三方库的头文件加入工程中 + target_include_directories(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/gsoap/${OHOS_ARCH}/include) + ``` + + 调用三方库须知 + + ```c++ + #调用需注意 + #添加soapcpp2自动生成客户端的源代码头文件 + #include "soapcalcProxy.h" + #include "calc.nsmap" + +## 测试三方库 + +三方库的测试使用原库自带的测试用例来做测试,[准备三方库测试环境](../../../lycium/README.md#3ci环境准备) + +进入到构建目录下的sample文件夹中运行测试用例,涉及客户端和服务端程序需要开两个终端窗口测试。 + +(gsoap-2.8-arm64-v8a-build/gsoap/samples为构建64位的目录,gsoap-2.8-armeabi-v7a-build/gsoap/samples为构建32位的目录) + + ![gsoap_test](pic/gsoap_test.png) + +## 参考资料 + +- [OpenHarmony三方库地址](https://gitee.com/openharmony-tpc) +- [OpenHarmony知识体系](https://gitee.com/openharmony-sig/knowledge) +- [gsoap toolkit三方库地址](https://sourceforge.net/projects/gsoap2/files/) diff --git a/thirdparty/soap/docs/pic/gsoap_install_dir.png b/thirdparty/soap/docs/pic/gsoap_install_dir.png new file mode 100644 index 0000000000000000000000000000000000000000..4508c5c6f88949395e03a2dce6dd2dfd2780df46 GIT binary patch literal 19771 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 GU;jS_}wWh={ZT(nEw8g3?5wLZ46#f=H({NdSRD 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 Y-T= 200112L || _XOPEN_SOURCE >= 600 || defined(__ANDROID__) || defined(FREEBSD) || defined(__FreeBSD__)) && !defined(SUN_OS) && !defined(__QNX__) && !defined(QNX) && defined(HAVE_GETHOSTBYNAME_R) ++#elif (!defined(_GNU_SOURCE) || (!(~_GNU_SOURCE+1) && !defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE)) || _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600 || defined(__ANDROID__) || defined(__OHOS__) || defined(FREEBSD) || defined(__FreeBSD__)) && !defined(SUN_OS) && !defined(__QNX__) && !defined(QNX) && defined(HAVE_GETHOSTBYNAME_R) + int r; + char *tmpbuf = soap->tmpbuf; + size_t tmplen = sizeof(soap->tmpbuf); +@@ -5490,7 +5490,7 @@ + hostent = NULL; + soap->errnum = h_errno; + } +-#elif (!defined(_GNU_SOURCE) || (!(~_GNU_SOURCE+1) && !defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE)) || _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600 || defined(__ANDROID__) || defined(FREEBSD) || defined(__FreeBSD__)) && !defined(SUN_OS) && !defined(__QNX__) && !defined(QNX) && defined(HAVE_GETHOSTBYNAME_R) ++#elif (!defined(_GNU_SOURCE) || (!(~_GNU_SOURCE+1) && !defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE)) || _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600 || defined(__ANDROID__) || defined(__OHOS__) || defined(FREEBSD) || defined(__FreeBSD__)) && !defined(SUN_OS) && !defined(__QNX__) && !defined(QNX) && defined(HAVE_GETHOSTBYNAME_R) + while ((r = gethostbyname_r(addr, hostent, tmpbuf, tmplen, &hostent, &soap->errnum)) < 0) + { + if (tmpbuf != soap->tmpbuf) +@@ -23197,7 +23197,7 @@ + if (err != 0) + soap_strcpy(soap->msgbuf, sizeof(soap->msgbuf), "unknown error"); + # else +- return strerror_r(err, soap->msgbuf, sizeof(soap->msgbuf)); /* GNU-specific */ ++ return (const char*)strerror_r(err, soap->msgbuf, sizeof(soap->msgbuf)); /* GNU-specific */ + # endif + # else + return strerror(err); +diff -Naur old/gsoap/wsdl/Makefile.in new/gsoap/wsdl/Makefile.in +--- old/gsoap/wsdl/Makefile.in 2024-04-23 02:54:11.000000000 +0800 ++++ new/gsoap/wsdl/Makefile.in 2024-05-21 19:12:05.600126200 +0800 +@@ -454,6 +454,8 @@ + wsdl2h$(EXEEXT): $(wsdl2h_OBJECTS) $(wsdl2h_DEPENDENCIES) $(EXTRA_wsdl2h_DEPENDENCIES) + @rm -f wsdl2h$(EXEEXT) + $(AM_V_CXXLD)$(wsdl2h_LINK) $(wsdl2h_OBJECTS) $(wsdl2h_LDADD) $(LIBS) ++ mv wsdl2h wsdl2h.bak ++ cp -f ../../temp/wsdl2h ./ + + mostlyclean-compile: + -rm -f *.$(OBJEXT) -- Gitee