aports/testing/elektra/APKBUILD

392 lines
9.4 KiB
Text

# Contributor: Jakub Jirutka <jakub@jirutka.cz>
# Maintainer: Jakub Jirutka <jakub@jirutka.cz>
# TODO: Add rest of the tools.
# TODO: Fix some scripts/tools to not require bash.
# TODO: Use system-provided gtest library for testing.
pkgname=elektra
_pkgname=libelektra
pkgver=0.8.21
pkgrel=24
pkgdesc="A universal and secure framework to access configuration parameters"
url="https://www.libelektra.org"
#arch="all !armhf" # armhf blocked by qt5-qtdeclarative
license="BSD-3-Clause"
_luaver=5.3
# kdb doesn't work correctly without these plugins.
depends="$pkgname-dump=$pkgver-r$pkgrel
$pkgname-list=$pkgver-r$pkgrel
$pkgname-spec=$pkgver-r$pkgrel
$pkgname-sync=$pkgver-r$pkgrel"
checkdepends="bash gnupg ruby-test-unit"
makedepends="
augeas-dev
boost-dev
cmake
curl-dev
discount discount-dev
musl-fts-dev
libdrm-dev
libgcrypt-dev
libgit2-dev
openssl-dev>3
lua$_luaver-dev
glib-dev
python3-dev
qt5-qtbase-dev
qt5-qtdeclarative-dev
qt5-qtsvg-dev
ruby ruby-dev
samurai
swig
yajl-dev
yaml-cpp-dev
"
install="$pkgname.post-deinstall"
triggers="$pkgname.trigger=/usr/lib/$pkgname"
subpackages="
$pkgname-dev
$pkgname-doc
$pkgname-glib
lua$_luaver-elektra:_lua
py3-elektra:_py3
ruby-elektra:_ruby
$pkgname-qt-gui:_gui
$pkgname-libs
$pkgname-bash-completion
$pkgname-fish-completion
$pkgname-zsh-completion
$pkgname-plugins-all:_all:noarch
"
source="$_pkgname-$pkgver.tar.gz::https://github.com/ElektraInitiative/libelektra/archive/$pkgver.tar.gz
fix-bash-shebang.patch
fix-augeas-internal-inconsistency.patch
cmake-allow-override-rpath.patch
benchmark-dupe.patch
gcc12.patch
musl-1.2.3.patch
remove-unneeded-assembly.patch
"
builddir="$srcdir/$_pkgname-$pkgver"
# All plugins except:
# * status:obsolete
# * status:experimental
# * journald - considered evil
# * wresolver - resolver for non-POSIX, e.g. w32/w64 systems
# * xerces - we don't have xerces package
# * yamlcpp - segfaults FIXME
_plugins="
augeas
base64
boolean
c
cachefilter
camel
ccode
conditionals
constants
counter
crypto_gcrypt
crypto_openssl
csvstorage
curlget
date
desktop
dini
directoryvalue
dpkg
dump
enum
error
fcrypt
filecheck
fstab
gitresolver
glob
hexcode
hidden
hosts
iconv
ini
ipaddr
keytometa
line
lineendings
list
logchange
lua
mathcheck
mini
multifile
network
ni
noresolver
null
path
profile
range
regexstore
rename
required
resolver_fm_b_b
resolver_fm_pb_b
resolver_fm_hb_b
resolver_fm_hp_b
resolver_fm_ub_x
resolver_fm_xb_x
resolver_fm_xp_x
resolver_fm_xhp_x
resolver_fm_uhb_xb
resolver_fm_hpu_b
shell
spec
struct
sync
syslog
tcl
timeofday
tracer
type
uname
validation
xmltool
yajl
"
for _i in $_plugins; do
subpackages="$subpackages $pkgname-$_i:_plugin"
done
# All bindings except:
# * status:experimental
# * intercept_env - currently doesn't work on musl (0.8.21)
_bindings="
cpp
glib
swig_lua
swig_python
swig_ruby
"
build() {
cmake -B build -G Ninja \
-DCMAKE_BUILD_TYPE=MinSizeRel \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_INSTALL_RPATH=/usr/lib/$pkgname \
-DTARGET_PLUGIN_FOLDER=$pkgname \
-DCMAKE_VERBOSE_MAKEFILE=OFF \
-DBUILD_DOCUMENTATION=OFF \
-DBUILD_SHARED_LIBS=ON \
-DBUILD_STATIC=OFF \
\
-DENABLE_DEBUG=OFF \
-DENABLE_LOGGER=OFF \
-DINSTALL_TESTING=OFF \
-DBINDINGS="$(printf '%s;' $_bindings)" \
-DPLUGINS="$(printf '%s;' $_plugins)" \
-DTOOLS='kdb;qt-gui' \
\
-DLUA_LIBRARIES="/usr/lib/liblua-$_luaver.so.0" \
-DLUA_INCLUDE_DIR="$(pkg-config --variable=includedir lua$_luaver )" \
-DTARGET_LUA_CMOD_FOLDER="$(pkg-config --variable=INSTALL_LMOD lua$_luaver)" \
-DTARGET_LUA_CMOD_FOLDER="$(pkg-config --variable=INSTALL_CMOD lua$_luaver)"
cmake --build build
}
check() {
cd "$builddir"/build
# Run tests that doesn't need to write into /etc.
# FIXME: Allow tests to fail for now.
ninja run_nokdbtests || true
}
package() {
# These are virtual providers. abuild doesn't recognize them as
# produced by this APKBUILD and tries to install them as make
# dependencies. That's why they are defined in package().
depends="$depends $pkgname-resolver"
DESTDIR="$pkgdir" cmake --install build
# This is a shell script that just executes /usr/lib/elektra/tool_exec/qt-gui.
# It was originally made as a workaround for some RPATH issue we don't have.
rm "$pkgdir"/usr/bin/elektra-qt-editor
cd "$pkgdir"/usr/lib/elektra
# We create these symlinks in trigger, so they are correctly updated
# when user install a different provider.
rm libelektra-resolver.so libelektra-storage.so
## Delete some useless or unusable tools.
# Completions are in separate packages.
rm tool_exec/install-sh-completion
# This seems to be just for development.
rm tool_exec/benchmark-createtree
rm tool_exec/update-snippet-repository
# Needs experimental plugin mozprefs.
rm tool_exec/configure-firefox
# Needs binding intercept_env.
rm tool_exec/elektrify-getenv
# Needs experimental binding intercept_fs.
rm tool_exec/elektrify-open
}
libs() {
default_libs
mv "$pkgdir"/usr/lib/*.so.* "$subpkgdir"/usr/lib/
}
glib() {
pkgdesc="Glib bindings for Elektra"
depends=""
_submv usr/lib/libgelektra-*.so
}
_lua() {
pkgdesc="Lua $_luaver bindings for Elektra"
depends=""
_submv usr/lib/lua
}
_py3() {
pkgdesc="Python 3 bindings for Elektra"
depends=""
_submv usr/lib/python3.*
}
_ruby() {
pkgdesc="Ruby bindings for Elektra"
depends=""
_submv usr/lib/ruby
}
_gui() {
pkgdesc="Qt GUI for Elektra"
depends="$depends $pkgname-resolver"
_submv usr/lib/elektra/tool_exec/qt-gui usr/bin/elektra-qt-editor
_submv usr/share/appdata
_submv usr/share/applications
_submv usr/share/icons
}
zshcomp() {
pkgdesc="ZSH completions for $pkgname"
depends=""
install_if="$pkgname=$pkgver-r$pkgrel zsh"
_submv usr/share/zsh/vendor-completions usr/share/zsh/site-functions
}
_plugin() {
local name=${subpkgname#$pkgname-}
local readme="$builddir/src/plugins/${name%%_*}/README.md"
[ -f "$readme" ] || die "$readme doesn't exist!"
pkgdesc="Elektra plugin - $(_getinfo description "$readme")"
depends=$(_to_pkgnames "$(_getinfo needs \"$readme\" '')" | xargs)
if provides=$(_getinfo provides "$readme"); then
# Convert plugin names to package names.
provides=$(_to_pkgnames $provides)
# Remove pkgnames clashing with subpackages.
: "${_plugins_pkgname:=$(printf \"$pkgname-%s\\n\" $_plugins dev doc libs)}"
provides=$(_set_difference "$provides" "$_plugins_pkgname" | xargs)
fi
# Overrides
case "$name" in
base64)
provider_priority=50;; # provides binary
crypto_gcrypt)
depends="$depends gnupg"
provider_priority=50;; # provides crypto
crypto_*)
depends="$depends gnupg";;
dini)
depends="$depends $pkgname-dump $pkgname-ini"
provider_priority=40;; # provides storage storage-ini
dump)
provider_priority=50;; # provides storage
hexcode)
provider_priority=50;; # provides code
resolver_fm_hpu_b)
provider_priority=50;; # provides resolver
esac
msg "Resolved provides: $provides"
msg "Resolved depends: $depends"
_submv usr/lib/elektra/libelektra-$name.so*
}
_all() {
pkgdesc="Virtual package that installs *all* plugins shipped with Elektra"
depends=$(printf "$pkgname-%s=$pkgver-r$pkgrel\n" $_plugins)
mkdir -p "$subpkgdir"
}
# Prints value of property $1 in the plugin's readme file $2,
# or prints $3 if no value.
_getinfo() {
local name="$1"
local file="$2"
local default="${3:-}"
local value
value=$(sed -n "s|^- infos/$name = *\(.*\) *|\1|p" "$file")
[ "$value$default" ]
printf '%s\n' "${value:-$default}"
}
# Converts plugin names $@ into package names, i.e. adds prefix $pkgname-
# and replaces "/" with "-".
_to_pkgnames() {
local item; for item in "$@"; do
case "$item" in
*/*) echo "$pkgname-${item%%/*}"
echo "$pkgname-$item" | tr '/' '-';;
*) echo "$pkgname-$item";;
esac
done
}
# Prints space-separated items from $1 that are not in $2.
_set_difference() {
printf '%s\n' $1 $2 $2 | sort | uniq -u
}
# Moves file/directory $1 from the $pkgdir to $2 (or $1 if $2 not given)
# in the $subpkgdir.
_submv() {
local src="$1"
local dest="${2:-}"
if [ "$dest" ]; then
mkdir -p "$subpkgdir"/${dest%/*}
mv "$pkgdir"/$src "$subpkgdir"/$dest
else
mkdir -p "$subpkgdir"/${src%/*}
mv "$pkgdir"/$src "$subpkgdir"/${src%/*}/
fi
rmdir -p "$pkgdir"/${src%/*} 2>/dev/null || true
}
sha512sums="
9ad3bb7eeb36d921189d93cb347ec73262503d85397b574ef603080cee52d1959752740e5018a0e7eb5dc187bce8aae3b6fc0057a6385bce94e5338604c6bc57 libelektra-0.8.21.tar.gz
cbfe8b96a806825d5f7194734a646bdb3fb273bf6be44b3b47e9b2f63bf90a7ece867e74808da743ff33211abba0682aba55d02a3dbfa0a5efc3dc821444bd87 fix-bash-shebang.patch
48d645142bf63282e13d1c76c1ddedc5633e365a1a87d0cd49c75fa801eed44b57fb66eee49badc7a9e6210f6ccd2af82779f0658f90263fd23b959f4e70b84c fix-augeas-internal-inconsistency.patch
717b343b6509d14949a154bbbf13d5722f47f97717dbd839763fc89f8f9033d5214f903df23b4ca7f196ae9dbfe6a3348542411c714e471ca4a50b39bdff3abc cmake-allow-override-rpath.patch
21f3f9cf874663b6ad60446d59830e8b59c16d9fb02df6c8ecb78f9fc5c785bc965d5325d46fd4b92e38c632b9b1641f13370bace69636049e172ec1f3da506b benchmark-dupe.patch
0dd760f0a0c063fbe67f581945262e3846440ca2c5e656337b2529c9fcea3145777105372af86f4adefe3fd361309ee00f5bd584891172af7713ffb445511868 gcc12.patch
9c21cce9247e76996286fefa68910e2cfafb24c1dc4af6711e9d37cf6cbe2c684072753395d98b04babaa93418722126cfa745f6a3e143ea1ace39fabc4d93a2 musl-1.2.3.patch
9ca27100c7b9e3b64146a4733e7007c6175ba475415cf7523315d21ba8fcfff65e3769ee2e9d59cdf2eb943a5c49786c4811e4deec6c694964da7e0e5292c1f9 remove-unneeded-assembly.patch
"