Commit 2b641add authored by Vitaly Lipatov's avatar Vitaly Lipatov

rpmbph: use rpmbps for spec conversion

parent a7e99be2
......@@ -12,321 +12,9 @@
load_mod repl rpm git buildsrpm spec
altspec_to_local()
{
local i
local TXTRELEASE
local SPECNAME
SPECNAME=$1
BASERELEASE=$(get_numrelease $SPECNAME)
RELEASE=$(get_release $SPECNAME)
BUILDNAME=$(get_name $SPECNAME)
ADDFIXCOMMAND=
ADDREQUIRES=
echo "Converting spec $(basename $SPECNAME) to $DISTRVERSION ($MDISTR)..."
# Set buildreq
if [ "$PKGVENDOR" = "alt" ] ; then
# FIXME: needed for some backport level...
#BUILDREQ="BuildRequires: rpm-build-compat >= 0.95"
BUILDREQ=
# FIXME: use separate macro list
# FIXME: check for all rpm-build-compat macro list
if grep -q "\(_cupslibdir\|_sudoers\)" $SPECNAME ; then
BUILDREQ="BuildRequires: rpm-build-compat >= 1.7.25"
elif grep -q _sharedstatedir $SPECNAME ; then
BUILDREQ="BuildRequires: rpm-build-compat >= 1.7.24"
elif grep -q configure32 $SPECNAME ; then
BUILDREQ="BuildRequires: rpm-build-compat >= 1.9.0"
fi
# drop unsuported technologies
case $DISTRVERSION in
4.0|4.1|5.1|p5|p6)
# these systems doesn't support systemd
subst "s|^install.*%_unitdir.*|# removed install to _unitdir by rpmbph|g" $SPECNAME
subst "s|^%_unitdir.*|# removed pack _unitdir by rpmbph|g" $SPECNAME
;;
esac
# Change release according to alt policy with extensions
# General rule: alwars alt(N-1).MM.(N)
docmd set_release $SPECNAME $(get_txtrelease $SPECNAME)$(decrement_release $BASERELEASE).$MDISTR.$BASERELEASE
ADDDEF=""
CLEANTEXT=""
# due new libtool, affected on ALT Linux
if echo "$MDISTR" | egrep -q "M24|M30|M40|M41|M50" ; then
ADDFIXCOMMAND="$ADDFIXCOMMAND
%undefine __libtoolize"
fi
else
# All non ALT Linux distros
docmd $ETERBUILDBIN/rpmcs --skip-reqs $SPECNAME
BUILDREQ="BuildRequires:"
if [ $(basename $SPECNAME) != "eepm.spec" ] ; then
if ! grep -q "BuildRequires:.*rpm-build-altlinux-compat" $SPECNAME ; then
# Need our compat package and disable strong patch checking
BUILDREQ="$BUILDREQ rpm-build-altlinux-compat >= 0.95"
fi
fi
# hack against very straight patch command
FIXPATCHFUZZ="%define _default_patch_fuzz 3"
# see install in Korinf, need concatenate
BUILDREQ="$BUILDREQ make gcc\n$FIXPATCHFUZZ"
if build32on64 ; then
[ "$DISTRNAME" = "Debian" ] && BUILDREQ="$BUILDREQ ia32-libs" && ADDREQUIRES="$ADDREQUIRES ia32-libs"
[ "$DISTRNAME" = "Ubuntu" ] && ! version_more_version $DISTRVERSION 12.04 && BUILDREQ="$BUILDREQ ia32-libs" && ADDREQUIRES="$ADDREQUIRES ia32-libs"
[ "$DISTRNAME" = "CentOS" ] && version_more_version $DISTRVERSION 6 && BUILDREQ="$BUILDREQ glibc-devel.i686"
[ "$DISTRNAME" = "Scientific" ] && version_more_version $DISTRVERSION 6 && BUILDREQ="$BUILDREQ glibc-devel.i686"
[ "$DISTRNAME" = "SLED" ] && version_more_version $DISTRVERSION 11 && BUILDREQ="$BUILDREQ glibc-devel-32bit gcc-32bit"
[ "$DISTRNAME" = "SUSE" ] && version_more_version $DISTRVERSION 11 && BUILDREQ="$BUILDREQ glibc-devel-32bit gcc-32bit"
fi
# Hack for allow repack on x86_64 packages with ExclusiveArch: %{ix586}
[ "$SYSARCH" = "x86_64" ] && subst "s|^ExclusiveArch:.*||g" $SPECNAME
[ -z "$BUILDCOMMAND" ] && BUILDCOMMAND=$ETERBUILDBIN/rpmbb
TXTRELEASE=$(get_txtrelease $SPECNAME)
# HACK: Override release with KORINFTARGETRELEASE if set
[ -z "$KORINFTARGETRELEASE" ] || TXTRELEASE=$KORINFTARGETRELEASE
docmd set_release $SPECNAME $TXTRELEASE$BASERELEASE$PKGVENDOR
test -z "$VERBOSE" || echo "Build package with release $TXTRELEASE"
ADDDEF="%defattr(-, root, root)"
CLEANTEXT=""
fi
# FIXME 05.05.2012: it is needed now?
if [ "$PKGVENDOR" = "mdv" ] || [ "$PKGVENDOR" = "pclinux" ] || [ "$PKGVENDOR" = "rosa" ] ; then
# due new libtool, affected on Mandriva 2009.0
test -z "$VERBOSE" || echo "Disable libtoolize"
# FIXME
#RECONFT="%define _disable_libtoolize 1"
ADDFIXCOMMAND="$ADDFIXCOMMAND
%define __libtoolize true"
fi
# Do not add BuildReq if already exist
cat $SPECNAME | grep rpm-build-compat &>/dev/null && BUILDREQ=""
# fix readlink -m, introduced by new libtool and missed in RHEL4 (replace with readlink -f)
if [ "$DISTRNAME/$DISTRVERSION" = "ASPLinux/11.2" ] ; then
test -z "$VERBOSE" || echo "Add subst readlink -m"
ADDFIXCOMMAND="$ADDFIXCOMMAND
%__subst 's|readlink -m|readlink -f|g' libtool ltmain.sh"
fi
# fix readlink -mv, introduced by new libtool and missed in FreeBSD (replace with realpath)
if [ "$PKGVENDOR" = "freebsd" ] ; then
test -z "$VERBOSE" || echo "Add subst readlink -mv"
ADDFIXCOMMAND="$ADDFIXCOMMAND
%__subst 's|readlink -mv|realpath|g' libtool configure ltmain.sh"
fi
#if build32on64 ; then
# test -z "$VERBOSE" || echo "Add remove_optflags -m64"
# ADDFIXCOMMAND="$ADDFIXCOMMAND
#%remove_optflags -m64"
#fi
# fix mktemp using for MCBC
if [ "$PKGVENDOR" = "mcbc" ] ; then
test -z "$VERBOSE" || echo "Add subst mktemp -dt"
ADDFIXCOMMAND="$ADDFIXCOMMAND
%__subst 's|mktemp -dt|mktemp -d|g' configure ; %__subst 's|readlink -mv|ls -1|g' configure ltmain.sh"
fi
# Too old problem
TOCHANGELOG=
if [ "$MDISTR" = "M23" ] ; then
if grep "%configure" $SPECNAME >/dev/null && ! grep "^autoreconf" $i >/dev/null && ! grep "^%__autoreconf" $i >/dev/null ; then
ADDFIXCOMMAND="$ADDFIXCOMMAND
%__autoreconf"
TOCHANGELOG="add __autoreconf macros in build section for fix so name problem (by script)"
fi
fi
LISTBUILDDEP=`print_buildreq $SPECNAME`
LISTREQDEP="`print_pkgreq $SPECNAME` $ADDREQUIRES"
LISTDEP=`echo $LISTBUILDDEP $LISTREQDEP | xargs -n1 echo | sort -u`
LISTGROUP=`eval_spec $SPECNAME | grep "^Group" | sed -e "s|^.*:||g" | xargs -n1 echo | sort -u`
# Build replacement rules for spec
ALLREPLRULES=""
[ -n "$VERBOSE" ] && echo "Checking req names for $LISTDEP"
if [ -n "$VERBOSE" ] ; then
echo -n "Use replacement file: "
print_pkgrepl_list
echo
fi
local pkgrepl_list=$(print_pkgrepl_list)
for i in $LISTDEP ; do
tolocal_anyrepl $i $pkgrepl_list || continue
#NRL="s!\(.*Req.*\)$REPLRULE1\( |,|\$\)!\1$REPLRULE2\2!g"
NRL="s!(.*Req.*)$ALTPKGNAME( |,|\$)!\1$TARGETPKGNAME\2!g"
[ -n "$VERBOSE" ] && echo "Use req rule $NRL"
ALLREPLRULES="$ALLREPLRULES $NRL;"
done
# Build replacement rules for spec
[ -n "$VERBOSE" ] && echo "Checking group names for $LISTGROUP"
ALLGRPREPLRULES=""
grprepl_list=$(print_grprepl_list)
for i in $LISTGROUP ; do
tolocal_anyrepl $i $grprepl_list || continue
#NRL="s!\(Group.*\)$REPLRULE1\( |,|\$\)!\1$REPLRULE2\2!g"
NRL="s!(Group.*)$ALTPKGNAME( |,|\$)!\1$TARGETPKGNAME\2!g"
[ -n "$VERBOSE" ] && echo "Use group name rule $NRL"
ALLGRPREPLRULES="$ALLGRPREPLRULES $NRL;"
done
#echo GRP: $LISTGROUP, ALLGRPREPLRULES: $ALLGRPREPLRULES
# add %defattr to files sections
# FIXME: добавляет ненужные пустые строки
function awk_e1()
{
[ -n "$ADDDEF" ] && awk 'BEGIN{desk=0}{print;if(/^%files/){printf("%s\n", text)}}' text="$ADDDEF" || cat
}
# add clean before %files
function awk_e2()
{
[ -n "$CLEANTEXT" ] && awk 'BEGIN{desk=0}{if(/^%files/&&desk==0){printf("%s\n\n", text);desk++};print}' text="$CLEANTEXT" || cat
}
# add rpm-build-compat buildreq
function awk_e3()
{
[ -n "$BUILDREQ" ] && awk 'BEGIN{desk=0}{if(/^%description/&&desk==0){printf("%s\n\n", text);desk++};print}' text="$BUILDREQ" || cat
}
# add commands in build section
function awk_section_build()
{
[ -n "$ADDFIXCOMMAND" ] && awk 'BEGIN{desk=0}{print;if(/^%build/&&desk==0){printf("%s\n", text);desk++}}' text="$ADDFIXCOMMAND" || cat
}
# apply replacement rules
repl_reqs()
{
local PREGE
PREGE="perl -p -e"
[ -n "$ALLREPLRULES" ] && $PREGE "$ALLREPLRULES" || cat
}
# apply replacement rules
repl_groups()
{
local PREGE
PREGE="perl -p -e"
[ -n "$ALLGRPREPLRULES" ] && $PREGE "$ALLGRPREPLRULES" || cat
}
if [ -n "$VERBOSE" ] ; then
echo "Requires rules: $ALLREPLRULES"
echo "Group rules: $ALLGRPREPLRULES"
fi
# apply all rules, awk excludes, remove empty tag lines
mv $SPECNAME $SPECNAME.old &&
cat $SPECNAME.old | \
repl_reqs | repl_groups | \
awk_e1 | awk_e2 | awk_e3 | awk_section_build | \
sed -e "s|^BuildRequires: *\$||g" | \
sed -e "s|^BuildPreReq: *\$||g" | \
sed -e "s|^Requires: *\$||g" | \
sed -e "s|^Conflicts: *\$||g" | \
sed -e "s|^Provides: *\$||g" | \
sed -e "s|^Obsoletes: *\$||g" | \
cat > $SPECNAME
# Some system does mismatch for Patch: and %patch0, Patch0: and %patch
subst "s|^Patch0:|Patch:|g" $SPECNAME
subst "s|^%patch0 |%patch |g" $SPECNAME
if [ "$PKGVENDOR" != "alt" ] ; then
# Due possible using %release in Source: and Patch: names
subst "s|^\(Source.*\)%release|\1$RELEASE|g" $SPECNAME
subst "s|^\(Patch.*\)%release|\1$RELEASE|g" $SPECNAME
if ! grep -q "%setup *-q" $SPECNAME ; then
subst "s|^%setup |%setup -q |g" $SPECNAME
subst "s|^%setup$|%setup -q|g" $SPECNAME
fi
# obsoletes since Slackware/13 (rpm 4.10)
subst "s|^BuildPreReq:|BuildRequires:|g" $SPECNAME
subst "s|^PreReq:|Requires:|g" $SPECNAME
# not supported anywhere exclude ALT
subst "s|^BuildRequires(pre):|BuildRequires:|g" $SPECNAME
fi
# Auto*=yes,nomingw32 works only since ALT 4.1
if [ "$PKGVENDOR" = "alt" ] ; then
if echo "$MDISTR" | egrep -q "M24|M30|M40" ; then
subst "s|^\(Auto[RP].*\),nomingw32|\1|g" $SPECNAME
subst "s|^\(Auto[RP].*\), nomingw32|\1|g" $SPECNAME
fi
else
# for systems with (d)ash as sh (f.i., Ubuntu)
remove_bashism $SPECNAME
fi
if [ "$DISTRNAME/$DISTRVERSION" = "CentOS/5" ] ; then
test -z "$VERBOSE" || echo "Remove egg-info from file list"
subst "s|.*\.egg-info.*||g" $SPECNAME
fi
#TODO:
#%if %{undefined buildroot}
#BuildRoot: %{_tmppath}/%{name}-%{version}-buildroot
#%endif
#TODO:
#%clean section
rm -f $SPECNAME.old
if [ "$PKGVENDOR" = "alt" ] ; then
subst "1i#" $SPECNAME
# use old compress method for the src.rpm on ALT 4.0 and 4.1
if [ "$DISTRVERSION" = "4.0" ] || [ "$DISTRVERSION" = "4.1" ] ; then
export USE_LEGACY_COMPRESSION=1
fi
subst "1i# This spec is backported to $DISTRNAME $DISTRVERSION automatically by rpmbph script. Do not edit it." $SPECNAME
ENTRY="- backport to $DISTRNAME $DISTRVERSION (by rpmbph script)"
DISTRARG="-$MDISTR"
else
subst "1i# This spec is autoported from ALT Linux Sisyphus to $DISTRNAME $DISTRVERSION automatically by rpmbph script. Do not edit it." $SPECNAME
ENTRY="- autoport to $DISTRNAME $DISTRVERSION (by rpmbph script)"
export USE_VENDOR=$RPMVENDOR
export USE_LEGACY_COMPRESSION=1
DISTRARG=""
fi
test -s "$SPECNAME" || fatal "$SPECNAME is empty"
test -n "$TOCHANGELOG" && ENTRY=`echo -e "$ENTRY\n- $TOCHANGELOG"`
add_changelog $SPECNAME -e "$ENTRY"
}
#############################
# FIXME: CURRENTBRANCHNAME??
Usage="Usage: $name [-r -u -U -n -i -m -v -q] [-$CURRENTBRANCHNAME] [-b REPONAME] spec..."
function mygetopts()
{
......@@ -387,6 +75,7 @@ mygetopts $LISTARGS
test -z "$LISTNAMES" && fatal "file not found in '$@'"
if [ "$PKGVENDOR" = "alt" ] ; then
# FIXME: where we was detected MENV?
MDISTR=$MENV
[ -n "$BINARYREPONAME" ] && MDISTR=$(get_altdistr_mod $BINARYREPONAME)
[ "$MDISTR" = "SS" ] && fatal "It makes no sense to backport to Sisyphus (You need to try with -b $EXAMPLEALTDISTRVERSION)."
......@@ -443,7 +132,7 @@ if [ "$PKGVENDOR" = "alt" ] && is_gear $SPECDIR ; then
# Only one spec supported
cp -f $LISTNAMES $BPSPEC
altspec_to_local $BPSPEC
docmd $ETERBUILDBIN/rpmbps -b $BINARYREPONAME $BPSPEC
docmd git checkout $USEBRANCH || fatal "Can't checkout branch $USEBRANCH. Use $BPSPEC manually or remove it."
# TODO: check result message for merge?
......@@ -458,9 +147,8 @@ if [ "$PKGVENDOR" = "alt" ] && is_gear $SPECDIR ; then
docmd git add $SPEC
if ! git_commit_ignore_nothing -a -m "backported to $USEBRANCH as $(get_version $SPEC)-$(get_release $SPEC) (with rpmbph script)" ; then
#git checkout $CURBRANCH
fatal "Commit error. You are still in $MDISTR branch with modified and uncommitted spec file."
fatal "Commit error. You are still in $CURBRANCH branch with modified and uncommitted spec file."
fi
[ -n "$NOBUILD" ] && BUILDCOMMAND="$ETERBUILDBIN/rpmbs $GIRARHOST"
docmd $BUILDCOMMAND $LISTRPMARGS $UPLOADARG $DISTRARG $SPEC || { git checkout $CURBRANCH ; fatal "Can't build" ; }
docmd git checkout $CURBRANCH
exit $?
......@@ -485,7 +173,7 @@ for i in $LISTBUILT ; do
SPECNAME=$RPMTOPDIR/SPECS/$(spec_by_srpm $i)
test -f "$SPECNAME" || fatal "Spec $SPECNAME is not found"
docmd altspec_to_local $SPECNAME
docmd $ETERBUILDBIN/rpmbps -b $BINARYREPONAME $SPECNAME
docmd $BUILDCOMMAND $LISTRPMARGS $UPLOADARG $DISTRARG $SPECNAME || fatal "Can't build"
uni_rpmrm $SPECNAME || true
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment