# 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
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
"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.
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++;
+ b_ktmp = b_makekey($1, $2);
+ 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!/) {
/^%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 (/^%setup/ && /-n %{name}-%{version}( |$)/) {
+ sub(/ -n %{name}-%{version}/, "")
+ }
+
+ # invalid in %prep
+ sub("^rm -rf \$RPM_BUILD_ROOT.*", "");
}
##########
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);
}
##########
##########
/^%clean/, (/^%[a-z]+$/ && !/^%clean/ && !/^%((end)?if|else)/) {
did_clean = 1
+ use_macros()
}
############
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/))
# 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);
}
##########
/^%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 #
# 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(\([^)]+\)):/)
next
}
+ if (field ~ /prereq:/) {
+ $1 = "Requires:"
+ $(NF + 1) = " # FIXME add Requires(scriptlet) -adapter.awk"
+ }
+
if (field ~ /packager:|distribution:|docdir:|prefix:/)
next
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:"
$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)
mandir = $3
if ($2 ~ /_infodir/)
infodir = $3
+
+ if ($2 ~ /_beta/)
+ _beta = $3
+ if ($2 ~ /_rc/)
+ _rc = $3
+ if ($2 ~ /_snap/)
+ _snap = $3
}
- if (field ~ /buildrequires:/) {
- # obsolete
- if ($2 ~ /rpm-pythonprov/) {
- next
- }
+ if (field ~ /requires/) {
+ # atrpms
+ $0 = fixedsub("%{eversion}", "%{epoch}:%{version}-%{release}", $0);
}
}
-
# main() ;-)
{
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
+ }
}
print
system("rm -f " changelog_file)
+
+
if (did_clean == 0) {
print ""
print "%clean"
# 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)
continue;
if ($c ~ sysconfdir "/{?sysconfig")
continue;
+ if ($c ~ sysconfdir "/{?certs")
+ continue;
gsub(sysconfdir, "%{_sysconfdir}", $c)
}
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}")
gsub("%{_datadir}/aclocal", "%{_aclocaldir}")
}
+ gsub(examplesdir, "%{_examplesdir}")
+
if (prefix != "/") {
for (c = 1; c <= NF; c++) {
if ($c ~ prefix "/sbin/fix-info-dir")
gsub("^make$", "%{__make}")
gsub("^make ", "%{__make} ")
+ # mandrake specs
+ gsub("^%make$", "%{__make}")
+ gsub("^%make ", "%{__make} ")
+ gsub("^%makeinstall_std", "%{__make} install \\\n\tDESTDIR=$RPM_BUILD_ROOT")
+ gsub("^%{__rm} -rf %{buildroot}", "rm -rf $RPM_BUILD_ROOT")
+ 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}")
}
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
gsub("^%{_sbindir}", "%attr(755,root,root) %{_sbindir}")
gsub("^%{_bindir}", "%attr(755,root,root) %{_bindir}")
- gsub("%{_sysconfdir}\/rc\.d\/init.d", "/etc/rc.d/init.d")
- gsub("%{_sysconfdir}\/init.d", "/etc/rc.d/init.d")
-
- if (/\/etc\/rc\.d\/init\.d/) {
+ # 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,");
+ 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/*
- if (/\/etc\/sysconfig\// && !/%attr.*/) {
- $0 = "%attr(640,root,root) " $0
- }
-
- if (/\/etc\/sysconfig\// && /%config/ && !/%config\(noreplace\)/) {
- gsub("%config", "%config(noreplace)")
- }
+ # 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\)/) {
- gsub("%attr\(%config\s", "%config(noreplace)")
- }
+ if (/\/etc\/sysconfig\// && !/%config\(noreplace\)/) {
+ $NF = "%config(noreplace) " $NF
+ }
- if (/\/etc\/sysconfig\// && !/%verify/) {
- gsub("/etc/sysconfig", "%verify(not size mtime md5) /etc/sysconfig");
- }
+ if (/\/etc\/sysconfig\// && /%attr\(755/) {
+ gsub("^%attr\\(... *,", "%attr(640,");
+ }
- if (/\/etc\/sysconfig\// && !/%attr\(640/) {
- 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(")
+ 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, / /)
}
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) {