X-Git-Url: http://git.pld-linux.org/?a=blobdiff_plain;f=rpm.macros;h=3dfbcc14043d5fd876fa7c1f80984036567db8a6;hb=247445a9899779f20b6168a4572e4f7eeae829fb;hp=a6fe92876782338015b9eee2090b6505b9a02767;hpb=a4f06f467596f8194ade8f66a9bebb0b33984ea4;p=packages%2Frpm.git diff --git a/rpm.macros b/rpm.macros index a6fe928..3dfbcc1 100644 --- a/rpm.macros +++ b/rpm.macros @@ -91,6 +91,20 @@ fi; \ %{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; \ @@ -128,6 +142,18 @@ CXXFLAGS="%{rpmcxxflags}" \ cmake \ } +# waf. see waf.spec +# override __waf to add -j1 in your ~/.rpmmacros +%__waf /usr/bin/waf +%waf { \ +CC="%{__cc}" \ +CXX="%{__cxx}" \ +CPP="%{__cpp}" \ +CFLAGS="%{rpmcflags}" \ +CXXFLAGS="%{rpmcxxflags}" \ +%{__waf} \ +} + #---------------------------------------------------------------- %global configure_cache 0 %configure_cache_file %{buildroot}.configure.cache @@ -655,8 +681,8 @@ fi \ 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 # # Usage: # %useradd [-P package] [-u uid] [-d home_dir] [-s shell] [-c comment] @@ -719,10 +745,11 @@ else \ [ ! -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 # -# 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. @@ -788,6 +815,7 @@ fi \ %{nil} # webapp macros +# Author: Elan Ruusamäe # # The config is installed/removed inside trigger, this means that you can any # time install apache1/apache/lighttpd package and the configuration file is @@ -825,7 +853,7 @@ fi \ %{nil} # see browser-plugins.spec / template-browser-plugin.spec -# written by glen@pld-linux.org. +# Author: Elan Ruusamäe %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 \ @@ -851,14 +879,12 @@ if [ "$1" = "0" ] || [ "$2" = "0" ]; then \ } # service macro. +# Author: Elan Ruusamäe # # 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"] # @@ -926,16 +952,15 @@ set_options $BASE_OPTIONS\ 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 # # 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 @@ -951,36 +976,51 @@ EOF # 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} @@ -1046,4 +1086,139 @@ done \ %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 +# +# Usage: +# %build_kernel_modules -m -C +# +# remember that proper Makefile is still required +# Options: +# -m (required) -- comma-separated list of modules to save, +# without .ko extension, may be placed in subdirectory +# -C -- change to before doing anything +# -p , -P -- arguments passeed to make scripts +# -c -- do not execute make clean +# -- 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 +# +# Usage: +# %install_kernel_modules -m -d +# +# Options: +# -m (required) -- comma-separated list of modules to install, +# without .ko extension, may be placed in subdirectory +# -d (required) -- in what subdirectory modules should be +# installed (eg. misc, kernel/drivers/net) +# -s -- suffix to use when installing modules, useful when module +# with same name exists in kernel already +# -n -- 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