X-Git-Url: http://git.pld-linux.org/?p=packages%2Frpm.git;a=blobdiff_plain;f=rpm.macros;h=dfebf636f2989c4691f985ec996dc1bd627b9542;hp=9921a9c801a65aaaf37afd57cae7bff7594c9d09;hb=c940d7763dbbadc077c4d8cba3a00f8d69f1f4bb;hpb=4d45063a5d8750e7dd1e4dd48e62a6ee2b1e569f diff --git a/rpm.macros b/rpm.macros index 9921a9c..dfebf63 100644 --- a/rpm.macros +++ b/rpm.macros @@ -8,6 +8,12 @@ %kgcc %{__cc} %kgcc_package gcc +# compiler version +%cc_version %{expand:%%global cc_version %(%{__cc} -dumpversion || echo ERROR)}%cc_version +%cxx_version %{expand:%%global cxx_version %(%{__cxx} -dumpversion || echo ERROR)}%cxx_version + +%__rm /bin/rm --interactive=never + # Build system path macros. # %__autoconf autoconf %{?debug:-Wall} @@ -30,10 +36,10 @@ %__gnome_doc_prepare gnome-doc-prepare --copy --force %__gtkdocize gtkdocize --copy %__intltoolize intltoolize --copy --force -%__libtoolize libtoolize --copy --force +%__libtoolize libtoolize --copy --force --install # Path to top of build area. -%_topdir %(test -d ../SPECS && (cd ..; pwd) || echo $HOME/rpm) +%_topdir %{expand:%%global _topdir %(test -d ../SPECS -a -d ../SOURCES && (cd ..; pwd) || echo $HOME/rpm)}%_topdir # The number of cvs changelog entries kept when building package. %_buildchangelogtruncate 20 @@ -63,6 +69,7 @@ # Flags specified in %filterout_* are removed from %rpm*flags, exactly: # %rpmcflags = %optflags - %filterout - %filterout_c - %filterout_ld # %rpmcxxflags = %optflags - %filterout - %filterout_cxx - %filterout_ld +# %rpmcppflags = %optcppflags - %filterout - %filterout_cpp - %filterout_ld # %rpmldflags = %optldflags - %filterout_ld # # Regular expressions are supported, but to avoid some character be treated @@ -88,6 +95,12 @@ %{filter_out} }') +%rpmcppflags %(awk 'BEGIN { + split("%{?debug:%debugcppflags}%{!?debug:%optcppflags}%{?debuginfocppflags}",I); + split("%{?filterout} %{?filterout_cpp} %{?filterout_cpp}",F); + %{filter_out} +}') + %rpmldflags %(awk 'BEGIN { split("%{?optldflags}",I); split("%{?filterout_ld}",F) @@ -116,7 +129,7 @@ CXXFLAGS="${CXXFLAGS:-%rpmcxxflags}" ; export CXXFLAGS ; \ FFLAGS="${FFLAGS:-%rpmcflags}" ; export FFLAGS ; \ FCFLAGS="${FCFLAGS:-%rpmcflags}" ; export FCFLAGS ; \ - CPPFLAGS="${CPPFLAGS:-}" ; export CPPFLAGS ; \ + CPPFLAGS="${CPPFLAGS:-%rpmcppflags}" ; export CPPFLAGS ; \ %{?__cc:CC="%{__cc}" ; export CC ; } \ %{?__cxx:CXX="%{__cxx}" ; export CXX ; } \ %{?configuredir:%{configuredir}}%{!?configuredir:.}/configure \ @@ -138,13 +151,13 @@ %{dependencytracking} \ } -# override __cmake to add -j4 in your ~/.rpmmacros for parallel make %__cmake /usr/bin/cmake %cmake { \ CC="%{__cc}" \ CXX="%{__cxx}" \ CFLAGS="%{rpmcflags}" \ CXXFLAGS="%{rpmcxxflags}" \ +LDFLAGS="%{rpmldflags}" \ %{__cmake} \ } @@ -156,7 +169,7 @@ CXXFLAGS="%{rpmcxxflags}" \ CFLAGS="${CFLAGS:-%rpmcflags}" \ CXXFLAGS="${CXXFLAGS:-%rpmcxxflags}" \ FFLAGS="${FFLAGS:-%rpmcflags}" \ - CPPFLAGS="${CPPFLAGS:-}" \ + CPPFLAGS="${CPPFLAGS:-%rpmcppflags}" \ %{?__cc:CC="%{__cc}"} \ %{?__cxx:CXX="%{__cxx}"} \ libsuffix=%{_lib} \ @@ -185,7 +198,7 @@ CXXFLAGS="%{rpmcxxflags}" \ CXXFLAGS="${CXXFLAGS:-%rpmcxxflags}" \ FFLAGS="${FFLAGS:-%rpmcflags}" \ FCFLAGS="${FCFLAGS:-%rpmcflags}" \ - CPPFLAGS="${CPPFLAGS:-}" \ + CPPFLAGS="${CPPFLAGS:-%rpmcppflags}" \ %{?__cc:CC="%{__cc}"} \ %{?__cxx:CXX="%{__cxx}"} \ --host=%{_target_platform} \ @@ -217,13 +230,15 @@ CXXFLAGS="%{rpmcxxflags}" \ %{nil} # Location of autoconf macros -%_aclocaldir %(aclocal --print-ac-dir) +%_aclocaldir %{expand:%%global _aclocaldir %(aclocal --print-ac-dir || echo ERROR)}%_aclocaldir # Location of omf files -%_omf_dest_dir %(scrollkeeper-config --omfdir) +%_omf_dest_dir %{expand:%%global _omf_dest_dir %(scrollkeeper-config --omfdir || echo ERROR)}%_omf_dest_dir # Location of pkgconfig files %_pkgconfigdir /usr/%{_lib}/pkgconfig +# noarch pkgconfig files +%_npkgconfigdir /usr/share/pkgconfig # Location of desktop files %_desktopdir /usr/share/applications @@ -250,9 +265,6 @@ CXXFLAGS="%{rpmcxxflags}" \ # Current date %date %(LC_ALL="C" date +"%a %b %d %Y") -# tmp directory -%tmpdir %(echo "${TMPDIR:-/tmp}") - # Example files, programs, scripts... %_examplesdir /usr/src/examples @@ -266,26 +278,35 @@ CXXFLAGS="%{rpmcxxflags}" \ %_rpmfilename %%{NAME}-%%{VERSION}-%%{RELEASE}%{?debug:dbg}.%%{ARCH}.rpm # Requires name = version-release -%requires_releq() %(echo '%*' | LC_ALL="C" xargs -r rpm -q --qf 'Requires: %%{name} = %%{epoch}:%%{version}-%%{release}\\n' | sed -e 's/ (none):/ /' | grep -v "is not") +%requires_releq() %(echo '%*' | LC_ALL="C" xargs -r rpm -q --qf 'Requires: %{N} = %|E?{%{E}:}|%{V}-%{R}\\n' | grep -v 'is not') -%releq_kernel() %((LC_ALL="C" rpm -qf --qf '%%{name} = %%{epoch}:%%{version}-%%{release}\\n' %{_kernelsrcdir}/include/linux/version.h 2>/dev/null || echo ERROR) | sed -e 's/ (none):/ /' | sed -e 's:-headers::' | grep -vE "(is not|no such)") -%releq_kernel_up() %((LC_ALL="C" rpm -qf --qf '%%{name}-up = %%{epoch}:%%{version}-%%{release}\\n' %{_kernelsrcdir}/include/linux/version.h 2>/dev/null || echo ERROR) | sed -e 's/ (none):/ /' | sed -e 's:-headers::' | grep -vE "(is not|no such)") -%releq_kernel_smp() %((LC_ALL="C" rpm -qf --qf '%%{name}-smp = %%{epoch}:%%{version}-%%{release}\\n' %{_kernelsrcdir}/include/linux/version.h 2>/dev/null || echo ERROR) | sed -e 's/ (none):/ /' | sed -e 's:-headers::' | grep -vE "(is not|no such)") +%releq_kernel %{expand:%%global releq_kernel %(R=$(LC_ALL=C rpm -q --qf '%{N} = %|E?{%{E}:}|%{V}-%{R}' -f %{_kernelsrcdir}/include/linux/version.h 2>/dev/null | grep -v 'is not' | sed -e 's:-headers::;s:-config::'); echo ${R:-ERROR})}%releq_kernel +%releq_kernel_up %{expand:%%global releq_kernel_up %(R=$(LC_ALL=C rpm -q --qf '%{N}-up = %|E?{%{E}:}|%{V}-%{R}' -f %{_kernelsrcdir}/include/linux/version.h 2>/dev/null | grep -v 'is not' | sed -e 's:-headers::;s:-config::'); echo ${R:-ERROR})}%releq_kernel_up +%releq_kernel_smp() %{expand:%%global releq_kernel_smp %(R=$(LC_ALL=C rpm -q --qf '%{N}-smp = %|E?{%{E}:}|%{V}-%{R}' -f %{_kernelsrcdir}/include/linux/version.h 2>/dev/null | grep -v 'is not' | sed -e 's:-headers::;s:-config::'); echo ${R:-ERROR})}%releq_kernel_smp %requires_releq_kernel(s:) Requires%{-s:(%{-s*})}: %releq_kernel %requires_releq_kernel_up(s:) Requires%{-s:(%{-s*})}: %releq_kernel_up %requires_releq_kernel_smp(s:) Requires%{-s:(%{-s*})}: %releq_kernel_smp -%requires_eq() %(echo '%*' | LC_ALL="C" xargs -r rpm -q --qf 'Requires: %%{name} = %%{epoch}:%%{version}\\n' | sed -e 's/ (none):/ /' -e 's/ 0:/ /' | grep -v "is not") -%requires_eq_to() %(LC_ALL="C" rpm -q --qf 'Requires: %1 = %%{epoch}:%%{version}\\n' %2 | sed -e 's/ (none):/ /' | grep -v "is not") +# XXX: why epoch 0 is stripped? +%requires_eq() %(echo '%*' | LC_ALL="C" xargs -r rpm -q --qf 'Requires: %{N} = %|E?{%{E}:}|%{V}\\n' | sed -e 's/ 0:/ /' | grep -v 'is not') +%requires_eq_to() %(LC_ALL="C" rpm -q --qf 'Requires: %1 = %|E?{%{E}:}|%{V}' %2 | grep -v "is not") -%apache_modules_api %(awk '/#define MODULE_MAGIC_NUMBER_MAJOR/ {print $3}' /usr/include/apache/ap_mmn.h 2>/dev/null || echo ERROR) +%apache_modules_api %{expand:%%global apache_modules_api %(awk '/#define MODULE_MAGIC_NUMBER_MAJOR/ {print $3}' /usr/include/apache/ap_mmn.h 2>/dev/null || echo ERROR)}%apache_modules_api # kernel version-release handling -%__kernel_ver %( VER_H=%{_kernelsrcdir}/include/linux/utsrelease.h; [ -f $VER_H ] || VER_H=%{_kernelsrcdir}/include/linux/version.h; [ -f $VER_H ] && (grep UTS_RELEASE $VER_H 2>/dev/null | head -n 1 | cut -d'"' -f2) || (awk '/^VERSION/ { ver = $0; gsub(/VERSION.*=/, NIL, ver); } /^PATCHLEVEL/ { plev = $0; gsub(/PATCHLEVEL.*=/, NIL, plev); } /^SUBLEVEL/ { slev = $0; gsub(/SUBLEVEL.*=/, NIL, slev); } /^EXTRAVERSION/ { ever = $0; gsub(/EXTRAVERSION.*=/, NIL, ever); gsub(/ /, NIL, ever); } END { printf("%d.%d.%d%s", ver, plev, slev, ever); }' %{_kernelsrcdir}/Makefile 2> /dev/null)) -%__kernel_rel %(LC_ALL="C" rpm -qf %{_kernelsrcdir}/include/linux/fs.h 2>/dev/null --qf "%{RELEASE}" | grep -v "is not") -%__kernel_rpmvr %(LC_ALL="C" rpm -qf %{_kernelsrcdir}/include/linux/fs.h 2>/dev/null --qf "%{VERSION}-%{RELEASE}" | grep -v "is not") -%_kernel_ver %{__kernel_ver}%{?with_dist_kernel:%(echo %{__kernel_ver} | grep -q -e - || echo -%{__kernel_rel})} -%_kernel_ver_str %(echo %{!?_without_dist_kernel:%{__kernel_rpmvr}}%{?_without_dist_kernel:%{__kernel_ver}} | sed -e 's/-/_/g') +%__kernel_ver %{expand:%%global __kernel_ver %( \\ + Z=$(awk -F'"' '/UTS_RELEASE/{print $2}' %{_kernelsrcdir}/include/linux/{version,utsrelease}.h 2>/dev/null); \\ + Z=${Z:-$(awk -F' = ' '/^VERSION/{v=$2} /^PATCHLEVEL/{p=$2} /^SUBLEVEL/{s=$2} /^EXTRAVERSION/{e=$2} END {printf("%d.%d.%d%s", v, p, s, e)}' %{_kernelsrcdir}/Makefile 2>/dev/null)}; \\ + echo ${Z:-ERROR}; \\ +)}%__kernel_ver + +%__kernel_rel %{expand:%%global __kernel_rel %(Z=$(LC_ALL=C rpm -qf %{_kernelsrcdir}/include/linux/fs.h 2>/dev/null --qf "%{R}" | grep -v "is not"); echo ${Z:-ERROR})}%__kernel_rel +%__kernel_rpmvr %{expand:%%global __kernel_rpmvr %(Z=$(LC_ALL=C rpm -qf %{_kernelsrcdir}/include/linux/fs.h 2>/dev/null --qf "%{V}-%{R}" | grep -v "is not"); echo ${Z:-ERROR})}%__kernel_rpmvr +%_kernel_ver %{expand:%%global _kernel_ver %{__kernel_ver}%{?with_dist_kernel:%(echo %{__kernel_ver} | grep -q -e - || echo -%{__kernel_rel})}}%_kernel_ver +%_kernel_ver_str %{expand:%%global _kernel_ver_str %(echo %{!?_without_dist_kernel:%{__kernel_rpmvr}}%{?_without_dist_kernel:%{__kernel_ver}} | sed -e 's/-/_/g')}%_kernel_ver_str + +# `uname -r` to be used in @release field +%_kernel_vermagic %{expand:%%global _kernel_vermagic %(echo %{_kernel_ver} | sed -e 's/-/_/g')}%_kernel_vermagic # sgml macros %xmlcat_add() /usr/bin/xmlcatalog --noout --add nextCatalog \"\" %1 /etc/xml/catalog ; @@ -370,7 +391,7 @@ if [ -d "$RPM_BUILD_ROOT" ]; then \ echo "DONE"; \ fi; \ fi; \ - filelist=`find $RPM_BUILD_ROOT -type f ! -regex ".*/usr/lib[0-9]*/debug/.*\.debug" ! -regex ".*/lib/modules/.*" ! -regex ".*%{_docdir}/.*" ! -regex ".*%{_includedir}/.*" %{?_noautostrip:! -regex "%{_noautostrip}"} %{?_autostripall:! -regex "%{_autostripall}"} %{?_autostripunneeded:! -regex "%{_autostripunneeded}"} %{?_autostripdebug:! -regex "%{_autostripdebug}"}`; \ + filelist=$(find $RPM_BUILD_ROOT -type f ! -regex ".*/usr/lib[0-9]*/debug/.*\.debug" ! -regex ".*/lib/modules/.*" ! -regex ".*%{_docdir}/.*" ! -regex ".*%{_includedir}/.*" %{?_noautostrip:! -regex "%{_noautostrip}"} %{?_autostripall:! -regex "%{_autostripall}"} %{?_autostripunneeded:! -regex "%{_autostripunneeded}"} %{?_autostripdebug:! -regex "%{_autostripdebug}"}); \ if [ -n "$filelist" ]; then \ filetypes=`echo "$filelist" | xargs -r -d'\\n' file`; \ elfexelist=`echo "$filetypes" | awk -F: '/ELF.*executable/ {print $1}'`; \ @@ -395,9 +416,9 @@ if [ -d "$RPM_BUILD_ROOT" ]; then \ echo "DONE"; \ fi; \ fi; \ - filelist_all=%{?_autostripall:`find $RPM_BUILD_ROOT -type f -regex "%{_autostripall}"`}; \ - filelist_unneeded=%{?_autostripunneeded:`find $RPM_BUILD_ROOT -type f -regex "%{_autostripunneeded}"`}; \ - filelist_debug=%{?_autostripdebug:`find $RPM_BUILD_ROOT -type f -regex "%{_autostripdebug}"`}; \ + filelist_all=%{?_autostripall:$(find $RPM_BUILD_ROOT -type f -regex "%{_autostripall}")}; \ + filelist_unneeded=%{?_autostripunneeded:$(find $RPM_BUILD_ROOT -type f -regex "%{_autostripunneeded}")}; \ + filelist_debug=%{?_autostripdebug:$(find $RPM_BUILD_ROOT -type f -regex "%{_autostripdebug}")}; \ if [ -n "$filelist_all" ]; then \ printf "Stripping everything from %d additional files..." $(echo "$filelist_all" | wc -l); \ chmod u+w $filelist_all; \ @@ -440,8 +461,16 @@ if [ -d "$RPM_BUILD_ROOT" ]; then \ while read file; do \ rpath= ; \ chmod u+w "$file"; \ - for dir in `chrpath -l "$file" | \ - awk '/RPATH=/ { gsub(/.*RPATH=/,""); gsub(/:/," "); print $0 }'` ; do \ + for dir in $(chrpath -l "$file" | awk '/RPATH=/ { gsub(/.*RPATH=/,""); gsub(/:/," "); print $0 }'); do \ + case $dir in \ + '$ORIGIN' ) \ + if [ "$rpath" = "" ] ; then rpath="$dir" ; \ + else rpath="$rpath:$dir" ; fi ; \ + continue ; \ + ;; \ + esac ; \ + newdir=$(readlink -m "$dir"); \ + [ ${#newdir} -le ${#dir} ] && dir=$newdir; \ case $dir in \ /home/* | /tmp/* | /usr/lib | /usr/lib64 | /lib | /lib64 | /usr/local/lib | /usr/local/lib64 | /usr/X11R6/lib | /usr/X11R6/lib64 ) \ echo "remove-rpath: $dir in $file"; \ @@ -491,33 +520,33 @@ fi; }; __spec_install_post_chrpath } } } # %gconf_schema_install() \ umask 022; \ - GCONF_CONFIG_SOURCE="xml:readwrite:/etc/gconf/gconf.xml.defaults" /usr/bin/gconftool-2 --makefile-install-rule /etc/gconf/schemas/%{?1}%{!?1:*.schemas} > /dev/null \ - %{nil} + GCONF_CONFIG_SOURCE="xml:readwrite:/etc/gconf/gconf.xml.defaults" \\\ + /usr/bin/gconftool-2 --makefile-install-rule /etc/gconf/schemas/%{?1}%{!?1:*.schemas} > /dev/null; \ +%{nil} %gconf_schema_uninstall() \ -if [ $1 = 0 ]; then \ +if [ $1 = 0 -a -x /usr/bin/gconftool-2 ]; then \ umask 022; \ - GCONF_CONFIG_SOURCE="xml:readwrite:/etc/gconf/gconf.xml.defaults" /usr/bin/gconftool-2 --makefile-uninstall-rule /etc/gconf/schemas/%{?1} > /dev/null \ -fi \ + GCONF_CONFIG_SOURCE="xml:readwrite:/etc/gconf/gconf.xml.defaults" \\\ + /usr/bin/gconftool-2 --makefile-uninstall-rule /etc/gconf/schemas/%{?1} > /dev/null \ +fi; \ %{nil} #----------------------------------------------------------------- # Update desktop MIME database # requires: desktop-file-utils -# -%update_desktop_database_post() {{ \ +%update_desktop_database() {{ \ umask 022; \ /usr/bin/update-desktop-database -q; \ -}} \ -%{nil} +}}%{nil} + +%update_desktop_database_post %update_desktop_database %update_desktop_database_postun() {{ \ -if [ $1 = 0 ]; then \ - umask 022; \ - /usr/bin/update-desktop-database -q; \ -fi \ -}} \ -%{nil} +if [ "$1" = "0" ]; then \ + %update_desktop_database; \ +fi; \ +}}%{nil} #----------------------------------------------------------------- # Update shared MIME info database @@ -526,8 +555,7 @@ fi \ %update_mime_database() {{ \ umask 022; \ /usr/bin/update-mime-database %{_datadir}/mime; \ -}} \ -%{nil} +}}%{nil} #----------------------------------------------------------------- # Update icon cache @@ -536,8 +564,7 @@ fi \ %update_icon_cache() {{ \ umask 022; \ /usr/bin/gtk-update-icon-cache -qf %{_datadir}/icons/%1; \ -}} \ -%{nil} +}}%{nil} #----------------------------------------------------------------- # Update scrollkeeper database @@ -545,12 +572,12 @@ fi \ # %scrollkeeper_update_post() \ /usr/bin/scrollkeeper-update -q; \ - %{nil} +%{nil} %scrollkeeper_update_postun() \ -if [ $1 = 0 ]; then \ +if [ "$1" = "0" ]; then \ /usr/bin/scrollkeeper-update -q; \ -fi \ +fi; \ %{nil} #----------------------------------------------------------------- @@ -562,21 +589,22 @@ fi \ ################################################################### # Requires/Provides automation -# exceptions system by Jacek Konieczny +# exceptions system by Jacek Konieczny # %__noautoreqfiles %(sed -e s'/#.*//' /etc/rpm/noautoreqfiles)%{?_noautoreqfiles: %{_noautoreqfiles}} %__noautoprovfiles %(sed -e s'/#.*//' /etc/rpm/noautoprovfiles)%{?_noautoprovfiles: %{_noautoprovfiles}} %__noautoreq %(sed -e s'/#.*//' /etc/rpm/noautoreq)%{?_noautoreq: %{_noautoreq}} %__noautoreqdep %(sed -e s'/#.*//' /etc/rpm/noautoreqdep)%{?_noautoreqdep: %{_noautoreqdep}} %__noautoprov %(sed -e s'/#.*//' /etc/rpm/noautoprov)%{?_noautoprov: %{_noautoprov}} + #%_noautocompressdoc %{nil} # %_missing_doc_files_terminate_build 1%{nil} %_unpackaged_files_terminate_build %{nil} # (X)emacs support %___emacs_lispdir_helper -batch -q -eval '(while load-path (princ (concat (car load-path) "\\n")) (setq load-path (cdr load-path)))' 2> /dev/null|sed -n '/\\(.*\\/x\\?emacs\\/site-lisp\\)\\/\\?$/{s,,\\1,p;q;}' -%_emacs_lispdir %(emacs %___emacs_lispdir_helper) -%_xemacs_lispdir %(xemacs %___emacs_lispdir_helper) +%_emacs_lispdir %{expand:%%global _emacs_lispdir %(Z=$(emacs %___emacs_lispdir_helper); echo ${Z:-ERROR})}%_emacs_lispdir +%_xemacs_lispdir %{expand:%%global _xemacs_lispdir %(Z=$(xemacs %___emacs_lispdir_helper); echo ${Z:-ERROR})}%_xemacs_lispdir %__php_provides %{nil} %__php_requires %{nil} @@ -586,38 +614,40 @@ fi \ %__mono_requires %{nil} # Perl specific macro definitions. -%perl_privlib %(eval "`%{__perl} -V:installprivlib`"; echo $installprivlib) -%perl_archlib %(eval "`%{__perl} -V:installarchlib`"; echo $installarchlib) -%perl_vendorlib %(eval "`%{__perl} -V:installvendorlib`"; echo $installvendorlib) -%perl_vendorarch %(eval "`%{__perl} -V:installvendorarch`"; echo $installvendorarch) -%perl_sitelib %(eval "`%{__perl} -V:installsitelib`"; echo $installsitelib) -%perl_sitearch %(eval "`%{__perl} -V:installsitearch`"; echo $installsitearch) +%perl_privlib %{expand:%%global perl_privlib %(eval $(%{__perl} -V:installprivlib 2>/dev/null); echo ${installprivlib:-ERROR})}%perl_privlib +%perl_archlib %{expand:%%global perl_archlib %(eval $(%{__perl} -V:installarchlib 2>/dev/null); echo ${installarchlib:-ERROR})}%perl_archlib +%perl_vendorlib %{expand:%%global perl_vendorlib %(eval $(%{__perl} -V:installvendorlib 2>/dev/null); echo ${installvendorlib:-ERROR})}%perl_vendorlib +%perl_vendorarch %{expand:%%global perl_vendorarch %(eval $(%{__perl} -V:installvendorarch 2>/dev/null); echo ${installvendorarch:-ERROR})}%perl_vendorarch +%perl_sitelib %{expand:%%global perl_sitelib %(eval $(%{__perl} -V:installsitelib 2>/dev/null); echo ${installsitelib:-ERROR})}%perl_sitelib +%perl_sitearch %{expand:%%global perl_sitearch %(eval $(%{__perl} -V:installsitearch 2>/dev/null); echo ${installsitearch:-ERROR})}%perl_sitearch # Ruby -%ruby_archdir %(ruby -r rbconfig -e 'print Config::CONFIG["archdir"]' 2>/dev/null || echo ERROR) -%ruby_ridir %(ruby -r rbconfig -e 'include Config; print File.join(CONFIG["datadir"], "ri", CONFIG["ruby_version"], "system")' 2>/dev/null || echo ERROR) -%ruby_rubylibdir %(ruby -r rbconfig -e 'print Config::CONFIG["rubylibdir"]' 2>/dev/null || echo ERROR) -%ruby_vendorarchdir %(ruby -r rbconfig -e 'print Config::CONFIG["vendorarchdir"]' 2>/dev/null || echo ERROR) -%ruby_vendorlibdir %(ruby -r rbconfig -e 'print Config::CONFIG["vendorlibdir"]' 2>/dev/null || echo ERROR) -%ruby_sitearchdir %(ruby -r rbconfig -e 'print Config::CONFIG["sitearchdir"]' 2>/dev/null || echo ERROR) -%ruby_sitelibdir %(ruby -r rbconfig -e 'print Config::CONFIG["sitelibdir"]' 2>/dev/null || echo ERROR) -%ruby_version %(ruby -r rbconfig -e 'print Config::CONFIG["ruby_version"]' 2>/dev/null || echo ERROR) +%__ruby /usr/bin/ruby +%ruby_archdir %{expand:%%global ruby_archdir %(%{__ruby} -r rbconfig -e 'print Config::CONFIG["archdir"]' 2>/dev/null || echo ERROR)}%ruby_archdir +%ruby_ridir %{expand:%%global ruby_ridir %(%{__ruby} -r rbconfig -e 'include Config; print File.join(CONFIG["datadir"], "ri", CONFIG["ruby_version"], "system")' 2>/dev/null || echo ERROR)}%ruby_ridir +%ruby_rubylibdir %{expand:%%global ruby_rubylibdir %(%{__ruby} -r rbconfig -e 'print Config::CONFIG["rubylibdir"]' 2>/dev/null || echo ERROR)}%ruby_rubylibdir +%ruby_vendorarchdir %{expand:%%global ruby_vendorarchdir %(%{__ruby} -r rbconfig -e 'print Config::CONFIG["vendorarchdir"]' 2>/dev/null || echo ERROR)}%ruby_vendorarchdir +%ruby_vendorlibdir %{expand:%%global ruby_vendorlibdir %(%{__ruby} -r rbconfig -e 'print Config::CONFIG["vendorlibdir"]' 2>/dev/null || echo ERROR)}%ruby_vendorlibdir +%ruby_sitearchdir %{expand:%%global ruby_sitearchdir %(%{__ruby} -r rbconfig -e 'print Config::CONFIG["sitearchdir"]' 2>/dev/null || echo ERROR)}%ruby_sitearchdir +%ruby_sitelibdir %{expand:%%global ruby_sitelibdir %(%{__ruby} -r rbconfig -e 'print Config::CONFIG["sitelibdir"]' 2>/dev/null || echo ERROR)}%ruby_sitelibdir +%ruby_version %{expand:%%global ruby_version %(%{__ruby} -r rbconfig -e 'print Config::CONFIG["ruby_version"]' 2>/dev/null || echo ERROR)}%ruby_version %ruby_ver_requires_eq Requires: ruby(ver) = %ruby_version %ruby_mod_ver_requires_eq Requires: ruby-modules(ver) = %ruby_version %php_pear_dir /usr/share/pear -%php_extensiondir %(php-config --extension-dir 2>/dev/null || echo ERROR) -%php_sysconfdir %(php-config --sysconfdir 2>/dev/null || echo ERROR) -%php_includedir %(php-config --include-dir 2>/dev/null || echo ERROR) +%php_data_dir /usr/share/php +%php_extensiondir %{expand:%%global php_extensiondir %(php-config --extension-dir 2>/dev/null || echo ERROR)}%php_extensiondir +%php_sysconfdir %{expand:%%global php_sysconfdir %(php-config --sysconfdir 2>/dev/null || echo ERROR)}%php_sysconfdir +%php_includedir %{expand:%%global php_includedir %(php-config --include-dir 2>/dev/null || echo ERROR)}%php_includedir # extract php/zend api versions -%php_major_version %(awk '/#define PHP_MAJOR_VERSION/{print $3}' %{php_includedir}/main/php_version.h 2>/dev/null || echo ERROR) -%php_api_version %(awk '/#define PHP_API_VERSION/{print $3}' %{php_includedir}/main/php.h 2>/dev/null || echo ERROR) -%php_pdo_api_version %(awk '/#define PDO_DRIVER_API/{print $3}' %{php_includedir}/ext/pdo/php_pdo_driver.h 2>/dev/null || echo ERROR) -%php_debug %(awk '/#define ZEND_DEBUG/{print $3}' %{php_includedir}/main/php_config.h 2>/dev/null || echo ERROR) -%zend_module_api %(awk '/#define ZEND_MODULE_API_NO/{print $3}' %{php_includedir}/Zend/zend_modules.h 2>/dev/null || echo ERROR) -%zend_extension_api %(awk '/#define ZEND_EXTENSION_API_NO/{print $3}' %{php_includedir}/Zend/zend_extensions.h 2>/dev/null || echo ERROR) -%zend_zts %(Z=$(grep -sc '^#define ZTS 1' %{php_includedir}/main/php_config.h); echo ${Z:-ERROR}) +%php_major_version %{expand:%%global php_major_version %(awk '/#define PHP_MAJOR_VERSION/{print $3}' %{php_includedir}/main/php_version.h 2>/dev/null || echo ERROR)}%php_major_version +%php_api_version %{expand:%%global php_api_version %(awk '/#define PHP_API_VERSION/{print $3}' %{php_includedir}/main/php.h 2>/dev/null || echo ERROR)}%php_api_version +%php_pdo_api_version %{expand:%%global php_pdo_api_version %(awk '/#define PDO_DRIVER_API/{print $3}' %{php_includedir}/ext/pdo/php_pdo_driver.h 2>/dev/null || echo ERROR)}%php_pdo_api_version +%php_debug %{expand:%%global php_debug %(awk '/#define ZEND_DEBUG/{print $3}' %{php_includedir}/main/php_config.h 2>/dev/null || echo ERROR)}%php_debug +%zend_module_api %{expand:%%global zend_module_api %(awk '/#define ZEND_MODULE_API_NO/{print $3}' %{php_includedir}/Zend/zend_modules.h 2>/dev/null || echo ERROR)}%zend_module_api +%zend_extension_api %{expand:%%global zend_extension_api %(awk '/#define ZEND_EXTENSION_API_NO/{print $3}' %{php_includedir}/Zend/zend_extensions.h 2>/dev/null || echo ERROR)}%zend_extension_api +%zend_zts %{expand:%%global zend_zts %(Z=$(grep -sc '^#define ZTS 1' %{php_includedir}/main/php_config.h); echo ${Z:-ERROR})}%zend_zts # helper macro %__php_api_requires(v:) Requires: php%{-v*}(%{expand:%1}) = %{expand:%{%{!?2:%{1}}%{?2}}} @@ -662,31 +692,50 @@ if [ -f /etc/rc.d/init.d/php-fcgi ]; then \ fi \ %{nil} - # X.org helper macros -%__xorg_abi_requires() Requires: xorg-xserver-server(%{expand:%1}-abi) = %{expand:%{%{!?2:%{1}}%{?2}}} -# -%xorg_xserver_ansic_abi %(awk '/#define ABI_ANSIC_VERSION/ { split($0,A,/[(,)]/); printf("%d.%d",A[2], A[3]); }' /usr/include/xorg/xf86Module.h 2> /dev/null || echo ERROR) -%xorg_xserver_extension_abi %(awk '/#define ABI_EXTENSION_VERSION/ { split($0,A,/[(,)]/); printf("%d.%d",A[2], A[3]); }' /usr/include/xorg/xf86Module.h 2> /dev/null || echo ERROR) -%xorg_xserver_font_abi %(awk '/#define ABI_FONT_VERSION/ { split($0,A,/[(,)]/); printf("%d.%d",A[2], A[3]); }' /usr/include/xorg/xf86Module.h 2> /dev/null | echo ERROR) -%xorg_xserver_videodrv_abi %(awk '/#define ABI_VIDEODRV_VERSION/ { split($0,A,/[(,)]/); printf("%d.%d",A[2], A[3]); }' /usr/include/xorg/xf86Module.h 2> /dev/null || echo ERROR) -%xorg_xserver_xinput_abi %(awk '/#define ABI_XINPUT_VERSION/ { split($0,A,/[(,)]/); printf("%d.%d",A[2], A[3]); }' /usr/include/xorg/xf86Module.h 2> /dev/null || echo ERROR) - -%requires_xorg_xserver_extension %{__xorg_abi_requires ansic xorg_xserver_ansic_abi} \ -%{__xorg_abi_requires extension xorg_xserver_extension_abi} -%requires_xorg_xserver_xinput %{__xorg_abi_requires ansic xorg_xserver_ansic_abi} \ -%{__xorg_abi_requires xinput xorg_xserver_xinput_abi} -%requires_xorg_xserver_font %{__xorg_abi_requires ansic xorg_xserver_ansic_abi} \ -%{__xorg_abi_requires font xorg_xserver_font_abi} -%requires_xorg_xserver_videodrv %{__xorg_abi_requires ansic xorg_xserver_ansic_abi} \ -%{__xorg_abi_requires videodrv xorg_xserver_videodrv_abi} +%__xorg_abi_requires_ge() Requires: xorg-xserver-server(%{expand:%1}-abi) >= %{expand:%{%2}} +%__xorg_abi_requires_lt() Requires: xorg-xserver-server(%{expand:%1}-abi) < %(awk -vv=%{expand:%{%2}} 'BEGIN{split(v, a, "."); printf("%s.0", a[1] + 1); exit}') + +%xorg_xserver_ansic_abi %{expand:%%global xorg_xserver_ansic_abi %(awk '/#define ABI_ANSIC_VERSION/ { split($0,A,/[(,)]/); printf("%d.%d",A[2], A[3]); }' /usr/include/xorg/xf86Module.h 2> /dev/null || echo ERROR)}%xorg_xserver_ansic_abi +%xorg_xserver_extension_abi %{expand:%%global xorg_xserver_extension_abi %(awk '/#define ABI_EXTENSION_VERSION/ { split($0,A,/[(,)]/); printf("%d.%d",A[2], A[3]); }' /usr/include/xorg/xf86Module.h 2> /dev/null || echo ERROR)}%xorg_xserver_extension_abi +%xorg_xserver_font_abi %{expand:%%global xorg_xserver_font_abi %(awk '/#define ABI_FONT_VERSION/ { split($0,A,/[(,)]/); printf("%d.%d",A[2], A[3]); }' /usr/include/xorg/xf86Module.h 2> /dev/null | echo ERROR)}%xorg_xserver_font_abi +%xorg_xserver_videodrv_abi %{expand:%%global xorg_xserver_videodrv_abi %(awk '/#define ABI_VIDEODRV_VERSION/ { split($0,A,/[(,)]/); printf("%d.%d",A[2], A[3]); }' /usr/include/xorg/xf86Module.h 2> /dev/null || echo ERROR)}%xorg_xserver_videodrv_abi +%xorg_xserver_xinput_abi %{expand:%%global xorg_xserver_xinput_abi %(awk '/#define ABI_XINPUT_VERSION/ { split($0,A,/[(,)]/); printf("%d.%d",A[2], A[3]); }' /usr/include/xorg/xf86Module.h 2> /dev/null || echo ERROR)}%xorg_xserver_xinput_abi + +%requires_xorg_xserver_extension \ +%{__xorg_abi_requires_ge ansic xorg_xserver_ansic_abi} \ +%{__xorg_abi_requires_lt ansic xorg_xserver_ansic_abi} \ +%{__xorg_abi_requires_ge extension xorg_xserver_extension_abi} \ +%{__xorg_abi_requires_lt extension xorg_xserver_extension_abi} \ +%{nil} + +%requires_xorg_xserver_xinput \ +%{__xorg_abi_requires_ge ansic xorg_xserver_ansic_abi} \ +%{__xorg_abi_requires_lt ansic xorg_xserver_ansic_abi} \ +%{__xorg_abi_requires_ge xinput xorg_xserver_xinput_abi} \ +%{__xorg_abi_requires_lt xinput xorg_xserver_xinput_abi} \ +%{nil} + +%requires_xorg_xserver_font \ +%{__xorg_abi_requires_ge ansic xorg_xserver_ansic_abi} \ +%{__xorg_abi_requires_lt ansic xorg_xserver_ansic_abi} \ +%{__xorg_abi_requires_ge font xorg_xserver_font_abi} \ +%{__xorg_abi_requires_lt font xorg_xserver_font_abi} \ +%{nil} + +%requires_xorg_xserver_videodrv \ +%{__xorg_abi_requires_ge ansic xorg_xserver_ansic_abi} \ +%{__xorg_abi_requires_lt ansic xorg_xserver_ansic_abi} \ +%{__xorg_abi_requires_ge videodrv xorg_xserver_videodrv_abi} \ +%{__xorg_abi_requires_lt videodrv xorg_xserver_videodrv_abi} \ +%{nil} # Python specific macro definitions. # python main version -%py_ver %(python -c "import sys; print sys.version[:3]") +%py_ver %{expand:%%global py_ver %(%{__python} -c "import sys; print sys.version[:3]" 2>/dev/null || echo ERROR)}%py_ver # directories -%py_prefix %(python -c "import sys; print sys.prefix") +%py_prefix %{expand:%%global py_prefix %(%{__python} -c "import sys; print sys.prefix" 2>/dev/null || echo ERROR)}%py_prefix %py_libdir %{py_prefix}/%{_lib}/python%{py_ver} %py_scriptdir %{py_prefix}/share/python%{py_ver} %py_incdir /usr/include/python%{py_ver} @@ -737,18 +786,18 @@ fi; \ } # XMMS specific macros -%xmms_prefix %(xmms-config --prefix 2>/dev/null) -%xmms_exec_prefix %(xmms-config --exec-prefix 2>/dev/null) -%xmms_version %(xmms-config --version 2>/dev/null) -%xmms_datadir %(xmms-config --data-dir 2>/dev/null) -%xmms_plugindir %(xmms-config --plugin-dir 2>/dev/null) -%xmms_visualization_plugindir %(xmms-config --visualization-plugin-dir 2>/dev/null) -%xmms_input_plugindir %(xmms-config --input-plugin-dir 2>/dev/null) -%xmms_output_plugindir %(xmms-config --output-plugin-dir 2>/dev/null) -%xmms_effect_plugindir %(xmms-config --effect-plugin-dir 2>/dev/null) -%xmms_general_plugindir %(xmms-config --general-plugin-dir 2>/dev/null) - -%_target_base_arch %(echo %{_target_cpu} | sed 's/i.86/i386/;s/athlon/i386/;s/pentium./i386/;s/amd64/x86_64/;s/ia32e/x86_64/') +%xmms_prefix %{expand:%%global xmms_prefix %(xmms-config --prefix 2>/dev/null || echo ERROR)}%xmms_prefix +%xmms_exec_prefix %{expand:%%global xmms_exec_prefix %(xmms-config --exec-prefix 2>/dev/null || echo ERROR)}%xmms_exec_prefix +%xmms_version %{expand:%%global xmms_version %(xmms-config --version 2>/dev/null || echo ERROR)}%xmms_version +%xmms_datadir %{expand:%%global xmms_datadir %(xmms-config --data-dir 2>/dev/null || echo ERROR)}%xmms_datadir +%xmms_plugindir %{expand:%%global xmms_plugindir %(xmms-config --plugin-dir 2>/dev/null || echo ERROR)}%xmms_plugindir +%xmms_visualization_plugindir %{expand:%%global xmms_visualization_plugindir %(xmms-config --visualization-plugin-dir 2>/dev/null || echo ERROR)}%xmms_visualization_plugindir +%xmms_input_plugindir %{expand:%%global xmms_input_plugindir %(xmms-config --input-plugin-dir 2>/dev/null || echo ERROR)}%xmms_input_plugindir +%xmms_output_plugindir %{expand:%%global xmms_output_plugindir %(xmms-config --output-plugin-dir 2>/dev/null || echo ERROR)}%xmms_output_plugindir +%xmms_effect_plugindir %{expand:%%global xmms_effect_plugindir %(xmms-config --effect-plugin-dir 2>/dev/null || echo ERROR)}%xmms_effect_plugindir +%xmms_general_plugindir %{expand:%%global xmms_general_plugindir %(xmms-config --general-plugin-dir 2>/dev/null || echo ERROR)}%xmms_general_plugindir + +%_target_base_arch %{expand:%%global _target_base_arch %(echo %{_target_cpu} | sed 's/i.86/i386/;s/athlon/i386/;s/pentium./i386/;s/amd64/x86_64/;s/ia32e/x86_64/')}%_target_base_arch # user/group checking macros # @@ -806,7 +855,7 @@ eval $CMD %{?2:%2}%{?3: %3}) \ %{nil} # useradd/groupadd macros -# Author: Elan Ruusamäe +# Author: Elan Ruusamäe # # Usage: # %useradd [-P package] [-u uid] [-d home_dir] [-s shell] [-c comment] @@ -870,7 +919,7 @@ else \ fi; # webapp macros -# Author: Elan Ruusamäe +# Author: Elan Ruusamäe # # The config is installed/removed inside trigger, this means that you can any # time install apache1/apache/lighttpd package and the configuration file is @@ -908,18 +957,24 @@ fi \ %{nil} # service macro. -# Author: Elan Ruusamäe +# Author: Elan Ruusamäe # # calls usual service restart on package %post, but skips the restart if # administrator has disabled automatic service restarts in either global # /etc/sysconfig/rpm or per service /etc/sysconfig/SERVICE file. # # Usage: -# %service [-q] SERVICE ACTION ["SERVICE NICE DESCRIPTION"] +# %service [-q] [-n] SERVICE ACTION ["SERVICE NICE DESCRIPTION"] # # -q be silent when service isn't started (for scriplets restaring other package's services) +# -n NOOP mode, do not actually restart service # -%service(q) {{%(export quiet=%{-q:1}; /usr/lib/rpm/service_generator.sh %{*}) };} +# Requirements: +# BuildRequires: rpmbuild(macros) >= 1.268 +# Requires: rc-scripts +# -n option: +# BuildRequires: rpmbuild(macros) >= 1.450 +%service(qn) {{%(export noop=%{-n:1} quiet=%{-q:1}; /usr/lib/rpm/service_generator.sh %{*}) };} # Java macros. based on jpackage macros.java @@ -954,11 +1009,11 @@ fi \ # Directory where arch-specific (JNI) version-independent jars are installed. %_jnidir %{_libdir}/java -%java_home %([ -f %{_javadir}-utils/java-functions ] || { echo ERROR; exit 0; }; unset JAVA_HOME; . %{_javadir}-utils/java-functions; set_jvm; echo ${JAVA_HOME:-ERROR}) +%java_home %{expand:%%global java_home %([ -f %{_javadir}-utils/java-functions ] || { echo ERROR; exit 0; }; unset JAVA_HOME; . %{_javadir}-utils/java-functions; set_jvm; echo ${JAVA_HOME:-ERROR})}%java_home %ant JAVA_HOME=%{java_home} ant %jar %{java_home}/bin/jar -%java %([ -f %{_javadir}-utils/java-functions ] || { echo ERROR; exit 0; }; unset JAVACMD; . %{_javadir}-utils/java-functions; set_javacmd; echo $JAVACMD) +%java %{expand:%%global java %([ -f %{_javadir}-utils/java-functions ] || { echo ERROR; exit 0; }; unset JAVACMD; . %{_javadir}-utils/java-functions; set_javacmd; echo $JAVACMD)}%java %javac %{java_home}/bin/javac %javadoc %{java_home}/bin/javadoc @@ -1049,14 +1104,16 @@ echo -e "\\n" >> %{_mavendepmapdir}/maven2-depmap.xml # PEAR install macros -# Author: Elan Ruusamäe +# Author: Elan Ruusamäe # # Usage: -# %%pear_package_setup [-a #] [-n FMT] +# %%pear_package_setup ... # # -a # - also unpack SOURCE#. for PEAR bootstrapping # -n FMT - create builddir with FMT, instead of default %%{_pearname}-%%{version} # -z - unpack pear package and let pear use package.xml (not tarball) for install. for PEAR bootstrapping +# -D - pass -D to %setup (so the build dir is not removed) +# -c - register channel from local channel.xml file # # unpack PEAR package to %%{_builddir}/FMT. package is extracted with already # destination hierarchy. you should copy the tree to buildroot after @@ -1078,7 +1135,7 @@ echo -e "\\n" >> %{_mavendepmapdir}/maven2-depmap.xml %__pear_install_log \ tee install.log \ # make post message of optional packages \ -grep 'can optionally use' install.log | sed -e 's,package "pear/,package "php-pear-,g;s,^pear/,php-pear-,' > optional-packages.txt \ +grep 'can optionally use' install.log | sed -e 's,package "pear/,package "php-pear-,g;s,^pear/,php-pear-,;s,^pear/,php-pear-,;s,^channel://.*/,,' > optional-packages.txt \ if [ -s optional-packages.txt ]; then \ awk -F'"' '/use package/{print $2}' optional-packages.txt | sed -e "s,_,/,g;s,php-pear-, 'pear(,;s,$,.*)'," | tr -d '\\\n' > _noautoreq \ else \ @@ -1091,9 +1148,10 @@ fi \ %pear_install(a:n:zD) \ %__pear \\\ - -c pearrc \\\ + -c %{builddir}/pearrc \\\ -d doc_dir=/docs \\\ - -d php_dir=%{php_pear_dir} \\\ + -d temp_dir=/tmp \\\ + -d php_dir=%{-c:%{builddir}/}%{php_pear_dir} \\\ -d bin_dir=%{_bindir} \\\ -d data_dir=%{php_pear_dir}/data \\\ -d test_dir=%{php_pear_dir}/tests \\\ @@ -1103,30 +1161,32 @@ fi \ --nodeps \\\ %{-f:--force} \\\ %{!-z:%{S:%{-a*}%{!-a:0}}}%{-z:$_P} > .install.log || { c=$?; cat .install.log; exit $c; }; \ + %{-c:cp -a %{builddir}/%{builddir}/%{php_pear_dir} %{builddir}/%(dirname %{php_pear_dir}); rm -rf %{builddir}/%{builddir}; } \ %{nil} # The main macro. # using this macro will append optional-packages.txt to the nocompressdoc list # as it's displayed to user after package install. and adding additional gzip # dep is just waste ;) -%pear_package_setup(a:n:zD) \ +%pear_package_setup(a:n:zDc:) \ %define srcdir %{-n*}%{!-n:%{_pearname}-%{version}} \ %define builddir %{_builddir}/%{srcdir} \ %setup -q -c -T %{-D:-D} -n %{srcdir} \ %{-z:tar zxf %{S:0}; %{-a:tar zxf %{S:%{-a*}}}} \ %{-z:_P=package2.xml; [ -f $_P ] || _P=package.xml; _N=%{srcdir}; mv $_P $_N; cd $_N} \ +%{-c:%{__pear} -c pearrc config-set php_dir %{builddir}/%{php_pear_dir}; %__pear -c %{builddir}/pearrc channel-add %{-c*}} \ %pear_install \ %{-z:cd ..} \ cat %{-z:$_N/}.install.log | %__pear_install_log \ \ # undos sources \ -find . -type f -print0 | xargs -0 sed -i -e 's,\\r$,,' \ +find -type f -print0 | xargs -0 sed -i -e 's,\\r$,,' \ %{!?_noautocompressdoc:%global _noautocompressdoc %{nil}}%{expand:%%global _noautocompressdoc %{_noautocompressdoc} optional-packages.txt} \ %{!?_noautoprov:%global _noautoprov %{nil}}%{expand:%%global _noautoprov %{_noautoprov} 'pear(tests/.*)'} \ %{nil} # Copies exctracted PEAR package structure and PEAR registry to buildroot. -# Author: Elan Ruusamäe +# Author: Elan Ruusamäe %pear_package_install() \ cp -a ./%{php_pear_dir}/{.registry,*} $RPM_BUILD_ROOT%{php_pear_dir} \ find $RPM_BUILD_ROOT%{php_pear_dir} '(' -name '*~' -o -name '*.orig' ')' | xargs -r rm -v \ @@ -1139,7 +1199,7 @@ fi \ # Register OpenLDAP schema. -# Author: Elan Ruusamäe +# Author: Elan Ruusamäe # # Usage: # %%openldap_schema_register [-d core,nis] %{schemadir}/horde.schema @@ -1166,7 +1226,7 @@ fi \ %{nil} # Unregister OpenLDAP schema. -# Author: Elan Ruusamäe +# Author: Elan Ruusamäe # # Usage: # %%openldap_schema_unregister %{schemadir}/horde.schema @@ -1234,7 +1294,8 @@ done \ \ %{?-C:cd %{-C*}} \ compile() { \ - L="<"; [[ '%{*}' != *$L$L* ]] || PATCH_SH="set -x -e;$(cat)" \ + local L="<" PATCH_SH; \ + [[ '%{*}' != *$L$L* ]] || PATCH_SH="set -x -e;$(cat)" \ set -e -x \ local cfgs='%{?with_dist_kernel:%{?with_smp: smp}%{?with_up: up}}%{!?with_dist_kernel: nondist}' \ \ @@ -1251,7 +1312,7 @@ for cfg in ${cfgs:-dist}; do \ [ -z "$PATCH_SH" ] || echo "$PATCH_SH" | %__spec_build_shell \ set -x \ \ - %if %{with dist_kernel} \ + %if %{with dist_kernel} || %(test -f %{_kernelsrcdir}/scripts/bin2c ; echo $?) \ %{__make} -j1 -C %{_kernelsrcdir} prepare scripts \\\ %{-p*} %{-P*} \\\ %{MakeOpts} \ @@ -1263,7 +1324,9 @@ for cfg in ${cfgs:-dist}; do \ \ %{!?-c:%{__make} -C %{_kernelsrcdir} clean \\\ RCS_FIND_IGNORE="-name '*.ko' -o" \\\ + ${1+"$@"} \\\ M=$PWD %{MakeOpts}} \ + \ %{__make} -C %{_kernelsrcdir} modules \\\ ${1+"$@"} \\\ M=$PWD %{MakeOpts} \ @@ -1319,7 +1382,7 @@ done \ %{nil} # patchset macros -# Author: Elan Ruusamäe +# Author: Elan Ruusamäe # # Usage: # %patchset_source -f [] @@ -1360,7 +1423,7 @@ done \ %{nil} # browser plugins v2 -# Author: Elan Ruusamäe +# Author: Elan Ruusamäe # # Usage: # %browser_plugins_add_browser -p @@ -1386,4 +1449,122 @@ done \ %{-b:cat >> $blacklist_file %{-b*}} \ %{nil} +# Helper for LUA. +# split string separated by space into quoted list +# +# Author: Elan Ruusamäe +# +# %__lua_split /bin/sh /bin/pdksh -> "/bin/sh", "/bin/pdksh" +%__lua_split() %(echo "%*" | awk '{for (i=1;i<=NF;i++) printf("\\"%%s\\"%%s", $i, i == NF ? "" : ", ")}') + +# adjust /etc/shells by adding and removing shells from there +# Author: Elan Ruusamäe +# +# Usage: +# %post -p +# %lua_add_etc_shells /bin/sh /bin/pdksh +# +# %preun -p +# if arg[2] == 0 then +# %lua_remove_etc_shells /bin/bash /bin/rbash +# end +# +# Requirements: +# BuildRequires: rpmbuild(macros) >= 1.462 +# + +%lua_add_etc_shells() \ +t = {}\ +f = io.open("/etc/shells", "r")\ +if f then\ + for l in f:lines() do t[l]=l; end\ + f:close()\ +end\ +for _, s in ipairs({%{expand:%%__lua_split %*}}) do\ + if not t[s] then\ + print("Adding "..s.." to /etc/shells")\ + f = io.open("/etc/shells", "a"); f:write(s.."\\n"); f:close()\ + end\ +end\ +%{nil} + +%lua_remove_etc_shells() \ +t = {}\ +f = io.open("/etc/shells", "r")\ +if f then\ + for l in f:lines() do t[l]=l; end\ + f:close()\ +end\ +for _, l in pairs({%{expand:%%__lua_split %*}}) do\ + print("Removing "..l.." from /etc/shells")\ + t[l] = nil\ +end\ +s=""\ +for _, l in pairs(t) do\ + s=s..l.."\\n"\ +end\ +io.open("/etc/shells", "w"):write(s)\ +%{nil} + +# Backwards compat. Use of %lua_ prefixed macros is preferred as these are cleaner to read. +# +# Author: Elan Ruusamäe +# +# Usage: +# %post -p %add_etc_shells -p /bin/sh /bin/pdksh +# %preun -p %remove_etc_shells -p /bin/sh /bin/pdksh +# +# -p (optional) -- specifies that result is embeded %post script (prepends as first line) +# +# Requirements: +# BuildRequires: rpmbuild(macros) >= 1.429 +# +%add_etc_shells(p) %{-p:}\ +%{expand:%%lua_add_etc_shells %*}\ +%{nil} + +%remove_etc_shells(p) %{-p:}\ +%{-p:if arg[2] == 0 then}\ +%{expand:%%lua_remove_etc_shells %*}\ +%{-p:end} \ +%{nil} + +# Check syntax for Python files +# +# Author: Elan Ruusamäe +# Author: Arkadiusz Miśkiewicz +# +# Usage: +# %py_lint src +# +# Requirements: +# BuildRequires: python +# BuildRequires: rpmbuild(macros) >= 1.469 + +%py_lint() \ +__py_lint() { \ +find "$@" -type f -name '*.py' | python -c ' \ +import sys \ +import compiler \ +\ +err = 0\ +for f in sys.stdin: \ + fd = open(f.strip()) \ + c = fd.read() \ + fd.close() \ + try: \ + compiler.parse(c) \ + except SyntaxError, e: \ + print "py_lint: %s: %s" % (f.strip(), e) \ + err = err + 1\ +\ +if err: \ + print >> sys.stderr, "\\npy_lint: ERROR: Syntax errors in %d files.\\n" % err \ + sys.exit(1) \ +else: \ + print >> sys.stderr, "py_lint: Found no syntax errors." \ +' \ +}; __py_lint %* \ +%{nil} + # vim:ts=4 sw=4 noet syn=spec