#!/bin/bash set -e if [ $# -ne 1 ] then >&2 echo "Verwendung: testeAbhaengigkeiten paket" exit 1 fi substituiere() { dep="$1" name=${dep%>=*} dep=${dep#${name}} erg="$( cat "$(dirname "${me}")/perlSubstitutionen" | \ sed 's|#.*$||' | \ grep "\s${name}\(\s\|\$\)" | \ sed "s|^\([^:]\+\):.*\$|perl-\1|" | \ sed "s|^:.*\$|perl|" )" [ -z "${erg}" ] && erg="perl-${name}" if [ "${erg}" == "perl" ] && echo "${dep}" | grep -q "^[^.]*\.\(0[[:digit:]]\{2\}\)\{2\}" then dep="$( echo "${dep}" | \ sed "s@^\([^.]*\....\)0\+@\1.@; s@^\([^.]*\.\)0\+@\1@" )" fi erg="${erg}${dep}" } paket="$1" if [[ "${paket}" != "perl-"* ]] then # noch zu implementieren / zur Zeit unnötig exit 0 fi me="$(readlink -f "$0")" cd "$(dirname "${me}")" cd "${paket}" makepkg -f --verifysource . PKGBUILD if [ ! -r "${_distdir}.tar.gz" ] then >&2 echo "Kann Datei '${_distdir}.tar.gz' nicht lesen!" exit 1 fi if ! tar -tzf "${_distdir}.tar.gz" "${_distdir}/META.yml" then # da kann ich nichts machen exit 0 fi echo "META.yml lesen ..." meta="$( tar -Oxzf "${_distdir}.tar.gz" "${_distdir}/META.yml" | \ tr '\r' ' ' | \ grep -v "^ file:" | \ sed ' :begin; $!N; s@^\(\S.*\)\n\s\+\(\S.*\)$@\1 \2@; tbegin; P; D ' | \ sed "/^provides: /s@\(\s\S\+\):\s\+version: '\?\([0-9.]\+\)'\?@\L\1=\2@g" )" echo "... fertig, verarbeiten ..." declare -A metaInfos declare -A metaRegexe declare -A metaSubst declare -A metaYml declare -A pkgBuild metaRegexe["makedepends"]="\(build\|configure\)_requires" metaSubst["makedepends"]=true metaRegexe["depends"]="requires" metaSubst["depends"]=true metaRegexe["optdepends"]="recommends" metaSubst["optdepends"]=true metaRegexe["conflicts"]="conflicts" metaSubst["conflicts"]=true metaRegexe["provides"]="provides" metaSubst["provides"]=false set +e for sucheWonach in "${!metaRegexe[@]}" do metaInfos["${sucheWonach}"]="" for was in $( echo "${meta}" | \ grep "^${metaRegexe["${sucheWonach}"]}:" | \ sed "s@^${metaRegexe["${sucheWonach}"]}:\s*@@" | \ sed "s@\(\S\+\):\s\+'\?v\?\([0-9.]*\)'\?\(\s\|\$\)@\L\1>=\L\2\n@g" | \ sed "s@\(\S\+\):\s\+'<\s*v\?\([0-9.]\+\)'\(\s\|\$\)@\L\1<\L\2\n@g" | \ sed "s@::@-@g" | \ sed "s|>=0\$||" | \ grep -v "^\({}\)\?$" ) do if ${metaSubst["${sucheWonach}"]} then substituiere "${was}" else erg="perl-${was}" fi if [[ "${erg}" != "perl-%skip"* ]] then metaInfos["${sucheWonach}"]="${metaInfos["${sucheWonach}"]} '${erg}'" fi done metaInfos["${sucheWonach}"]="$( echo "${metaInfos["${sucheWonach}"]}" | \ tr ' ' '\n' | \ sort -u | \ grep -v '^\s*$' )" done err=false for wasAusgeben in "${!metaRegexe[@]}" do eval tmp=( '"${'${wasAusgeben}'[@]}"' ) pkgBuild["${wasAusgeben}"]="$( echo "${tmp[@]}" | \ tr ' ' '\n' | \ grep -v '^$' | \ sed "s|^\(.*\)\$| '\1'|" | \ sort -u )" metaYml["${wasAusgeben}"]="$( ( echo "${metaInfos["${wasAusgeben}"]}" | \ grep -v '^$' | \ grep "^\s*'\?perl-" | \ sed 's|^| |' echo "${pkgBuild["${wasAusgeben}"]}" | \ grep -v "^\s*'perl-" ) | \ grep -v '^$' | \ sort -u )" probleme="$( ( echo "${pkgBuild["${wasAusgeben}"]}" echo "${metaYml["${wasAusgeben}"]}" ) | \ sort | \ uniq -u \ )" if [ -n "${probleme}" ] then >&2 echo "${wasAusgeben} in ${paket}/PKGBUILD unterscheidet sich:" >&2 echo '-------------------------------------' >&2 echo "${metaYml["${wasAusgeben}"]}" >&2 echo '^^^ META.yml ^^^ vs. vvv PKGBUILD vvv' >&2 echo "${pkgBuild["${wasAusgeben}"]}" >&2 echo "=====================================" >&2 echo "${probleme}" >&2 echo "=====================================" err=true fi done if ${err} then ersatz="$( for wasAusgeben in "${!metaRegexe[@]}" do if [ -n "${metaYml["${wasAusgeben}"]}" ] then echo "${wasAusgeben}=(" echo "${metaYml["${wasAusgeben}"]})" fi done | \ sed ':begin; $!N; s@^\(.*\)\n\(.*\)$@\1\\n\2@; tbegin; P; D ' )" >&2 echo 'neu könnte das etwa so aussehen:' >&2 echo '-------------------------------------' >&2 echo -e "${ersatz}" >&2 echo '-------------------------------------' read -p 'Ich würde das jetzt mal vollautomatisch verändern. Einwände? ' was if [ -n "${was}" ] then exit 1 fi sed ' :begin; $!N; s@^\(\(provides\|makedepends\|depends\|optdepends\|conflicts\)=[^)]*\)\n\(.*\)$@\1 \3@; tbegin; P; D ' -i PKGBUILD sed '/^\(provides\|makedepends\|optdepends\|conflicts\)=/d' -i PKGBUILD sed "s|^depends=.*\$|${ersatz}|" -i PKGBUILD "${me}" "$@" fi echo "... fertig"