From 26ab531a0abac615aaedf17622ee2aa5e19c5114 Mon Sep 17 00:00:00 2001 From: Marcel Telka <marcel@telka.sk> Date: Fri, 05 Apr 2024 12:30:27 +0200 Subject: [PATCH] python/pipdeptree: update to 2.17.0 --- tools/perl-meta-deps | 100 +++++++++++++++++++++++++++++++++----------------- 1 files changed, 66 insertions(+), 34 deletions(-) diff --git a/tools/perl-meta-deps b/tools/perl-meta-deps index 24c6758..a8c9d70 100755 --- a/tools/perl-meta-deps +++ b/tools/perl-meta-deps @@ -18,7 +18,7 @@ function usage { [[ -n "$1" ]] && printf "ERROR: %s\n\n" "$1" - printf "Usage: perl-meta-deps BUILD_DIR [runtime] PERL_VERSION\n" >&2 + printf "Usage: perl-meta-deps WS_MACH BUILD_DIR [configure|build|test|runtime]... [suggests] PERL_VERSION\n" >&2 [[ -n "$1" ]] && exit 1 exit 0 } @@ -26,67 +26,97 @@ (($# == 0)) && usage +WS_MACH="$1" +[[ -d "$WS_MACH" ]] && shift || usage "WS_MACH does not exist" + BUILD_DIR="$1" [[ -d "$BUILD_DIR" ]] && shift || usage "BUILD_DIR does not exist" -PHASES=".configure,.build,.test,.runtime" -[[ "$1" == "runtime" ]] && PHASES=".runtime" && shift +PHASES= +while true ; do + case "$1" in + configure|build|test|runtime) + PHASES="$PHASES,.$1" && shift ;; + *) break ;; + esac +done +PHASES=${PHASES/#,} +[[ -z "$PHASES" ]] && PHASES=".configure,.build,.test,.runtime" + +RELATION=".requires,.recommends" +[[ "$1" == "suggests" ]] && RELATION=".$1" && shift (($# == 0)) && usage "PERL_VERSION missing" PERLVER=$1 && shift PLV=${PERLVER//.} PERL=/usr/perl5/$PERLVER/bin/perl -[[ -x "$PERL" ]] || usage "perl $PERLVER not found" +[[ -x "$PERL" ]] || usage "Perl $PERLVER not found" PERL_ARCH=$($PERL -e 'use Config; print $Config{archname}') -(($# != 0)) && usage "Too much arguments" +(($# != 0)) && usage "Too many arguments" PERL_VERSION_CONVERT="$(dirname $0)/perl-version-convert" [[ ! -x "$PERL_VERSION_CONVERT" ]] && printf "ERROR: perl-version-convert not found" && exit 1 +CACHEDIR="$WS_MACH/perl-meta-deps-cache" +mkdir -p "$CACHEDIR" +# Remove old entries from the cache +find "$CACHEDIR" -type f -mtime +7 -exec rm -f {} \; -printf "\n# Automatically generated dependencies based on distribution metadata\n" -/usr/bin/jq -r '.prereqs|'"$PHASES"'|.requires|to_entries?|.[]|.key+" "+.value' | while read PREREQ VERSION ; do +/usr/bin/jq -r '.prereqs|'"$PHASES"'|'"$RELATION"'|to_entries?|.[]|.key+" "+(.value|tostring)' | while read PREREQ VERSION ; do # Convert perl version number to pkg(5) compatible form VER=$("$PERL_VERSION_CONVERT" "$PREREQ" "$VERSION") [[ "$VER" != "0" ]] && VER="@$VER" || VER= - MANIFEST="$BUILD_DIR/META-${PREREQ//::/-}" + CACHEFILE="$CACHEDIR/$PREREQ-$PERLVER" - # Prepare manifest - if [[ "$PREREQ" == "perl" ]] ; then - # "perl" is special case - cat <<#EOF > "$MANIFEST" - depend fmri=__TBD type=require pkg.debug.depend.file=$PREREQ \\ - pkg.debug.depend.path=usr/perl5/$PERLVER/bin - EOF - else - cat <<#EOF > "$MANIFEST" - depend fmri=__TBD type=require pkg.debug.depend.file=${PREREQ//:://}.pm \\ - pkg.debug.depend.path=usr/perl5/$PERLVER/lib \\ - pkg.debug.depend.path=usr/perl5/$PERLVER/lib/$PERL_ARCH \\ - pkg.debug.depend.path=usr/perl5/vendor_perl/$PERLVER \\ - pkg.debug.depend.path=usr/perl5/vendor_perl/$PERLVER/$PERL_ARCH - EOF + # Resolve the dependency if not in cache already + if [[ ! -e "$CACHEFILE" || ("$RELATION" != ".suggests" && ! -s "$CACHEFILE") ]] ; then + # We must replace '::' by '-' otherwise 'pkgdepend resolve' fails + MANIFEST="$BUILD_DIR/META-${PREREQ//::/-}-$PERLVER" + + # Prepare manifest + if [[ "$PREREQ" == "perl" ]] ; then + # "perl" is special case + cat <<#EOF > "$MANIFEST" + depend fmri=__TBD type=require pkg.debug.depend.file=$PREREQ \\ + pkg.debug.depend.path=usr/perl5/$PERLVER/bin + EOF + else + cat <<#EOF > "$MANIFEST" + depend fmri=__TBD type=require pkg.debug.depend.file=${PREREQ//:://}.pm \\ + pkg.debug.depend.path=usr/perl5/$PERLVER/lib \\ + pkg.debug.depend.path=usr/perl5/$PERLVER/lib/$PERL_ARCH \\ + pkg.debug.depend.path=usr/perl5/vendor_perl/$PERLVER \\ + pkg.debug.depend.path=usr/perl5/vendor_perl/$PERLVER/$PERL_ARCH + EOF + fi + + # Resolve dependency + if /usr/bin/pkgdepend resolve "$MANIFEST" ; then + # Remove version number and cache the result + cat "$MANIFEST.res" | sed -e 's/@[^ ]*//g' -e 's/-'$PLV'/-$(PLV)/g' > "$CACHEFILE" + else + if [[ "$RELATION" != ".suggests" ]] ; then + printf "ERROR: Prerequisite %s not found\n" "$PREREQ" >&2 + cat "$MANIFEST" + fi + # Cache negative result + [[ ! -e "$CACHEFILE" ]] && > "$CACHEFILE" + fi fi - # Resolve dependency - if /usr/bin/pkgdepend resolve "$MANIFEST" ; then - # Modify version number to pkg(5) compatible form - cat "$MANIFEST.res" | sed -e 's/@[^ ]*//g' -e 's/-'$PLV'/-$(PLV)/g' -e 's/\(fmri=[^ ]*\)/\1'$VER'/g' - else - printf "ERROR: Prerequisite %s not found\n" "$PREREQ" >&2 - cat "$MANIFEST" - fi + # Use cached result, add required version number and drop runtime/perl + cat "$CACHEFILE" | sed -e 's/\(fmri=[^ ]*\)/\1'$VER'/g' -e '/fmri=pkg:\/runtime\/perl-\$(PLV)/d' done | /usr/bin/pkgfmt -u | uniq | ( PREV_LINE_H= PREV_FMRI= PREV_VER= PREV_LINE_T= while read LINE ; do - # Copy verbatim lines without "fmri=" - [[ "${LINE//*fmri=*/FMRI}" != "FMRI" ]] && printf "%s\n" "$LINE" && continue + # Copy verbatim lines without "fmri=pkg:" (e.g. unresolved lines) + [[ "${LINE//*fmri=pkg:*/FMRI}" != "FMRI" ]] && printf "%s\n" "$LINE" && continue LINE_H=${LINE%%fmri=*} LINE_T=${LINE#*fmri=} @@ -126,4 +156,6 @@ done done [[ -n "$PREV_LINE_H$PREV_FMRI$PREV_VER$PREV_LINE_T" ]] && printf "%s%s%s%s\n" "$PREV_LINE_H" "$PREV_FMRI" "$PREV_VER" "$PREV_LINE_T" -)| /usr/bin/pkgfmt +) + +exit 0 -- Gitblit v1.9.3