]> git.pld-linux.org Git - packages/rpm-build-tools.git/blobdiff - adapter.awk
- poldek -u works again
[packages/rpm-build-tools.git] / adapter.awk
index d43de97a3c58497fd869b6cae42b2a1beb8d2355..36de9035bfeee3a2a60e7ef4d211bbecfb7fef8f 100644 (file)
@@ -7,13 +7,16 @@
 #      Micha³ Kuratczyk <kura@pld.org.pl>
 #      Sebastian Zagrodzki <s.zagrodzki@mimuw.edu.pl>
 #      Tomasz K³oczko <kloczek@rudy.mif.pg.gda.pl>
-#      Artur Frysiak <wiget@pld.org.pl>
+#      Artur Frysiak <wiget@pld-linux.org>
 #      Michal Kochanowicz <mkochano@pld.org.pl>
+#      Elan Ruusamäe <glen@pld-linux.org>
 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
 
 # TODO
 # - parse ../PLD-doc/BuildRequires.txt and setup proper BR epoches?
 # - add "-nc" option to skip CVS interaction
+# - sort Summary(XX)
+# - sort Requires, BuildRequires
 
 BEGIN {
        preamble = 1            # Is it part of preamble? Default - yes
@@ -21,11 +24,18 @@ BEGIN {
        bod = 0                 # Beggining of %description
        tw = 70                 # Descriptions width
 
+       b_idx = 0               # index of BR/R arrays
+
        # If variable removed, then 1 (for removing it from export)
        removed["LDFLAGS"] = 0
        removed["CFLAGS"] = 0
        removed["CXXFLAGS"] = 0
 
+       # get cvsaddress for changelog section
+       # using rpm macros as too lazy to add ~/.adapterrc parsing support.
+       "rpm --eval '%{?_cvsmaildomain}%{!?_cvsmaildomain:@pld-linux.org}'" | getline _cvsmaildomain
+       "rpm --eval '%{?_cvsmailfeedback}%{!?_cvsmailfeedback:PLD Team <feedback@pld-linux.org>}'" | getline _cvsmailfeedback
+
        # If 1, we are inside of comment block (started with /^#%/)
        comment_block = 0
 
@@ -47,6 +57,16 @@ BEGIN {
        "rpm --eval %_includedir" | getline includedir
        "rpm --eval %_mandir"   | getline mandir
        "rpm --eval %_infodir"  | getline infodir
+       "rpm --eval %_examplesdir"      | getline examplesdir
+
+       "rpm --eval %perl_sitearch" | getline perl_sitearch
+       "rpm --eval %perl_archlib" | getline perl_archlib
+       "rpm --eval %perl_privlib" | getline perl_privlib
+       "rpm --eval %perl_vendorlib" | getline perl_vendorlib
+       "rpm --eval %perl_vendorarch" | getline perl_vendorarch
+       "rpm --eval %perl_sitelib" | getline perl_sitelib
+
+       "rpm --eval %py_sitescriptdir" | getline py_sitescriptdir
 }
 
 # There should be a comment with CVS keywords on the first line of file.
@@ -68,6 +88,40 @@ defattr == 1 {
        defattr = 0
 }
 
+function b_makekey(a, b,       s) {
+       s = a "" b;
+       # kill bcond
+       gsub("%{\\?[_a-zA-Z0-9]+:", "", s);
+       return s;
+}
+
+# sort BR/R!
+#
+# NOTES:
+# - mixing BR/R and anything else confuses this (all will be sorted together)
+#   so don't do that.
+# - comments leading the BR/R can not be associated,
+#   so don't adapterize when the BR/R are mixed with comments
+ENVIRON["SORTBR"] == 1 && preamble == 1 && /(Build)?Requires/, /(Build)?Requires/ { # && !/^%/) {
+       b_idx++;
+       l = substr($0, index($0, $2));
+       b_ktmp = b_makekey($1, l);
+       b_key[b_idx] = b_ktmp;
+       b_val[b_ktmp] = $0;
+
+       next;
+}
+
+preamble == 1 {
+       if (b_idx > 0) {
+               isort(b_key, b_idx);
+               for (i = 1; i <= b_idx; i++) {
+                       print "" b_val[b_key[i]];
+               }
+               b_idx = 0
+       }
+}
+
 # Comments
 /^#/ && (description == 0) {
        if (/This file does not like to be adapterized!/) {
@@ -92,6 +146,11 @@ defattr == 1 {
                date = 1
 }
 
+# Obsolete
+/^%include.*\/usr\/lib\/rpm\/macros\.python$/ {
+       next
+}
+
 ################
 # %description #
 ################
@@ -147,9 +206,33 @@ defattr == 1 {
 /^%prep/, (/^%[a-z]+$/ && !/^%prep/ && !/^%((end)?if|else)/) {
        preamble = 0
 
+       use_macros()
+
        # Add '-q' to %setup
-       if (/^%setup/ && !/-q/)
+       if (/^%setup/ && !/-q/) {
                sub(/^%setup/, "%setup -q")
+       }
+
+       if (/^%setup/) {
+               gsub(name, "%{name}");
+               gsub(version, "%{version}");
+               if (_beta) {
+                       gsub(_beta, "%{_beta}");
+               }
+               if (_rc) {
+                       gsub(_rc, "%{_rc}");
+               }
+               if (_snap) {
+                       gsub(_snap, "%{_snap}");
+               }
+       }
+
+       if (/^%setup/ && /-n %{name}-%{version}( |$)/) {
+               sub(/ -n %{name}-%{version}/, "")
+       }
+
+       # invalid in %prep
+       sub("^rm -rf \$RPM_BUILD_ROOT.*", "");
 }
 
 ##########
@@ -198,7 +281,14 @@ defattr == 1 {
                if (/^export[ ]*$/)
                        next
        }
-
+       
+       # use macros
+       $0 = fixedsub("glib-gettextize --copy --force","%{__glib_gettextize}", $0);
+       $0 = fixedsub("intltoolize --copy --force", "%{__intltoolize}", $0);
+
+       # atrpms
+       $0 = fixedsub("%perl_configure", "%{__perl} Makefile.PL \\\n\tINSTALLDIRS=vendor", $0);
+       $0 = fixedsub("%perl_makecheck", "%{?with_tests:%{__make} test}", $0);
 }
 
 ##########
@@ -206,6 +296,7 @@ defattr == 1 {
 ##########
 /^%clean/, (/^%[a-z]+$/ && !/^%clean/ && !/^%((end)?if|else)/) {
        did_clean = 1
+       use_macros()
 }
 
 ############
@@ -240,8 +331,8 @@ defattr == 1 {
        if (/^install/ && /-[ug][ \t]*root/)
                gsub(/-[ug][ \t]*root /, "")
 
-       if (/^install/ && /-m[ \t]*644/)
-               gsub(/-m[ \t]*644 /, "")
+       if (/^install/ && /-m[ \t]*[0-9]+/)
+               gsub(/-m[ \t]*[0-9]+ /, "")
 
        # No lines contain 'chown' or 'chgrp' if owner/group is 'root'
        if (($1 ~ /chown/ && $2 ~ /root\.root/) || ($1 ~ /chgrp/ && $2 ~ /root/))
@@ -250,6 +341,13 @@ defattr == 1 {
        # No lines contain 'chmod' if it sets the modes to '644'
        if ($1 ~ /chmod/ && $2 ~ /644/)
                next
+
+       # foreign rpms
+       $0 = fixedsub("%buildroot", "$RPM_BUILD_ROOT", $0)
+       $0 = fixedsub("%{buildroot}", "$RPM_BUILD_ROOT", $0)
+
+       # atrpms
+       $0 = fixedsub("%perl_makeinstall", "%{__make} pure_install \\\n\tDESTDIR=$RPM_BUILD_ROOT", $0);
 }
 
 ##########
@@ -274,8 +372,8 @@ defattr == 1 {
        skip = 0
        # There should be some CVS keywords on the first line of %changelog.
        if (boc == 3) {
-               if (!/PLD Team/)
-                       print "* %{date} PLD Team <feedback@pld-linux.org>" > changelog_file
+               if ($0 !~ _cvsmailfeedback)
+                       print "* %{date} " _cvsmailfeedback > changelog_file
                else
                        skip = 1
                boc = 2
@@ -283,7 +381,7 @@ defattr == 1 {
        if (boc == 2 && !skip) {
                if (!/All persons listed below/) {
                        printf "All persons listed below can be reached at " > changelog_file
-                       print "<cvs_login>@pld-linux.org\n" > changelog_file
+                       print "<cvs_login>" _cvsmaildomain "\n" > changelog_file
                } else
                        skip = 1
                boc = 1
@@ -318,7 +416,15 @@ defattr == 1 {
 ###########
 /^%pre/, (/^%[a-z]+$/ && !/^%pre/) {
        preamble = 0
+
+       # %useradd and %groupadd may not be wrapped
+       if (/%(useradd|groupadd).*\\$/) {
+               a = $0; getline;
+               sub(/^[\s\t]*/, "");
+               $0 = substr(a, 1, length(a) - 1) $0;
+       }
 }
+
 /^%post/, (/^%[a-z]+$/ && !/^%post/) {
        preamble = 0
 }
@@ -328,6 +434,21 @@ defattr == 1 {
 /^%postun/, (/^%[a-z]+$/ && !/^%postun/) {
        preamble = 0
 }
+/^%triggerin/, (/^%[a-z]+$/ && !/^%triggerin/) {
+       preamble = 0
+}
+/^%triggerun/, (/^%[a-z]+$/ && !/^%triggerun/) {
+       preamble = 0
+}
+/^%triggerpostun/, (/^%[a-z]+$/ && !/^%triggerpostun/) {
+       preamble = 0
+}
+/^%pretrans/, (/^%[a-z]+$/ && !/^%pretrans/) {
+       preamble = 0
+}
+/^%posttrans/, (/^%[a-z]+$/ && !/^%posttrans/) {
+       preamble = 0
+}
 
 #############
 # PREAMBLES #
@@ -337,6 +458,12 @@ preamble == 1 {
        # and before the colon.
        sub(/[ \t]*:/, ":")
 
+       if (/^%perl_module_wo_prefix/) {
+               name = $2
+               version = $3
+               release = "0." fixedsub(".%{disttag}.at", "", $4)
+       }
+
        field = tolower($1)
        fieldnlower = $1
        if (field ~ /group(\([^)]+\)):/)
@@ -379,6 +506,21 @@ preamble == 1 {
                next
        }
 
+       if (field ~ /prereq:/) {
+               $1 = "Requires:"
+               $(NF + 1) = " # FIXME add Requires(scriptlet) -adapter.awk"
+       }
+
+       # split (build)requires on commas
+       if (field ~ /requires:/ && $0 ~ /,/) {
+               l = substr($0, index($0, $2));
+               n = split(l, p, / *, */);
+               for (i in p) {
+                       printf("%s\t%s\n", $1, p[i]);
+               }
+               next;
+       }
+
        if (field ~ /packager:|distribution:|docdir:|prefix:/)
                next
 
@@ -389,11 +531,20 @@ preamble == 1 {
        if (field ~ /copyright:/ && $2 ~ /GPL|BSD/)
                $1 = "License:"
 
-       if (field ~ /name:/)
+       if (field ~ /name:/) {
                name = $2
+               name_seen = 1;
+       }
 
-       if (field ~ /version:/)
+       if (field ~ /version:/) {
                version = $2
+               version_seen = 1;
+       }
+
+       if (field ~ /release:/) {
+               release = $2
+               release_seen = 1;
+       }
 
        if (field ~ /serial:/)
                $1 = "Epoch:"
@@ -443,14 +594,33 @@ preamble == 1 {
                $2 = s url[n+1]
 
                filename = url[n]
-               url[n] = fixedsub(name, "%{name}", url[n])
-               if (field ~ /source/)
-                       url[n] = fixedsub(version, "%{version}", url[n])
+               if (name) {
+                       url[n] = fixedsub(name, "%{name}", url[n])
+               }
+               if (field ~ /source/) {
+                       if (version) {
+                               url[n] = fixedsub(version, "%{version}", url[n])
+                       }
+                       if (_beta) {
+                               url[n] = fixedsub(_beta, "%{_beta}", url[n])
+                       }
+                       if (_rc) {
+                               url[n] = fixedsub(_rc, "%{_rc}", url[n])
+                       }
+                       if (_snap) {
+                               url[n] = fixedsub(_snap, "%{_snap}", url[n])
+                       }
+               }
                $2 = fixedsub(filename, url[n], $2)
 
                # sourceforge urls
+               sub("[?]use_mirror=.*$", "", $2);
+               sub("[?]download$", "", $2);
+               sub("^http://prdownloads\.sourceforge\.net/", "http://dl.sourceforge.net/", $2)
+
                sub("^http://.*\.dl\.sourceforge\.net/", "http://dl.sourceforge.net/", $2)
                sub("^http://dl\.sourceforge\.net/sourceforge/", "http://dl.sourceforge.net/", $2)
+               sub("^http://dl\.sf\.net/", "http://dl.sourceforge.net/", $2)
        }
 
 
@@ -488,9 +658,20 @@ preamble == 1 {
                        mandir = $3
                if ($2 ~ /_infodir/)
                        infodir = $3
+
+               if ($2 ~ /_beta/)
+                       _beta = $3
+               if ($2 ~ /_rc/)
+                       _rc = $3
+               if ($2 ~ /_snap/)
+                       _snap = $3
        }
-}
 
+       if (field ~ /requires/) {
+               # atrpms
+               $0 = fixedsub("%{eversion}", "%{epoch}:%{version}-%{release}", $0);
+       }
+}
 
 # main() ;-)
 {
@@ -498,6 +679,21 @@ preamble == 1 {
 
        sub(/[ \t]+$/, "")
        print
+
+       if (name_seen == 0 && name) {
+               print "Name:\t" name
+               name_seen = 1
+       }
+
+       if (version_seen == 0 && version) {
+               print "Version:\t" version
+               version_seen = 1
+       }
+
+       if (release_seen == 0 && release) {
+               print "Release:\t" release
+               release_seen = 1
+       }
 }
 
 
@@ -510,6 +706,8 @@ END {
                print
        system("rm -f " changelog_file)
 
+
+
        if (did_clean == 0) {
                print ""
                print "%clean"
@@ -556,6 +754,15 @@ function format_preamble()
 # Replace directly specified directories with macros
 function use_macros()
 {
+       gsub(perl_sitearch, "%{perl_sitearch}")
+       gsub(perl_archlib, "%{perl_archlib}")
+       gsub(perl_privlib, "%{perl_privlib}")
+       gsub(perl_vendorlib, "%{perl_vendorlib}")
+       gsub(perl_vendorarch, "%{perl_vendorarch}")
+       gsub(perl_sitelib, "%{perl_sitelib}")
+       
+       gsub(py_sitescriptdir, "%{py_sitescriptdir}")
+
        gsub(bindir, "%{_bindir}")
        gsub("%{prefix}/bin", "%{_bindir}")
        if(prefix"/bin" == bindir)
@@ -571,10 +778,6 @@ function use_macros()
        if (prefix"/sbin" == sbindir)
                gsub("%{_prefix}/sbin", "%{_sbindir}")
 
-       gsub("%{prefix}/lib", "%{_libdir}")
-       if (prefix"/lib" == libdir)
-               gsub("%{_prefix}/lib", "%{_libdir}")
-
        for (c = 1; c <= NF; c++) {
                if ($c ~ sysconfdir "/{?cron.")
                        continue;
@@ -594,6 +797,8 @@ function use_macros()
                        continue;
                if ($c ~ sysconfdir "/{?sysconfig")
                        continue;
+               if ($c ~ sysconfdir "/{?certs")
+                       continue;
                gsub(sysconfdir, "%{_sysconfdir}", $c)
        }
 
@@ -605,13 +810,14 @@ function use_macros()
                gsub(datadir, "%{_datadir}", $c)
        }
 
+
        gsub("%{prefix}/share", "%{_datadir}")
        if (prefix"/share" == datadir)
                gsub("%{_prefix}/share", "%{_datadir}")
 
        gsub(includedir, "%{_includedir}")
        gsub("%{prefix}/include", "%{_includedir}")
-       if(prefix"/include" == includedir)
+       if (prefix"/include" == includedir)
                gsub("%{_prefix}/include", "%{_includedir}")
 
        gsub(mandir, "%{_mandir}")
@@ -630,6 +836,8 @@ function use_macros()
                gsub("%{_datadir}/aclocal", "%{_aclocaldir}")
        }
 
+       gsub(examplesdir, "%{_examplesdir}")
+
        if (prefix != "/") {
                for (c = 1; c <= NF; c++) {
                        if ($c ~ prefix "/sbin/fix-info-dir")
@@ -653,6 +861,26 @@ function use_macros()
 
        gsub("^make$", "%{__make}")
        gsub("^make ", "%{__make} ")
+       gsub("^gcc ", "%{__cc} ")
+
+       # mandrake specs
+       gsub("^%make$", "%{__make}")
+       gsub("^%make ", "%{__make} ")
+       gsub("^%makeinstall_std", "%{__make} install \\\n\tDESTDIR=$RPM_BUILD_ROOT")
+       gsub("^%{makeinstall}", "%{__make} install \\\n\tDESTDIR=$RPM_BUILD_ROOT")
+       gsub("^%{__rm} -rf %{buildroot}", "rm -rf $RPM_BUILD_ROOT")
+       gsub("^%{__install}", "install")
+       gsub("^%{__rm}", "rm")
+       gsub("%optflags", "%{rpmcflags}")
+       gsub("%{compat_perl_vendorarch}", "%{perl_vendorarch}")
+
+       gsub("^%{__make} install DESTDIR=\$RPM_BUILD_ROOT", "%{__make} install \\\n\tDESTDIR=$RPM_BUILD_ROOT")
+       gsub("^fix-info-dir$", "[ ! -x /usr/sbin/fix-info-dir ] || /usr/sbin/fix-info-dir -c %{_infodir} >/dev/null 2>\&1")
+       $0 = fixedsub("%buildroot", "$RPM_BUILD_ROOT", $0)
+       $0 = fixedsub("%{buildroot}", "$RPM_BUILD_ROOT", $0)
+       gsub("%_bindir", "%{_bindir}")
+       gsub("%_datadir", "%{_datadir}")
+       gsub("%_iconsdir", "%{_iconsdir}")
 
        gsub("/usr/src/linux", "%{_kernelsrcdir}")
        gsub("%{_prefix}/src/linux", "%{_kernelsrcdir}")
@@ -665,8 +893,8 @@ function isort(A,n,         i,j,hold) {
        for (i = 2; i <= n; i++) {
                hold = A[j = i]
                while (A[j-1] > hold) {
-                       j-- ; A[j+1] = A[j]
-               }
+                       j-- ; A[j+1] = A[j]
+               }
                A[j] = hold
        }
        # sentinel A[0] = "" will be created if needed
@@ -678,12 +906,64 @@ function use_files_macros(        i, n, t, a)
        gsub("^%{_sbindir}", "%attr(755,root,root) %{_sbindir}")
        gsub("^%{_bindir}", "%attr(755,root,root) %{_bindir}")
 
-       if (/^%attr.*\/etc\/rc\.d\/init\.d/ && !/^%attr\(754 *,/) {
-               gsub("^%attr\(... *,", "%attr(754,");
+       # replace back
+       gsub("%{_sysconfdir}/cron\.d", "/etc/cron.d")
+       gsub("%{_sysconfdir}/crontab\.d", "/etc/cron.d")
+       gsub("%{_sysconfdir}/logrotate\.d", "/etc/logrotate.d")
+       gsub("%{_sysconfdir}/pam\.d", "/etc/pam.d")
+       gsub("%{_sysconfdir}/profile\.d", "/etc/profile.d")
+       gsub("%{_sysconfdir}/rc\.d", "/etc/rc.d")
+       gsub("%{_sysconfdir}/security", "/etc/security")
+       gsub("%{_sysconfdir}/skel", "/etc/skel")
+       gsub("%{_sysconfdir}/sysconfig", "/etc/sysconfig")
+       gsub("%{_sysconfdir}/certs", "/etc/certs")
+       gsub("%{_sysconfdir}/init.d", "/etc/init.d")
+
+       # /etc/init.d -> /etc/rc.d/init.d
+       if (!/^\/etc\/init\.d$/) {
+                gsub("/etc/init.d", "/etc/rc.d/init.d")
        }
 
+       if (/\/etc\/rc\.d\/init\.d\// && !/functions/) {
+               if (!/%attr.*\/etc\/rc\.d\/init\.d/) {
+                       $0 = "%attr(754,root,root) " $0
+               }
+               if (/^%attr.*\/etc\/rc\.d\/init\.d/ && !/^%attr\(754 *,/) {
+                       gsub("^%attr\\(... *,", "%attr(754,");
+               }
+       }
+
+       if (/lib.+\.so/ && !/^%attr.*/) {
+               $0 = "%attr(755,root,root) " $0
+       }
+
+       # /etc/sysconfig files
+       # %attr(640,root,root) %config(noreplace) %verify(not size mtime md5) /etc/sysconfig/*
+       # attr not required, allow default 644 attr
+       if (!/network-scripts/) {
+               if (/\/etc\/sysconfig\// && /%config/ && !/%config\(noreplace\)/) {
+                       gsub("%config", "%config(noreplace)")
+               }
+
+               if (/\/etc\/sysconfig\// && !/%config\(noreplace\)/) {
+                       $NF = "%config(noreplace) " $NF
+               }
+
+               if (/\/etc\/sysconfig\// && /%attr\(755/) {
+                       gsub("^%attr\\(... *,", "%attr(640,");
+               }
+
+               if (/\/etc\/sysconfig\// && !/%verify/) {
+                       gsub("/etc/sysconfig", "%verify(not size mtime md5) /etc/sysconfig");
+               }
+       }
+
+
+       # kill leading zeros
+       gsub("%attr\\(0", "%attr(")
+
        # sort %verify attrs
-       if (match($0, /%verify\(not (.*)\)/)) {
+       if (match($0, /%verify\(not([^)]+)\)/)) {
                t = substr($0, RSTART, RLENGTH)
                gsub(/^%verify\(not |\)$/, "", t)
                n = split(t, a, / /)
@@ -695,8 +975,17 @@ function use_files_macros( i, n, t, a)
                }
                s = s ")"
 
-               gsub(/%verify\(not .*\)/, s)
+               gsub(/%verify\(not[^)]+\)/, s)
        }
+
+       if (/%{_mandir}/) {
+               gsub("\.gz$", "*")
+       }
+
+       # atrpms
+       $0 = fixedsub("%{perl_man1dir}", "%{_mandir}/man1", $0);
+       $0 = fixedsub("%{perl_man3dir}", "%{_mandir}/man3", $0);
+       $0 = fixedsub("%{perl_bin}", "%{_bindir}", $0);
 }
 
 function fill(ch, n, i) {
This page took 0.102163 seconds and 4 git commands to generate.