#!/bin/bash if [ $# -ne 1 ] then >&2 echo "Verwendung: neuesPerlPaket cpan-Name" 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}" } cpanName="$(echo "$1" | sed 's|::|-|g')" url="https://metacpan.org/release/${cpanName}" pkgname="perl-${cpanName,,}" me="$(readlink -f "$0")" cd "$(dirname "${me}")" if [[ "$1" == "perl-"* ]] then >&2 echo "${1} beginnt mit 'perl-', sollte es aber nicht" exit 1 fi if [ -e "${pkgname}" ] then >&2 echo "${cpanName} gibt es von ewe schon" exit 1 fi if cat $(ls /var/lib/pacman/sync/*.db | grep -v "/archlinuxewe\.db\$") | \ tar -Oixz --wildcards "*/desc" | \ sed ' :begin; $!N; s@^\(%[^%]*%.*\)\n\(.\+\)$@\1 \2@; tbegin; P; D ' | \ grep -q "^%\(NAME% ${pkgname}\|PROVIDES%.* ${pkgname}\([= ].*\)\?\)\$" then >&2 echo "${cpanName} gibt es schon offiziell" exit 1 fi seitenInhalt="$(curl -o - "${url}" 2> /dev/null)" pkgver="$( echo "${seitenInhalt}" | \ grep "${cpanName}-" | \ sed "s|^.*<title>${cpanName}-\([0-9.-]\+\)\s.*|\1|" )" pkgdesc="$( echo "${seitenInhalt}" | \ grep "<title>${cpanName}-" | \ sed "s|^.*<title>${cpanName}-[0-9.-]\+\s\+-\s\+\(\S.*\S\)\s\+-\s\+metacpan\.org.*|\1|" | \ sed "s|'|'\"'\"'|g" )" dlUrl="$( echo "${seitenInhalt}" | \ grep "href=\"https://cpan.metacpan.org/authors/id/[^/]/[^/]\{2\}/[^/]\+/${cpanName}-[0-9.]\+\.tar\.gz\">" | \ sed "s|^.*href=\"\(https://cpan.metacpan.org/authors/id/[^/]/[^/]\{2\}/[^/]\+/${cpanName}-[0-9.]\+\.tar\.gz\)\">.*\$|\1|" | \ tail -n1 )" dlUrlForPKGBUILD="$( echo "${dlUrl}" | \ sed "s|/${cpanName}-[0-9.]\+\.tar\.gz|/\${_distdir}.tar.gz|" )" mkdir "${pkgname}" cd "${pkgname}" wget -nd "${dlUrl}" sha512sum="$( sha512sum "${cpanName}-${pkgver}.tar.gz" | \ cut -d " " -f 1 )" echo "META.yml lesen ..." meta="$( tar -Oxzf "${cpanName}-${pkgver}.tar.gz" "${cpanName}-${pkgver}/META.yml" | \ grep -v "^ file:" | \ grep -v "^ version:" | \ sed ' :begin; $!N; s@^\(\S.*\)\n\s\+\(\S.*\)$@\1 \2@; tbegin; P; D ' | \ sed "/^provides: /s@:\(\s\|\$\)@: '0'\1@g" | \ sed "s|^provides: '0' |provides: |" )" echo "... fertig, verarbeiten ..." declare -A metaInfos declare -A metaRegexe declare -A metaSubst 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 for sucheWonach in "${!metaRegexe[@]}" do metaInfos["${sucheWonach}"]="" for was in $( echo "${meta}" | \ grep "^${metaRegexe["${sucheWonach}"]}:" | \ sed "s@^${metaRegexe["${sucheWonach}"]}:\s*@@" | \ sed "s@\(\S\+\):\s\+'\?\([0-9.]*\)'\?\(\s\|\$\)@\L\1>=\L\2\n@g" | \ sed "s@\(\S\+\):\s\+'<\s*\([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 [[ "${erg}" == "perl-%skip"* ]] || metaInfos["${sucheWonach}"]="${metaInfos["${sucheWonach}"]} '${erg}'" done metaInfos["${sucheWonach}"]="$( echo "${metaInfos["${sucheWonach}"]}" | \ tr ' ' '\n' | \ sort -u | \ grep -v '^\s*$' )" done echo "... fertig" ( echo '# Maintainer: Erich Eckner ' echo '# Generator : neuesPerlPaket ('"$(sha512sum "${me}" | cut -d " " -f 1)"')' echo '' echo "pkgname='${pkgname}'" echo "pkgver='${pkgver}'" echo "pkgrel='1'" echo "pkgdesc='${pkgdesc}'" echo "arch=('x86_64' 'i686')" echo "license=('PerlArtistic' 'GPL')" echo "options=('!emptydirs')" for wasAusgeben in "${!metaRegexe[@]}" do if [ -n "${metaInfos["${wasAusgeben}"]}" ] then echo "${wasAusgeben}=(" echo "${metaInfos["${wasAusgeben}"]})" | \ sed "s|^| |" fi done echo "url='${url}'" echo "_distdir=\"${cpanName}-\${pkgver}\"" echo "source=(\"${dlUrlForPKGBUILD}\")" echo "sha512sums=('${sha512sum}')" echo '' echo 'build() {' echo ' cd "${srcdir}/${_distdir}"' echo '' echo " # Setting these env variables overwrites any command-line-options we don't want..." echo ' export PERL_MM_USE_DEFAULT=1 PERL_AUTOINSTALL=--skipdeps \' echo " PERL_MM_OPT=\"INSTALLDIRS=vendor DESTDIR='\${pkgdir}'\" \\" echo " PERL_MB_OPT=\"--installdirs vendor --destdir '\${pkgdir}'\" \\" echo ' MODULEBUILDRC=/dev/null' echo '' echo ' # If using Makefile.PL' echo ' if [ -r Makefile.PL ]; then' echo ' perl Makefile.PL' echo ' make' echo ' # If using Build.PL' echo ' elif [ -r Build.PL ]; then' echo ' perl Build.PL' echo ' perl Build' echo ' fi' echo '}' echo '' echo 'check() {' echo ' cd "${srcdir}/${_distdir}"' echo '' echo ' # If using Makefile.PL' echo ' if [ -r Makefile.PL ]; then' echo ' make test' echo ' # If using Build.PL' echo ' elif [ -r Build.PL ]; then' echo ' perl Build test' echo ' fi' echo '}' echo '' echo 'package() {' echo ' cd "${srcdir}/${_distdir}"' echo '' echo ' # If using Makefile.PL' echo ' if [ -r Makefile.PL ]; then' echo ' make install' echo ' # If using Build.PL' echo ' elif [ -r Build.PL ]; then' echo ' perl Build install' echo ' fi' echo '' echo ' # remove perllocal.pod and .packlist' echo ' find "${pkgdir}" -name .packlist -o -name perllocal.pod -delete' echo '}' ) > PKGBUILD makepkg -fcrs --noconfirm --asdeps || exit 1 echo '' echo 'sieht soweit erst mal gut aus, oder?' read antwort if [ -n "${antwort}" ] then echo 'ok, dann nicht ...' exit 1 fi pacman -Qlp ${pkgname}-*.pkg.tar.xz echo '' echo 'auch hier alles in Ordnung, oder?' read antwort if [ -n "${antwort}" ] then echo 'ok, dann nicht ...' exit 1 fi git add PKGBUILD git commit -m "${pkgname} neu"