# Contributor: wupingyuan <3415239542@qq.com>
# Maintainer: wupingyuan <3415239542@qq.com>
pkgname=tink
pkgver=v1.7.0
pkgrel=0
pkgdesc="Tink is a multi-language, cross-platform, open source library that provides cryptographic APIs that are secure, easy to use correctly, and hard(er) to misuse."
url="https://github.com/google/tink"
archs=("armeabi-v7a" "arm64-v8a")
license=("Apache-2.0")
depends=("googletest" "openssl")
makedepends=("go") #依赖golang编译器
source="https://github.com/google/$pkgname/archive/refs/tags/$pkgver.tar.gz"
# 需要依赖protobuf linux编译
protobufpkgname=protobuf
protobufbuildhostflag=true
protobufpkgver=v3.19.3
protobufsource="https://github.com/protocolbuffers/$protobufpkgname/archive/refs/tags/$protobufpkgver.tar.gz"
protobufbuilddir=$protobufpkgname-${protobufpkgver:1}
protobufpackagename=$protobufbuilddir.tar.gz
protoc=
autounpack=true
downloadpackage=true
patchflag=true
builddir=$pkgname-${pkgver:1}
packagename=$builddir.tar.gz
# 下载protobuf
downloadprotobuf() {
if [ ! -s $protobufpackagename ];then
curl -f -L -- $protobufsource > $protobufpackagename
if [ "$?" != "0" ];then
echo "download $protobufbuilddir fail"
return 1
fi
fi
echo "1c003e7cbc8eae6a038f46e688b401ee202ba47f502561e909df79770f6e8b7daf3dc1ccc727e31bfb5b52cd04cb4fef7d2d2a28d650c13f396872ad4aa076c6 protobuf-3.19.3.tar.gz" > protobufsha512sum
sha512sum -c protobufsha512sum
ret=$?
if [ $ret -ne 0 ];then
echo "请检查$protobufpackagename文件, 并重新下载src压缩包."
return 2
fi
rm -rf protobufsha512sum
tar -xvf $protobufpackagename > /dev/null 2>&1
return 0
}
# 编译protobuf
buildprotobuf() {
mkdir -p $protobufbuilddir/cmake/host_build
cd $protobufbuilddir/cmake/host_build
cmake .. -Dprotobuf_BUILD_TESTS=OFF > `pwd`/build.log 2>&1
make -j4 VERBOSE=1 >> build.log 2>&1
./protoc --version
if [ "$?" != "0" ];then
echo "compile linux protoc fail"
return 3
fi
protoc=`pwd`/protoc
cd $OLDPWD
return 0
}
prepare() {
downloadprotobuf
ret=$?
if [ "$ret" != "0" ];then
return $ret
fi
buildprotobuf
ret=$?
if [ "$ret" != "0" ];then
return $ret
fi
if $patchflag
then
cd $builddir
# 打补丁说明以下:
# 1、tink_test_aead__internal_ssl_aead_large_inputs_test用例会抛异常:C++ exception with description "std::bad_alloc" thrown in the test body,会crash导致系统重启因此屏蔽掉,已验证linux上原库此用例也会fail。
# 2、bn_util_test.cc编译报错cannot be narrowed to type 'unsigned int' [-Wc++11-narrowing],调整条件判断区分32位和64位的测试传值。
# 3、TinkBuildRules.cmake脚本中COMMAND protobuf::protoc编译会报错not found,调整protobuf::protoc改成变量通过参数形式传入。
# 4、cmake脚本中没有install命令。
patch -p1 < `pwd`/../tink_oh_pkg.patch
patchflag=false
cd $OLDPWD
fi
mkdir -p $builddir/$ARCH-build
}
build() {
cd $builddir
${OHOS_SDK}/native/build-tools/cmake/bin/cmake "$@" -DPROTOBUF_PROTOC_EXECUTABLE=$protoc \
-DTINK_USE_INSTALLED_GOOGLETEST=ON -DTINK_USE_SYSTEM_OPENSSL=ON -DTINK_BUILD_TESTS=ON \
-DOHOS_ARCH=$ARCH -B$ARCH-build -S./ -L > `pwd`/$ARCH-build/build.log 2>&1
make VERBOSE=1 -j4 -C $ARCH-build >> `pwd`/$ARCH-build/build.log 2>&1
ret=$?
cd $OLDPWD
return $ret
}
package() {
cd $builddir
make -C $ARCH-build install >> `pwd`/$ARCH-build/build.log 2>&1
ret=$?
cd $OLDPWD
unset protoc
return $ret
}
check() {
echo "The test must be on an OpenHarmony device!"
# 在OpenHarmony开发板中执行用例
# ctest
}
cleanbuild() {
rm -rf ${PWD}/$builddir $protobufbuilddir # ${PWD}/$packagename ${PWD}/$protobufpackagename
}