]> git.pld-linux.org Git - packages/rpm-build-macros.git/blobdiff - rpm.macros
- fix __python3 macro
[packages/rpm-build-macros.git] / rpm.macros
index 145641f1b4867f9e0ba18b11bcc5a76a08eab7e6..7d5fc355039161b3fb8ac59415ff4c585c913bf1 100644 (file)
@@ -1,5 +1,6 @@
 # $Revision$, $Date$
-# PLD Linux rpm macros
+# PLD Linux rpm macros.
+# <http://www.pld-linux.org/>
 
 %epoch         0
 %x8664         x86_64 amd64 ia32e
 %kgcc_package  gcc
 
 # compiler version
-%cc_version            %{expand:%%global cc_version %(%{__cc} -dumpversion || echo ERROR)}%cc_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
+%__rm          /bin/rm --interactive=never
 
 # Build system path macros.
+%__autoconf    autoconf %{?debug:-Wall}
+%__automake    automake -a -c -f --foreign
+%__autopoint   autopoint --force
+
+# add parallel build flags: -jN
+#
+# if you want to disable parallel build do (replace %% with %)
+# echo '%%_smp_mflags %%{nil}' >> ~/.rpmmacros
 #
-%__autoconf            autoconf %{?debug:-Wall}
-%__automake            automake -a -c -f --foreign
-%__autopoint           autopoint --force
+%__make                make %{?_smp_mflags}
+%__scons       scons %{?_smp_mflags}
+%__waf         waf %{?_smp_mflags}
+%__cmake       cmake %{?_smp_mflags}
+
+%_smp_mflags %(_NCPUS=$(/usr/bin/getconf _NPROCESSORS_ONLN); \\\
+                               [ "$_NCPUS" -gt 1 ] && echo "-j$(($_NCPUS * 2))")
 
 %__gettextize { \
        if grep -qs 'AM_GNU_GETTEXT.*external' configure.{ac,in} ; then \
 #      and that both p and q are package names (i.e. no version/release).
 %_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 * 2))")
-
 #-----------------------------------------------------------------
 #
 # (re)definition of %{rpm*flags} with %filterout_* support
         };
 }')
 
+#-----------------------------------------------------------------
+#
+#  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 ADDITIONAL_VAR
+
+%_preserve_env_base    PATH HOME TMP TMPDIR SSH_AUTH_SOCK
+
+# "env -i" must end in first line of expaned macros because it's used as first line of shell script (#! env...)
+%_clean_env            %{!?_preserve_env:%global _preserve_env %{nil}}%{expand:%%global _preserve_env %{_preserve_env} %_preserve_env_base} env -i %(awk -vq="'" -vqq="\\"'\\"" -vq2q="'\\"'" 'BEGIN {
+       split("%{?_preserve_env}", P);
+       for (i in P) {
+               p = P[i];
+               if (!ENVIRON[p] || d[p]) {
+                       continue;
+               }
+               d[p] = 1;
+               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 +311,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 +325,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 +333,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
 
@@ -499,7 +548,7 @@ fi; }; __spec_install_post_chrpath } } }
         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 ] && exit 1 || exit 0;} \
+    %{!?no_install_post_check_so:[ $fail -eq 1 ] && : || :;} \
 }; __spec_install_post_check_so }}
 
 #-----------------------------------------------------------------
@@ -692,19 +741,22 @@ fi; \
 %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 \
