]> git.pld-linux.org Git - packages/rpm-build-macros.git/blobdiff - rpm.macros
- requires_ge and requres_ge_to, based on requires_eq* macros
[packages/rpm-build-macros.git] / rpm.macros
index dabcdf5162c8aba2d21e4117311ab30152d43dd7..fc8fa1019e985ce42de5312854849c0e8de36e3a 100644 (file)
@@ -2,7 +2,7 @@
 # PLD Linux rpm macros.
 # <http://www.pld-linux.org/>
 
-# can be used by builder script to to check for version
+# can be used by builder script to check for version
 %rpm_build_macros      %(R="$Revision$"; RR="${R##: }"; echo ${RR%%?})
 
 %epoch         0
 %__intltoolize         intltoolize --copy --force
 %__libtoolize          libtoolize --copy --force --install
 
-# topdir is where builder script lives, fallback to old style if builder script was not found and
-# SPECS/SOURCES dirs exist (XXX: should be reverse?)
-%_topdir    %{expand:%%global _topdir %(d=;\
-    d=${d:-$([ -d ../SPECS -a -d ../SOURCES ] && (cd .. && pwd))};\
-    d=${d:-$([ -x ../builder -a ! -d ../builder ] && (cd ..; pwd))};\
-    d=${d:-$([ -x builder -a ! -d builder ] && pwd)};\
-    echo ${d:-$HOME/rpm};\
+# topdir is where builder script lives,
+# fallback to old style if SPECS/SOURCES dirs were found.
+%_topdir    %{expand:%%global _topdir %(
+       if [ -d SPECS -a -d SOURCES ]; then
+               # old style rpmdir: in topdir
+               pwd
+       elif [ -d ../SPECS -a -d ../SOURCES ]; then
+               # old style rpmdir: in subdir
+               cd ..; pwd
+       elif [ -d $HOME/rpm/SPECS -a -d $HOME/rpm/SOURCES ]; then \
+               # if old style rpm dir exist, go with it
+               echo $HOME/rpm; \
+       elif [ -x ../builder -a ! -d ../builder ]; then
+               # relative new style rpmdir: in package dir
+               cd ..; pwd
+       elif [ -x builder -a ! -d builder ]; then
+               # relative new style rpmdir: in packages
+               pwd
+       elif [ -x packages/builder -a ! -d packages/builder ]; then
+               # relative new style rpmdir: packages dir in current dir
+               cd packages; pwd
+       else
+               # fallback to new style rpmdir
+               echo $HOME/rpm/packages
+       fi; \
 )}%_topdir
 
-# if %{_topdir}/builder exists, it's new style structure
-%_specdir       %{expand:%%global _specdir %([ -x %{_topdir}/builder ] && echo %{_topdir}/%{name} || echo %{_topdir}/SPECS)}%_specdir
-%_sourcedir            %{expand:%%global _sourcedir %([ -x %{_topdir}/builder ] && echo %{_specdir} || echo %{_topdir}/SOURCES)}%_sourcedir
+# if %{_topdir}/SPECS exists, it's old style structure
+%_specdir       %{expand:%%global _specdir %([ ! -d %{_topdir}/SPECS ] && echo %{_topdir}/%{name} || echo %{_topdir}/SPECS)}%_specdir
+%_sourcedir            %{expand:%%global _sourcedir %([ ! -d %{_topdir}/SOURCES ] && echo %{_specdir} || echo %{_topdir}/SOURCES)}%_sourcedir
 
 # BUILD/RPMS/SRPMS are one same level by default as packages dir, if these exist
 # if they don't exist assume we are having custom topdir (which is not named as
 # "packages", i.e ~/rpm/kde/{kdelibs,BUILD/RPMS/SRPMS})
-%_builddir             %{expand:%%global _builddir %([ -d %{_topdir}/../BUILD ] && (cd %{_topdir}/../BUILD; pwd) || echo %{_topdir}/BUILD)}%_builddir
-%_rpmdir               %{expand:%%global _rpmdir %([ -d %{_topdir}/../RPMS ] && (cd %{_topdir}/../RPMS; pwd) || echo %{_topdir}/RPMS)}%_rpmdir
-%_srcrpmdir            %{expand:%%global _srcrpmdir %([ -d %{_topdir}/../SRPMS ] && (cd %{_topdir}/../SRPMS; pwd) || echo %{_topdir}/SRPMS)}%_srcrpmdir
+# NOTE: readlink fails if some parent dir is not readable (/home/services/builder for example can't read /home/services), therfore the extra echo
+%_builddir             %{expand:%%global _builddir %(if [ -d %{_topdir}/BUILD ]; then echo %{_topdir}/BUILD; else readlink -m %{_topdir}/../BUILD || echo %{_topdir}/../BUILD; fi)}%_builddir
+%_rpmdir               %{expand:%%global _rpmdir %(if [ -d %{_topdir}/RPMS ]; then echo %{_topdir}/RPMS; else readlink -m %{_topdir}/../RPMS || echo readlink -m %{_topdir}/../RPMS; fi)}%_rpmdir
+%_srcrpmdir            %{expand:%%global _srcrpmdir %(if [ -d %{_topdir}/SRPMS ]; then echo %{_topdir}/SRPMS; else readlink -m %{_topdir}/../SRPMS || echo readlink -m %{_topdir}/../SRPMS; fi)}%_srcrpmdir
 
 #      The number of cvs changelog entries kept when building package.
 %_buildchangelogtruncate 20
@@ -331,7 +350,7 @@ CXXFLAGS="%{rpmcxxflags}" \
 %{nil}
 
 # Location of autoconf macros
-%_aclocaldir   %{expand:%%global _aclocaldir %(aclocal --print-ac-dir || echo ERROR)}%_aclocaldir
+%_aclocaldir   %{expand:%%global _aclocaldir %(aclocal --print-ac-dir 2>/dev/null || echo ERROR)}%_aclocaldir
 
 # Location of omf files
 %_omf_dest_dir %{expand:%%global _omf_dest_dir %(scrollkeeper-config --omfdir || echo ERROR)}%_omf_dest_dir
@@ -381,6 +400,15 @@ CXXFLAGS="%{rpmcxxflags}" \
 # If non-empty "debug" macro defined, add "dbg" suffix to release number
 %_rpmfilename          %%{NAME}-%%{VERSION}-%%{RELEASE}%{?debug:dbg}.%%{ARCH}.rpm
 
+# Bootstrap release macros.
+# Usage:
+#      %bcond_with     bootstrap
+#      Release:        %{bootstrap_release 1}
+#
+# Package will have release 1 if built normally,
+# 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}
+
 # -n drm to generate kernel%{_alt_kernel}-drm dependency
 %releq_kernel(n:)              %{expand:%%global releq_kernel %(R=$(LC_ALL=C rpm -q --qf '%{N}%{?-n:-%{-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(n:)   %{expand:%%global releq_kernel_up %(R=$(LC_ALL=C rpm -q --qf '%{N}%{?-n:-%{-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
@@ -398,11 +426,16 @@ CXXFLAGS="%{rpmcxxflags}" \
 # 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)}}
 
+# Requires: name >= version
+%requires_ge()         %{!?1:ERROR}%{?2:ERROR}%{?1:%{!?2:%{expand:%%requires_ge_to %1 %1}}}
+# Requires: name >= version (version based on querying package %2)
+%requires_ge_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
 
 # kernel version-release handling
 %__kernel_ver   %{expand:%%global __kernel_ver %( \\
-       Z=$(awk -F'"' '/UTS_RELEASE/{print $2}' %{_kernelsrcdir}/include/linux/{version,utsrelease}.h 2>/dev/null); \\
+       Z=$([ -f '%{_kernelsrcdir}/include/generated/utsrelease.h' ] && awk -F'"' '/UTS_RELEASE/{print $2}' %{_kernelsrcdir}/include/{linux/version,generated/utsrelease}.h 2>/dev/null || awk -F'"' '/UTS_RELEASE/{print $2}' %{_kernelsrcdir}/include/linux/{version,utsrelease}.h 2>/dev/null); \\
        Z=${Z:-$(awk -F' = ' '/^VERSION/{v=$2} /^PATCHLEVEL/{p=$2} /^SUBLEVEL/{s=$2} /^EXTRAVERSION/{e=$2} END {printf("%d.%d.%d%s", v, p, s, e)}' %{_kernelsrcdir}/Makefile 2>/dev/null)}; \\
        echo ${Z:-ERROR}; \\
 )}%__kernel_ver
@@ -1186,11 +1219,25 @@ fi \
 # Directory where arch-specific (JNI) version-independent jars are installed.
 %_jnidir               %{_libdir}/java
 
-%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
+
+# JDK selection. Set this to name of the JDK implementation to use
+# insead of the system default
+#%use_jdk              icedtea6
+
+# expands to the value with right jdk for BuildRequires header
+# 'jdk' if %%use_jdk is not defined,  jdk(%%use_jdk) otherwise
+# The requirement will not replace current 'default' JDK
+%required_jdk  jdk%{?use_jdk:(%{use_jdk})}
+
+%buildrequires_jdk BuildRequires: %required_jdk
+
+%java_home             %{expand:%%global java_home %([ -f %{_javadir}-utils/java-functions ] || { echo ERROR; exit 0; }; %{!?use_jdk:unset JAVA_HOME; . %{_javadir}-utils/java-functions; set_jvm}%{?use_jdk:JAVA_HOME=%{_jvmdir}/%{use_jdk}}; echo ${JAVA_HOME:-ERROR})}%java_home
+
+%_javasrcdir   %{_usrsrc}/java
 
 %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
+%java                  %{expand:%%global java %([ -f %{_javadir}-utils/java-functions ] || { echo ERROR; exit 0; }; %{!?use_jdk:unset JAVACMD; . %{_javadir}-utils/java-functions; set_javacmd}%{?use_jdk:JAVACMD=%{java_home}/bin/java}; echo $JAVACMD)}%java
 %javac                 %{java_home}/bin/javac
 %javadoc               %{java_home}/bin/javadoc
 
@@ -1279,6 +1326,24 @@ cat %{_mavendepmapfragdir}/* >> %{_mavendepmapdir}/maven2-depmap.xml\
 fi\
 echo -e "</dependencies>\\n" >> %{_mavendepmapdir}/maven2-depmap.xml
 
+# JAVA macros specific for PLD
+
+# Directory for tomcat context configuration files
+%_tomcatconfdir        %{_sharedstatedir}/tomcat/conf/Catalina/localhost
+
+# Tomcat cache path
+%_tomcatcachedir %{_sharedstatedir}/tomcat/work/Catalina/localhost
+
+# Clear tomcat cache
+# Author: Paweł Zuzelski <pawelz@pld-linux.org>
+#
+# Usage:
+# %%tomcat_clear_cache appname
+#
+# Call this script in %postun scriptlet. It will remove compiled jsps related to
+# given app.
+#
+%tomcat_clear_cache() %{!?1:ERROR}%{?2:ERROR} %{__rm} -rf %{_tomcatcachedir}/%1
 
 # PEAR install macros
 # Author: Elan Ruusamäe <glen@pld-linux.org>
@@ -1480,10 +1545,15 @@ for cfg in ${cfgs:-dist}; do                                        \
        [ -r "%{_kernelsrcdir}/config-$cfg" ] || exit 1                                 \
                                                                                                                                        \
        rm -rf o                                                                                                                \
-       install -d o/include/linux o/arch/powerpc/lib                                   \
+       install -d o/include/linux o/include/generated 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 \
+       if [ -f %{_kernelsrcdir}/include/generated/autoconf-$cfg.h ]; then      \
+               ln -sf %{_kernelsrcdir}/include/generated/autoconf-$cfg.h o/include/generated/autoconf.h \
+               ln -s ../generated/autoconf.h o/include/linux/autoconf.h \
+       else                                                                                                                    \
+               ln -sf %{_kernelsrcdir}/include/linux/autoconf-$cfg.h o/include/linux/autoconf.h \
+       fi                                                                                                                              \
                                                                                                                                        \
        set +x                                                                                                                  \
        [ -z "$PATCH_SH" ] || echo "$PATCH_SH" | %__spec_build_shell    \
@@ -1757,9 +1827,64 @@ else: \
 #
 # Requirements:
 # BuildRequires:       sed >= 4.0
-# BuildRequires:       rpmbuild(macros) >= 1.533
+# BuildRequires:       rpmbuild(macros) >= 1.553
+
+# NB: make sure this command stays on one line
+%undos         %{__sed} -i -e 's,\\r$,,'
+
+# Hook to register nagios object based plugins in Nagios NRPE daemon config.
+#
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+#
+# Usage:
+#  -a NAME  -- add command named NAME
+#  -d NAME  -- remove command named NAME
+#  -f FILE  -- specify plugin configuration FILE to extract command definition from
+#
+# Sample:
+# %triggerin -- nagios-nrpe
+# %nagios_nrpe -a %{plugin} -f %{_sysconfdir}/%{plugin}.cfg
+#
+# %triggerun -- nagios-nrpe
+# %nagios_nrpe -d %{plugin} -f %{_sysconfdir}/%{plugin}.cfg
+#
+# Requirements:
+# BuildRequires:       sed >= 4.0
+# BuildRequires:       rpmbuild(macros) >= 1.552
+%nagios_nrpe(a:d:c:f:) {\
+       m=$(md5sum < /etc/nagios/nrpe.cfg); \
+       %{-a:# on -a and config exists \
+       if [ -f /etc/nagios/nrpe.cfg ]; then \
+               if ! %{__grep} -q '^command\[%{-a*}\]' /etc/nagios/nrpe.cfg; then \
+                               %{__sed} -ne 's/^[ \t]*command_line[ \t]\+\(.\+\)/command[%{-a*}]=\1/p' %{-f*} >> /etc/nagios/nrpe.cfg; \
+               fi; \
+       fi;} \
+       %{-d:# on package remove, -d and config exists \
+       if [ "$1" = "0" -a -f /etc/nagios/nrpe.cfg ]; then \
+               %{__sed} -i -e '/^[ \t]*command\[%{-d*}\]/d' /etc/nagios/nrpe.cfg; \
+       fi;} \
+       if [ "$m" != "$(md5sum < /etc/nagios/nrpe.cfg)" ]; then \
+               %service -q nrpe restart; \
+       fi; \
+}%{nil}
+
+# Import or update Cacti template.
+#
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+#
+# Usage:
+# %cacti_import_template XMLFILE
+#  XMLFILE -- XML template to import
+#
+# Sample:
+# %post
+# %cacti_import_template %{resourcedir}/cacti_host_template_varnish.xml
+#
+# Requires:    cacti >= 0.8.7e-8
+# BuildRequires:       rpmbuild(macros) >= 1.554
 
-%undos \
-%{__sed} -i -e 's,\\r$,,'
+%cacti_import_template() {\
+/usr/share/cacti/cli/import_template.php --filename=%1 || :; \
+}%{nil}
 
 # vim:ts=4 sw=4 noet ft=spec
This page took 0.054103 seconds and 4 git commands to generate.