+
+ # uid/gid nobody is not valid in %files
+ if (/%attr([^)]*nobody[^)]*)/ && !/FIXME/) {
+ $0 = $0 " # FIXME nobody user/group can't own files! -adapter.awk"
+ }
+
+ # s[gu]id programs with globs are evil
+ if (/%attr\([246]...,.*\*/ && !/FIXME/) {
+ $0 = $0 " # FIXME no globs for suid/sgid files"
+ }
+
+ # replace back
+ gsub("%{_sysconfdir}/cron\.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")
+ 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/ && !/\.so$/ && !/^%attr.*/ && !/%exclude/) {
+ $0 = "%attr(755,root,root) " $0
+ }
+
+ if (/%{perl_vendorarch}.*\.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/ && !/%dir/ && !/\.d$/ && !/functions/ && !/\/etc\/sysconfig\/wmstyle/) {
+ 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
+ if (/%attr\(0[1-9]/) {
+ gsub("%attr\\(0", "%attr(")
+ }
+
+ # kill default attrs
+ gsub(/%dir %attr\(755,root,root\)/, "%dir");
+ if (!/%dir/) {
+ gsub(/%attr\(644,root,root\) /, "");
+ }
+
+ # 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)
+
+ s = "%verify(not"
+ for (i = 1 ; i <= n; i++) {
+ s = s " " a[i]
+ }
+ s = s ")"
+
+ gsub(/%verify\(not[^)]+\)/, s)
+ }
+
+ 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 use_script_macros()
+{
+ if (gsub("/sbin/service", "%service")) {
+ sub(" >/dev/null 2>&1 \|\|:", "");
+ sub(" 2> /dev/null \|\| :", "");
+ }