-#!/bin/awk -f
+#!/usr/bin/gawk -f
#
-# This is adapter v0.27. Adapter adapts .spec files for PLD Linux.
+# This is adapter v0.28. Adapter adapts .spec files for PLD Linux.
# $Id$
#
# Copyright (C) 1999-2006 PLD-Team <feedback@pld-linux.org>
# Authors:
-# Micha³ Kuratczyk <kura@pld.org.pl>
+# Michał Kuratczyk <kura@pld.org.pl>
# Sebastian Zagrodzki <s.zagrodzki@mimuw.edu.pl>
-# Tomasz K³oczko <kloczek@rudy.mif.pg.gda.pl>
+# Tomasz Kłoczko <kloczek@rudy.mif.pg.gda.pl>
# Artur Frysiak <wiget@pld-linux.org>
# Michal Kochanowicz <mkochano@pld.org.pl>
-# Elan Ruusamä¤e <glen@pld-linux.org>
+# Elan Ruusamäe <glen@pld-linux.org>
#
# See cvs log adapter{,.awk} for list of contributors
#
PREAMBLE_TAGS = "(Summary|Name|Version|Release|Epoch|License|Group|URL|BuildArch|BuildRoot|Obsoletes|Conflicts|Provides|ExclusiveArch|ExcludeArch|Pre[Rr]eq|(Build)?Requires)"
- preamble = 1 # Is it part of preamble? Default - yes
+ preamble = 1 # Is it part of preamble? Default - yes
boc = 4 # Beginning of %changelog
bod = 0 # Beginning of %description
tw = 70 # Descriptions width
b_idx = 0 # index of BR/R arrays
+ BR_count = 0 # number of additional BuildRequires
# If variable removed, then 1 (for removing it from export)
removed["LDFLAGS"] = 0
"rpm --eval %_infodir" | getline infodir
"rpm --eval %_examplesdir" | getline examplesdir
"rpm --eval %_defaultdocdir" | getline docdir
+ "rpm --eval %_kdedocdir" | getline kdedocdir
"rpm --eval %_desktopdir" | getline desktopdir
"rpm --eval %_pixmapsdir" | getline pixmapsdir
"rpm --eval %perl_vendorarch" | getline perl_vendorarch
"rpm --eval %perl_sitelib" | getline perl_sitelib
- "rpm --eval %py_sitescriptdir" | getline py_sitescriptdir
- "rpm --eval %py_sitedir" | getline py_sitedir
- "rpm --eval %py_scriptdir " | getline py_scriptdir
+ "rpm --eval %py_sitescriptdir 2>/dev/null" | getline py_sitescriptdir
+ "rpm --eval %py_sitedir 2>/dev/null" | getline py_sitedir
+ "rpm --eval %py_scriptdir 2>/dev/null" | getline py_scriptdir
+
+ "rpm --eval %ruby_archdir" | getline ruby_archdir
+ "rpm --eval %ruby_ridir" | getline ruby_ridir
+ "rpm --eval %ruby_rubylibdir" | getline ruby_rubylibdir
+ "rpm --eval %ruby_sitearchdir" | getline ruby_sitearchdir
+ "rpm --eval %ruby_sitelibdir" | getline ruby_sitelibdir
+
"rpm --eval %php_pear_dir" | getline php_pear_dir
"rpm --eval %tmpdir" | getline tmpdir
}
function b_makekey(a, b, s) {
s = a "" b;
# kill bcond
- gsub(/[#%]+{[!?]+[_a-zA-Z0-9]+:/, "", s);
+ gsub(/[#%]+{[!?]+[_a-zA-Z0-9]+:/, "", s);
# kill commented out items
- gsub(/^#[ \t]*/, "", s);
+ gsub(/^#[ \t]*/, "", s);
# force order
- gsub(/^Summary\(/, "11Summary(", s);
- gsub(/^Summary/, "10Summary", s);
- gsub(/^Name/, "2Name", s);
- gsub(/^Version/, "3Version", s);
- gsub(/^Release/, "4Release", s);
- gsub(/^Epoch/, "5Epoch", s);
- gsub(/^License/, "5License", s);
- gsub(/^Group/, "6Group", s);
- gsub(/^URL/, "7URL", s);
-
- gsub(/^BuildRequires/, "B1BuildRequires", s);
- gsub(/^BuildConflicts/, "B2BuildConflicts", s);
- gsub(/^Provides/, "X1Provides", s);
- gsub(/^Obsoletes/, "X2Obsoletes", s);
- gsub(/^Conflicts/, "X3Conflicts", s);
- gsub(/^BuildArch/, "X4BuildArch", s);
- gsub(/^ExclusiveArch/, "X6ExclusiveArch", s);
- gsub(/^ExcludeArch/, "X7ExcludeArch", s);
- gsub(/^BuildRoot/, "X9BuildRoot", s);
+ gsub(/^Summary\(/, "11Summary(", s);
+ gsub(/^Summary/, "10Summary", s);
+ gsub(/^Name/, "2Name", s);
+ gsub(/^Version/, "3Version", s);
+ gsub(/^Release/, "4Release", s);
+ gsub(/^Epoch/, "5Epoch", s);
+ gsub(/^License/, "5License", s);
+ gsub(/^Group/, "6Group", s);
+ gsub(/^URL/, "7URL", s);
+
+ gsub(/^BuildRequires/, "B1BuildRequires", s);
+ gsub(/^BuildConflicts/, "B2BuildConflicts", s);
+ gsub(/^Provides/, "X1Provides", s);
+ gsub(/^Obsoletes/, "X2Obsoletes", s);
+ gsub(/^Conflicts/, "X3Conflicts", s);
+ gsub(/^BuildArch/, "X4BuildArch", s);
+ gsub(/^ExclusiveArch/, "X6ExclusiveArch", s);
+ gsub(/^ExcludeArch/, "X7ExcludeArch", s);
+ gsub(/^BuildRoot/, "X9BuildRoot", s);
# printf("%s -> %s\n", a""b, s);
return s;
if (/^%setup/ && /-n %{name}-%{version}( |$)/) {
$0 = fixedsub(" -n %{name}-%{version}", "", $0)
}
- sub("^%patch ", "%patch0 ");
+ sub("^%patch ", "%patch0 ");
# invalid in %prep
sub("^rm -rf \$RPM_BUILD_ROOT.*", "");
$0 = fixedsub("automake --add-missing --copy", "%{__automake}", $0);
$0 = fixedsub("automake -a --foreign --copy", "%{__automake}", $0);
$0 = fixedsub("automake -a -c --foreign", "%{__automake}", $0);
+ $0 = fixedsub("automake -a -c", "%{__automake}", $0);
$0 = fixedsub("libtoolize --force --automake --copy", "%{__libtoolize}", $0);
$0 = fixedsub("libtoolize -c -f --automake", "%{__libtoolize}", $0);
sub(/^autoheader$/, "%{__autoheader}");
sub(/^autoconf$/, "%{__autoconf}");
sub(/^automake$/, "%{__automake}");
+ sub(/^libtoolize$/, "%{__libtoolize}");
# atrpms
$0 = fixedsub("%perl_configure", "%{__perl} Makefile.PL \\\n\tINSTALLDIRS=vendor", $0);
/^%clean/, (!/^%clean/ && $0 ~ SECTIONS) {
did_clean = 1
- # prevent next section header like "%post -p /sbin/ldconfig" being adapterized
- if (!/^%post/) {
- use_macros()
- }
+ use_macros()
}
############
# foreign rpms
sub("^%{__rm} -rf %{buildroot}", "rm -rf $RPM_BUILD_ROOT")
- sub("%buildroot", "$RPM_BUILD_ROOT");
- sub("%{buildroot}", "$RPM_BUILD_ROOT");
+ sub("%buildroot", "$RPM_BUILD_ROOT");
+ sub("%{buildroot}", "$RPM_BUILD_ROOT");
if (/^[ \t]*rm([ \t]+-[rf]+)*[ \t]+(\${?RPM_BUILD_ROOT}?|%{?buildroot}?)/ && did_rmroot==0) {
did_rmroot=1
did_rmroot=1
}
- if (tmpdir) {
- buildroot = tmpdir "/" name "-" version "-root-" ENVIRON["USER"]
+ if (tmpdir) {
+ buildroot = tmpdir "/" name "-" version "-root-" ENVIRON["USER"]
gsub(buildroot, "$RPM_BUILD_ROOT")
- }
+ }
- if (!/%{_lib}/) {
- sub("\$RPM_BUILD_ROOT/%", "$RPM_BUILD_ROOT%")
- }
+ if (!/%{_lib}/) {
+ sub("\$RPM_BUILD_ROOT/%", "$RPM_BUILD_ROOT%")
+ }
use_macros()
sub(/mkdir -p/, "install -d")
# cp -a already implies cp -r
- sub(/^cp -ar/, "cp -a")
+ sub(/^cp -ar/, "cp -a")
# No '-u root' or '-g root' for 'install'
if (/^install/ && /-[ug][ \t]*root/)
skip = 0
# There should be some CVS keywords on the first line of %changelog.
if (boc == 3) {
- if ($0 !~ _cvsmailfeedback)
+ if ($0 !~ _cvsmailfeedback) {
print "* %{date} " _cvsmailfeedback > changelog_file
- else
+ } else {
skip = 1
+ }
boc = 2
}
if (boc == 2 && !skip) {
if (!/All persons listed below/) {
printf "All persons listed below can be reached at " > changelog_file
print "<cvs_login>" _cvsmaildomain "\n" > changelog_file
- } else
+ } else {
skip = 1
+ }
boc = 1
}
if (boc == 1 && !skip) {
if (!/^$/) {
- if (!/\$.*Log:.*\$/)
+ if (!/\$.*Log:.*\$/) {
print "$" "Log:$" > changelog_file
+ }
boc = 0
}
}
boc = 3
}
- sub(/[ \t]+$/, "")
- if (!/^%[a-z]+$/ || /changelog/)
+ sub(/[ \t]+$/, "");
+ if (!/^%[a-z]+$/ || /changelog/) {
+ # stop changelog if "real" changelog starts
+ if (boc == 0 && /^\* /) {
+ boc = -1
+ }
+ if (boc == -1) {
+ next;
+ }
print > changelog_file
- else
+ } else {
print
+ }
next
}
}
/^%preun/, (!/^%preun/ && $0 ~ SECTIONS) {
preamble = 0
- use_script_macros()
+ use_macros()
}
/^%postun/, (!/^%postun/ && $0 ~ SECTIONS) {
preamble = 0
field = tolower($1)
fieldnlower = $1
- if (field ~ /summary:/ && !/etc\.$/) {
+ if (field ~ /summary:/ && !/etc\.$/ && !/Inc\.$/) {
sub(/\.$/, "", $0);
}
if (field ~ /group(\([^)]+\)):/)
sub(/^Text Processing\/Markup\/XML$/, "Applications/Text", group)
sub(/^Web\/Database$/, "Applications/WWW", group)
sub(/^System Environment\/Base$/, "Base", group)
+ sub(/^System$/, "Base", group)
+ sub(/^Applications\/Productivity$/, "X11/Applications", group)
+ sub(/^Database$/, "Applications/Databases", group)
+ sub(/^Development\/Code Generators$/, "Development", group)
$0 = "Group:\t\t" group
next
}
- # perhaps we have common known name?
+ # perhaps we have common known name?
- # jpackages
+ # jpackages
sub(/^java-devel$/, "jdk", $2);
sub(/^log4j$/, "jakarta-log4j", $2);
sub(/^oro$/, "jakarta-oro", $2);
+ sub(/^jakarta-ant$/, "ant", $2);
sub(/^xerces-j2$/, "xerces-j", $2);
- sub(/^ant-junit$/, "jakarta-ant", $2);
sub(/^ldapjdk$/, "ldapsdk", $2);
sub(/^saxon-scripts$/, "saxon", $2);
+ sub(/^xalan-j2$/, "xalan-j", $2);
+ sub(/^xerces-j2$/, "xerces-j", $2);
+
+ replace_php_virtual_deps();
}
+ if (field ~ /^requires:/) {
+ replace_php_virtual_deps();
+ }
+
+
# obsolete/unwanted tags
if (field ~ /vendor:|packager:|distribution:|docdir:|prefix:|icon:|author:|author-email:|metadata-version:/) {
next
$2 = fixedsub(filename, url[n], $2)
# sourceforge urls
+ sub("[?&]big_mirror=.*$", "", $2);
+ sub("[?&]modtime=.*$", "", $2);
+
sub("[?]use_mirror=.*$", "", $2);
sub("[?]download$", "", $2);
+
sub("^http://prdownloads\.sourceforge\.net/", "http://dl.sourceforge.net/", $2)
sub("^http://download\.sf\.net/", "http://dl.sourceforge.net/", $2)
+ sub("^http://downloads\.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)
#
# NOTES:
# - mixing BR/R and anything else confuses this (all will be sorted together)
-# so don't do that.
+# 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
+# so don't adapterize when the BR/R are mixed with comments
ENVIRON["SKIP_SORTBR"] != 1 && preamble == 1 && $0 ~ PREAMBLE_TAGS, $0 ~ PREAMBLE_TAGS {
if ($1 ~ /Pre[Rr]eq:/) {
sub(/Pre[Rr]eq:/, "Requires:", $1);
if (do_not_touch_anything)
exit 0
+ # TODO: need to output these in proper place
+ if (BR_count > 0) {
+ for (i = 0; i <= BR_count; i++) {
+ print BR[i];
+ }
+ }
+
close(changelog_file)
while ((getline < changelog_file) > 0)
print
print "%define date\t%(echo `LC_ALL=\"C\" date +\"%a %b %d %Y\"`)"
}
- if (has_changelog == 0)
+ if (has_changelog == 0) {
print "%changelog"
+ }
- if (boc > 2)
+ if (boc > 2) {
print "* %{date} PLD Team <feedback@pld-linux.org>"
+ }
if (boc > 1) {
printf "All persons listed below can be reached at "
print "<cvs_login>@pld-linux.org\n"
}
- if (boc > 0)
+ if (boc > 0) {
print "$" "Log:$"
+ }
}
function fixedsub(s1,s2,t, ind) {
return;
}
sub(/:[ \t]*/, ":")
- if (match($0, /[A-Za-z0-9(),#_ \t]+[ \t]*:[ \t]*/) == 1) {
- if (RLENGTH < 8)
+ if (match($0, /[A-Za-z0-9(),#_ \t.-]+[ \t]*:[ \t]*/) == 1) {
+ if (RLENGTH < 8) {
sub(/:/, ":\t\t")
- else
+ } else {
sub(/:/, ":\t")
+ }
}
}
return;
}
- sub("%{_defaultdocdir}", "%{_docdir}");
- sub("%{_bindir}/perl", "%{__perl}");
- sub("%{_bindir}/python", "%{__python}");
+ sub("%{_defaultdocdir}", "%{_docdir}");
+ sub("%{_bindir}/perl", "%{__perl}");
+ sub("%{_bindir}/python", "%{__python}");
+
+ gsub(infodir, "%{_infodir}")
gsub(perl_sitearch, "%{perl_sitearch}")
gsub(perl_archlib, "%{perl_archlib}")
gsub(py_scriptdir, "%{py_scriptdir}")
gsub("%{_libdir}/python2.4/site-packages", "%{py_sitedir}")
gsub("%{python_sitelib}", "%{py_sitedir}")
+
+ gsub(ruby_archdir, "%{ruby_archdir}")
+ gsub(ruby_ridir, "%{ruby_ridir}")
+ gsub(ruby_rubylibdir, "%{ruby_rubylibdir}")
+ gsub(ruby_sitearchdir, "%{ruby_sitearchdir}")
+ gsub(ruby_sitelibdir, "%{ruby_sitelibdir}")
+
gsub("%{_datadir}/applications", "%{_desktopdir}")
gsub("%{_datadir}/pixmaps", "%{_pixmapsdir}")
+ gsub(libdir, "%{_libdir}")
+
gsub(bindir, "%{_bindir}")
gsub("%{prefix}/bin", "%{_bindir}")
if (prefix"/bin" == bindir)
continue;
if ($c ~ sbindir "/webapp")
continue;
+ if ($c ~ sbindir "/ldconfig")
+ continue;
if ($c ~ sbindir "/chsh")
continue;
if ($c ~ sbindir "/usermod")
continue;
if ($c ~ sysconfdir "/shells")
continue;
+ if ($c ~ sysconfdir "/ppp")
+ continue;
gsub(sysconfdir, "%{_sysconfdir}", $c)
}
+ gsub(kdedocdir, "%{_kdedocdir}")
gsub(docdir, "%{_docdir}")
gsub(php_pear_dir, "%{php_pear_dir}")
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")
+ 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)
$0 = fixedsub("CXXFLAGS=%{rpmcflags} %configure", "CXXFLAGS=%{rpmcflags}\n%configure", $0);
gsub("%_sbindir", "%{_sbindir}")
gsub("%_mandir", "%{_mandir}")
gsub("%name", "%{name}")
- gsub(/%ant/, "ant")
- gsub(/%__rm/, "rm");
- gsub(/%__mkdir_p/, "install -d");
- gsub(/%__cp/, "cp");
- gsub(/%__ln_s/, "ln -s");
- gsub(/%__sed/, "%{__sed}");
- gsub(/%__cat/, "cat");
- gsub(/%__chmod/, "chmod");
+ gsub(/%__rm/, "rm");
+ gsub(/%__mkdir_p/, "install -d");
+ gsub(/%__cp/, "cp");
+ gsub(/%__ln_s/, "ln -s");
+ gsub(/%__sed/, "%{__sed}");
+ gsub(/%__cat/, "cat");
+ gsub(/%__chmod/, "chmod");
gsub("/usr/src/linux", "%{_kernelsrcdir}")
gsub("%{_prefix}/src/linux", "%{_kernelsrcdir}")
+
+ if (/^ant /) {
+ sub(/^ant/, "%ant")
+ add_br("BuildRequires: jpackage-utils");
+ add_br("BuildRequires: rpmbuild(macros) >= 1.300");
+ }
+
}
function format_configure(line, n, a, s) {
# %attr(640,root,root) %config(noreplace) %verify(not size mtime md5) /etc/sysconfig/*
# attr not required, allow default 644 attr
if (!/network-scripts/ && !/%dir/ && !/\.d$/ && !/functions/ && !/\/etc\/sysconfig\/wmstyle/) {
- if (/\/etc\/sysconfig\// && /%config/ && !/%config\(noreplace\)/) {
+ if (/\/etc\/sysconfig\// && /%config/ && !/%config\(noreplace/) {
gsub("%config", "%config(noreplace)")
}
- if (/\/etc\/sysconfig\// && !/%config\(noreplace\)/) {
+ if (/\/etc\/sysconfig\// && !/%config\(noreplace/) {
$NF = "%config(noreplace) " $NF
}
gsub("%attr\\(0", "%attr(")
}
- # kill default attrs
- gsub(/%dir %attr\(755,root,root\)/, "%dir");
- if (!/%dir/) {
- gsub(/%attr\(644,root,root\) /, "");
- }
+ # kill default attrs
+ gsub(/%dir %attr\(755,root,root\)/, "%dir");
+ gsub(/%attr\(755,root,root\) %dir/, "%dir");
+ if (!/%dir/) {
+ gsub(/%attr\(644,root,root\) /, "");
+ }
# sort %verify attrs
if (match($0, /%verify\(not([^)]+)\)/)) {
# reverse vim: ts=4 sw=4 et
gsub(/ /, "\t");
}
+
+function add_br(br)
+{
+ BR[BR_count++] = br
+}
+
+# php virtual deps as discussed in devel-en
+function replace_php_virtual_deps()
+{
+ pkg = $2
+# if (pkg == "php-program") {
+# $0 = $1 "\t/usr/bin/php"
+# return
+# }
+
+ if (pkg ~ /^php-[a-z]/ && pkg !~ /^php-(pear|common|cli|devel|fcgi|cgi|dirs|program|pecl-)/) {
+ sub(/^php-/, "php(", pkg);
+ sub(/$/, ")", pkg);
+ $2 = pkg
+ }
+
+ if (pkg ~/^php$/) {
+ $2 = "webserver(php)";
+ if ($4 ~ /^[0-9]:/) {
+ $4 = substr($4, 3);
+ }
+ }
+
+ if (pkg ~/^php4$/) {
+ $2 = "webserver(php)";
+ if ($4 ~ /^[0-9]:/) {
+ $4 = substr($4, 3);
+ }
+ }
+}
+
+# vim:ts=4:sw=4