X-Git-Url: http://git.pld-linux.org/?a=blobdiff_plain;f=rpm.macros;h=40e37005d8e553f49999d0adbb829bb1a94ee4c3;hb=b2796c9de330b86a333d0131427322443c1c15db;hp=9e2a4f30657cf765cdff3177f068376446876e62;hpb=aa801427c1b7d6f0f824d3a25570325a60f2da9e;p=packages%2Frpm.git diff --git a/rpm.macros b/rpm.macros index 9e2a4f3..40e3700 100644 --- a/rpm.macros +++ b/rpm.macros @@ -36,7 +36,7 @@ %__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 %{expand:%%global _topdir %(test -d ../SPECS -a -d ../SOURCES && (cd ..; pwd) || echo $HOME/rpm)}%_topdir @@ -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))") #----------------------------------------------------------------- # @@ -69,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 @@ -94,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) @@ -114,6 +121,42 @@ }; }') +#----------------------------------------------------------------- +# +# 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] +# %{expand:%%define _preserve_env %_preserve_env ADDITIONAL_VAR} + +%_preserve_env PATH HOME TMP TMPDIR + +%_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; \ @@ -122,7 +165,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 \ @@ -144,13 +187,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} \ } @@ -162,7 +205,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} \ @@ -191,7 +234,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} \ @@ -256,7 +299,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 @@ -271,7 +314,7 @@ 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: %{N} = %|E?{%{E}:}|%{V}-%{R}\\n' | grep -v 'is not') +%requires_releq() %(Z=$(echo '%*' | LC_ALL=C xargs -r rpm -q --qf 'Requires: %{N} = %|E?{%{E}:}|%{V}-%{R}\\n'); if echo "$Z" | ! grep -v '^Requires:'; then echo "$Z"; fi) %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 @@ -280,9 +323,10 @@ 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 +%requires_eq() %(Z=$(echo '%*' | LC_ALL=C xargs -r rpm -q --qf 'Requires: %{N} = %|E?{%{E}:}|%{V}\\n'); if echo "$Z" | ! grep -v '^Requires:'; then echo "$Z"; fi) +# Requires: name = version (version based on querying package %2) +%requires_eq_to() %(%{!?2:echo "ERROR: missing param 2 to %%requires_eq_to"}%{?2:Z=$(LC_ALL=C rpm -q --qf 'Requires: %1 = %|E?{%{E}:}|%{V}' %2 | grep -v "is not"); echo ${Z:-[%%requires_eq_to %1 %2] expanded to nothing}}) %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 @@ -455,13 +499,15 @@ if [ -d "$RPM_BUILD_ROOT" ]; then \ rpath= ; \ chmod u+w "$file"; \ for dir in $(chrpath -l "$file" | awk '/RPATH=/ { gsub(/.*RPATH=/,""); gsub(/:/," "); print $0 }'); do \ - # translate $ORIGIN to real path, so that normalize path \ - # would work with readlink and secondly we don't need to \ - # relocate the binaries in rpm based distro \ - local f=${file#$RPM_BUILD_ROOT}; \ - local origin=${f%/*}; \ - dir=$(echo $dir | sed -e "s,\$ORIGIN,$origin,g"); \ - dir=$(readlink -m "$dir"); \ + 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"; \ @@ -478,6 +524,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 # @@ -511,13 +572,15 @@ 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; \ + 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 \ + 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} @@ -527,15 +590,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 @@ -544,7 +609,8 @@ fi; \ %update_mime_database() {{ \ umask 022; \ /usr/bin/update-mime-database %{_datadir}/mime; \ -}}%{nil} +};} \ +%{nil} #----------------------------------------------------------------- # Update icon cache @@ -553,7 +619,8 @@ fi; \ %update_icon_cache() {{ \ umask 022; \ /usr/bin/gtk-update-icon-cache -qf %{_datadir}/icons/%1; \ -}}%{nil} +};} \ +%{nil} #----------------------------------------------------------------- # Update scrollkeeper database @@ -578,7 +645,7 @@ 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}} @@ -619,11 +686,13 @@ 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 %php_pear_dir /usr/share/pear +%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 @@ -680,31 +749,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_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 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} +%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 %{expand:%%global py_ver %(%{__python} -c "import sys; print sys.version[:3]" || echo ERROR)}%py_ver +%py_ver %{expand:%%global py_ver %(%{__python} -c "import sys; print sys.version[:3]" 2>/dev/null || echo ERROR)}%py_ver # directories -%py_prefix %{expand:%%global py_prefix %(%{__python} -c "import sys; print sys.prefix" || echo ERROR)}%py_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} @@ -721,19 +809,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;\ @@ -876,7 +970,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 \ @@ -980,7 +1074,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 @@ -1076,11 +1170,13 @@ echo -e "\\n" >> %{_mavendepmapdir}/maven2-depmap.xml # 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 @@ -1102,7 +1198,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 \ @@ -1115,9 +1211,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 \\\ @@ -1127,18 +1224,20 @@ 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 \ @@ -1267,7 +1366,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 \ @@ -1276,13 +1375,14 @@ 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} \ %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 \ \ @@ -1329,6 +1429,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 \ @@ -1343,6 +1444,8 @@ for MODULE in {%{-m*},}; do \ >> %{ModprobeD}$suf/%{-n*}.conf} \ done \ done \ +} \ +__install_kernel_modules \ %{nil} # patchset macros @@ -1425,15 +1528,19 @@ done \ # 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 +# %post -p +# %lua_add_etc_shells /bin/sh /bin/pdksh # -# -p (optional) -- specifies that result is embeded %post script (prepends as first line) +# %preun -p +# if arg[2] == 0 then +# %lua_remove_etc_shells /bin/bash /bin/rbash +# end # # Requirements: -# BuildRequires: rpmbuild(macros) >= 1.429 +# BuildRequires: rpmbuild(macros) >= 1.462 +# -%add_etc_shells(p) %{-p:}\ +%lua_add_etc_shells() \ t = {}\ f = io.open("/etc/shells", "r")\ if f then\ @@ -1448,24 +1555,83 @@ for _, s in ipairs({%{expand:%%__lua_split %*}}) do\ 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}\ - 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)\ +%{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