X-Git-Url: http://git.pld-linux.org/?p=packages%2Frpm-build-tools.git;a=blobdiff_plain;f=pearize.sh;h=55363d632872cbdab1839d6f96d98300f41d3f83;hp=bbfea5c5756a54545734ce904e1a51cbeebfdba6;hb=947500436acb28d51898eff42b7eb0a6b0159faa;hpb=15cbfeac382e9ef940e0f6e5e575a2d2f5048fc9 diff --git a/pearize.sh b/pearize.sh old mode 100644 new mode 100755 index bbfea5c..55363d6 --- a/pearize.sh +++ b/pearize.sh @@ -4,11 +4,23 @@ # it is still better than nothing. if somebody wishes to add sorting in this # script. i'd be just glad :) # -# needs 'pear' for 'pear makerpm' command, ./builder for fetching sources. +# needs 'pear' for 'pear make-rpm-spec' command, ./builder for fetching sources. # You should have all PEAR packages installed to get best results (needed for epoch autodetection) +# So far there are 3 packages with epoch > 0: +# $ grep ^Epoch:.* php-pear-*.spec | grep -v 'Epoch:.*0' +# php-pear-MDB2.spec:Epoch: 1 +# php-pear-MDB.spec:Epoch: 1 +# php-pear-PEAR.spec:Epoch: 1 # -# todo: adjust similiarily noautoreqdeps -# bugs: the beta portions in version deps could be wrong (php-4.3.0b1 and alike) +# To create completely new PEAR package spec, follow something like this: +# $ pear download RDF-alpha +# File RDF-0.1.0alpha1.tgz downloaded +# $ pear make-rpm-spec RDF-0.1.0alpha1.tgz +# Wrote RPM spec file php-pear-RDF.spec +# $ +# +# TODO: adjust similiarily noautoreqdeps +# BUGS: the beta portions in version deps could be wrong (php-4.3.0b1 and alike) # see php-pear-DBA_Relational.spec # Something strange: Requires: php-common < 4:3:5.1 # @@ -16,6 +28,9 @@ # # Send blames and beerideas to glen@pld-linux.org +PROGRAM=${0##*/} +APPDIR=$(d=$0; [ -L "$d" ] && d=$(readlink -f "$d"); dirname "$d") + set -e spec="$1" if [ -z "$spec" ]; then @@ -46,20 +61,17 @@ if [ -z "$tarball" ]; then fi if [ ! -f $tarball ]; then - ./builder -g "$spec" + $APPDIR/builder -g "$spec" fi stmp=$(mktemp "${TMPDIR:-/tmp}/fragXXXXXX") +template=pearize.spec cat > $stmp <<'EOF' @extra_headers@ -Optional: @optional@ -@optional-pkg@ -@optional-ext@ License: @release_license@ State: @release_state@ EOF -pear make-rpm-spec --spec-template=$stmp --output=pearize.spec $tarball -template=pearize.spec +pear make-rpm-spec --spec-template=$stmp --output=$template $tarball rm -f $stmp mv $template .$template~ @@ -92,14 +104,29 @@ preamble=$(mktemp "${TMPDIR:-/tmp}/fragXXXXXX") sed -ne '/^Name:/,/^BuildRoot/p' $spec > $preamble # create backup -bak=$(cp -fbv $spec $spec | awk '{print $NF}' | tr -d "['\`]" ) +bak=$(LC_ALL=C cp -fbv $spec $spec | awk '{print $NF}' | tr -d "['\`]" ) +# ensure rpm-build-macros is present +if ! grep -q "^BuildRequires:.*rpmbuild(macros)" $preamble; then + sed -i -e "/^BuildRequires:.*rpm-php-pearprov/aBuildRequires:\trpmbuild(macros) >= 1.300" $spec +fi # parse requires +requires=$(grep '^BuildRequires:' $template || :) +if [ -n "$requires" ]; then + echo "$requires" | while read tag dep; do + dep=$(add_epoch $dep) + if ! grep -q "^BuildRequires:.*$dep" $preamble; then + sed -i -e "/^BuildRoot/iBuildRequires:\t$dep" $spec + fi + done +fi + requires=$(grep '^Requires:' $template || :) if [ -n "$requires" ]; then echo "$requires" | while read tag dep; do dep=$(add_epoch $dep) if ! grep -q "^Requires:.*$dep" $preamble; then + dep=$(echo "$dep" | sed -e 's,php-pear-PEAR\b,php-pear-PEAR-core,') sed -i -e "/^BuildRoot/iRequires:\t$dep" $spec fi done @@ -117,10 +144,26 @@ if [ -n "$conflicts" ]; then fi # parse optional deps -optional=$(grep '^Optional:' $template || :) +optional=$(grep '^Suggests:' $template || :) if [ -n "$optional" ]; then echo "$optional" | while read tag dep; do + dep=$(add_epoch $dep) + if ! grep -q "^Suggests:.*$dep" $preamble; then + sed -i -e "/^BuildRoot/iSuggests:\t$dep" $spec + fi + for req in $dep; do + case "$req" in + php-pear-*) + # convert pear package name to file pattern + req=$(echo "$req" | sed -e 's,^php-pear-,pear(,;y,_,/,;s,$,.*),') + ;; + *) + # process only php-pear-* packages + continue + ;; + esac + m=$(grep "^%define.*_noautoreq" $spec || :) if [ -z "$m" ]; then sed -i -e "/^BuildRoot:/{ @@ -138,17 +181,43 @@ if [ -n "$optional" ]; then done done fi -has_opt=$(egrep -c '^Optional-(pkg|ext):' $template || :) + +optional=$(grep '^Optional-ext:' $template || :) +if [ -n "$optional" ]; then + tmp=$(mktemp "${TMPDIR:-/tmp}/fragXXXXXX") + echo "$optional" | while read tag ext; do + grep -q "PHP extension .$ext" && continue + cat > $tmp <<-EOF + echo '%{name} can optionally use PHP extension "$ext"' >> optional-packages.txt + EOF + sed -i -e " + /%pear_package_setup/ { + r $tmp + } + " $spec + done + rm -f .ext.tmp +fi + +has_opt=$(grep -Ec '^Optional-(pkg|ext):' $template || :) if [ "$has_opt" -gt 0 ]; then - if ! grep -q '%{_docdir}/.*/optional-packages.txt' $spec; then + if ! grep -q 'rpmbuild(macros)' $spec; then + sed -i -e ' + /rpm-php-pearprov/{ + aBuildRequires: rpmbuild(macros) >= 1.300 + } + ' $spec + fi + if ! grep -Eq '%{_docdir}/.*/optional-packages.txt|%pear_package_print_optionalpackages' $spec; then sed -i -e ' /^%files$/{ - i%post - iif [ -f %{_docdir}/%{name}-%{version}/optional-packages.txt ]; then - i\ cat %{_docdir}/%{name}-%{version}/optional-packages.txt - ifi + i%post -p + i%pear_package_print_optionalpackages i } + /rpmbuild(macros)/{ + s/>=.*/>= 1.571/ + } ' $spec fi if ! grep -q '%doc.*optional-packages.txt' $spec; then @@ -162,10 +231,15 @@ fi # parse state state=$(awk '/^State:/{print $2}' $template) -sed -i -e "/^%define.*_status/{ - /%define.*_status.*$state/!s/.*/%define\t\t_status\t\t$state/ +sed -i -e "/^%define.*_\?status/{ + s/%define[[:space:]]*_status.*/%define\t\t_status\t\t$state/ + s/%define[[:space:]]*status.*/%define\t\tstatus\t\t$state/ }" $spec +# parse license +#license=$(awk '/^License:/{print $2}' $template) +#sed -i -e "s/^License:.*/License:\t$license/" $spec + rm -f $preamble diff=$(mktemp "${TMPDIR:-/tmp}/fragXXXXXX") @@ -175,4 +249,3 @@ if ! diff -u $bak $spec > $diff; then else echo "$spec: No diffs" fi -#exit 1