+# useradd/groupadd macros
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+#
+# Usage:
+# %useradd [-P package] [-u uid] [-d home_dir] [-s shell] [-c comment]
+# [-g initial_group] [-G group[,...]] login
+#
+# -u uid. REQUIRED
+# -g gid/group. REQUIRED
+# -s defaults to /bin/false
+# -d defaults to /usr/share/empty
+# -c No default
+# -r is accepted but ignored (it's always set)
+# -k skeleton dir. defaults to /usr/share/empty
+# rpm specific flags
+# -P package name. defaults to %{name}
+#
+%useradd(c:d:e:f:g:G:Mmk:op:s:u:rP:) \
+%{!-u:%{error:useradd: Required argument -u missing}} \
+%{!-g:%{error:useradd: Required argument -g missing}} \
+%{!?1:%{error:useradd: Required parameter login missing}} \
+if [ -n "`/bin/id -u %{expand:%{%{#}}} 2>/dev/null`" ]; then \
+ if [ "`/bin/id -u %{expand:%{%{#}}}`" != "%{-u*}" ]; then \
+ echo "Error: user %{expand:%{%{#}}} doesn't have uid=%{-u*}. Correct this before installing %{-P*}%{!?-P:%{name}}." 1>&2 \
+ exit 1 \
+ fi \
+else \
+ echo "Adding user %{expand:%{%{#}}} UID=%{-u*}." \
+ /usr/sbin/useradd \\\
+ %{-m:-m -k %{-k*}%{!-k:/usr/share/empty}} \\\
+ -u %{-u*} \\\
+ -r \\\
+ -d %{-d*}%{!-d:/usr/share/empty} \\\
+ -s %{-s*}%{!-s:/bin/false} \\\
+ %{-c:-c "%(set -- %{-c*} %{*}; echo $1)"}\\\
+ -g %{-g*} \\\
+ %{-M} \\\
+ %{-G:-G %{-G*}} \\\
+ %{expand:%{%{#}}} 1>&2 || exit $? \
+ [ ! -x /usr/sbin/nscd ] || /usr/sbin/nscd -i passwd || : \
+fi;
+
+# Usage:
+# %groupadd [-P package] [-g gid] group
+#
+# -g gid. REQUIRED
+#
+# Sample:
+# %groupadd -P %{name}-base -g %{gid} %{name}
+
+%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}`" != "%{-g*}" ]; then \
+ echo "Error: group %{1} doesn't have gid=%{-g*}. Correct this before installing %{-P*}%{!?-P:%{name}}." 1>&2 \
+ exit 1 \
+ fi \
+else \
+ echo "Adding group %{1} GID=%{-g*}." \
+ /usr/sbin/groupadd -g %{-g*} -r %{1} 1>&2 || exit $? \
+ [ ! -x /usr/sbin/nscd ] || /usr/sbin/nscd -i group || : \
+fi;
+
+# apache_config_{install/uninstall} macros *DEPRECATED*
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+#
+# You should use webapp macros instead. these are here until single piece of
+# them is gone from specs ;)
+#
+# The config is installed/removed inside trigger, this means that you can any
+# time install apache1 or apache package and the configuration file is updated.
+# if you don't need the config for various reason for specific apache, just
+# remove the symlink from apache config directory. the trigger will not put the
+# config again to that version of apache. In other words the config is linked
+# to apache config directory on first install of PACKAGE or apache.
+#
+# should be called in trigger body:
+# %triggerin -- apache1 >= 1.3.33-2
+# %apache_config_install -v 1
+#
+# Add package's apache config to apache config.
+#
+# Usage:
+# %apache_config_install -v {1|2} -c %{_sysconfdir}/apache-%{name}.conf -n 99
+#
+# -v REQUIRED: specify apache version. can be 1 or 2.
+# -c OPTIONAL: specify full path to PACKAGE's config. Defaults to %{_sysconfdir}/apache-%{name}.conf.
+# -n OPTIONAL: specify config "slot". defaults to 99
+# -f OPTIONAL: force symlink creation regardless if package was upraded. useful in triggers
+#
+# Internal macros. don't use ;).
+# expands apache config dir by apache version at build time.
+%__apache_confdir() %(if [ %{1} = 1 ]; then echo /etc/apache/conf.d; elif [ %{1} = 2 ]; then echo /etc/httpd/httpd.conf; else echo >&2 Unknown apache version specified; fi)
+# expands apache service name by apache version at build time.
+%__apache_svcname() %(if [ %{1} = 1 ]; then echo apache; elif [ %{1} = 2 ]; then echo httpd; else echo >&2 Unknown apache version specified; fi)
+
+%apache_config_install(fv:c:n:) \
+%{!-v:%{error:apache_config_install: Required argument -v missing}} \
+%{?debug:set -x; echo "apache_config_install:%{-v*} %{name}-%{version}-%{release} 1:[$1]; 2:[$2]"} \
+if [ -n "%{-f:1}" ] || ([ "$1" = "1" ] && [ "$2" = "1" ]) && [ -d %{__apache_confdir %{-v*}} ]; then\
+ ln -sf %{-c*}%{!-c:%{_sysconfdir}/apache-%{name}.conf} %{__apache_confdir %{-v*}}/%{-n*}%{!-n:99}_%{name}.conf\
+fi\
+# reload apache if the config symlink is there\
+if [ -L %{__apache_confdir %{-v*}}/%{-n*}%{!-n:99}_%{name}.conf ]; then\
+ # additionally don't reload if target package (the webserver) is upgraded, as webserver is restarted anyway in %post \
+ if [ "$2" != "2" ] && [ -f /var/lock/subsys/%{__apache_svcname %{-v*}} ]; then\
+ /etc/rc.d/init.d/%{__apache_svcname %{-v*}} reload 1>&2\
+ fi\
+fi\
+%{nil}
+
+# Remove package's apache config from apache config.
+#
+# Usage:
+# %apache_config_uninstall -v {1|2} -n 99
+#
+# -v REQUIRED: specify apache version. can be 1 or 2.
+# -n OPTIONAL: specify config "slot". defaults to 99
+%apache_config_uninstall(v:n:) \
+%{!-v:%{error:apache_config_uninstall: Required argument -v missing}} \
+%{?debug:set -x; echo "apache_config_uninstall:%{-v*} %{name}-%{version}-%{release}: 1:[$1]; 2:[$2]"} \
+# remove link if either of the packages are gone \
+if [ "$1" = "0" ] || [ "$2" = "0" ]; then \
+ if [ -L %{__apache_confdir %{-v*}}/%{-n*}%{!-n:99}_%{name}.conf ]; then \
+ rm -f %{__apache_confdir %{-v*}}/%{-n*}%{!-n:99}_%{name}.conf \
+ if [ -f /var/lock/subsys/%{__apache_svcname %{-v*}} ]; then \
+ /etc/rc.d/init.d/%{__apache_svcname %{-v*}} reload 1>&2 \
+ fi \
+ fi \
+fi \
+%{nil}
+
+# webapp macros
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+#
+# The config is installed/removed inside trigger, this means that you can any
+# time install apache1/apache/lighttpd package and the configuration file is
+# updated. if you don't need the config for various reason for specific
+# webserver, just remove the symlink from config directory using webapp
+# program. the trigger will not recreate the symlink on upgrades. In other
+# words the config is linked to webserver config directory on first install of
+# PACKAGE or WEBSERVER.
+#
+# Add package's webserver config to webserver webapps dir.
+# Usage:
+# %webapp_register WEBSERVER WEBAPP
+#
+%webapp_register() \
+%{?debug:set -x; echo "webapp_register: %{name}-%{version}-%{release} 1:[$1]; 2:[$2]"} \
+if [ "$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\
+if [ -L /etc/%1/webapps.d/%(echo "%2" | tr '/' '-').conf ] && [ "$2" -lt "2" ]; then\
+ %{expand:%service -q %%1 reload}\
+fi\
+%{nil}
+
+# Remove package's config from webserver webapps dir.
+# Usage:
+# %webapp_register [-f] WEBSERVER WEBAPP
+%webapp_unregister(f) \
+%{?debug:set -x; echo "webapp_unregister: %{name}-%{version}-%{release}: 1:[$1]; 2:[$2]"} \
+# remove link if either of the packages are gone \
+if [ -n "%{-f:1}" ] || [ "$1" = "0" ] || [ "$2" = "0" ] && [ -L /etc/%1/webapps.d/%(echo "%2" | tr '/' '-').conf ]; then \
+ /usr/sbin/webapp unregister %1 %2\
+ %{expand:%service -q %%1 reload}\
+fi \
+%{nil}
+
+# see browser-plugins.spec / template-browser-plugin.spec
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+%nsplugin_install(d:f) { \
+# create link if it's first install of either of the packages \
+if [ -n "%{-f:1}" ] || ([ "$1" = "1" ] && [ "$2" = "1" ] && [ -d %{-d*} ]); then \
+( \
+%( \
+ for file in %{*}; do \
+ echo echo Installing $file to %{-d*}; \
+ echo "ln -sf %{_libdir}/browser-plugins/$file %{-d*};"; \
+ done ) \
+) | ( %banner -t 5 -e %{name}-in ); fi; \
+}
+
+%nsplugin_uninstall(d:) { \
+# remove link if either of the packages are gone \
+if [ "$1" = "0" ] || [ "$2" = "0" ]; then \
+( \
+%( \
+ for file in %{*}; do \
+ echo echo Removing $file from %{-d*}; \
+ echo "rm -f %{-d*}/$file;"; \
+ done ) \
+) | ( %banner -t 5 -e %{name}-un ); fi; \
+}
+
+# service macro.
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+#
+# calls usual service restart on package %post, but skips the restart if
+# administrator has disabled automatic service restarts in either global
+# /etc/sysconfig/rpm or per service /etc/sysconfig/SERVICE file.
+#
+# Usage:
+# %service [-q] SERVICE ACTION ["SERVICE NICE DESCRIPTION"]
+#
+# -q be silent when service isn't started (for scriplets restaring other package's services)
+#
+%service(q) {{%(export quiet=%{-q:1}; /usr/lib/rpm/service_generator.sh %{*}) };}
+
+
+# Java macros. based on jpackage macros.java
+#
+# Root directory where all Java VMs/SDK/JREs are installed.
+%_jvmdir %{_libdir}/jvm
+
+# Root directory where all Java VMs/SDK/JREs expose their jars
+%_jvmjardir %{_libdir}/jvm-exports
+
+# Root directory for all Java VM/SDK/JRE's private things.
+%_jvmprivdir %{_libdir}/jvm-private
+
+# Root directory for all architecture dependent parts of Java VM/SDK/JRE's
+%_jvmlibdir %{_libdir}/jvm
+
+# Root directory for all architecture independent parts of Java VM/SDK/JRE's
+%_jvmdatadir %{_datadir}/jvm
+
+# Root directory for all configurations parts of Java VM/SDK/JRE's
+%_jvmsysconfdir %{_sysconfdir}/jvm
+
+# Root directory for all common architecture dependent parts of Java VM/SDK/JRE's
+%_jvmcommonlibdir %{_libdir}/jvm-common
+
+# Root directory for all common architecture independent parts of Java VM/SDK/JRE's
+%_jvmcommondatadir %{_datadir}/jvm-common
+
+# Root directory for all common configurations parts of Java VM/SDK/JRE's
+%_jvmcommonsysconfdir %{_sysconfdir}/jvm-common
+
+# Directory where arch-specific (JNI) version-independent jars are installed.
+%_jnidir %{_libdir}/java
+
+
+%java_home %([ -f %{_javadir}-utils/java-functions ] || { echo ERROR; exit 0; }; unset JAVA_HOME; . %{_javadir}-utils/java-functions; set_jvm; echo ${JAVA_HOME:-ERROR})
+
+%ant JAVA_HOME=%{java_home} ant
+%jar %{java_home}/bin/jar
+%java %([ -f %{_javadir}-utils/java-functions ] || { echo ERROR; exit 0; }; unset JAVACMD; . %{_javadir}-utils/java-functions; set_javacmd; echo $JAVACMD)
+%javac %{java_home}/bin/javac
+%javadoc %{java_home}/bin/javadoc
+
+%add_jvm_extension JAVA_LIBDIR=%{buildroot}/%{_javadir} %{_bindir}/jvmjar -l
+
+%jpackage_script() \
+install -d $RPM_BUILD_ROOT%{_bindir}\
+cat > $RPM_BUILD_ROOT%{_bindir}/%5 << 'EOF' \
+#!/bin/sh\
+#\
+# %{name} script\
+# JPackage Project <http://www.jpackage.org/>\
+\
+# Source functions library\
+. %{_javadir}-utils/java-functions\
+\
+# Source system prefs\
+if [ -f %{_sysconfdir}/java/%{name}.conf ]; then\
+ . %{_sysconfdir}/java/%{name}.conf\
+fi\
+\
+# Source user prefs\
+if [ -f $HOME/.%{name}rc ]; then\
+ . $HOME/.%{name}rc\
+fi\
+\
+# Configuration\
+MAIN_CLASS=%1\
+BASE_FLAGS=%2\
+BASE_OPTIONS=%3\
+BASE_JARS="%(echo %4 | tr ':' ' ')"\
+\
+# Set parameters\
+set_jvm\
+set_classpath $BASE_JARS\
+set_flags $BASE_FLAGS\
+set_options $BASE_OPTIONS\
+\
+# Let's start\
+run "$@"\
+EOF
+
+# PEAR install macros
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+#
+# Usage:
+# %%pear_package_setup [-a #] [-n FMT]
+#
+# -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
+#
+# unpack PEAR package to %%{_builddir}/FMT. package is extracted with already
+# destination hierarchy. you should copy the tree to buildroot after
+# patching/reorganizing with %%pear_package_install.
+#
+# additionally BUILDROOT is stripped from files and files are converted to UNIX
+# line endings.
+#
+# the pear install process output is recorded to install.log, you should put it
+# to %%doc for later debug or just for information.
+#
+# additionally additional-packages.txt is produced if it was detected that the
+# package has optional dependencies. the file format is suitable of displaying
+# in %%post of a package. you should put this file to %%doc. noautocompressdoc is
+# automatically added for this file.
+
+
+# records install.log and transforms PEAR names to PLD Linux rpm package names.
+%__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 \
+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 \
+ rm -f optional-packages.txt \
+fi \
+%{nil}
+
+# command invoking pear cli
+%__pear /usr/bin/pear
+
+# 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) \
+%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} \
+%__pear \\\
+ -c pearrc \\\
+ -d doc_dir=/docs \\\
+ -d php_dir=%{php_pear_dir} \\\
+ -d bin_dir=%{_bindir} \\\
+ -d data_dir=%{php_pear_dir}/data \\\
+ -d test_dir=%{php_pear_dir}/tests \\\
+ install \\\
+ --packagingroot=%{builddir} \\\
+ --offline \\\
+ --nodeps \\\
+ %{-f:--force} \\\
+ %{!-z:%{S:%{-a*}%{!-a:0}}}%{-z:$_P} > .install.log || { c=$?; cat .install.log; exit $c; } \
+%{-z:cd ..} \
+cat %{-z:$_N/}.install.log | %__pear_install_log \
+\
+# undos sources \
+find . -type f -print0 | xargs -0 sed -i -e 's,\\r$,,' \
+%{!?_noautocompressdoc:%global _noautocompressdoc %{nil}}%{expand:%%global _noautocompressdoc %{_noautocompressdoc} optional-packages.txt} \
+%{!?_noautoprov:%global _noautoprov %{nil}}%{expand:%%global _noautoprov %{_noautoprov} 'pear(tests/.*)'} \
+%{nil}
+
+# Copies exctracted PEAR package structure and PEAR registry to buildroot.
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+%pear_package_install() \
+cp -a ./%{php_pear_dir}/{.registry,*} $RPM_BUILD_ROOT%{php_pear_dir} \
+find $RPM_BUILD_ROOT%{php_pear_dir} '(' -name '*~' -o -name '*.orig' ')' | xargs -r rm -v \
+# help the developer out a little: \
+if [ -f _noautoreq ]; then \
+ echo "AutoReqdep detected:" \
+ echo "_noautoreq $(cat _noautoreq)" \
+fi \
+%{nil}
+
+
+# Register OpenLDAP schema.
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+#
+# Usage:
+# %%openldap_schema_register [-d core,nis] %{schemadir}/horde.schema
+#
+# -d specify dependant schemas, separated by comma
+#
+%openldap_schema_register(d:) \
+for schema in %*; do \
+ if ! grep -q "$schema" /etc/openldap/slapd.conf; then \
+ %{__sed} -i -e " \
+ /^include.*local.schema/{ \
+ iinclude\\t $schema\
+ } \
+ " /etc/openldap/slapd.conf \
+ fi \
+done \
+# enable dependant schemas \
+if [ "%{-d*}" ]; then \
+ %{__sed} -i -e ' \
+ /^#include.*\\(%(echo '%{-d*}' | %{__sed} -e 's/,/\\\\|/g')\\)\\.schema/{ \
+ s/^#// \
+ }' /etc/openldap/slapd.conf \
+fi \
+%{nil}
+
+# Unregister OpenLDAP schema.
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+#
+# Usage:
+# %%openldap_schema_unregister %{schemadir}/horde.schema
+#
+%openldap_schema_unregister() \
+for schema in %*; do \
+ if grep -q "$schema" /etc/openldap/slapd.conf; then \
+ %{__sed} -i -e " \
+ /^include.*$(echo "$schema" | %{__sed} -e 's,/,\\\\/,g')/d \
+ # for symmetry it would be nice if we disable enabled schemas in post, \
+ # but we really can not do that, it would break something else. \
+ " /etc/openldap/slapd.conf \
+ fi \
+done \
+%{nil}
+
+%env_update [ ! -x /sbin/env-update ] || /sbin/env-update -u || :
+
+
+# Build modules for kernels 2.6
+# Author: Przemyslaw Iskra <sparky@pld-linux.org>
+#
+# Usage:
+# %build_kernel_modules -m <modules> -C <directory>
+#
+# remember that proper Makefile is still required
+# Options:
+# -m <modules> (required) -- comma-separated list of modules to save,
+# without .ko extension, may be placed in subdirectory
+# -C <directory> -- change to <directory> before doing anything
+# -p <arg>, -P <arg> -- arguments passeed to make scripts
+# -c -- do not execute make clean
+# <additional arguments> -- all additional arguments will be passed to
+# make modules
+#
+# Additional patching supported via here document. Try:
+# %build_kernel_modules -m module <<'EOF'
+# your patch script here
+# EOF
+# Don't use it unless patching depends on config options.
+
+# Developer note: don't touch it unless you know how to handle '\'.
+# - \ in script expands to nothing
+# - \\\ in script expands to \
+# - \\\ inside definition expands to nothing
+# - \\\\\\\ inside definition expands to \
+# - in last line \ has to touch arguments so arguments passing
+# in new lines (using \) will be supported
+
+%build_kernel_modules(p:P:m:C:c) \
+%{!?-m:%{error:%{0}: Required module name/list missing} exit 1} \
+ \
+%define Opts \\\\\\\
+%if "%{_target_base_arch}" != "%{_arch}" \\\
+ %if "%{_arch}" == "x86_64" && "%{_target_base_arch}" == "i386" \\\
+ CC="%{__cc}" CPP="%{__cpp}" ARCH=%{_target_base_arch} \\\
+ %else \\\
+ ARCH=%{_target_base_arch} CROSS_COMPILE=%{_target_cpu}-pld-linux- \\\
+ %endif \\\
+%else \\\
+ CC="%{__cc}" CPP="%{__cpp}" \\\
+%endif \
+%define MakeOpts HOSTCC="%{__cc}" SYSSRC=%{_kernelsrcdir} SYSOUT=$PWD/o \\\\\\\
+ O=$PWD/o %{?with_verbose:V=1} %{Opts} \
+ \
+%{?-C:cd %{-C*}} \
+compile() { \
+ L="<"; [[ '%{*}' != *$L$L* ]] || PATCH_SH="set -x -e;$(cat)" \
+ set -e -x \
+ \
+for cfg in %{?with_dist_kernel:dist}%{!?with_dist_kernel:nondist}; do \
+ [ -r "%{_kernelsrcdir}/config-$cfg" ] || exit 1 \
+ \
+ rm -rf o \
+ install -d o/include/linux \
+ 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 \
+%ifarch ppc ppc64 \
+ install -d o/include/asm \
+ [ ! -d %{_kernelsrcdir}/include/asm-%{_target_base_arch} ] || ln -sf %{_kernelsrcdir}/include/asm-%{_target_base_arch}/* o/include/asm \
+ [ ! -d %{_kernelsrcdir}/include/asm-powerpc ] || ln -snf %{_kernelsrcdir}/include/asm-powerpc/* o/include/asm \
+%else \
+ ln -sf %{_kernelsrcdir}/include/asm-%{_target_base_arch} o/include/asm \
+%endif \
+ \
+ set +x \
+ [ -z "$PATCH_SH" ] || echo "$PATCH_SH" | %__spec_build_shell \
+ set -x \
+ \
+ %if %{with dist_kernel} \
+ %{__make} -j1 -C %{_kernelsrcdir} prepare scripts \\\
+ %{-p*} %{-P*} \\\
+ %{MakeOpts} \
+ %else \
+ install -d o/include/config \
+ touch o/include/config/MARKER \
+ ln -sf %{_kernelsrcdir}/scripts o/scripts \
+ %endif \
+ \
+ %{!?-c:%{__make} -C %{_kernelsrcdir} clean \\\
+ RCS_FIND_IGNORE="-name '*.ko' -o" \\\
+ M=$PWD %{MakeOpts}} \
+ %{__make} -C %{_kernelsrcdir} modules \\\
+ ${1+"$@"} \\\
+ M=$PWD %{MakeOpts} \
+ \
+ for MODULE in {%{-m*},}; do \
+ [ -z "${MODULE}" ] || mv ${MODULE}{,-$cfg}.ko \
+ done \
+done \
+%{?-C:cd -} \
+} \
+compile %{*}\
+%{nil}
+
+
+# Install kernel modules built by %build_kernel_modules
+# Author: Przemyslaw Iskra <sparky@pld-linux.org>
+#
+# Usage:
+# %install_kernel_modules -m <modules> -d <directory>
+#
+# Options:
+# -m <modules> (required) -- comma-separated list of modules to install,
+# without .ko extension, may be placed in subdirectory
+# -d <directory> (required) -- in what subdirectory modules should be
+# installed (eg. misc, kernel/drivers/net)
+# -s <suffix> -- suffix to use when installing modules, useful when module
+# with same name exists in kernel already
+# -n <file> -- name of modprobe config file to use (without .conf extension)
+# for definig aliases, only useful with -s
+
+%install_kernel_modules(m:d:s:n:) \
+%{!?-m:%{error:%{0}: Required module name (-m) missing}exit 1} \
+%{!?-d:%{error:%{0}: Required module directory missing}exit 1} \
+%{?-n:%{!?-s:%{error:%{0}: Modprobe .conf file requires module suffix}exit 1}} \
+ \
+%define KernelD $RPM_BUILD_ROOT/lib/modules/%{_kernel_ver} \
+%define ModprobeD $RPM_BUILD_ROOT%{_sysconfdir}/modprobe.d/%{_kernel_ver} \
+ \
+install -d %{KernelD}/%{-d*} \
+%{?-s:install -d %{ModprobeD}} \
+ \
+for MODULE in {%{-m*},}; do \
+ [ -n "${MODULE}" ] || continue \
+ MNAME=${MODULE##*/} \
+ %if %{without dist_kernel} \
+ install ${MODULE}-nondist.ko \\\
+ %{KernelD}/%{-d*}/${MNAME}%{-s:-%{-s*}}.ko \
+ %{?-s:echo "alias ${MNAME} ${MNAME}-%{-s*}" \\\
+ >> %{ModprobeD}/%{-n*}.conf} \
+ %else \
+ install ${MODULE}-dist.ko \\\
+ %{KernelD}/%{-d*}/${MNAME}%{-s:-%{-s*}}.ko \
+ %{?-s:echo "alias ${MNAME} ${MNAME}-%{-s*}" \\\
+ >> %{ModprobeD}/%{-n*}.conf} \
+ %endif \
+done \
+%{nil}
+
+# patchset macros
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+#
+# Usage:
+# %patchset_source -f <seq(1) format> <start> [<end>]
+# %patchset_patch <start> [<end>]
+#
+# If <end> is omited, it is assumed to be <start>.
+#
+# For example in preamble:
+# %patchset_source -f ftp://ftp.vim.org/pub/editors/vim/patches/7.0/7.0.%03g 33 44
+# and in %prep:
+# %patchset_patch 33 44
+
+# generate SourceX urls from range START STOP
+# Format can be SINGLE format char of %e, %f, %g, see seq(1)
+# The sources start from 10000
+%patchset_source(f:b:) %(
+ base=%{-b*}%{!-b*:10000};
+ start=$(expr $base + %1);
+ end=$(expr $base + %{?2}%{!?2:%{1}});
+ # we need to call seq twice as it doesn't allow two formats
+ seq -f 'Patch%g:' $start $end > %{tmpdir}/__ps1;
+ seq -f '%{-f*}' %1 %{?2}%{!?2:%{1}} > %{tmpdir}/__ps2;
+ paste %{tmpdir}/__ps{1,2};
+ rm -f %{tmpdir}/__ps{1,2};
+) \
+%{nil}
+
+# apply sources from %patchset_source
+# -p specify -pX for %patch line
+# -b base offset: defaults to 10000
+%patchset_patch(f:p:b:) %(
+ base=%{-b*}%{!-b*:10000};
+ start=$(expr $base + %1);
+ end=$(expr $base + %{?2}%{!?2:%{1}});
+ echo ": patchset_patch %1%{?2: to %2}";
+ seq -f 'patch%g %{-p*:-p%{-p*}}' $start $end | sed -e s,^,%%,;
+) \
+%{nil}
+
+# browser plugins v2
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+#
+# Usage:
+# %browser_plugins_add_browser <name> -p <plugindir>
+#
+# <name> (required) -- name of the browser. usually %{name}.
+# -p <plugindir> (required) -- in what directory browser searches for its plugins.
+# -b -- default blacklists
+# -a <arch> override arch
+#
+# Example:
+# %browser_plugins_add_browser %{name} -p %{_firefoxdir}/plugins
+
+%_browserpluginsconfdir /etc/browser-plugins
+%_browserpluginsdir %{_libdir}/browser-plugins
+%update_browser_plugins /usr/sbin/update-browser-plugins || :
+
+%browser_plugins_add_browser(p:b:a:) \
+ browser=%1.%{!-a:%{_target_base_arch}}%{-a*} \
+ install -d $RPM_BUILD_ROOT%{_browserpluginsconfdir}/{blacklist,browsers}.d \
+ ln -s %{-p*} $RPM_BUILD_ROOT%{_browserpluginsconfdir}/browsers.d/$browser \
+ blacklist_file=$RPM_BUILD_ROOT%{_browserpluginsconfdir}/blacklist.d/$browser.blacklist \
+ echo '# This file format is shell globs at base dir of plugindir' > $blacklist_file \
+ %{-b:cat >> $blacklist_file %{-b*}} \
+%{nil}
+
+# vim:ts=4 sw=4 noet syn=spec