%{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
if [ -d "$RPM_BUILD_ROOT" ]; then \
echo "Strip executable binaries, archives and shared object files."; \
filelist=`find $RPM_BUILD_ROOT -type f ! -regex ".*ld-[0-9.]*so.*" ! -regex ".*/usr/lib[0-9]*/debug/.*\.debug" %{?_noautostrip:! -regex "%{_noautostrip}"}`; \
- elfexelist=`echo $filelist | xargs -r file | \
- awk '/ELF.*executable/ {print $1}' | cut -d: -f1`; \
- elfsharedlist=`echo $filelist | xargs -r file | \
- awk '/LF.*shared object/ {print $1}' | cut -d: -f1`; \
- elfarchiveslist=`echo $filelist | xargs -r file | \
- awk '/current ar archive/ {print $1}' | cut -d: -f1`; \
+ printf "Considering %d files\n" $(echo "$filelist" | wc -l); \
+ filetypes=`echo $filelist | xargs -r file` \
+ elfexelist=`echo "$filetypes" | awk '/ELF.*executable/ {print $1}' | cut -d: -f1`; \
+ elfsharedlist=`echo "$filetypes" | awk '/LF.*shared object/ {print $1}' | cut -d: -f1`; \
+ archiveslist=`echo "$filetypes" | awk '/current ar archive/ {print $1}' | cut -d: -f1`; \
if [ -n "$elfexelist" ]; then \
+ printf "Stripping %d ELF executables..." $(echo "$elfexelist" | wc -l); \
chmod u+w $elfexelist; \
%{__strip} --remove-section=.note --remove-section=.comment $elfexelist; \
+ echo "DONE"; \
fi; \
if [ -n "$elfsharedlist" ]; then \
+ printf "Stripping %d ELF shared libraries..." $(echo "$elfsharedlist" | wc -l); \
chmod u+w $elfsharedlist; \
%{__strip} --strip-unneeded --remove-section=.note --remove-section=.comment $elfsharedlist; \
+ echo "DONE"; \
fi; \
- if [ -n "$elfarchiveslist" ]; then \
- chmod u+w $elfarchiveslist; \
- %{__strip} --strip-debug --remove-section=.note --remove-section=.comment $elfarchiveslist; \
+ if [ -n "$archiveslist" ]; then \
+ printf "Stripping %d ar archives..." $(echo "$elfsharedlist" | wc -l); \
+ chmod u+w $archiveslist; \
+ %{__strip} --strip-debug --remove-section=.note --remove-section=.comment $archiveslist; \
+ echo "DONE"; \
fi; \
fi; }; __spec_install_post_strip } } }
#%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
# 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"]
#
EOF
# PEAR install macros
-# Author: glen@pld-linux.org.
+# Author: Elan Ruusamäe <glen@pld-linux.org>
#
# Usage:
# %%pear_package_setup [-a #] [-n FMT]
# as it's displayed to user after package install. and adding additional gzip
# dep is just waste ;)
%pear_package_setup(a:n:z) \
-%srcdir %{-n*}%{!-n:%{_pearname}-%{version}} \
-%builddir %{_builddir}/%{srcdir} \
+%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} \
%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 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 \
+%ifarch ppc ppc64 \
+ install -d o/include/asm \
+ [ ! -d %{_kernelsrcdir}/include/asm-powerpc ] || ln -sf %{_kernelsrcdir}/include/asm-powerpc/* o/include/asm \
+ [ ! -d %{_kernelsrcdir}/include/asm-%{_target_base_arch} ] || ln -snf %{_kernelsrcdir}/include/asm-%{_target_base_arch}/* 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}{,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}
+
+# 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=$((%1 + $base));
+ end=$((%{?2}%{!?2:%{1}} + $base));
+ # 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=$((%1 + $base));
+ end=$((%{?2}%{!?2:%{1}} + $base));
+ echo ": patchset_patch %1%{?2: to %2}";
+ seq -f 'patch%g %{-p*:-p%{-p*}}' $start $end | sed -e s,^,%%,;
+) %{nil}
+
# vim:ts=4 sw=4 noet syn=spec