X-Git-Url: http://git.pld-linux.org/?a=blobdiff_plain;f=rpm.macros;h=45ac6215ed00f0563edc353146675f4aadc1513d;hb=0ac68253037e85704f6f401bf91fccfd5c4826ef;hp=bc2f463bf9148ff5033b0d026d6fff43c9e7aa38;hpb=bbabad9e6bd5c29b1123d4faf42e62e7c817f45c;p=packages%2Frpm-build-macros.git diff --git a/rpm.macros b/rpm.macros index bc2f463..45ac621 100644 --- a/rpm.macros +++ b/rpm.macros @@ -26,18 +26,20 @@ %__autopoint autopoint --force # add parallel build flags: -jN +# jobs macro is available since 1.657 # # if you want to disable parallel build do: -# echo '%_smp_mflags %{nil}' >> ~/.rpmmacros -# +# echo '%__jobs %{nil}' >> ~/.rpmmacros +%__jobs %{expand:%%global __jobs %(_NCPUS=$(/usr/bin/getconf _NPROCESSORS_ONLN); [ "$_NCPUS" -gt 3 ] && echo $(($_NCPUS / 2)))%%{nil}}%__jobs + +# expands to -jN if %__jobs has a value +%_smp_mflags %{expand:%%global _smp_mflags %(jobs=%{__jobs}; echo ${jobs:+-j$jobs}%%{nil})}%_smp_mflags + %__make /usr/bin/make %{?_smp_mflags} %__scons /usr/bin/scons %{?_smp_mflags} %__waf /usr/bin/waf %{?_smp_mflags} %__cmake /usr/bin/cmake -%_smp_mflags %(_NCPUS=$(/usr/bin/getconf _NPROCESSORS_ONLN); \\\ - [ "$_NCPUS" -gt 2 ] && echo "-j$(($_NCPUS / 2))") - %__gettextize { \ if grep -qs 'AM_GNU_GETTEXT.*external' configure.{ac,in} ; then \ gettextize --copy --force --no-changelog; \ @@ -427,10 +429,17 @@ CXXFLAGS="%{rpmcxxflags}" \ # and release 0.zzz.bootstrap if built with bootstrap %bootstrap_release() %{!?with_bootstrap:%{1}%{?2:.%{2}}}%{?with_bootstrap:%{!?2:%(expr %{1} - 1)}%{?2:%{1}.%(expr %{2} - 1)}.zzz.bootstrap} +# rpm -qf on kernel version.h file +%__kernel_qf() %(R=$(cd %{_kernelsrcdir} 2>/dev/null && LC_ALL=C rpm -q --qf '%*' -f include/linux/version.h 2>/dev/null | grep -v 'is not'); echo ${R:-ERROR}) + +# kernel %{name} and kernel %{epoch}:%{version}-%{release} macro respecing alt_kernel +%kernel_name %{expand:%%global kernel_name %(N=%{__kernel_qf %{N}};echo ${N%%-headers})}%kernel_name +%kernel_version %{expand:%%global kernel_version %{__kernel_qf %|E?{%{E}:}|%{V}-%{R}}}%kernel_version + # -n drm to generate kernel%{_alt_kernel}-drm dependency -%releq_kernel(n:) %{expand:%%global releq_kernel %(R=$(cd %{_kernelsrcdir} 2>/dev/null && LC_ALL=C rpm -q --qf '%{N}%{?-n:-%{-n*}} = %|E?{%{E}:}|%{V}-%{R}' -f 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(n:) %{expand:%%global releq_kernel_up %(R=$(cd %{_kernelsrcdir} 2>/dev/null && LC_ALL=C rpm -q --qf '%{N}%{?-n:-%{-n*}}-up = %|E?{%{E}:}|%{V}-%{R}' -f 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(n:) %{expand:%%global releq_kernel_smp %(R=$(cd %{_kernelsrcdir} 2>/dev/null && LC_ALL=C rpm -q --qf '%{N}%{?-n:-%{-n*}}-smp = %|E?{%{E}:}|%{V}-%{R}' -f include/linux/version.h 2>/dev/null | grep -v 'is not' | sed -e 's:-headers::;s:-config::'); echo ${R:-ERROR})}%releq_kernel_smp +%releq_kernel(n:) %{kernel_name}%{?-n:-%{-n*}} = %{kernel_version} +%releq_kernel_up(n:) %{kernel_name}-up%{?-n:-%{-n*}} = %{kernel_version} +%releq_kernel_smp(n:) %{kernel_name}-smp%{?-n:-%{-n*}} = %{kernel_version} # -s post to generate Requires(post) dependency %requires_releq_kernel(s:n:) Requires%{-s:(%{-s*})}: %releq_kernel @@ -534,12 +543,13 @@ Provides: %{1} = %{?epoch:%{epoch}:}%{?version:%{version}}%{?release:-%{release} echo ".so $l" > $a; \ echo >&2 "Converted ${a#$RPM_BUILD_ROOT} from symlink to man link: $l"; \ done; \ - # verify that .so links point to existing files (not allowed to point to "other package") + # verify that .so links point to existing files (not allowed to point to "other package") \ + # TODO: iterate over all man dirs, but in Th there is only one true man dir \ err=$(grep -rl '^\.so ' "$RPM_BUILD_ROOT$i" | while read doc; do \ l=$(cat "$doc"); \ l=${l#.so }; \ - # TODO: iterate over all man dirs, but in Th there's only one true man dir \ - test -e $RPM_BUILD_ROOT$i/$l || echo " ${doc#$RPM_BUILD_ROOT} points to inexistent manpage: $l"; \ + d=$(dirname $doc); \ + test -e $RPM_BUILD_ROOT$i/$l || test -e $d/$l || echo " ${doc#$RPM_BUILD_ROOT} points to inexistent manpage: $l"; \ done); \ test "$err" != "" && { echo >&2 "Man page link errors:"; echo >&2 "$err"; exit 1; }; \ find "$RPM_BUILD_ROOT$i" -type f -size +%{_min_compress_bytes}c -print | xargs -r %{__gzip} -9nf; \ @@ -628,7 +638,7 @@ if [ -d "$RPM_BUILD_ROOT" ]; then \ fi; }; __spec_install_post_strip } } } #----------------------------------------------------------------- -# remove all RPATH from executable binaries and shared object files +# remove all RPATH/RUNPATH from executable binaries and shared object files # # Requires: find, awk, cut, xargs, chrpath, uname # @@ -645,12 +655,12 @@ if [ -d "$RPM_BUILD_ROOT" ]; 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); \ + printf "Remove RPATH/RUNPATH 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 \ + for dir in $(chrpath -l "$file" | awk '/(R|RUN)PATH=/ { gsub(/.*RPATH=/,""); gsub(/.*RUNPATH=/,""); gsub(/:/," "); print $0 }'); do \ case $dir in \ '$ORIGIN' ) \ if [ "$rpath" = "" ] ; then rpath="$dir" ; \ @@ -893,15 +903,24 @@ fi; \ # Ruby %__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_archdir %{expand:%%global ruby_archdir %(%{__ruby} -r rbconfig -e 'print RbConfig::CONFIG["archdir"]' 2>/dev/null || echo ERROR)}%ruby_archdir +%ruby_libdir %{expand:%%global ruby_libdir %(%{__ruby} -r rbconfig -e 'print RbConfig::CONFIG["rubylibdir"]' 2>/dev/null || echo ERROR)}%ruby_libdir %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_rubylibdir %{expand:%%global ruby_rubylibdir %(%{__ruby} -r rbconfig -e 'print RbConfig::CONFIG["rubylibdir"]' 2>/dev/null || echo ERROR)}%ruby_rubylibdir +%ruby_vendorarchdir %{expand:%%global ruby_vendorarchdir %(%{__ruby} -r rbconfig -e 'print RbConfig::CONFIG["vendorarchdir"]' 2>/dev/null || echo ERROR)}%ruby_vendorarchdir +%ruby_vendorlibdir %{expand:%%global ruby_vendorlibdir %(%{__ruby} -r rbconfig -e 'print RbConfig::CONFIG["vendorlibdir"]' 2>/dev/null || echo ERROR)}%ruby_vendorlibdir +%ruby_sitearchdir %{expand:%%global ruby_sitearchdir %(%{__ruby} -r rbconfig -e 'print RbConfig::CONFIG["sitearchdir"]' 2>/dev/null || echo ERROR)}%ruby_sitearchdir +%ruby_sitedir %{expand:%%global ruby_sitedir %(%{__ruby} -r rbconfig -e 'print RbConfig::CONFIG["sitedir"]' 2>/dev/null || echo ERROR)}%ruby_sitedir +%ruby_sitelibdir %{expand:%%global ruby_sitelibdir %(%{__ruby} -r rbconfig -e 'print RbConfig::CONFIG["sitelibdir"]' 2>/dev/null || echo ERROR)}%ruby_sitelibdir %ruby_rdocdir /usr/share/rdoc -%ruby_version %{expand:%%global ruby_version %(%{__ruby} -r rbconfig -e 'print Config::CONFIG["ruby_version"]' 2>/dev/null || echo ERROR)}%ruby_version +%ruby_vendordir %{expand:%%global ruby_vendordir %(%{__ruby} -r rbconfig -e 'print RbConfig::CONFIG["vendordir"]' 2>/dev/null || echo ERROR)}%ruby_vendordir +%ruby_version %{expand:%%global ruby_version %(%{__ruby} -r rbconfig -e 'print RbConfig::CONFIG["ruby_version"]' 2>/dev/null || echo ERROR)}%ruby_version + +%ruby_gemdir %{expand:%%global ruby_gemdir %(%{__ruby} -r rbconfig -e 'print RbConfig::CONFIG["rubylibdir"].sub(RbConfig::CONFIG["ruby_version"], "gems/#{RbConfig::CONFIG["ruby_version"]}")' 2>/dev/null || echo ERROR)}%{ruby_gemdir} +%ruby_specdir %{ruby_gemdir}/specifications + +# deprecated, similar functionality autogenerated with rpm5 %ruby_ver_requires_eq Requires: ruby(ver) = %ruby_version %ruby_mod_ver_requires_eq Requires: ruby-modules(ver) = %ruby_version @@ -927,7 +946,10 @@ fi; \ %php_name php%{?php_suffix} # use rpmbuild -D 'php_suffix 54' to build php extension for php 5.4 # NOTE: error output must be empty. otherwise can't build pecl packages if no php*-devel is installed -%php_suffix %(c=$(php-config --sysconfdir 2>/dev/null) || echo '' && echo ${c#/etc/php}) +%php_suffix %{expand:%%global php_suffix %(c=$(php-config --sysconfdir 2>/dev/null) || echo '' && echo ${c#/etc/php})%%{nil}}%php_suffix + +# php cli. version that php headers are installed for +%__php /usr/bin/%{php_name} # helper macro %__php_api_requires(v:) Requires: %{php_name}(%{expand:%1}) = %{expand:%{%{!?2:%{1}}%{?2}}} @@ -1069,9 +1091,9 @@ fi \ %__spec_install_post_py_hardlink {\ %{!?no_install_post_py_hardlink: __spec_install_post_py_hardlink() { \ %{!?debug:set +x;} \ -local a b c=0 t=0; \ +local a b c=0 t=0 pyc=%{tmpdir}/%{name}-%{version}-%{release}__rpm_pyc; \ if [ -d "$RPM_BUILD_ROOT" ]; then \ - find "$RPM_BUILD_ROOT" -name '*.pyc' > __rpm_pyc; \ + find "$RPM_BUILD_ROOT" -name '*.pyc' > $pyc; \ while read a; do \ b="${a%.pyc}.pyo"; \ if cmp -s "$a" "$b"; then \ @@ -1079,16 +1101,25 @@ if [ -d "$RPM_BUILD_ROOT" ]; then \ c=$((c + 1)); \ fi; \ t=$((t + 1)); \ - done < __rpm_pyc; \ + done < $pyc; \ [ $t -gt 0 ] && printf "Hardlink Python files: %d/%d files hardlinked\n" $c $t; \ - rm -f __rpm_pyc; \ + rm -f $pyc; \ fi; \ }; __spec_install_post_py_hardlink } } -# remove python sources, so that check-files won't complain -%py_postclean() \ +# Remove Python 2.x sources, +# PLD Linux policy is to package only compiled .py[co] for Python 2.x libraries. +# Author: Elan Ruusamäe +# +# Usage: +# %py_postclean /usr/share/extra -x keepme.py,keeptoo.py +# Options: +# -x - comma separated of file basenames to preserve +# ARGS - extra directories to clean for .py sources +# +%py_postclean(x:) \ for d in %{py_sitescriptdir} %{py_sitedir} %*; do \ - [ ! -d "$RPM_BUILD_ROOT$d" ] || find "$RPM_BUILD_ROOT$d" -name '*.py' -print0 | xargs -0r -l512 rm;\ + [ ! -d "$RPM_BUILD_ROOT$d" ] || find "$RPM_BUILD_ROOT$d" -name '*.py' -print0 %{-x:| grep -ZzvE '/(%(echo '%{-x*}' | tr ',' '|'))$'} | xargs -0r -l512 rm;\ done \ %{nil} @@ -1798,18 +1829,18 @@ fi \ %define ModprobeD $RPM_BUILD_ROOT%{_sysconfdir}/modprobe.d/%{_kernel_ver} \ \ __install_kernel_modules() { \ -%{!?debug:set +x;} \ +%{!?debug:set +x;} \ \ for MODULE in {%{-m*},}; do \ [ -n "${MODULE}" ] || continue \ - MNAME=${MODULE##*/} \ - install -D ${MODULE}.ko %{KernelD}/%{-d*}/${MNAME}%{-s:-%{-s*}}.ko \ - %{?-s:install -d %{ModprobeD} \ + MNAME=${MODULE##*/} \ + install -m 644 -D ${MODULE}.ko %{KernelD}/%{-d*}/${MNAME}%{-s:-%{-s*}}.ko \ + %{?-s:install -d %{ModprobeD} \ echo "alias ${MNAME} ${MNAME}-%{-s*}" >> %{ModprobeD}/%{-n*}.conf} \ done \ } \ __install_kernel_modules_old() { \ -%{!?debug:set +x;} \ +%{!?debug:set +x;} \ local cfgs='%{?with_dist_kernel:%{?with_smp: smp}%{?with_up: up}}%{!?with_dist_kernel: nondist}' \ \ for MODULE in {%{-m*},}; do \ @@ -1817,7 +1848,7 @@ for MODULE in {%{-m*},}; do \ for cfg in ${cfgs:-dist}; do \ [ "$cfg" = smp ] && suf=smp || suf= \ MNAME=${MODULE##*/} \ - install -D ${MODULE}-$cfg.ko \\\ + install -m 644 -D ${MODULE}-$cfg.ko \\\ %{KernelD}$suf/%{-d*}/${MNAME}%{-s:-%{-s*}}.ko \ %{?-s:install -d %{ModprobeD}$suf \ echo "alias ${MNAME} ${MNAME}-%{-s*}" \\\ @@ -1825,11 +1856,11 @@ for MODULE in {%{-m*},}; do \ done \ done \ } \ -if [ -r "%{_kernelsrcdir}/.config" ]; then \ - __install_kernel_modules \ -else \ - __install_kernel_modules_old \ -fi \ +if [ -r "%{_kernelsrcdir}/.config" ]; then \ + __install_kernel_modules \ +else \ + __install_kernel_modules_old \ +fi \ %{nil} # patchset macros @@ -2162,7 +2193,7 @@ fi; \ # %ghc_pkg_recache() {{ \ umask 022; \ - /usr/bin/ghc-pkg recache; \ + [ ! -x /usr/bin/ghc-pkg ] || /usr/bin/ghc-pkg recache; \ };} \ %{nil}