X-Git-Url: http://git.pld-linux.org/?a=blobdiff_plain;f=rpm.macros;h=b6abb758f95642d1d216d54a0814f53d2106cdda;hb=df4c41a4103dd1d61ed9bb6e68b93d244d35f701;hp=dfebf636f2989c4691f985ec996dc1bd627b9542;hpb=c940d7763dbbadc077c4d8cba3a00f8d69f1f4bb;p=packages%2Frpm.git diff --git a/rpm.macros b/rpm.macros index dfebf63..b6abb75 100644 --- a/rpm.macros +++ b/rpm.macros @@ -57,8 +57,8 @@ %_dependency_whiteout %{nil} %_smp_mflags %([ -z "$RPM_BUILD_NCPUS" ] \\\ - && RPM_BUILD_NCPUS="`/usr/bin/getconf _NPROCESSORS_ONLN`"; \\\ - [ "$RPM_BUILD_NCPUS" -gt 1 ] && echo "-j$RPM_BUILD_NCPUS") + && RPM_BUILD_NCPUS=$(/usr/bin/getconf _NPROCESSORS_ONLN); \\\ + [ "$RPM_BUILD_NCPUS" -gt 1 ] && echo "-j$(($RPM_BUILD_NCPUS * 2))") #----------------------------------------------------------------- # @@ -121,6 +121,43 @@ }; }') +#----------------------------------------------------------------- +# +# Generate a command which cleans environment, leaving only the +# most important variables. +# If any spec requires any additional environment it should +# redefine %_preserve_env in following manner: +# +# # ADDITIONAL_VAR is required because [a good reason here] +# %define _preserve_env %_preserve_env_base ADDITIONAL_VAR + +%_preserve_env_base PATH HOME TMP TMPDIR +%_preserve_env %_preserve_env_base + +%_clean_env env -i %(awk -vq="'" -vqq="\\"'\\"" -vq2q="'\\"'" 'BEGIN { + split("%{?_preserve_env:%_preserve_env}", P); + for (i in P) { + p = P[i]; + if (ENVIRON[p]) { + split( ENVIRON[p], V, "" ); + val = p "="; + for ( j = 1; j in V; j++ ) { + v = V[j]; + if ( v == q ) + v = qq; + else if ( v == "\\"" ) + v = q2q; + else if ( v == "\\\\" ) + v = "\\\\\\\\"; + else + gsub( "[^a-zA-Z0-9/:._-]", "\\"&\\"", v ); + val = val "" v; + } + printf( val " " ); + } + } +}') + #----------------------------------------------------------------- %configure2_13 { \ if [ -n "$LINGUAS" ]; then unset LINGUAS; fi; \ @@ -263,7 +300,7 @@ CXXFLAGS="%{rpmcxxflags}" \ %__unsermake /usr/share/unsermake/unsermake # Current date -%date %(LC_ALL="C" date +"%a %b %d %Y") +%date %(LC_ALL=C date +"%a %b %d %Y") # Example files, programs, scripts... %_examplesdir /usr/src/examples @@ -277,8 +314,6 @@ CXXFLAGS="%{rpmcxxflags}" \ # If non-empty "debug" macro defined, add "dbg" suffix to release number %_rpmfilename %%{NAME}-%%{VERSION}-%%{RELEASE}%{?debug:dbg}.%%{ARCH}.rpm -# Requires name = version-release -%requires_releq() %(echo '%*' | LC_ALL="C" xargs -r rpm -q --qf 'Requires: %{N} = %|E?{%{E}:}|%{V}-%{R}\\n' | grep -v 'is not') %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 @@ -287,9 +322,12 @@ CXXFLAGS="%{rpmcxxflags}" \ %requires_releq_kernel_up(s:) Requires%{-s:(%{-s*})}: %releq_kernel_up %requires_releq_kernel_smp(s:) Requires%{-s:(%{-s*})}: %releq_kernel_smp -# 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") +# Requires name = version-release +%requires_releq() %{!?1:ERROR}%{?2:ERROR}%{?1:%{!?2:%{expand:%%requires_eq_to -r %1 %1}}} +# Requires: name = version +%requires_eq() %{!?1:ERROR}%{?2:ERROR}%{?1:%{!?2:%{expand:%%requires_eq_to %1 %1}}} +# Requires: name = version (version based on querying package %2) +%requires_eq_to(r) %{!?2:ERROR}%{?3:ERROR}%{?2:%{!?3:%(if ! LC_ALL=C rpm -q --qf 'Requires: %1 = %|E?{%{E}:}|%{V}%{?-r:-%{R}}\\n' %2 | grep '^Requires:'; then echo "BuildRequires: %2"; fi)}} %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 @@ -487,6 +525,21 @@ if [ -d "$RPM_BUILD_ROOT" ]; then \ fi; \ fi; }; __spec_install_post_chrpath } } } +#----------------------------------------------------------------- +# Find all shared object files with unresolved symbols. Warn +# and terminate if any found (termination can be turned off by define). +#%no_install_post_check_so 1 +%__spec_install_post_check_so { \ + __spec_install_post_check_so() { \ + fail=0; \ + printf "Searching for shared objects with unresolved symbols..."; \ + for f in $(find $RPM_BUILD_ROOT -type f -name '*.so.*' -print); do \ + LC_ALL=C objdump -T $f 2> /dev/null | LC_ALL=C awk -v "file=$f" 'BEGIN { found=0; skip["program_name"]=1; symbols = "" } /^[0-9a-z]+ +D +\*UND\*/ { if ($NF in skip) { next; }; found = 1; symbols = symbols "\n\t" $NF } END { if (found) { print "\nUnresolved symbols found in: " file symbols; exit(1); } } ' || fail=1 ; \ + done ; \ + echo " DONE"; \ + %{!?no_install_post_check_so:[ $fail -eq 1 ] && : || :;} \ +}; __spec_install_post_check_so }} + #----------------------------------------------------------------- # Find and gzip all kernel modules # @@ -538,15 +591,17 @@ fi; \ %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 \ - %update_desktop_database; \ + %update_desktop_database \ fi; \ -}}%{nil} +};} \ +%{nil} #----------------------------------------------------------------- # Update shared MIME info database @@ -555,7 +610,8 @@ fi; \ %update_mime_database() {{ \ umask 022; \ /usr/bin/update-mime-database %{_datadir}/mime; \ -}}%{nil} +};} \ +%{nil} #----------------------------------------------------------------- # Update icon cache @@ -564,7 +620,8 @@ fi; \ %update_icon_cache() {{ \ umask 022; \ /usr/bin/gtk-update-icon-cache -qf %{_datadir}/icons/%1; \ -}}%{nil} +};} \ +%{nil} #----------------------------------------------------------------- # Update scrollkeeper database @@ -630,6 +687,7 @@ fi; \ %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_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_ver_requires_eq Requires: ruby(ver) = %ruby_version %ruby_mod_ver_requires_eq Requires: ruby-modules(ver) = %ruby_version @@ -752,19 +810,25 @@ fi \ %pyrequires_eq() Requires: %1 # Hardlink binary identical .pyc and .pyo files -# (idea by glen pld-linux org) %__spec_install_post_py_hardlink {\ %{!?no_install_post_py_hardlink: __spec_install_post_py_hardlink() { \ -[ ! -d "$RPM_BUILD_ROOT" ] || find "$RPM_BUILD_ROOT" -name '*.pyc' | while read a; do \ - b="${a%.pyc}.pyo"; \ - if cmp -s "$a" "$b"; then \ - ln -f "$a" "$b"; \ - fi; \ -done \ +local a b c=0 t=0; \ +if [ -d "$RPM_BUILD_ROOT" ]; then \ + find "$RPM_BUILD_ROOT" -name '*.pyc' > __rpm_pyc; \ + while read a; do \ + b="${a%.pyc}.pyo"; \ + if cmp -s "$a" "$b"; then \ + ln -f "$a" "$b"; \ + c=$((c + 1)); \ + fi; \ + t=$((t + 1)); \ + done < __rpm_pyc; \ + [ $t -gt 0 ] && printf "Hardlink Python files: %d/%d files hardlinked\n" $c $t; \ + rm -f __rpm_pyc; \ +fi; \ }; __spec_install_post_py_hardlink } } # remove python sources, so that check-files won't complain -# (idea by glen pld-linux org) %py_postclean() \ 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;\ @@ -907,7 +971,7 @@ fi; %groupadd(g:P:rfo) \ %{!-g:%{error:groupadd: Required argument -g missing}} \ %{!?1:%{error:groupadd: Required parameter group missing}} \ -if [ -n "`/usr/bin/getgid %{1}`" ]; then \ +if /usr/bin/getgid %{1} > /dev/null 2>&1; then \ if [ "`/usr/bin/getgid %{1}`" != "%{-g*}" ]; then \ echo "Error: group %{1} doesn't have gid=%{-g*}. Correct this before installing %{-P*}%{!?-P:%{name}}." 1>&2 \ exit 1 \ @@ -1011,7 +1075,7 @@ fi \ %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 +%ant JAVA_HOME=%{java_home} CLASSPATH=$CLASSPATH ant %jar %{java_home}/bin/jar %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 @@ -1303,7 +1367,7 @@ for cfg in ${cfgs:-dist}; do \ [ -r "%{_kernelsrcdir}/config-$cfg" ] || exit 1 \ \ rm -rf o \ - install -d o/include/linux \ + install -d o/include/linux o/arch/powerpc/lib \ 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 \ @@ -1319,6 +1383,7 @@ for cfg in ${cfgs:-dist}; do \ %else \ install -d o/include/config \ touch o/include/config/MARKER \ + ln -sf %{_kernelsrcdir}/include/config/auto-$cfg.conf o/include/config/auto.conf \ ln -sf %{_kernelsrcdir}/scripts o/scripts \ %endif \ \ @@ -1365,6 +1430,7 @@ compile %{*}\ %define KernelD $RPM_BUILD_ROOT/lib/modules/%{_kernel_ver} \ %define ModprobeD $RPM_BUILD_ROOT%{_sysconfdir}/modprobe.d/%{_kernel_ver} \ \ +__install_kernel_modules() { \ local cfgs='%{?with_dist_kernel:%{?with_smp: smp}%{?with_up: up}}%{!?with_dist_kernel: nondist}' \ \ for MODULE in {%{-m*},}; do \ @@ -1379,6 +1445,8 @@ for MODULE in {%{-m*},}; do \ >> %{ModprobeD}$suf/%{-n*}.conf} \ done \ done \ +} \ +__install_kernel_modules \ %{nil} # patchset macros