aboutsummaryrefslogtreecommitdiff
path: root/common/hooks
diff options
context:
space:
mode:
authorJuan RP <xtraeme@voidlinux.eu>2016-04-27 18:16:59 +0000
committerJuan RP <xtraeme@voidlinux.eu>2016-04-27 18:16:59 +0000
commitd2bac19750507c10fcb4c3a92017cdec03184885 (patch)
treef28dbee41feb83a8ce75a36694cf6d8c9c6566aa /common/hooks
parent78c601e18ef00aa7dbe8e191b56e8992f0eadf72 (diff)
downloadvoid-packages-d2bac19750507c10fcb4c3a92017cdec03184885.tar
void-packages-d2bac19750507c10fcb4c3a92017cdec03184885.tar.gz
void-packages-d2bac19750507c10fcb4c3a92017cdec03184885.tar.bz2
void-packages-d2bac19750507c10fcb4c3a92017cdec03184885.tar.lz
void-packages-d2bac19750507c10fcb4c3a92017cdec03184885.tar.xz
void-packages-d2bac19750507c10fcb4c3a92017cdec03184885.tar.zst
void-packages-d2bac19750507c10fcb4c3a92017cdec03184885.zip
xbps-src: re-introduce etc/virtual.
The `etc/virtual` file declares the default package to be built for virtual dependencies declared as "virtual?foo" in $depends. Before this change, the run-time dependency was added as is to the final binary package but no pkg providing this virtual pkg was built. With this file we declare the *default* pkg to be built. NOTE: "virtual?foo" is only applicable to *run* time dependencies, i.e only those declared in $depends.
Diffstat (limited to 'common/hooks')
-rw-r--r--common/hooks/pre-pkg/04-generate-runtime-deps.sh317
1 files changed, 164 insertions, 153 deletions
diff --git a/common/hooks/pre-pkg/04-generate-runtime-deps.sh b/common/hooks/pre-pkg/04-generate-runtime-deps.sh
index 9a6cc592e4c..17616de77f8 100644
--- a/common/hooks/pre-pkg/04-generate-runtime-deps.sh
+++ b/common/hooks/pre-pkg/04-generate-runtime-deps.sh
@@ -1,170 +1,181 @@
+# vim: set ts=4 sw=4 et:
+#
# This hook executes the following tasks:
-# - Generates rdeps file with run-time dependencies for xbps-create(8)
-# - Generates shlib-requires file for xbps-create(8)
+# - Generates rdeps file with run-time dependencies for xbps-create(1)
+# - Generates shlib-requires file for xbps-create(1)
add_rundep() {
- local dep="$1" i= rpkgdep= _depname= _rdeps= found=
+ local dep="$1" i= rpkgdep= _depname= _rdeps= found=
- _depname="$($XBPS_UHELPER_CMD getpkgdepname ${dep} 2>/dev/null)"
- if [ -z "${_depname}" ]; then
- _depname="$($XBPS_UHELPER_CMD getpkgname ${dep} 2>/dev/null)"
- fi
+ _depname="$($XBPS_UHELPER_CMD getpkgdepname ${dep} 2>/dev/null)"
+ if [ -z "${_depname}" ]; then
+ _depname="$($XBPS_UHELPER_CMD getpkgname ${dep} 2>/dev/null)"
+ fi
- for i in ${run_depends}; do
- rpkgdep="$($XBPS_UHELPER_CMD getpkgdepname $i 2>/dev/null)"
- if [ -z "$rpkgdep" ]; then
- rpkgdep="$($XBPS_UHELPER_CMD getpkgname $i 2>/dev/null)"
- fi
- if [ "${rpkgdep}" != "${_depname}" ]; then
- continue
- fi
- $XBPS_UHELPER_CMD cmpver "$i" "$dep"
- rval=$?
- if [ $rval -eq 255 ]; then
- run_depends="${run_depends/${i}/${dep}}"
- fi
- found=1
- done
- if [ -z "$found" ]; then
- run_depends+=" ${dep}"
- fi
+ for i in ${run_depends}; do
+ rpkgdep="$($XBPS_UHELPER_CMD getpkgdepname $i 2>/dev/null)"
+ if [ -z "$rpkgdep" ]; then
+ rpkgdep="$($XBPS_UHELPER_CMD getpkgname $i 2>/dev/null)"
+ fi
+ if [ "${rpkgdep}" != "${_depname}" ]; then
+ continue
+ fi
+ $XBPS_UHELPER_CMD cmpver "$i" "$dep"
+ rval=$?
+ if [ $rval -eq 255 ]; then
+ run_depends="${run_depends/${i}/${dep}}"
+ fi
+ found=1
+ done
+ if [ -z "$found" ]; then
+ run_depends+=" ${dep}"
+ fi
+}
+
+store_pkgdestdir_rundeps() {
+ if [ -n "$run_depends" ]; then
+ : > ${PKGDESTDIR}/rdeps
+ for f in ${run_depends}; do
+ _curdep="$(echo "$f" | sed -e 's,\(.*\)?.*,\1,')"
+ if [ -z "$($XBPS_UHELPER_CMD getpkgdepname ${_curdep} 2>/dev/null)" -a \
+ -z "$($XBPS_UHELPER_CMD getpkgname ${_curdep} 2>/dev/null)" ]; then
+ _curdep="${_curdep}>=0"
+ fi
+ printf "${_curdep} " >> ${PKGDESTDIR}/rdeps
+ done
+ fi
}
hook() {
- local depsftmp f j tmplf mapshlibs sorequires
+ local depsftmp f j tmplf mapshlibs sorequires _curdep
+
+ # Disable trap on ERR, xbps-uhelper cmd might return error... but not something
+ # to be worried about because if there are broken shlibs this hook returns
+ # error via msg_error().
+ trap - ERR
- # Disable trap on ERR, xbps-uhelper cmd might return error... but not something
- # to be worried about because if there are broken shlibs this hook returns
- # error via msg_error().
- trap - ERR
+ mapshlibs=$XBPS_COMMONDIR/shlibs
+ tmplf=$XBPS_SRCPKGDIR/$pkgname/template
- mapshlibs=$XBPS_COMMONDIR/shlibs
- tmplf=$XBPS_SRCPKGDIR/$pkgname/template
+ if [ -n "$noarch" -o -n "$noverifyrdeps" ]; then
+ store_pkgdestdir_rundeps
+ return 0
+ fi
- if [ -n "$noarch" -o -n "$noverifyrdeps" ]; then
- echo "$run_depends" > ${PKGDESTDIR}/rdeps
- sed 's,virtual?,,g' -i ${PKGDESTDIR}/rdeps
- return 0
- fi
+ depsftmp=$(mktemp -t xbps_src_depstmp.XXXXXXXXXX) || return 1
+ find ${PKGDESTDIR} -type f -perm -u+w > $depsftmp 2>/dev/null
- depsftmp=$(mktemp -t xbps_src_depstmp.XXXXXXXXXX) || return 1
- find ${PKGDESTDIR} -type f -perm -u+w > $depsftmp 2>/dev/null
+ exec 3<&0 # save stdin
+ exec < $depsftmp
+ while read f; do
+ case "$(file -bi "$f")" in
+ application/x-executable*|application/x-sharedlib*)
+ for nlib in $($OBJDUMP -p "$f"|grep NEEDED|awk '{print $2}'); do
+ if [ -z "$verify_deps" ]; then
+ verify_deps="$nlib"
+ continue
+ fi
+ for j in ${verify_deps}; do
+ [ "$j" != "$nlib" ] && continue
+ found_dup=1
+ break
+ done
+ if [ -z "$found_dup" ]; then
+ verify_deps="$verify_deps $nlib"
+ fi
+ unset found_dup
+ done
+ ;;
+ esac
+ done
+ exec 0<&3 # restore stdin
+ rm -f $depsftmp
- exec 3<&0 # save stdin
- exec < $depsftmp
- while read f; do
- case "$(file -bi "$f")" in
- application/x-executable*|application/x-sharedlib*)
- for nlib in $($OBJDUMP -p "$f"|grep NEEDED|awk '{print $2}'); do
- if [ -z "$verify_deps" ]; then
- verify_deps="$nlib"
- continue
- fi
- for j in ${verify_deps}; do
- [ "$j" != "$nlib" ] && continue
- found_dup=1
- break
- done
- if [ -z "$found_dup" ]; then
- verify_deps="$verify_deps $nlib"
- fi
- unset found_dup
- done
- ;;
- esac
- done
- exec 0<&3 # restore stdin
- rm -f $depsftmp
+ #
+ # Add required run time packages by using required shlibs resolved
+ # above, the mapping is done thru the mapping_shlib_binpkg.txt file.
+ #
+ for f in ${verify_deps}; do
+ unset _f j rdep _rdep rdepcnt soname _pkgname _rdepver found
+ _f=$(echo "$f"|sed -E 's|\+|\\+|g')
+ rdep="$(grep -E "^${_f}[[:blank:]]+.*$" $mapshlibs|awk '{print $2}')"
+ rdepcnt="$(grep -E "^${_f}[[:blank:]]+.*$" $mapshlibs|awk '{print $2}'|wc -l)"
+ if [ -z "$rdep" ]; then
+ # Ignore libs by current pkg
+ soname=$(find ${PKGDESTDIR} -name "$f")
+ if [ -z "$soname" ]; then
+ msg_red_nochroot " SONAME: $f <-> UNKNOWN PKG PLEASE FIX!\n"
+ broken=1
+ else
+ echo " SONAME: $f <-> $pkgname (ignored)"
+ fi
+ continue
+ elif [ "$rdepcnt" -gt 1 ]; then
+ unset j found
+ # Check if shlib is provided by multiple pkgs.
+ for j in ${rdep}; do
+ _pkgname=$($XBPS_UHELPER_CMD getpkgname "$j")
+ # if there's a SONAME matching pkgname, use it.
+ for x in ${pkgname} ${subpackages}; do
+ if [ "${_pkgname}" = "${x}" ]; then
+ found=1
+ break
+ fi
+ done
+ if [ -n "$found" ]; then
+ _rdep=$j
+ break
+ fi
+ done
+ if [ -z "${_rdep}" ]; then
+ # otherwise pick up the first one.
+ for j in ${rdep}; do
+ [ -z "${_rdep}" ] && _rdep=$j
+ done
+ fi
+ else
+ _rdep=$rdep
+ fi
+ _pkgname=$($XBPS_UHELPER_CMD getpkgname "${_rdep}" 2>/dev/null)
+ _rdepver=$($XBPS_UHELPER_CMD getpkgversion "${_rdep}" 2>/dev/null)
+ if [ -z "${_pkgname}" -o -z "${_rdepver}" ]; then
+ msg_red_nochroot " SONAME: $f <-> UNKNOWN PKG PLEASE FIX!\n"
+ broken=1
+ continue
+ fi
+ # Check if pkg is a subpkg of sourcepkg; if true, ignore version
+ # in common/shlibs.
+ _sdep="${_pkgname}>=${_rdepver}"
+ for _subpkg in ${subpackages}; do
+ if [ "${_subpkg}" = "${_pkgname}" ]; then
+ _sdep="${_pkgname}-${version}_${revision}"
+ break
+ fi
+ done
- #
- # Add required run time packages by using required shlibs resolved
- # above, the mapping is done thru the mapping_shlib_binpkg.txt file.
- #
- for f in ${verify_deps}; do
- unset _f j rdep _rdep rdepcnt soname _pkgname _rdepver found
- _f=$(echo "$f"|sed -E 's|\+|\\+|g')
- rdep="$(grep -E "^${_f}[[:blank:]]+.*$" $mapshlibs|awk '{print $2}')"
- rdepcnt="$(grep -E "^${_f}[[:blank:]]+.*$" $mapshlibs|awk '{print $2}'|wc -l)"
- if [ -z "$rdep" ]; then
- # Ignore libs by current pkg
- soname=$(find ${PKGDESTDIR} -name "$f")
- if [ -z "$soname" ]; then
- msg_red_nochroot " SONAME: $f <-> UNKNOWN PKG PLEASE FIX!\n"
- broken=1
- else
- echo " SONAME: $f <-> $pkgname (ignored)"
- fi
- continue
- elif [ "$rdepcnt" -gt 1 ]; then
- unset j found
- # Check if shlib is provided by multiple pkgs.
- for j in ${rdep}; do
- _pkgname=$($XBPS_UHELPER_CMD getpkgname "$j")
- # if there's a SONAME matching pkgname, use it.
- for x in ${pkgname} ${subpackages}; do
- if [ "${_pkgname}" = "${x}" ]; then
- found=1
- break
- fi
- done
- if [ -n "$found" ]; then
- _rdep=$j
- break
- fi
- done
- if [ -z "${_rdep}" ]; then
- # otherwise pick up the first one.
- for j in ${rdep}; do
- [ -z "${_rdep}" ] && _rdep=$j
- done
- fi
- else
- _rdep=$rdep
- fi
- _pkgname=$($XBPS_UHELPER_CMD getpkgname "${_rdep}" 2>/dev/null)
- _rdepver=$($XBPS_UHELPER_CMD getpkgversion "${_rdep}" 2>/dev/null)
- if [ -z "${_pkgname}" -o -z "${_rdepver}" ]; then
- msg_red_nochroot " SONAME: $f <-> UNKNOWN PKG PLEASE FIX!\n"
- broken=1
- continue
- fi
- # Check if pkg is a subpkg of sourcepkg; if true, ignore version
- # in common/shlibs.
- _sdep="${_pkgname}>=${_rdepver}"
- for _subpkg in ${subpackages}; do
- if [ "${_subpkg}" = "${_pkgname}" ]; then
- _sdep="${_pkgname}-${version}_${revision}"
- break
- fi
- done
+ if [ "${_pkgname}" != "${pkgname}" ]; then
+ echo " SONAME: $f <-> ${_sdep}"
+ sorequires+="${f} "
+ else
+ # Ignore libs by current pkg
+ echo " SONAME: $f <-> ${_rdep} (ignored)"
+ continue
+ fi
+ add_rundep "${_sdep}"
+ done
+ #
+ # If pkg uses any unknown SONAME error out.
+ #
+ if [ -n "$broken" -a -z "$allow_unknown_shlibs" ]; then
+ msg_error "$pkgver: cannot guess required shlibs, aborting!\n"
+ fi
- if [ "${_pkgname}" != "${pkgname}" ]; then
- echo " SONAME: $f <-> ${_sdep}"
- sorequires+="${f} "
- else
- # Ignore libs by current pkg
- echo " SONAME: $f <-> ${_rdep} (ignored)"
- continue
- fi
- add_rundep "${_sdep}"
- done
- #
- # If pkg uses any unknown SONAME error out.
- #
- if [ -n "$broken" -a -z "$allow_unknown_shlibs" ]; then
- msg_error "$pkgver: cannot guess required shlibs, aborting!\n"
- fi
+ store_pkgdestdir_rundeps
- if [ -n "$run_depends" ]; then
- echo "$run_depends" > ${PKGDESTDIR}/rdeps
- fi
- if [ -s ${PKGDESTDIR}/rdeps ]; then
- sed 's,virtual?,,g' -i ${PKGDESTDIR}/rdeps
- fi
- for f in ${shlib_requires}; do
- sorequires+="${f} "
- done
- if [ -n "${sorequires}" ]; then
- echo "${sorequires}" > ${PKGDESTDIR}/shlib-requires
- fi
+ for f in ${shlib_requires}; do
+ sorequires+="${f} "
+ done
+ if [ -n "${sorequires}" ]; then
+ echo "${sorequires}" > ${PKGDESTDIR}/shlib-requires
+ fi
}