# $Revision$, $Date$
-# PLD rpm macros
+# PLD Linux rpm macros
%epoch 0
%x8664 x86_64 amd64 ia32e
%{filter_out}
}')
+# rpmldflags with stripped -Wl, -- in the form flags have to be passed to 'ld'
+# but, don't use it, better use gcc as linker
+%ld_rpmldflags %(awk 'BEGIN {
+ split("%{rpmldflags}",F);
+ for (f in F) {
+ s = F[f];
+ if (s ~ /^-Wl,/) {
+ s = substr(s,5);
+ gsub(/,/," ",s);
+ };
+ printf(s FS);
+ };
+}')
+
#-----------------------------------------------------------------
%configure2_13 { \
if [ -n "$LINGUAS" ]; then unset LINGUAS; fi; \
%{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}" \
-cmake \
+%{__cmake} \
+}
+
+# override __scons to add -j4 in your ~/.rpmmacros for parallel make
+%__scons /usr/bin/scons
+%scons { \
+%{__scons} \
+}
+
+# waf. see waf.spec
+# override __waf to add -j4 in your ~/.rpmmacros for parallel make
+%__waf /usr/bin/waf
+%waf { \
+CC="%{__cc}" \
+CXX="%{__cxx}" \
+CPP="%{__cpp}" \
+CFLAGS="%{rpmcflags}" \
+CXXFLAGS="%{rpmcxxflags}" \
+%{__waf} \
}
#----------------------------------------------------------------
# Overloading of some basic macros
%prep \
%%prep\
-LANG=C\
-export LANG\
-unset DISPLAY ||:\
+export LC_ALL=C\
+export LANG=C\
unset LINGUAS ||:\
+unset LANGUAGE ||:\
+unset LC_MESSAGES ||:\
+unset DISPLAY ||:\
%{nil}
%build %%build\
-LANG=C\
-export LANG\
-unset DISPLAY ||:\
+export LC_ALL=C\
+export LANG=C\
unset LINGUAS ||:\
+unset LANGUAGE ||:\
+unset LC_MESSAGES ||:\
+unset DISPLAY ||:\
%{nil}
%install \
%{?buildsubdir:%{debug_package}}\
%endif\
%%install\
-LANG=C\
-export LANG\
-unset DISPLAY ||:\
+export LC_ALL=C\
+export LANG=C\
unset LINGUAS ||:\
+unset LANGUAGE ||:\
+unset LC_MESSAGES ||:\
+unset DISPLAY ||:\
%{nil}
# Location of autoconf macros
%apache_modules_api %(awk '/#define MODULE_MAGIC_NUMBER_MAJOR/ {print $3}' /usr/include/apache/ap_mmn.h 2>/dev/null || echo ERROR)
# kernel version-release handling
-%__kernel_ver %([ -f %{_kernelsrcdir}/include/linux/version.h ] && (grep UTS_RELEASE %{_kernelsrcdir}/include/linux/version.h 2>/dev/null | head -n 1 | cut -d'"' -f2) || (awk '/^VERSION/ { ver = $0; gsub(/VERSION.*=/, NIL, ver); } /^PATCHLEVEL/ { plev = $0; gsub(/PATCHLEVEL.*=/, NIL, plev); } /^SUBLEVEL/ { slev = $0; gsub(/SUBLEVEL.*=/, NIL, slev); } /^EXTRAVERSION/ { ever = $0; gsub(/EXTRAVERSION.*=/, NIL, ever); gsub(/ /, NIL, ever); } END { printf("%d.%d.%d%s", ver, plev, slev, ever); }' %{_kernelsrcdir}/Makefile 2> /dev/null))
+%__kernel_ver %( VER_H=%{_kernelsrcdir}/include/linux/utsrelease.h; [ -f $VER_H ] || VER_H=%{_kernelsrcdir}/include/linux/version.h; [ -f $VER_H ] && (grep UTS_RELEASE $VER_H 2>/dev/null | head -n 1 | cut -d'"' -f2) || (awk '/^VERSION/ { ver = $0; gsub(/VERSION.*=/, NIL, ver); } /^PATCHLEVEL/ { plev = $0; gsub(/PATCHLEVEL.*=/, NIL, plev); } /^SUBLEVEL/ { slev = $0; gsub(/SUBLEVEL.*=/, NIL, slev); } /^EXTRAVERSION/ { ever = $0; gsub(/EXTRAVERSION.*=/, NIL, ever); gsub(/ /, NIL, ever); } END { printf("%d.%d.%d%s", ver, plev, slev, ever); }' %{_kernelsrcdir}/Makefile 2> /dev/null))
%__kernel_rel %(LC_ALL="C" rpm -qf %{_kernelsrcdir}/include/linux/fs.h 2>/dev/null --qf "%{RELEASE}" | grep -v "is not")
%__kernel_rpmvr %(LC_ALL="C" rpm -qf %{_kernelsrcdir}/include/linux/fs.h 2>/dev/null --qf "%{VERSION}-%{RELEASE}" | grep -v "is not")
%_kernel_ver %{__kernel_ver}%{?with_dist_kernel:%(echo %{__kernel_ver} | grep -q -e - || echo -%{__kernel_rel})}
#%no_install_post_compress_modules 1
%__spec_install_post_compress_modules { \
%{!?no_install_post_compress_modules: __spec_install_post_compress_modules() { \
- if [ -d "$RPM_BUILD_ROOT" ]; then \
- echo "Compress kernel modules if any."; \
- if test -d $RPM_BUILD_ROOT/lib/modules ; then \
- find $RPM_BUILD_ROOT/lib/modules -name \*o -type f -print | \
- xargs -r %{__gzip} -9nf; \
- find $RPM_BUILD_ROOT/lib/modules -name \*o -type l -printf "%p %l\n" | \
- while read a b; do ln -sf $b.gz $a.gz; rm -f $a; done; \
- fi; \
+ if [ -d $RPM_BUILD_ROOT/lib/modules ]; then \
+ echo "Compress kernel modules"; \
+ q=$(find $RPM_BUILD_ROOT/lib/modules -name '*o' -type f -print); \
+ echo "$q" | xargs -r %{__gzip} -9nf; \
+ printf "%d modules compressed\n" $(echo "$q" | wc -l); \
+ find $RPM_BUILD_ROOT/lib/modules -name '*o' -type l -printf "%p %l\n" | \
+ while read a b; do ln -sf $b.gz $a.gz; rm -f $a; done; \
fi; \
}; __spec_install_post_compress_modules } }
%ruby_mod_ver_requires_eq Requires: ruby-modules(ver) = %ruby_version
%php_pear_dir /usr/share/pear
+%php_extensiondir %(php-config --extension-dir 2>/dev/null || echo ERROR)
+%php_sysconfdir %(php-config --sysconfdir 2>/dev/null || echo ERROR)
# directory where php includes are installed on system.
%__php_includedir /usr/include/php
# macros for public use
# for php extensions (php-pecl)
%requires_php_extension %{__php_api_requires modules_api php_api_version} \
+%{__php_api_requires zend_module_api} \
%{__php_api_requires -v %php_major_version debug php_debug} \
%{__php_api_requires -v %php_major_version thread-safety zend_zts}
# for php pdo modules (php-pecl-PDO_*)
%requires_php_pdo_module %{__php_api_requires PDO_API php_pdo_api_version}
+# for using PHP post scripts. for PHP >= 5.0
+%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 \
+ 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 \
+%{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 \
+ PHP_FCGI_BINARY=; . /etc/sysconfig/php-fcgi 2>/dev/null \
+ if [[ ${PHP_FCGI_BINARY:-php.fcgi} = *php4.fcgi* ]]; then \
+ %service -q php-fcgi restart \
+ fi \
+fi \
+%{nil}
+
# Python specific macro definitions.
# python main version
%py_ver %(python -c "import sys; print sys.version[:3]")
eval $CMD %2%{?3: %3} \
%nil
-# useradd/groupadd macros written by glen@pld-linux.org.
-# All rights reserved. Permission to copy is hereby granted.. yada, yada, yada
+# useradd/groupadd macros
+# Author: Elan Ruusamäe <glen@pld-linux.org>
#
# Usage:
# %useradd [-P package] [-u uid] [-d home_dir] [-s shell] [-c comment]
[ ! -x /usr/sbin/nscd ] || /usr/sbin/nscd -i group || : \
fi;
-# apache_config_{install/uninstall} macros written by glen@pld-linux.org.
-# All rights reserved. Permission to copy is hereby granted.. yada, yada, yada
+# 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 ;)
+# 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.
%{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
%{nil}
# see browser-plugins.spec / template-browser-plugin.spec
-# written by glen@pld-linux.org.
+# 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 \
}
# 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.
#
-# written by glen@pld-linux.org.
-# All rights reserved. Permission to copy is hereby granted.. yada, yada, yada
-#
# Usage:
# %service [-q] SERVICE ACTION ["SERVICE NICE DESCRIPTION"]
#
run "$@"\
EOF
-# pear install macros written by glen@pld-linux.org.
-# All rights reserved. Permission to copy is hereby granted.. yada, yada, yada
+# PEAR install macros
+# Author: Elan Ruusamäe <glen@pld-linux.org>
#
# Usage:
# %%pear_package_setup [-a #] [-n FMT]
#
-# -a # - unpack SOURCE# instead of SOURCE0
+# -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. use this for buggy packages.
-# -f - force pear install. use with care.
+# -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
# line endings.
#
# the pear install process output is recorded to install.log, you should put it
-# to %%doc for latter debug or just information.
+# 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.
-#
-%pear_package_setup(a:n:zf) \
-%setup -q -c -T -n %{-n*}%{!-n:%{_pearname}-%{version}}\
-D=%{_builddir}/%{-n*}%{!-n:%{_pearname}-%{version}} \
-%{-z:tar zxf %{S:%{-a*}%{!-a:0}}; P=%{_pearname}-%{version}/package.xml; [ -f $P ] || P=package.xml} \
-pear \\\
+
+
+# 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:z) \
+%define srcdir %{-n*}%{!-n:%{_pearname}-%{version}} \
+%define builddir %{_builddir}/%{srcdir} \
+%setup -q -c -T -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 \\\
- --installroot=${D} \\\
+ --packagingroot=%{builddir} \\\
--offline \\\
--nodeps \\\
%{-f:--force} \\\
- %{!-z:%{S:%{-a*}%{!-a:0}}}%{-z:$P} | 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 \
-rm ./%{php_pear_dir}/.{lock,filemap} \
+ %{!-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$,,' \
-# bug in PEAR --installroot. \
-# http://pear.php.net/bugs/bug.php?id=5448 \
-grep -rl "${D}" ./{%{_bindir},%{php_pear_dir}}/* | xargs -r sed -i -e "s,${D},," \
%{!?_noautocompressdoc:%global _noautocompressdoc %{nil}}%{expand:%%global _noautocompressdoc %{_noautocompressdoc} optional-packages.txt} \
%{!?_noautoprov:%global _noautoprov %{nil}}%{expand:%%global _noautoprov %{_noautoprov} 'pear(tests/.*)'} \
%{nil}
%env_update [ ! -x /sbin/env-update ] || /sbin/env-update -u || :
-# vim:ts=4 sw=4 noet
+
+# 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 noting
+# - \\\\\\\ 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:%{?with_smp:smp} up}%{!?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 \
+ \
+ 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}{,smp}/%{-d*} \
+%{?-s:install -d %{ModprobeD}{,smp}} \
+ \
+for MODULE in {%{-m*},}; do \
+ [ -n "${MODULE}" ] || continue \
+ MNAME=${MODULE##*/} \
+ install ${MODULE}-%{?with_dist_kernel:up}%{!?with_dist_kernel:nondist}.ko \\\
+ %{KernelD}/%{-d*}/${MNAME}%{-s:-%{-s*}}.ko \
+ %{?-s:echo "alias ${MNAME} ${MNAME}-%{-s*}" \\\
+ >> %{ModprobeD}/%{-n*}.conf} \
+ %if %{with smp} && %{with dist_kernel} \
+ install ${MODULE}-smp.ko \\\
+ %{KernelD}smp/%{-d*}/${MNAME}%{-s:-%{-s*}}.ko \
+ %{?-s:echo "alias ${MNAME} ${MNAME}-%{-s*}" \\\
+ >> %{ModprobeD}smp/%{-n*}.conf} \
+ %endif \
+done \
+%{nil}
+
+# vim:ts=4 sw=4 noet syn=spec