+if [ -x /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 \
+if [ -x /etc/rc.d/init.d/php-fpm ]; then \
+       %service -q php-fpm restart \
+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 \
+if [ -x /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 \
@@ -750,6 +802,12 @@ fi \
 %{__xorg_abi_requires_lt videodrv xorg_xserver_videodrv_abi} \
 %{nil}
 
+# TCL specific macro definitions.
+# TODO: when th tcl is fixed use tclsh to get version: %(echo 'puts $tcl_version' | tclsh)
+%tcl_version   %{expand:%%global tcl_version %(v=$(rpm -q --qf %{V} tcl | cut -d. -f1,2); echo ${v:-ERROR})}%tcl_version
+%tcl_sitearch  %{_libdir}/tcl%{tcl_version}
+%tcl_sitelib   %{_datadir}/tcl%{tcl_version}
+
 # Python specific macro definitions.
 # python main version
 %py_ver                        %{expand:%%global py_ver %(%{__python} -c "import sys; print sys.version[:3]" 2>/dev/null || echo ERROR)}%py_ver
@@ -771,6 +829,25 @@ fi \
 # Software written in Python language require Python with main version
 %pyrequires_eq() Requires:     %1
 
+# Python 3.x
+# python main version
+%__python3                     python3
+%py3_ver                       %{expand:%%global py3_ver %(%{__python3} -c "import sys; print(sys.version[:3])" 2>/dev/null || echo ERROR)}%py3_ver
+
+# directories
+%py3_prefix            %{expand:%%global py3_prefix %(%{__python3} -c "import sys; print(sys.prefix)" 2>/dev/null || echo ERROR)}%py3_prefix
+%py3_libdir            %{py3_prefix}/%{_lib}/python%{py3_ver}
+%py3_scriptdir %{py3_prefix}/share/python%{py3_ver}
+%py3_incdir            /usr/include/python%{py3_ver}
+%py3_sitedir           %{py3_libdir}/site-packages
+%py3_sitescriptdir %{py3_scriptdir}/site-packages
+%py3_dyndir            %{py3_libdir}/lib-dynload
+
+# pure python modules compilation
+%py3_comp              %{__python3} -c "import compileall; import sys; compileall.compile_dir(sys.argv[1], ddir=sys.argv[1][len('$RPM_BUILD_ROOT'):])"
+
+%py3_ocomp             %{__python3} -O -c "import compileall; import sys; compileall.compile_dir(sys.argv[1], ddir=sys.argv[1][len('$RPM_BUILD_ROOT'):])"
+
 # Hardlink binary identical .pyc and .pyo files
 %__spec_install_post_py_hardlink {\
 %{!?no_install_post_py_hardlink: __spec_install_post_py_hardlink() { \
@@ -797,6 +874,12 @@ for d in %{py_sitescriptdir} %{py_sitedir} %*; do \
 done \
 %{nil}
 
+%py3_postclean() \
+for d in %{py3_sitescriptdir} %{py3_sitedir} %*; do \
+ [ ! -d "$RPM_BUILD_ROOT$d" ] || find "$RPM_BUILD_ROOT$d" -name '*.py' -print0 | xargs -0r -l512 rm;\
+done \
+%{nil}
+
 # depmod macro
 %depmod() { \
 umask 022; \
@@ -823,7 +906,7 @@ fi; \
 %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
+%_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/;s/sparcv./sparc/')}%_target_base_arch
 
 # user/group checking macros
 #
@@ -846,9 +929,14 @@ fi; \
 # user group membership management macros
 #
 # Usage:
-#      %addusertogroup myuser agroup
+#      %addusertogroup [-q] myuser agroup
 #
-%addusertogroup        /usr/lib/rpm/user_group.sh user addtogroup
+#  -q if user or group don't exist, don't make big noise of it (MISSINGOK behaviour)
+#
+# Requirements:
+# BuildRequires:       rpmbuild(macros) >= 1.515
+%addusertogroup(q)     quiet=%{-q:1} /usr/lib/rpm/user_group.sh user addtogroup %*; \
+%{nil}
 
 # banner support (useful in {pre,post}{,un} and triggers)
 #
@@ -957,11 +1045,11 @@ fi;
 #
 # Add package's webserver config to webserver webapps dir.
 # Usage:
-#   %webapp_register WEBSERVER WEBAPP
+#   %webapp_register [-f] WEBSERVER WEBAPP
 #
-%webapp_register() \
+%webapp_register(f) \
 %{?debug:set -x; echo "webapp_register: %{name}-%{version}-%{release} 1:[$1]; 2:[$2]"} \
-if [ "$1" = "1" ] && [ "$2" = "1" ]; then\
+if [ -n "%{-f:1}" ] || [ "$1" = "1" ] && [ "$2" = "1" ]; then\
        /usr/sbin/webapp register %1 %2\
 fi\
 # reload webserver if the config symlink is there and skip reload if webserver is upgraded\
@@ -1345,6 +1433,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                                                                                                                  \
                                                                                                                                        \
@@ -1391,6 +1480,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                                                                                    \
@@ -1405,6 +1495,8 @@ for MODULE in {%{-m*},}; do                                                                                       \
                        >> %{ModprobeD}$suf/%{-n*}.conf}                                                \
        done                                                                                                                    \
 done                                                                                                                           \
+}                                                                                                                                      \
+__install_kernel_modules                                                                                       \
 %{nil}
 
 # patchset macros
@@ -1593,4 +1685,4 @@ else: \
 }; __py_lint %* \
 %{nil}
 
-# vim:ts=4 sw=4 noet syn=spec
+# vim:ts=4 sw=4 noet ft=spec
This page took 0.351656 seconds and 4 git commands to generate.