X-Git-Url: http://git.pld-linux.org/?a=blobdiff_plain;f=adapter.awk;h=60eff7e254c1323e478351488f1333f18720057d;hb=c4a1f100f83737f5801bd376068b14940727f32f;hp=d8fe1d03cbaa50d5e90906b77b08fbbd8e5ce07c;hpb=d769e78f9c53b1aa613deeead60ac7516c92ac23;p=packages%2Frpm-build-tools.git diff --git a/adapter.awk b/adapter.awk index d8fe1d0..60eff7e 100644 --- a/adapter.awk +++ b/adapter.awk @@ -1,14 +1,18 @@ #!/bin/awk -f # -# This is adapter v0.27. Adapter adapts .spec files for PLD. +# This is adapter v0.27. Adapter adapts .spec files for PLD Linux. # -# Copyright (C) 1999-2003 PLD-Team +# Copyright (C) 1999-2005 PLD-Team # Authors: # Micha³ Kuratczyk # Sebastian Zagrodzki # Tomasz K³oczko -# Artur Frysiak +# Artur Frysiak # Michal Kochanowicz +# Elan Ruusamä¤e +# +# See cvs log adapter{,.awk} for list of contributors +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # TODO @@ -16,11 +20,16 @@ # - add "-nc" option to skip CVS interaction # - sort Summary(XX) # - sort Requires, BuildRequires +# - check if %description (lang=C) contains 8bit +# - desc wrapping is totally fucked up on global.spec,1.25, dosemu.spec,1.115- BEGIN { + RPM_SECTIONS = "package|build|changelog|clean|description|install|post|posttrans|postun|pre|prep|pretrans|preun|triggerin|triggerpostun|triggerun" + SECTIONS = "^%(" RPM_SECTIONS ")" + preamble = 1 # Is it part of preamble? Default - yes - boc = 4 # Beggining of %changelog - bod = 0 # Beggining of %description + boc = 4 # Beginning of %changelog + bod = 0 # Beginning of %description tw = 70 # Descriptions width b_idx = 0 # index of BR/R arrays @@ -30,13 +39,18 @@ BEGIN { 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 }'" | getline _cvsmailfeedback + # If 1, we are inside of comment block (started with /^#%/) comment_block = 0 # File with rpm groups "rpm --eval %_sourcedir" | getline groups_file groups_file = groups_file "/rpm.groups" - system("cd `rpm --eval %_sourcedir`; cvs up rpm.groups >/dev/null") + system("cd `rpm --eval %_sourcedir`; [ -f rpm.groups ] || cvs up rpm.groups >/dev/null") # Temporary file for changelog section changelog_file = ENVIRON["HOME"] "/tmp/adapter.changelog" @@ -52,6 +66,7 @@ BEGIN { "rpm --eval %_mandir" | getline mandir "rpm --eval %_infodir" | getline infodir "rpm --eval %_examplesdir" | getline examplesdir + "rpm --eval %_defaultdocdir" | getline docdir "rpm --eval %perl_sitearch" | getline perl_sitearch "rpm --eval %perl_archlib" | getline perl_archlib @@ -75,17 +90,22 @@ FNR == 1 { # If the latest line matched /%files/ defattr == 1 { - if ($0 !~ /defattr/) # If no %defattr - print "%defattr(644,root,root,755)" # Add it - else - $0 = "%defattr(644,root,root,755)" # Correct mistakes (if any) + if (ENVIRON["SKIP_DEFATTR"] != 1) { + if ($0 !~ /defattr/) { # If no %defattr + print "%defattr(644,root,root,755)" # Add it + } else { + $0 = "%defattr(644,root,root,755)" # Correct mistakes (if any) + } + } defattr = 0 } 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); return s; } @@ -96,15 +116,27 @@ function b_makekey(a, b, s) { # 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/ { # && !/^%/) { +ENVIRON["SKIP_SORTBR"] != 1 && preamble == 1 && /(PreReq|(Build)?Requires)/, /(PreReq|(Build)?Requires)/ { + if ($1 ~ /PreReq:/) { + sub(/PreReq:/, "Requires:", $1); + } + format_preamble() + b_idx++; - b_ktmp = b_makekey($1, $2); + l = substr($0, index($0, $2)); + b_ktmp = b_makekey($1, l); b_key[b_idx] = b_ktmp; b_val[b_ktmp] = $0; next; } +/^%bcond_/ { + # do nothing + print + next +} + preamble == 1 { if (b_idx > 0) { isort(b_key, b_idx); @@ -131,12 +163,69 @@ preamble == 1 { next } -# Remove defining _applnkdir (this macro has been included in rpm-3.0.4) /^%define/ { - if ($2 == "_applnkdir") + # Remove defining _applnkdir (this macro has been included in rpm-3.0.4) + if ($2 == "_applnkdir") { next - if ($2 == "date") + } + if ($2 == "date") { date = 1 + } + + # Do not add %define of _prefix if it already is. + if ($2 ~ /^_prefix/) { + sub("^"prefix, $3, bindir) + sub("^"prefix, $3, sbindir) + sub("^"prefix, $3, libdir) + sub("^"prefix, $3, datadir) + sub("^"prefix, $3, includedir) + prefix = $3 + } + + if ($2 ~ /_bindir/ && !/_sbindir/) + bindir = $3 + if ($2 ~ /_sbindir/) + sbindir = $3 + if ($2 ~ /_libdir/) + libdir = $3 + if ($2 ~ /_sysconfdir/) { + if ($3 ~ /^%\(/) { + # TODO: should escape for latter checks like: ($c ~ sysconfdir "/{?cron.") + sysconfdir = "%%%%%%%%%%%%%%" + } else { + sysconfdir = $3 + } + } + if ($2 ~ /_datadir/) + datadir = $3 + if ($2 ~ /_includedir/) + includedir = $3 + if ($2 ~ /_mandir/) + mandir = $3 + if ($2 ~ /_infodir/) + infodir = $3 + if ($2 ~ /_docdir/) + docdir = $3 + + # version related macros + if ($2 ~ /^_beta$/) + _beta = $3 + if ($2 ~ /^_rc$/) + _rc = $3 + if ($2 ~ /^_snap$/) + _snap = $3 + + # these are used usually when adapterizing external spec + if ($2 ~ /^name$/) + name = $3 + if ($2 ~ /^version$/) + version = $3 + if ($2 ~ /^release$/) + release = $3 + + # do nothing further, otherwise adapter thinks we're at preamble + print + next } # Obsolete @@ -147,7 +236,7 @@ preamble == 1 { ################ # %description # ################ -/^%description/, (/^%[a-z]+/ && !/^%description/ && !/^%((end)?if|else)/) { +/^%description/, (!/^%description/ && $0 ~ SECTIONS) { preamble = 0 if (/^%description/) { @@ -157,7 +246,7 @@ preamble == 1 { } # Format description - if (description == 1 && !/^%[a-z]+/ && !/^%description/) { + if (ENVIRON["SKIP_DESC"] != 1 && description == 1 && !/^%[a-z]+/ && !/^%description/) { if (/^[ \t]*$/) { format_flush(format_line, format_indent) print "" @@ -196,7 +285,7 @@ preamble == 1 { ######### # %prep # ######### -/^%prep/, (/^%[a-z]+$/ && !/^%prep/ && !/^%((end)?if|else)/) { +/^%prep/, (!/^%prep/ && $0 ~ SECTIONS) { preamble = 0 use_macros() @@ -207,12 +296,21 @@ preamble == 1 { } if (/^%setup/) { - gsub(name, "%{name}"); - gsub(version, "%{version}"); + $0 = fixedsub(name, "%{name}", $0); + $0 = fixedsub(version, "%{version}", $0); + if (_beta) { + $0 = fixedsub(_beta, "%{_beta}", $0); + } + if (_rc) { + $0 = fixedsub(_rc, "%{_rc}", $0); + } + if (_snap) { + $0 = fixedsub(_snap, "%{_snap}", $0); + } } if (/^%setup/ && /-n %{name}-%{version}( |$)/) { - sub(/ -n %{name}-%{version}/, "") + $0 = fixedsub(" -n %{name}-%{version}", "", $0) } # invalid in %prep @@ -222,7 +320,7 @@ preamble == 1 { ########## # %build # ########## -/^%build/, (/^%[a-z]+$/ && !/^%build/ && !/^%((end)?if|else)/) { +/^%build/, (!/^%build/ && $0 ~ SECTIONS) { preamble = 0 use_macros() @@ -266,20 +364,42 @@ preamble == 1 { next } + # quote CC + if (/CC=%{__cc} /) { + sub("CC=%{__cc}", "CC=\"%{__cc}\"") + } + + # use PLD Linux macros + $0 = fixedsub("glib-gettextize --copy --force","%{__glib_gettextize}", $0); + $0 = fixedsub("intltoolize --copy --force", "%{__intltoolize}", $0); + $0 = fixedsub("automake --add-missing --copy", "%{__automake}", $0); + + sub(/^aclocal$/, "%{__aclocal}"); + sub(/^autoheader$/, "%{__autoheader}"); + sub(/^autoconf$/, "%{__autoconf}"); + sub(/^automake$/, "%{__automake}"); + + # atrpms + $0 = fixedsub("%perl_configure", "%{__perl} Makefile.PL \\\n\tINSTALLDIRS=vendor", $0); + $0 = fixedsub("%perl_makecheck", "%{?with_tests:%{__make} test}", $0); } ########## # %clean # ########## -/^%clean/, (/^%[a-z]+$/ && !/^%clean/ && !/^%((end)?if|else)/) { +/^%clean/, (!/^%clean/ && $0 ~ SECTIONS) { did_clean = 1 - use_macros() + + # prevent next section header like "%post -p /sbin/ldconfig" being adapterized + if (!/^%/) { + use_macros() + } } ############ # %install # ############ -/^%install/, (/^%[a-z]+$/ && !/^%install/ && !/^%((end)?if|else)/) { +/^%install/, (!/^%install/ && $0 ~ SECTIONS) { preamble = 0 @@ -318,32 +438,38 @@ preamble == 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); } ########## # %files # ########## -/^%files/, (/^%[a-z \-]+$/ && !/^%files/ && !/^%((end)?if|else)/) { +/^%files/, (!/^%files/ && $0 ~ SECTIONS) { preamble = 0 if ($0 ~ /^%files/) defattr = 1 - use_macros() use_files_macros() } ############## # %changelog # ############## -/^%changelog/, (/^%[a-z]+$/ && !/^%changelog/) { +/^%changelog/, (!/^%changelog/ && $0 ~ SECTIONS) { preamble = 0 has_changelog = 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 " > changelog_file + if ($0 !~ _cvsmailfeedback) + print "* %{date} " _cvsmailfeedback > changelog_file else skip = 1 boc = 2 @@ -351,7 +477,7 @@ preamble == 1 { if (boc == 2 && !skip) { if (!/All persons listed below/) { printf "All persons listed below can be reached at " > changelog_file - print "@pld-linux.org\n" > changelog_file + print "" _cvsmaildomain "\n" > changelog_file } else skip = 1 boc = 1 @@ -384,31 +510,40 @@ preamble == 1 { ########### # SCRIPTS # ########### -/^%pre/, (/^%[a-z]+$/ && !/^%pre/) { +/^%pre/, (!/^%pre/ && $0 ~ SECTIONS) { 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/) { + +/^%post/, (!/^%post/ && $0 ~ SECTIONS) { preamble = 0 + use_macros() } -/^%preun/, (/^%[a-z]+$/ && !/^%preun/) { +/^%preun/, (!/^%preun/ && $0 ~ SECTIONS) { preamble = 0 } -/^%postun/, (/^%[a-z]+$/ && !/^%postun/) { +/^%postun/, (!/^%postun/ && $0 ~ SECTIONS) { preamble = 0 } -/^%triggerin/, (/^%[a-z]+$/ && !/^%triggerin/) { +/^%triggerin/, (!/^%triggerin/ && $0 ~ SECTIONS) { preamble = 0 } -/^%triggerun/, (/^%[a-z]+$/ && !/^%triggerun/) { +/^%triggerun/, (!/^%triggerun/ && $0 ~ SECTIONS) { preamble = 0 } -/^%triggerpostun/, (/^%[a-z]+$/ && !/^%triggerpostun/) { +/^%triggerpostun/, (!/^%triggerpostun/ && $0 ~ SECTIONS) { preamble = 0 } -/^%pretrans/, (/^%[a-z]+$/ && !/^%pretrans/) { +/^%pretrans/, (!/^%pretrans/ && $0 ~ SECTIONS) { preamble = 0 } -/^%posttrans/, (/^%[a-z]+$/ && !/^%posttrans/) { +/^%posttrans/, (!/^%posttrans/ && $0 ~ SECTIONS) { preamble = 0 } @@ -420,8 +555,17 @@ 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 ~ /summary:/ && !/etc\.$/) { + sub(/\.$/, "", $0); + } if (field ~ /group(\([^)]+\)):/) next if (field ~ /group:/) { @@ -439,6 +583,19 @@ preamble == 1 { sub(/^[^ \t]*[ \t]*/,"") Grupa = $0 + sub(/^System Environment\/Libraries$/, "Libraries", Grupa) + sub(/^System Environment\/Daemons$/, "Daemons", Grupa) + sub(/^Applications\/Internet$/, "Applications/Networking", Grupa) + sub(/^Applications\/Daemons$/, "Daemons", Grupa) + sub(/^Application\/Multimedia$/, "Applications/Multimedia", Grupa) + sub(/^System\/Servers$/, "Daemons", Grupa) + sub(/^X11\/Xserver$/, "X11/Servers", Grupa) + sub(/^X11\/XFree86/, "X11", Grupa) + sub(/^Applications\/Compilers$/, "Development/Languages", Grupa) + sub(/^Applications\/Internet\/Peer to Peer/, "Applications/Networking", Grupa) + sub(/^Networking\/Deamons$/, "Networking/Daemons", Grupa) + sub(/^Development\/Docs$/, "Documentation", Grupa) + print "Group:\t\t" Grupa if (Grupa ~ /^X11/ && x11 == 0) # Is it X11 application? x11 = 1 @@ -463,8 +620,17 @@ preamble == 1 { } if (field ~ /prereq:/) { - $1 = "Requires:" - $(NF + 1) = " # FIXME add Requires(scriptlet) -adapter.awk" + sub(/PreReq:/, "Requires:", $1); + } + + # split (build)requires, obsoletes on commas + if (field ~ /(obsoletes|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:/) @@ -477,15 +643,37 @@ preamble == 1 { if (field ~ /copyright:/ && $2 ~ /GPL|BSD/) $1 = "License:" - if (field ~ /name:/) + if (field ~ /name:/) { + if ($2 == "%{name}" && name) { + $2 = name + } name = $2 + name_seen = 1; + } - if (field ~ /version:/) + if (field ~ /version:/) { + if ($2 == "%{version}" && version) { + $2 = version + } version = $2 + version_seen = 1; + } + + if (field ~ /release:/) { + if ($2 == "%{release}" && release) { + $2 = release + } + release = $2 + release_seen = 1; + } if (field ~ /serial:/) $1 = "Epoch:" + # proper caps + if (field ~ /^url:$/) + $1 = "URL:" + # Use %{name} and %{version} in the filenames in "Source:" if (field ~ /^source/ || field ~ /patch/) { n = split($2, url, /\//) @@ -531,9 +719,13 @@ preamble == 1 { $2 = s url[n+1] filename = url[n] - url[n] = fixedsub(name, "%{name}", url[n]) + if (name) { + url[n] = fixedsub(name, "%{name}", url[n]) + } if (field ~ /source/) { - url[n] = fixedsub(version, "%{version}", url[n]) + if (version) { + url[n] = fixedsub(version, "%{version}", url[n]) + } if (_beta) { url[n] = fixedsub(_beta, "%{_beta}", url[n]) } @@ -553,57 +745,21 @@ preamble == 1 { 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) } if (field ~ /^source:/) $1 = "Source0:" - if (field ~ /patch:/) + if (field ~ /^patch:/) $1 = "Patch0:" format_preamble() - if ($1 ~ /%define/) { - # Do not add %define of _prefix if it already is. - if ($2 ~ /^_prefix/) { - sub("^"prefix, $3, bindir) - sub("^"prefix, $3, sbindir) - sub("^"prefix, $3, libdir) - sub("^"prefix, $3, datadir) - sub("^"prefix, $3, includedir) - prefix = $3 - } - if ($2 ~ /_bindir/ && !/_sbindir/) - bindir = $3 - if ($2 ~ /_sbindir/) - sbindir = $3 - if ($2 ~ /_libdir/) - libdir = $3 - if ($2 ~ /_sysconfdir/ && $3 !~ /^%\(/) - sysconfdir = $3 - if ($2 ~ /_datadir/) - datadir = $3 - if ($2 ~ /_includedir/) - includedir = $3 - if ($2 ~ /_mandir/) - 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); } } @@ -613,6 +769,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 + } } @@ -671,6 +842,11 @@ function format_preamble() # Replace directly specified directories with macros function use_macros() { + # -m, --skip-macros, --no-macros -- skip macros subst + if (ENVIRON["SKIP_MACROS"]) { + return + } + gsub(perl_sitearch, "%{perl_sitearch}") gsub(perl_archlib, "%{perl_archlib}") gsub(perl_privlib, "%{perl_privlib}") @@ -688,6 +864,12 @@ function use_macros() for (c = 1; c <= NF; c++) { if ($c ~ sbindir "/fix-info-dir") continue; + if ($c ~ sbindir "/webapp") + continue; + if ($c ~ sbindir "/chsh") + continue; + if ($c ~ sbindir "/usermod") + continue; gsub(sbindir, "%{_sbindir}", $c) } @@ -700,6 +882,8 @@ function use_macros() continue; if ($c ~ sysconfdir "/{?crontab.d") continue; + if ($c ~ sysconfdir "/{?env.d") + continue; if ($c ~ sysconfdir "/{?logrotate.d") continue; if ($c ~ sysconfdir "/{?pam.d") @@ -714,32 +898,49 @@ function use_macros() continue; if ($c ~ sysconfdir "/{?sysconfig") continue; + if ($c ~ sysconfdir "/{?shrc.d") + continue; if ($c ~ sysconfdir "/{?certs") continue; + if ($c ~ sysconfdir "/{?X11") + continue; + if ($c ~ sysconfdir "/{?ld.so.conf.d") + continue; + if ($c ~ sysconfdir "/{?httpd") # temp + continue; gsub(sysconfdir, "%{_sysconfdir}", $c) } + gsub(docdir, "%{_docdir}") + for (c = 1; c <= NF; c++) { if ($c ~ datadir "/automake") continue; if ($c ~ datadir "/unsermake") continue; + if ($c ~ datadir "/file/magic.mime") + continue; gsub(datadir, "%{_datadir}", $c) } - gsub("%{prefix}/share", "%{_datadir}") if (prefix"/share" == datadir) gsub("%{_prefix}/share", "%{_datadir}") - gsub(includedir, "%{_includedir}") + # CFLAGS="-I/usr/include/ncurses is usually correct. + if (!/-I\/usr\/include/) { + gsub(includedir, "%{_includedir}") + } + gsub("%{prefix}/include", "%{_includedir}") - if (prefix"/include" == includedir) + if (prefix"/include" == includedir) { gsub("%{_prefix}/include", "%{_includedir}") + } gsub(mandir, "%{_mandir}") - if ($0 !~ "%{_datadir}/manual") + if ($0 !~ "%{_datadir}/manual") { gsub("%{_datadir}/man", "%{_mandir}") + } gsub("%{_prefix}/share/man", "%{_mandir}") gsub("%{prefix}/share/man", "%{_mandir}") gsub("%{prefix}/man", "%{_mandir}") @@ -756,43 +957,74 @@ function use_macros() gsub(examplesdir, "%{_examplesdir}") if (prefix != "/") { - for (c = 1; c <= NF; c++) { - if ($c ~ prefix "/sbin/fix-info-dir") - continue; - if ($c ~ prefix "/share/automake") - continue; - if ($c ~ prefix "/share/unsermake") - continue; - gsub(prefix, "%{_prefix}", $c) + # leave --with-foo=/usr alone + if ($0 !~ "--with.*=.*" prefix) { + for (c = 1; c <= NF; c++) { + if ($c ~ prefix "/sbin/fix-info-dir") + continue; + if ($c ~ prefix "/sbin/webapp") + continue; + if ($c ~ prefix "/sbin/chsh") + continue; + if ($c ~ prefix "/sbin/usermod") + continue; + if ($c ~ prefix "/share/automake") + continue; + if ($c ~ prefix "/share/unsermake") + continue; + if ($c ~ prefix "/lib/sendmail") + continue; + if ($c ~ prefix "/lib/pkgconfig") + continue; + + # CFLAGS="-I/usr..." is usually correct. + if (/-I\/usr/) + continue; + # same for LDFLAGS="-L/usr..." + if (/-L\/usr/) + continue; + + gsub(prefix, "%{_prefix}", $c) + } } gsub("%{prefix}", "%{_prefix}") } + # replace back + gsub("%{_includedir}/ncurses", "/usr/include/ncurses") + gsub("%{_includedir}/freetype", "/usr/include/freetype") + gsub("%{PACKAGE_VERSION}", "%{version}") gsub("%{PACKAGE_NAME}", "%{name}") - # we can move files between the dirs below - if ($0 !~ "%{_applnkdir}") { - gsub("%{_datadir}/gnome/apps", "%{_applnkdir}") - } - 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("^%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") - gsub("%buildroot", "$RPM_BUILD_ROOT") + $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("%_bindir", "%{_bindir}") gsub("%_datadir", "%{_datadir}") gsub("%_iconsdir", "%{_iconsdir}") + gsub("%_sbindir", "%{_sbindir}") + gsub("%_mandir", "%{_mandir}") + gsub("%name", "%{name}") gsub("/usr/src/linux", "%{_kernelsrcdir}") gsub("%{_prefix}/src/linux", "%{_kernelsrcdir}") @@ -815,12 +1047,19 @@ function isort(A,n, i,j,hold) { function use_files_macros( i, n, t, a) { + use_macros() + gsub("^%{_sbindir}", "%attr(755,root,root) %{_sbindir}") gsub("^%{_bindir}", "%attr(755,root,root) %{_bindir}") + # uid/gid nobody is not valid in %files + if (/%attr([^)]*nobody[^)]*)/ && !/FIXME/) { + $0 = $0 " # FIXME nobody user/group can't own files! -adapter.awk" + } + # replace back gsub("%{_sysconfdir}/cron\.d", "/etc/cron.d") - gsub("%{_sysconfdir}/crontab\.d", "/etc/cron.d") + gsub("%{_sysconfdir}/crontab\.d", "/etc/crontab.d") gsub("%{_sysconfdir}/logrotate\.d", "/etc/logrotate.d") gsub("%{_sysconfdir}/pam\.d", "/etc/pam.d") gsub("%{_sysconfdir}/profile\.d", "/etc/profile.d") @@ -845,14 +1084,14 @@ function use_files_macros( i, n, t, a) } } - if (/lib.+\.so/ && !/^%attr.*/) { + if (/lib.+\.so/ && !/\.so$/ && !/^%attr.*/ && !/%exclude/) { $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 (!/network-scripts/ && !/%dir/ && !/\.d$/ && !/functions/ && !/\/etc\/sysconfig\/wmstyle/) { if (/\/etc\/sysconfig\// && /%config/ && !/%config\(noreplace\)/) { gsub("%config", "%config(noreplace)") } @@ -870,13 +1109,17 @@ function use_files_macros( i, n, t, a) } } - # kill leading zeros - gsub("%attr\\(0", "%attr(") + if (/%attr\(0[1-9]/) { + gsub("%attr\\(0", "%attr(") + } # sort %verify attrs if (match($0, /%verify\(not([^)]+)\)/)) { t = substr($0, RSTART, RLENGTH) + # kill commas: %verify(not,md5,size,mtime) + gsub(/,/, " ", t); + gsub(/^%verify\(not |\)$/, "", t) n = split(t, a, / /) isort(a, n) @@ -893,6 +1136,24 @@ function use_files_macros( i, n, t, a) if (/%{_mandir}/) { gsub("\.gz$", "*") } + + # locale dir and no %lang -> bad + if (/%{_datadir}\/locale\/.*\// && !/%(dir|lang)/) { + $(NF + 1) = "# FIXME consider using %find_lang" + } + + # atrpms + $0 = fixedsub("%{perl_man1dir}", "%{_mandir}/man1", $0); + $0 = fixedsub("%{perl_man3dir}", "%{_mandir}/man3", $0); + $0 = fixedsub("%{perl_bin}", "%{_bindir}", $0); + + gsub(libdir "/pkgconfig", "%{_pkgconfigdir}"); + gsub("%{_libdir}/pkgconfig", "%{_pkgconfigdir}"); + gsub("%{_prefix}/lib/pkgconfig", "%{_pkgconfigdir}"); + + gsub("%{_datadir}/applications", "%{_desktopdir}"); + gsub("%{_datadir}/icons", "%{_iconsdir}"); + gsub("%{_datadir}/pixmaps", "%{_pixmapsdir}"); } function fill(ch, n, i) {