X-Git-Url: http://git.pld-linux.org/?a=blobdiff_plain;f=rpm.macros;h=14250a7e52d00b7d112cd7cfdc26edd14f7b38a9;hb=1323a2348872a02129d761b1345e9087af10c0d6;hp=46dca7f63844b0e3109855b778c4736f3c2636cc;hpb=b699ccffd35fe7b4a4a26544a3d79a45e8680007;p=packages%2Frpm.git diff --git a/rpm.macros b/rpm.macros index 46dca7f..14250a7 100644 --- a/rpm.macros +++ b/rpm.macros @@ -1,5 +1,5 @@ # $Revision$, $Date$ -# PLD rpm macros +# PLD Linux rpm macros %epoch 0 %x8664 x86_64 amd64 ia32e @@ -58,9 +58,9 @@ fi; \ # Requires: awk # # Flags specified in %filterout_* are removed from %rpm*flags, exactly: -# %rpmcflags = %optflags - %filterout_c - %filterout_ld -# %rpmcxxflags = %rpmcflags - %filterout_cxx -# %rpmldflags = %optldflags - %filterout_ld +# %rpmcflags = %optflags - %filterout - %filterout_c - %filterout_ld +# %rpmcxxflags = %optflags - %filterout - %filterout_cxx - %filterout_ld +# %rpmldflags = %optldflags - %filterout_ld # # Regular expressions are supported, but to avoid some character be treated # as regular expression it must be escaped twice. @@ -75,13 +75,13 @@ fi; \ %rpmcflags %(awk 'BEGIN { split("%{?debug:%debugcflags}%{!?debug:%optflags}%{?debuginfocflags}",I); - split("%{?filterout_c} %{?filterout_ld}",F); + split("%{?filterout} %{?filterout_c} %{?filterout_ld}",F); %{filter_out} }') %rpmcxxflags %(awk 'BEGIN { - split("%{rpmcflags}",I); - split("%{?filterout_cxx}",F); + split("%{?debug:%debugcflags}%{!?debug:%optflags}%{?debuginfocflags}",I); + split("%{?filterout} %{?filterout_cxx} %{?filterout_ld}",F); %{filter_out} }') @@ -91,6 +91,20 @@ fi; \ %{filter_out} }') +# rpmldflags with stripped -Wl, -- in the form flags have to be passed to 'ld' +# but, don't use it, better use gcc as linker +%ld_rpmldflags %(awk 'BEGIN { + split("%{rpmldflags}",F); + for (f in F) { + s = F[f]; + if (s ~ /^-Wl,/) { + s = substr(s,5); + gsub(/,/," ",s); + }; + printf(s FS); + }; +}') + #----------------------------------------------------------------- %configure2_13 { \ if [ -n "$LINGUAS" ]; then unset LINGUAS; fi; \ @@ -120,12 +134,32 @@ fi; \ %{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}" \ -cmake \ +%{__cmake} \ +} + +# override __scons to add -j4 in your ~/.rpmmacros for parallel make +%__scons /usr/bin/scons +%scons { \ +%{__scons} \ +} + +# waf. see waf.spec +# override __waf to add -j4 in your ~/.rpmmacros for parallel make +%__waf /usr/bin/waf +%waf { \ +CC="%{__cc}" \ +CXX="%{__cxx}" \ +CPP="%{__cpp}" \ +CFLAGS="%{rpmcflags}" \ +CXXFLAGS="%{rpmcxxflags}" \ +%{__waf} \ } #---------------------------------------------------------------- @@ -164,17 +198,21 @@ cmake \ # Overloading of some basic macros %prep \ %%prep\ -LANG=C\ -export LANG\ -unset DISPLAY ||:\ +export LC_ALL=C\ +export LANG=C\ unset LINGUAS ||:\ +unset LANGUAGE ||:\ +unset LC_MESSAGES ||:\ +unset DISPLAY ||:\ %{nil} %build %%build\ -LANG=C\ -export LANG\ -unset DISPLAY ||:\ +export LC_ALL=C\ +export LANG=C\ unset LINGUAS ||:\ +unset LANGUAGE ||:\ +unset LC_MESSAGES ||:\ +unset DISPLAY ||:\ %{nil} %install \ @@ -182,10 +220,12 @@ unset LINGUAS ||:\ %{?buildsubdir:%{debug_package}}\ %endif\ %%install\ -LANG=C\ -export LANG\ -unset DISPLAY ||:\ +export LC_ALL=C\ +export LANG=C\ unset LINGUAS ||:\ +unset LANGUAGE ||:\ +unset LC_MESSAGES ||:\ +unset DISPLAY ||:\ %{nil} # Location of autoconf macros @@ -251,7 +291,7 @@ unset LINGUAS ||:\ %apache_modules_api %(awk '/#define MODULE_MAGIC_NUMBER_MAJOR/ {print $3}' /usr/include/apache/ap_mmn.h 2>/dev/null || echo ERROR) # kernel version-release handling -%__kernel_ver %([ -f %{_kernelsrcdir}/include/linux/version.h ] && (grep UTS_RELEASE %{_kernelsrcdir}/include/linux/version.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_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})} @@ -291,9 +331,9 @@ unset LINGUAS ||:\ #%no_install_post_compress_docs 1 %__spec_install_post_compress_docs { \ %{!?no_install_post_compress_docs:__spec_install_post_compress_docs() { \ - echo "Compress man and info pages."; \ for i in /usr/share/man /usr/X11R6/man /usr/share/info; do \ if [ -d "$RPM_BUILD_ROOT$i" ]; then \ + echo "Compress $(basename $i) pages: $i"; \ find "$RPM_BUILD_ROOT$i" -name '*.bz2' -print | xargs -r %{__bzip2} -df; \ find "$RPM_BUILD_ROOT$i" -name '*.gz' -print | xargs -r %{__gzip} -dnf; \ find "$RPM_BUILD_ROOT$i" -type f -size +%{_min_compress_bytes}c -print | xargs -r %{__gzip} -9nf; \ @@ -309,26 +349,32 @@ unset LINGUAS ||:\ #%no_install_post_strip 1 %__spec_install_post_strip {%{!?debug: \ %{!?no_install_post_strip:__spec_install_post_strip() { \ - if [ -d "$RPM_BUILD_ROOT" ]; then \ - echo "Strip executable binaries, archives and shared object files."; \ - filelist=`find $RPM_BUILD_ROOT -type f ! -regex ".*ld-[0-9.]*so.*" ! -regex ".*/usr/lib[0-9]*/debug/.*\.debug" %{?_noautostrip:! -regex "%{_noautostrip}"}`; \ - elfexelist=`echo $filelist | xargs -r file | \ - awk '/ELF.*executable/ {print $1}' | cut -d: -f1`; \ - elfsharedlist=`echo $filelist | xargs -r file | \ - awk '/LF.*shared object/ {print $1}' | cut -d: -f1`; \ - elfarchiveslist=`echo $filelist | xargs -r file | \ - awk '/current ar archive/ {print $1}' | cut -d: -f1`; \ +if [ -d "$RPM_BUILD_ROOT" ]; then \ + filelist=`find $RPM_BUILD_ROOT -type f ! -regex ".*ld-[0-9.]*so.*" ! -regex ".*/usr/lib[0-9]*/debug/.*\.debug" ! -regex ".*%{_docdir}/.*" ! -regex ".*%{_includedir}/.*" %{?_noautostrip:! -regex "%{_noautostrip}"}`; \ + if [ -z "$filelist" ]; then \ + return; \ + fi; \ + filetypes=`echo "$filelist" | xargs -r -d'\\n' file`; \ + elfexelist=`echo "$filetypes" | awk -F: '/ELF.*executable/ {print $1}'`; \ + elfsharedlist=`echo "$filetypes" | awk -F: '/LF.*shared object/ {print $1}'`; \ + archiveslist=`echo "$filetypes" | awk -F '/current ar archive/ {print $1}'`; \ if [ -n "$elfexelist" ]; then \ + printf "Stripping %d ELF executables..." $(echo "$elfexelist" | wc -l); \ chmod u+w $elfexelist; \ %{__strip} --remove-section=.note --remove-section=.comment $elfexelist; \ + echo "DONE"; \ fi; \ if [ -n "$elfsharedlist" ]; then \ + printf "Stripping %d ELF shared libraries..." $(echo "$elfsharedlist" | wc -l); \ chmod u+w $elfsharedlist; \ %{__strip} --strip-unneeded --remove-section=.note --remove-section=.comment $elfsharedlist; \ + echo "DONE"; \ fi; \ - if [ -n "$elfarchiveslist" ]; then \ - chmod u+w $elfarchiveslist; \ - %{__strip} --strip-debug --remove-section=.note --remove-section=.comment $elfarchiveslist; \ + if [ -n "$archiveslist" ]; then \ + printf "Stripping %d ar archives..." $(echo "$elfsharedlist" | wc -l); \ + chmod u+w $archiveslist; \ + %{__strip} --strip-debug --remove-section=.note --remove-section=.comment $archiveslist; \ + echo "DONE"; \ fi; \ fi; }; __spec_install_post_strip } } } @@ -341,27 +387,33 @@ fi; }; __spec_install_post_strip } } } %__spec_install_post_chrpath {%{!?debug: \ %{!?no_install_post_chrpath: __spec_install_post_chrpath() { \ if [ -d "$RPM_BUILD_ROOT" ]; then \ -echo "Remove RPATH from executable binaries and shared object files."; \ -find $RPM_BUILD_ROOT -type f ! -regex ".*ld-[0-9.]*so.*" ! -regex ".*/usr/lib[0-9]*/debug/.*" %{?_noautochrpath:! -regex "%{_noautochrpath}"} | xargs -r file | \ - awk '/ELF.*(executable.*dynamically linked|shared object)/ {print $1}' | cut -d: -f1 | \ -while read file ; do \ - rpath= ; \ - chmod u+w "$file"; \ - for dir in `chrpath -l "$file" | \ - awk '/RPATH=/ { gsub(/.*RPATH=/,""); gsub(/:/," "); print $0 }'` ; do \ - 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"; \ - ;; \ - * ) \ - if [ "$rpath" = "" ] ; then rpath="$dir" ; \ - else rpath="$rpath:$dir" ; fi ; \ - ;; \ - esac ; \ - done ; \ - if [ "$rpath" = "" ] ; then chrpath -d "$file" > /dev/null ; \ - else chrpath -r "$rpath" "$file" > /dev/null ; fi ; \ -done; \ + files=`find $RPM_BUILD_ROOT -type f ! -regex ".*ld-[0-9.]*so.*" ! -regex ".*/usr/lib[0-9]*/debug/.*" ! -regex ".*%{_docdir}/.*" ! -regex ".*%{_includedir}/.*" %{?_noautochrpath:! -regex "%{_noautochrpath}"}`; \ + if [ -n "$files" ]; then \ + objs=`echo "$files" | xargs -r -d'\\n' file | awk -F: '/ELF.*(executable.*dynamically linked|shared object)/ {print $1}'`; \ + fi + #" + if [ -n "$objs" ]; then \ + printf "Remove RPATH from %d executable binaries and shared object files.\n" $(echo "$objs" | wc -l); \ + echo "$objs" | \ + while read file; do \ + rpath= ; \ + chmod u+w "$file"; \ + for dir in `chrpath -l "$file" | \ + awk '/RPATH=/ { gsub(/.*RPATH=/,""); gsub(/:/," "); print $0 }'` ; do \ + 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"; \ + ;; \ + * ) \ + if [ "$rpath" = "" ] ; then rpath="$dir" ; \ + else rpath="$rpath:$dir" ; fi ; \ + ;; \ + esac ; \ + done ; \ + if [ "$rpath" = "" ] ; then chrpath -d "$file" > /dev/null ; \ + else chrpath -r "$rpath" "$file" > /dev/null ; fi ; \ + done; \ + fi; \ fi; }; __spec_install_post_chrpath } } } #----------------------------------------------------------------- @@ -372,14 +424,13 @@ fi; }; __spec_install_post_chrpath } } } #%no_install_post_compress_modules 1 %__spec_install_post_compress_modules { \ %{!?no_install_post_compress_modules: __spec_install_post_compress_modules() { \ - if [ -d "$RPM_BUILD_ROOT" ]; then \ - echo "Compress kernel modules if any."; \ - if test -d $RPM_BUILD_ROOT/lib/modules ; then \ - find $RPM_BUILD_ROOT/lib/modules -name \*o -type f -print | \ - xargs -r %{__gzip} -9nf; \ - find $RPM_BUILD_ROOT/lib/modules -name \*o -type l -printf "%p %l\n" | \ - while read a b; do ln -sf $b.gz $a.gz; rm -f $a; done; \ - fi; \ + if [ -d $RPM_BUILD_ROOT/lib/modules ]; then \ + echo "Compress kernel modules"; \ + q=$(find $RPM_BUILD_ROOT/lib/modules -name '*o' -type f -print); \ + echo "$q" | xargs -r %{__gzip} -9nf; \ + printf "%d modules compressed\n" $(echo "$q" | wc -l); \ + find $RPM_BUILD_ROOT/lib/modules -name '*o' -type l -printf "%p %l\n" | \ + while read a b; do ln -sf $b.gz $a.gz; rm -f $a; done; \ fi; \ }; __spec_install_post_compress_modules } } @@ -496,7 +547,7 @@ fi \ # 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_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_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) @@ -504,7 +555,9 @@ fi \ %ruby_ver_requires_eq Requires: ruby(ver) = %ruby_version %ruby_mod_ver_requires_eq Requires: ruby-modules(ver) = %ruby_version -%php_pear_dir %{_datadir}/pear +%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) # directory where php includes are installed on system. %__php_includedir /usr/include/php @@ -523,6 +576,7 @@ fi \ # macros for public use # for php extensions (php-pecl) %requires_php_extension %{__php_api_requires modules_api php_api_version} \ +%{__php_api_requires zend_module_api} \ %{__php_api_requires -v %php_major_version debug php_debug} \ %{__php_api_requires -v %php_major_version thread-safety zend_zts} @@ -535,16 +589,40 @@ fi \ # for php pdo modules (php-pecl-PDO_*) %requires_php_pdo_module %{__php_api_requires PDO_API php_pdo_api_version} +# for using PHP post scripts. for PHP >= 5.0 +%php_webserver_restart \ +[ ! -f /etc/apache/conf.d/??_mod_php.conf ] || %service -q apache restart \ +[ ! -f /etc/httpd/conf.d/??_mod_php.conf ] || %service -q httpd restart \ +if [ -f /etc/rc.d/init.d/php-fcgi ]; then \ + PHP_FCGI_BINARY=; . /etc/sysconfig/php-fcgi 2>/dev/null \ + if [[ ${PHP_FCGI_BINARY:-php.fcgi} = *php.fcgi* ]]; then \ + %service -q php-fcgi restart \ + fi \ +fi \ +%{nil} + +# for using php post scripts. for PHP >= 4.0 && PHP < 5.0 +%php4_webserver_restart \ +[ ! -f /etc/apache/conf.d/??_mod_php4.conf ] || %service -q apache restart \ +[ ! -f /etc/httpd/conf.d/??_mod_php4.conf ] || %service -q httpd restart \ +if [ -f /etc/rc.d/init.d/php-fcgi ]; then \ + PHP_FCGI_BINARY=; . /etc/sysconfig/php-fcgi 2>/dev/null \ + if [[ ${PHP_FCGI_BINARY:-php.fcgi} = *php4.fcgi* ]]; then \ + %service -q php-fcgi restart \ + fi \ +fi \ +%{nil} + # Python specific macro definitions. # python main version -%py_ver %(python -c "import sys; print sys.version[:3]") +%py_ver %(python -c "import sys; print sys.version[:3]") # directories %py_prefix %(python -c "import sys; print sys.prefix") %py_libdir %{py_prefix}/%{_lib}/python%{py_ver} %py_scriptdir %{py_prefix}/share/python%{py_ver} %py_incdir /usr/include/python%{py_ver} -%py_sitedir %{py_libdir}/site-packages +%py_sitedir %{py_libdir}/site-packages %py_sitescriptdir %{py_scriptdir}/site-packages %py_dyndir %{py_libdir}/lib-dynload @@ -654,8 +732,8 @@ fi \ eval $CMD %2%{?3: %3} \ %nil -# useradd/groupadd macros written by glen@pld-linux.org. -# All rights reserved. Permission to copy is hereby granted.. yada, yada, yada +# useradd/groupadd macros +# Author: Elan Ruusamäe # # Usage: # %useradd [-P package] [-u uid] [-d home_dir] [-s shell] [-c comment] @@ -693,7 +771,7 @@ else \ %{-M} \\\ %{-G:-G %{-G*}} \\\ %{expand:%{%{#}}} 1>&2 || exit $? \ - [ ! -x /usr/sbin/nscd ] || /usr/sbin/nscd -i passwd \ + [ ! -x /usr/sbin/nscd ] || /usr/sbin/nscd -i passwd || : \ fi; # Usage: @@ -715,13 +793,14 @@ if [ -n "`/usr/bin/getgid %{1}`" ]; then \ else \ echo "Adding group %{1} GID=%{-g*}." \ /usr/sbin/groupadd -g %{-g*} -r %{1} 1>&2 || exit $? \ - [ ! -x /usr/sbin/nscd ] || /usr/sbin/nscd -i group \ + [ ! -x /usr/sbin/nscd ] || /usr/sbin/nscd -i group || : \ fi; -# apache_config_{install/uninstall} macros written by glen@pld-linux.org. -# All rights reserved. Permission to copy is hereby granted.. yada, yada, yada +# apache_config_{install/uninstall} macros *DEPRECATED* +# Author: Elan Ruusamäe # -# You should use webapp macros instead. these are here until single piece of them is gone from specs ;) +# You should use webapp macros instead. these are here until single piece of +# them is gone from specs ;) # # The config is installed/removed inside trigger, this means that you can any # time install apache1 or apache package and the configuration file is updated. @@ -787,6 +866,7 @@ fi \ %{nil} # webapp macros +# 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 @@ -824,7 +904,7 @@ fi \ %{nil} # see browser-plugins.spec / template-browser-plugin.spec -# written by glen@pld-linux.org. +# Author: Elan Ruusamäe %nsplugin_install(d:f) { \ # create link if it's first install of either of the packages \ if [ -n "%{-f:1}" ] || ([ "$1" = "1" ] && [ "$2" = "1" ] && [ -d %{-d*} ]); then \ @@ -850,14 +930,12 @@ if [ "$1" = "0" ] || [ "$2" = "0" ]; then \ } # service macro. +# 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. # -# written by glen@pld-linux.org. -# All rights reserved. Permission to copy is hereby granted.. yada, yada, yada -# # Usage: # %service [-q] SERVICE ACTION ["SERVICE NICE DESCRIPTION"] # @@ -878,11 +956,11 @@ if [ "$1" = "0" ] || [ "$2" = "0" ]; then \ %_jvmcommondatadir %{_datadir}/jvm-common %_jvmcommonsysconfdir %{_sysconfdir}/jvm-common %_jnidir %{_libdir}/java -%java_home %(unset JAVA_HOME; . %{_javadir}-utils/java-functions; set_jvm; echo $JAVA_HOME) +%java_home %([ -f %{_javadir}-utils/java-functions ] || { echo ERROR; exit 0; }; unset JAVA_HOME; . %{_javadir}-utils/java-functions; set_jvm; echo ${JAVA_HOME:-ERROR}) %ant JAVA_HOME=%{java_home} ant %jar %{java_home}/bin/jar -%java %(unset JAVACMD; . %{_javadir}-utils/java-functions; set_javacmd; echo $JAVACMD) +%java %([ -f %{_javadir}-utils/java-functions ] || { echo ERROR; exit 0; }; unset JAVACMD; . %{_javadir}-utils/java-functions; set_javacmd; echo $JAVACMD) %javac %{java_home}/bin/javac %javadoc %{java_home}/bin/javadoc @@ -925,16 +1003,15 @@ set_options $BASE_OPTIONS\ run "$@"\ EOF -# pear install macros written by glen@pld-linux.org. -# All rights reserved. Permission to copy is hereby granted.. yada, yada, yada +# PEAR install macros +# Author: Elan Ruusamäe # # Usage: # %%pear_package_setup [-a #] [-n FMT] # -# -a # - unpack SOURCE# instead of SOURCE0 +# -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. use this for buggy packages. -# -f - force pear install. use with care. +# -z - unpack pear package and let pear use package.xml (not tarball) for install. for PEAR bootstrapping # # unpack PEAR package to %%{_builddir}/FMT. package is extracted with already # destination hierarchy. you should copy the tree to buildroot after @@ -944,42 +1021,57 @@ EOF # line endings. # # the pear install process output is recorded to install.log, you should put it -# to %%doc for latter debug or just information. +# to %%doc for later debug or just for information. # # additionally additional-packages.txt is produced if it was detected that the # package has optional dependencies. the file format is suitable of displaying # in %%post of a package. you should put this file to %%doc. noautocompressdoc is # automatically added for this file. -# -%pear_package_setup(a:n:zf) \ -%setup -q -c -T -n %{-n*}%{!-n:%{_pearname}-%{version}}\ -D=%{_builddir}/%{-n*}%{!-n:%{_pearname}-%{version}} \ -%{-z:tar zxf %{S:%{-a*}%{!-a:0}}; P=%{_pearname}-%{version}/package.xml; [ -f $P ] || P=package.xml} \ -pear \\\ + + +# records install.log and transforms PEAR names to PLD Linux rpm package names. +%__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 \ +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 \ + rm -f optional-packages.txt \ +fi \ +%{nil} + +# command invoking pear cli +%__pear /usr/bin/pear + +# 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:z) \ +%define srcdir %{-n*}%{!-n:%{_pearname}-%{version}} \ +%define builddir %{_builddir}/%{srcdir} \ +%setup -q -c -T -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} \ +%__pear \\\ + -c pearrc \\\ -d doc_dir=/docs \\\ -d php_dir=%{php_pear_dir} \\\ -d bin_dir=%{_bindir} \\\ -d data_dir=%{php_pear_dir}/data \\\ -d test_dir=%{php_pear_dir}/tests \\\ install \\\ - --installroot=${D} \\\ + --packagingroot=%{builddir} \\\ --offline \\\ --nodeps \\\ %{-f:--force} \\\ - %{!-z:%{S:%{-a*}%{!-a:0}}}%{-z:$P} | 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 \ -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 \ - rm -f optional-packages.txt \ -fi \ -rm ./%{php_pear_dir}/.{lock,filemap} \ + %{!-z:%{S:%{-a*}%{!-a:0}}}%{-z:$_P} > .install.log || { c=$?; cat .install.log; exit $c; } \ +%{-z:cd ..} \ +cat %{-z:$_N/}.install.log | %__pear_install_log \ +\ # undos sources \ find . -type f -print0 | xargs -0 sed -i -e 's,\\r$,,' \ -# bug in PEAR --installroot. \ -# http://pear.php.net/bugs/bug.php?id=5448 \ -grep -rl "${D}" ./{%{_bindir},%{php_pear_dir}}/* | xargs -r sed -i -e "s,${D},," \ %{!?_noautocompressdoc:%global _noautocompressdoc %{nil}}%{expand:%%global _noautocompressdoc %{_noautocompressdoc} optional-packages.txt} \ %{!?_noautoprov:%global _noautoprov %{nil}}%{expand:%%global _noautoprov %{_noautoprov} 'pear(tests/.*)'} \ %{nil} @@ -1043,4 +1135,213 @@ for schema in %*; do \ done \ %{nil} -# vim:ts=4 sw=4 noet +%env_update [ ! -x /sbin/env-update ] || /sbin/env-update -u || : + + +# Build modules for kernels 2.6 +# Author: Przemyslaw Iskra +# +# Usage: +# %build_kernel_modules -m -C +# +# remember that proper Makefile is still required +# Options: +# -m (required) -- comma-separated list of modules to save, +# without .ko extension, may be placed in subdirectory +# -C -- change to before doing anything +# -p , -P -- arguments passeed to make scripts +# -c -- do not execute make clean +# -- all additional arguments will be passed to +# make modules +# +# Additional patching supported via here document. Try: +# %build_kernel_modules -m module <<'EOF' +# your patch script here +# EOF +# Don't use it unless patching depends on config options. + +# Developer note: don't touch it unless you know how to handle '\'. +# - \ in script expands to nothing +# - \\\ in script expands to \ +# - \\\ inside definition expands to noting +# - \\\\\\\ inside definition expands to \ +# - in last line \ has to touch arguments so arguments passing +# in new lines (using \) will be supported + +%build_kernel_modules(p:P:m:C:c) \ +%{!?-m:%{error:%{0}: Required module name/list missing} exit 1} \ + \ +%define Opts \\\\\\\ +%if "%{_target_base_arch}" != "%{_arch}" \\\ + %if "%{_arch}" == "x86_64" && "%{_target_base_arch}" == "i386" \\\ + CC="%{__cc}" CPP="%{__cpp}" ARCH=%{_target_base_arch} \\\ + %else \\\ + ARCH=%{_target_base_arch} CROSS_COMPILE=%{_target_cpu}-pld-linux- \\\ + %endif \\\ +%else \\\ + CC="%{__cc}" CPP="%{__cpp}" \\\ +%endif \ +%define MakeOpts HOSTCC="%{__cc}" SYSSRC=%{_kernelsrcdir} SYSOUT=$PWD/o \\\\\\\ + O=$PWD/o %{?with_verbose:V=1} %{Opts} \ + \ +%{?-C:cd %{-C*}} \ +compile() { \ + L="<"; [[ '%{*}' != *$L$L* ]] || PATCH_SH="set -x -e;$(cat)" \ + set -e -x \ + \ +for cfg in %{?with_dist_kernel:%{?with_smp:smp} up}%{!?with_dist_kernel:nondist}; do \ + [ -r "%{_kernelsrcdir}/config-$cfg" ] || exit 1 \ + \ + rm -rf o \ + install -d o/include/linux \ + ln -sf %{_kernelsrcdir}/config-$cfg o/.config \ + ln -sf %{_kernelsrcdir}/Module.symvers-$cfg o/Module.symvers \ + ln -sf %{_kernelsrcdir}/include/linux/autoconf-$cfg.h o/include/linux/autoconf.h \ +%ifarch ppc ppc64 \ + install -d o/include/asm \ + [ ! -d %{_kernelsrcdir}/include/asm-powerpc ] || ln -sf %{_kernelsrcdir}/include/asm-powerpc/* o/include/asm \ + [ ! -d %{_kernelsrcdir}/include/asm-%{_target_base_arch} ] || ln -snf %{_kernelsrcdir}/include/asm-%{_target_base_arch}/* o/include/asm \ +%else \ + ln -sf %{_kernelsrcdir}/include/asm-%{_target_base_arch} o/include/asm \ +%endif \ + \ + set +x \ + [ -z "$PATCH_SH" ] || echo "$PATCH_SH" | %__spec_build_shell \ + set -x \ + \ + %if %{with dist_kernel} \ + %{__make} -j1 -C %{_kernelsrcdir} prepare scripts \\\ + %{-p*} %{-P*} \\\ + %{MakeOpts} \ + %else \ + install -d o/include/config \ + touch o/include/config/MARKER \ + ln -sf %{_kernelsrcdir}/scripts o/scripts \ + %endif \ + \ + %{!?-c:%{__make} -C %{_kernelsrcdir} clean \\\ + RCS_FIND_IGNORE="-name '*.ko' -o" \\\ + M=$PWD %{MakeOpts}} \ + %{__make} -C %{_kernelsrcdir} modules \\\ + ${1+"$@"} \\\ + M=$PWD %{MakeOpts} \ + \ + for MODULE in {%{-m*},}; do \ + [ -z "${MODULE}" ] || mv ${MODULE}{,-$cfg}.ko \ + done \ +done \ +%{?-C:cd -} \ +} \ +compile %{*}\ +%{nil} + + +# Install kernel modules built by %build_kernel_modules +# Author: Przemyslaw Iskra +# +# Usage: +# %install_kernel_modules -m -d +# +# Options: +# -m (required) -- comma-separated list of modules to install, +# without .ko extension, may be placed in subdirectory +# -d (required) -- in what subdirectory modules should be +# installed (eg. misc, kernel/drivers/net) +# -s -- suffix to use when installing modules, useful when module +# with same name exists in kernel already +# -n -- name of modprobe config file to use (without .conf extension) +# for definig aliases, only useful with -s + +%install_kernel_modules(m:d:s:n:) \ +%{!?-m:%{error:%{0}: Required module name (-m) missing}exit 1} \ +%{!?-d:%{error:%{0}: Required module directory missing}exit 1} \ +%{?-n:%{!?-s:%{error:%{0}: Modprobe .conf file requires module suffix}exit 1}} \ + \ +%define KernelD $RPM_BUILD_ROOT/lib/modules/%{_kernel_ver} \ +%define ModprobeD $RPM_BUILD_ROOT%{_sysconfdir}/modprobe.d/%{_kernel_ver} \ + \ +install -d %{KernelD}{,smp}/%{-d*} \ +%{?-s:install -d %{ModprobeD}{,smp}} \ + \ +for MODULE in {%{-m*},}; do \ + [ -n "${MODULE}" ] || continue \ + MNAME=${MODULE##*/} \ + install ${MODULE}-%{?with_dist_kernel:up}%{!?with_dist_kernel:nondist}.ko \\\ + %{KernelD}/%{-d*}/${MNAME}%{-s:-%{-s*}}.ko \ + %{?-s:echo "alias ${MNAME} ${MNAME}-%{-s*}" \\\ + >> %{ModprobeD}/%{-n*}.conf} \ + %if %{with smp} && %{with dist_kernel} \ + install ${MODULE}-smp.ko \\\ + %{KernelD}smp/%{-d*}/${MNAME}%{-s:-%{-s*}}.ko \ + %{?-s:echo "alias ${MNAME} ${MNAME}-%{-s*}" \\\ + >> %{ModprobeD}smp/%{-n*}.conf} \ + %endif \ +done \ +%{nil} + +# patchset macros +# Author: Elan Ruusamäe +# +# Usage: +# %patchset_source -f [] +# %patchset_patch [] +# +# If is omited, it is assumed to be . +# +# For example in preamble: +# %patchset_source -f ftp://ftp.vim.org/pub/editors/vim/patches/7.0/7.0.%03g 33 44 +# and in %prep: +# %patchset_patch 33 44 + +# generate SourceX urls from range START STOP +# Format can be SINGLE format char of %e, %f, %g, see seq(1) +# The sources start from 10000 +%patchset_source(f:b:) %( + base=%{-b*}%{!-b*:10000}; + start=$(expr $base + %1); + end=$(expr $base + %{?2}%{!?2:%{1}}); + # we need to call seq twice as it doesn't allow two formats + seq -f 'Patch%g:' $start $end > %{tmpdir}/__ps1; + seq -f '%{-f*}' %1 %{?2}%{!?2:%{1}} > %{tmpdir}/__ps2; + paste %{tmpdir}/__ps{1,2}; + rm -f %{tmpdir}/__ps{1,2}; +) \ +%{nil} + +# apply sources from %patchset_source +# -p specify -pX for %patch line +# -b base offset: defaults to 10000 +%patchset_patch(f:p:b:) %( + base=%{-b*}%{!-b*:10000}; + start=$(expr $base + %1); + end=$(expr $base + %{?2}%{!?2:%{1}}); + echo ": patchset_patch %1%{?2: to %2}"; + seq -f 'patch%g %{-p*:-p%{-p*}}' $start $end | sed -e s,^,%%,; +) \ +%{nil} + +# browser plugins v2 +# Author: Elan Ruusamäe +# +# Usage: +# %browser_plugins_add_browser -p +# +# (required) -- name of the browser. usually %{name}. +# -p (required) -- in what directory browser searches for its plugins. +# +# Example: +# %browser_plugins_add_browser %{name} -p %{_firefoxdir}/plugins + +%_browserpluginsconfdir /etc/browser-plugins +%_browserpluginsdir %{_libdir}/browser-plugins +%update_browser_plugins /usr/sbin/update-browser-plugins || : + +%browser_plugins_add_browser(p:b:) \ + install -d $RPM_BUILD_ROOT%{_browserpluginsconfdir}/{blacklist,browsers}.d \ + ln -s %{-p*} $RPM_BUILD_ROOT%{_browserpluginsconfdir}/browsers.d/%1.%{_target_base_arch} \ + blacklist_file=$RPM_BUILD_ROOT%{_browserpluginsconfdir}/blacklist.d/%1.%{_target_base_arch}.blacklist \ + echo '# This file format is shell globs at base dir of plugindir' > $blacklist_file \ + %{-b:cat >> $blacklist_file %{-b*}} \ +%{nil} + +# vim:ts=4 sw=4 noet syn=spec