X-Git-Url: http://git.pld-linux.org/?a=blobdiff_plain;f=rpm.macros;h=ce3242d781d54f3cb07fa56b52613810fa30371f;hb=f05db907224f42389137e50fcb68c20ff0a5981a;hp=3ee14dee727d62aff9f09120ce3e79bb33439bca;hpb=742f3bc4c482c5e7fe8aeba1a8b66802d1da312c;p=packages%2Frpm.git diff --git a/rpm.macros b/rpm.macros index 3ee14de..ce3242d 100644 --- a/rpm.macros +++ b/rpm.macros @@ -8,6 +8,10 @@ %kgcc %{__cc} %kgcc_package gcc +# compiler version +%cc_version %{expand:%%global cc_version %(%{__cc} -dumpversion || echo ERROR)}%cc_version +%cxx_version %{expand:%%global cxx_version %(%{__cxx} -dumpversion || echo ERROR)}%cxx_version + %__rm /bin/rm --interactive=never # Build system path macros. @@ -32,7 +36,7 @@ %__gnome_doc_prepare gnome-doc-prepare --copy --force %__gtkdocize gtkdocize --copy %__intltoolize intltoolize --copy --force -%__libtoolize libtoolize --copy --force +%__libtoolize libtoolize --copy --force --install # Path to top of build area. %_topdir %{expand:%%global _topdir %(test -d ../SPECS -a -d ../SOURCES && (cd ..; pwd) || echo $HOME/rpm)}%_topdir @@ -65,6 +69,7 @@ # Flags specified in %filterout_* are removed from %rpm*flags, exactly: # %rpmcflags = %optflags - %filterout - %filterout_c - %filterout_ld # %rpmcxxflags = %optflags - %filterout - %filterout_cxx - %filterout_ld +# %rpmcppflags = %optcppflags - %filterout - %filterout_cpp - %filterout_ld # %rpmldflags = %optldflags - %filterout_ld # # Regular expressions are supported, but to avoid some character be treated @@ -90,6 +95,12 @@ %{filter_out} }') +%rpmcppflags %(awk 'BEGIN { + split("%{?debug:%debugcppflags}%{!?debug:%optcppflags}%{?debuginfocppflags}",I); + split("%{?filterout} %{?filterout_cpp} %{?filterout_cpp}",F); + %{filter_out} +}') + %rpmldflags %(awk 'BEGIN { split("%{?optldflags}",I); split("%{?filterout_ld}",F) @@ -118,7 +129,7 @@ CXXFLAGS="${CXXFLAGS:-%rpmcxxflags}" ; export CXXFLAGS ; \ FFLAGS="${FFLAGS:-%rpmcflags}" ; export FFLAGS ; \ FCFLAGS="${FCFLAGS:-%rpmcflags}" ; export FCFLAGS ; \ - CPPFLAGS="${CPPFLAGS:-}" ; export CPPFLAGS ; \ + CPPFLAGS="${CPPFLAGS:-%rpmcppflags}" ; export CPPFLAGS ; \ %{?__cc:CC="%{__cc}" ; export CC ; } \ %{?__cxx:CXX="%{__cxx}" ; export CXX ; } \ %{?configuredir:%{configuredir}}%{!?configuredir:.}/configure \ @@ -158,7 +169,7 @@ CXXFLAGS="%{rpmcxxflags}" \ CFLAGS="${CFLAGS:-%rpmcflags}" \ CXXFLAGS="${CXXFLAGS:-%rpmcxxflags}" \ FFLAGS="${FFLAGS:-%rpmcflags}" \ - CPPFLAGS="${CPPFLAGS:-}" \ + CPPFLAGS="${CPPFLAGS:-%rpmcppflags}" \ %{?__cc:CC="%{__cc}"} \ %{?__cxx:CXX="%{__cxx}"} \ libsuffix=%{_lib} \ @@ -187,7 +198,7 @@ CXXFLAGS="%{rpmcxxflags}" \ CXXFLAGS="${CXXFLAGS:-%rpmcxxflags}" \ FFLAGS="${FFLAGS:-%rpmcflags}" \ FCFLAGS="${FCFLAGS:-%rpmcflags}" \ - CPPFLAGS="${CPPFLAGS:-}" \ + CPPFLAGS="${CPPFLAGS:-%rpmcppflags}" \ %{?__cc:CC="%{__cc}"} \ %{?__cxx:CXX="%{__cxx}"} \ --host=%{_target_platform} \ @@ -226,6 +237,8 @@ CXXFLAGS="%{rpmcxxflags}" \ # Location of pkgconfig files %_pkgconfigdir /usr/%{_lib}/pkgconfig +# noarch pkgconfig files +%_npkgconfigdir /usr/share/pkgconfig # Location of desktop files %_desktopdir /usr/share/applications @@ -252,9 +265,6 @@ CXXFLAGS="%{rpmcxxflags}" \ # Current date %date %(LC_ALL="C" date +"%a %b %d %Y") -# tmp directory -%tmpdir %{expand:%%global tmpdir %{lua:print(os.getenv("TMPDIR") or "/tmp")}}%{tmpdir} - # Example files, programs, scripts... %_examplesdir /usr/src/examples @@ -284,12 +294,20 @@ CXXFLAGS="%{rpmcxxflags}" \ %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 %(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_ver +%__kernel_ver %{expand:%%global __kernel_ver %( \\ + Z=$(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 + %__kernel_rel %{expand:%%global __kernel_rel %(Z=$(LC_ALL=C rpm -qf %{_kernelsrcdir}/include/linux/fs.h 2>/dev/null --qf "%{R}" | grep -v "is not"); echo ${Z:-ERROR})}%__kernel_rel %__kernel_rpmvr %{expand:%%global __kernel_rpmvr %(Z=$(LC_ALL=C rpm -qf %{_kernelsrcdir}/include/linux/fs.h 2>/dev/null --qf "%{V}-%{R}" | grep -v "is not"); echo ${Z:-ERROR})}%__kernel_rpmvr %_kernel_ver %{expand:%%global _kernel_ver %{__kernel_ver}%{?with_dist_kernel:%(echo %{__kernel_ver} | grep -q -e - || echo -%{__kernel_rel})}}%_kernel_ver %_kernel_ver_str %{expand:%%global _kernel_ver_str %(echo %{!?_without_dist_kernel:%{__kernel_rpmvr}}%{?_without_dist_kernel:%{__kernel_ver}} | sed -e 's/-/_/g')}%_kernel_ver_str +# `uname -r` to be used in @release field +%_kernel_vermagic %{expand:%%global _kernel_vermagic %(echo %{_kernel_ver} | sed -e 's/-/_/g')}%_kernel_vermagic + # sgml macros %xmlcat_add() /usr/bin/xmlcatalog --noout --add nextCatalog \"\" %1 /etc/xml/catalog ; %xmlcat_del() /usr/bin/xmlcatalog --noout --del %1 /etc/xml/catalog ; @@ -443,8 +461,16 @@ if [ -d "$RPM_BUILD_ROOT" ]; then \ while read file; do \ rpath= ; \ chmod u+w "$file"; \ - for dir in `chrpath -l "$file" | \ - awk '/RPATH=/ { gsub(/.*RPATH=/,""); gsub(/:/," "); print $0 }'` ; do \ + for dir in $(chrpath -l "$file" | awk '/RPATH=/ { gsub(/.*RPATH=/,""); gsub(/:/," "); print $0 }'); do \ + case $dir in \ + '$ORIGIN' ) \ + if [ "$rpath" = "" ] ; then rpath="$dir" ; \ + else rpath="$rpath:$dir" ; fi ; \ + continue ; \ + ;; \ + esac ; \ + newdir=$(readlink -m "$dir"); \ + [ ${#newdir} -le ${#dir} ] && dir=$newdir; \ case $dir in \ /home/* | /tmp/* | /usr/lib | /usr/lib64 | /lib | /lib64 | /usr/local/lib | /usr/local/lib64 | /usr/X11R6/lib | /usr/X11R6/lib64 ) \ echo "remove-rpath: $dir in $file"; \ @@ -507,36 +533,36 @@ fi; \ #----------------------------------------------------------------- # Update desktop MIME database # requires: desktop-file-utils -# -%update_desktop_database_post() \ +%update_desktop_database() {{ \ umask 022; \ /usr/bin/update-desktop-database -q; \ -%{nil} +}}%{nil} -%update_desktop_database_postun() \ +%update_desktop_database_post %update_desktop_database + +%update_desktop_database_postun() {{ \ if [ "$1" = "0" ]; then \ - umask 022; \ - /usr/bin/update-desktop-database -q; \ + %update_desktop_database; \ fi; \ -%{nil} +}}%{nil} #----------------------------------------------------------------- # Update shared MIME info database # requires: shared-mime-info # -%update_mime_database() \ +%update_mime_database() {{ \ umask 022; \ /usr/bin/update-mime-database %{_datadir}/mime; \ -%{nil} +}}%{nil} #----------------------------------------------------------------- # Update icon cache # requires: gtk+ # -%update_icon_cache() \ +%update_icon_cache() {{ \ umask 022; \ /usr/bin/gtk-update-icon-cache -qf %{_datadir}/icons/%1; \ -%{nil} +}}%{nil} #----------------------------------------------------------------- # Update scrollkeeper database @@ -561,7 +587,7 @@ fi; \ ################################################################### # Requires/Provides automation -# exceptions system by Jacek Konieczny +# exceptions system by Jacek Konieczny # %__noautoreqfiles %(sed -e s'/#.*//' /etc/rpm/noautoreqfiles)%{?_noautoreqfiles: %{_noautoreqfiles}} %__noautoprovfiles %(sed -e s'/#.*//' /etc/rpm/noautoprovfiles)%{?_noautoprovfiles: %{_noautoprovfiles}} @@ -607,6 +633,7 @@ fi; \ %ruby_mod_ver_requires_eq Requires: ruby-modules(ver) = %ruby_version %php_pear_dir /usr/share/pear +%php_data_dir /usr/share/php %php_extensiondir %{expand:%%global php_extensiondir %(php-config --extension-dir 2>/dev/null || echo ERROR)}%php_extensiondir %php_sysconfdir %{expand:%%global php_sysconfdir %(php-config --sysconfdir 2>/dev/null || echo ERROR)}%php_sysconfdir %php_includedir %{expand:%%global php_includedir %(php-config --include-dir 2>/dev/null || echo ERROR)}%php_includedir @@ -663,31 +690,50 @@ if [ -f /etc/rc.d/init.d/php-fcgi ]; then \ fi \ %{nil} - # X.org helper macros -%__xorg_abi_requires() Requires: xorg-xserver-server(%{expand:%1}-abi) = %{expand:%{%{!?2:%{1}}%{?2}}} -# +%__xorg_abi_requires_ge() Requires: xorg-xserver-server(%{expand:%1}-abi) >= %{expand:%{%2}} +%__xorg_abi_requires_lt() Requires: xorg-xserver-server(%{expand:%1}-abi) < %(awk -vv=%{expand:%{%2}} 'BEGIN{split(v, a, "."); printf("%s.0", a[1] + 1); exit}') + %xorg_xserver_ansic_abi %{expand:%%global xorg_xserver_ansic_abi %(awk '/#define ABI_ANSIC_VERSION/ { split($0,A,/[(,)]/); printf("%d.%d",A[2], A[3]); }' /usr/include/xorg/xf86Module.h 2> /dev/null || echo ERROR)}%xorg_xserver_ansic_abi %xorg_xserver_extension_abi %{expand:%%global xorg_xserver_extension_abi %(awk '/#define ABI_EXTENSION_VERSION/ { split($0,A,/[(,)]/); printf("%d.%d",A[2], A[3]); }' /usr/include/xorg/xf86Module.h 2> /dev/null || echo ERROR)}%xorg_xserver_extension_abi %xorg_xserver_font_abi %{expand:%%global xorg_xserver_font_abi %(awk '/#define ABI_FONT_VERSION/ { split($0,A,/[(,)]/); printf("%d.%d",A[2], A[3]); }' /usr/include/xorg/xf86Module.h 2> /dev/null | echo ERROR)}%xorg_xserver_font_abi %xorg_xserver_videodrv_abi %{expand:%%global xorg_xserver_videodrv_abi %(awk '/#define ABI_VIDEODRV_VERSION/ { split($0,A,/[(,)]/); printf("%d.%d",A[2], A[3]); }' /usr/include/xorg/xf86Module.h 2> /dev/null || echo ERROR)}%xorg_xserver_videodrv_abi %xorg_xserver_xinput_abi %{expand:%%global xorg_xserver_xinput_abi %(awk '/#define ABI_XINPUT_VERSION/ { split($0,A,/[(,)]/); printf("%d.%d",A[2], A[3]); }' /usr/include/xorg/xf86Module.h 2> /dev/null || echo ERROR)}%xorg_xserver_xinput_abi -%requires_xorg_xserver_extension %{__xorg_abi_requires ansic xorg_xserver_ansic_abi} \ -%{__xorg_abi_requires extension xorg_xserver_extension_abi} -%requires_xorg_xserver_xinput %{__xorg_abi_requires ansic xorg_xserver_ansic_abi} \ -%{__xorg_abi_requires xinput xorg_xserver_xinput_abi} -%requires_xorg_xserver_font %{__xorg_abi_requires ansic xorg_xserver_ansic_abi} \ -%{__xorg_abi_requires font xorg_xserver_font_abi} -%requires_xorg_xserver_videodrv %{__xorg_abi_requires ansic xorg_xserver_ansic_abi} \ -%{__xorg_abi_requires videodrv xorg_xserver_videodrv_abi} +%requires_xorg_xserver_extension \ +%{__xorg_abi_requires_ge ansic xorg_xserver_ansic_abi} \ +%{__xorg_abi_requires_lt ansic xorg_xserver_ansic_abi} \ +%{__xorg_abi_requires_ge extension xorg_xserver_extension_abi} \ +%{__xorg_abi_requires_lt extension xorg_xserver_extension_abi} \ +%{nil} + +%requires_xorg_xserver_xinput \ +%{__xorg_abi_requires_ge ansic xorg_xserver_ansic_abi} \ +%{__xorg_abi_requires_lt ansic xorg_xserver_ansic_abi} \ +%{__xorg_abi_requires_ge xinput xorg_xserver_xinput_abi} \ +%{__xorg_abi_requires_lt xinput xorg_xserver_xinput_abi} \ +%{nil} + +%requires_xorg_xserver_font \ +%{__xorg_abi_requires_ge ansic xorg_xserver_ansic_abi} \ +%{__xorg_abi_requires_lt ansic xorg_xserver_ansic_abi} \ +%{__xorg_abi_requires_ge font xorg_xserver_font_abi} \ +%{__xorg_abi_requires_lt font xorg_xserver_font_abi} \ +%{nil} + +%requires_xorg_xserver_videodrv \ +%{__xorg_abi_requires_ge ansic xorg_xserver_ansic_abi} \ +%{__xorg_abi_requires_lt ansic xorg_xserver_ansic_abi} \ +%{__xorg_abi_requires_ge videodrv xorg_xserver_videodrv_abi} \ +%{__xorg_abi_requires_lt videodrv xorg_xserver_videodrv_abi} \ +%{nil} # Python specific macro definitions. # python main version -%py_ver %{expand:%%global py_ver %(%{__python} -c "import sys; print sys.version[:3]" || echo ERROR)}%py_ver +%py_ver %{expand:%%global py_ver %(%{__python} -c "import sys; print sys.version[:3]" 2>/dev/null || echo ERROR)}%py_ver # directories -%py_prefix %{expand:%%global py_prefix %(%{__python} -c "import sys; print sys.prefix" || echo ERROR)}%py_prefix +%py_prefix %{expand:%%global py_prefix %(%{__python} -c "import sys; print sys.prefix" 2>/dev/null || echo ERROR)}%py_prefix %py_libdir %{py_prefix}/%{_lib}/python%{py_ver} %py_scriptdir %{py_prefix}/share/python%{py_ver} %py_incdir /usr/include/python%{py_ver} @@ -916,11 +962,17 @@ fi \ # /etc/sysconfig/rpm or per service /etc/sysconfig/SERVICE file. # # Usage: -# %service [-q] SERVICE ACTION ["SERVICE NICE DESCRIPTION"] +# %service [-q] [-n] SERVICE ACTION ["SERVICE NICE DESCRIPTION"] # # -q be silent when service isn't started (for scriplets restaring other package's services) +# -n NOOP mode, do not actually restart service # -%service(q) {{%(export quiet=%{-q:1}; /usr/lib/rpm/service_generator.sh %{*}) };} +# Requirements: +# BuildRequires: rpmbuild(macros) >= 1.268 +# Requires: rc-scripts +# -n option: +# BuildRequires: rpmbuild(macros) >= 1.450 +%service(qn) {{%(export noop=%{-n:1} quiet=%{-q:1}; /usr/lib/rpm/service_generator.sh %{*}) };} # Java macros. based on jpackage macros.java @@ -1235,7 +1287,8 @@ done \ \ %{?-C:cd %{-C*}} \ compile() { \ - L="<"; [[ '%{*}' != *$L$L* ]] || PATCH_SH="set -x -e;$(cat)" \ + local L="<" PATCH_SH; \ + [[ '%{*}' != *$L$L* ]] || PATCH_SH="set -x -e;$(cat)" \ set -e -x \ local cfgs='%{?with_dist_kernel:%{?with_smp: smp}%{?with_up: up}}%{!?with_dist_kernel: nondist}' \ \ @@ -1401,12 +1454,19 @@ done \ # Author: Elan Ruusamäe # # Usage: -# %post -p %add_etc_shells -p /bin/sh /bin/pdksh -# %preun -p %remove_etc_shells -p /bin/sh /bin/pdksh +# %post -p +# %lua_add_etc_shells /bin/sh /bin/pdksh +# +# %preun -p +# if arg[2] == 0 then +# %lua_remove_etc_shells /bin/bash /bin/rbash +# end +# +# Requirements: +# BuildRequires: rpmbuild(macros) >= 1.462 # -# -p (optional) -- specifies that result is embeded %post script (prepends as first line) -%add_etc_shells(p) %{-p:}\ +%lua_add_etc_shells() \ t = {}\ f = io.open("/etc/shells", "r")\ if f then\ @@ -1421,24 +1481,83 @@ for _, s in ipairs({%{expand:%%__lua_split %*}}) do\ end\ %{nil} +%lua_remove_etc_shells() \ +t = {}\ +f = io.open("/etc/shells", "r")\ +if f then\ + for l in f:lines() do t[l]=l; end\ + f:close()\ +end\ +for _, l in pairs({%{expand:%%__lua_split %*}}) do\ + print("Removing "..l.." from /etc/shells")\ + t[l] = nil\ +end\ +s=""\ +for _, l in pairs(t) do\ + s=s..l.."\\n"\ +end\ +io.open("/etc/shells", "w"):write(s)\ +%{nil} + +# Backwards compat. Use of %lua_ prefixed macros is preferred as these are cleaner to read. +# +# Author: Elan Ruusamäe +# +# Usage: +# %post -p %add_etc_shells -p /bin/sh /bin/pdksh +# %preun -p %remove_etc_shells -p /bin/sh /bin/pdksh +# +# -p (optional) -- specifies that result is embeded %post script (prepends as first line) +# +# Requirements: +# BuildRequires: rpmbuild(macros) >= 1.429 +# +%add_etc_shells(p) %{-p:}\ +%{expand:%%lua_add_etc_shells %*}\ +%{nil} + %remove_etc_shells(p) %{-p:}\ %{-p:if arg[2] == 0 then}\ - t = {}\ - f = io.open("/etc/shells", "r")\ - if f then\ - for l in f:lines() do t[l]=l; end\ - f:close()\ - end\ - for _, l in pairs({%{expand:%%__lua_split %*}}) do\ - print("Removing "..l.." from /etc/shells")\ - t[l] = nil\ - end\ - s=""\ - for _, l in pairs(t) do\ - s=s..l.."\\n"\ - end\ - io.open("/etc/shells", "w"):write(s)\ +%{expand:%%lua_remove_etc_shells %*}\ %{-p:end} \ %{nil} +# Check syntax for Python files +# +# Author: Elan Ruusamäe +# Author: Arkadiusz Miśkiewicz +# +# Usage: +# %py_lint src +# +# Requirements: +# BuildRequires: python +# BuildRequires: rpmbuild(macros) >= 1.469 + +%py_lint() \ +__py_lint() { \ +find "$@" -type f -name '*.py' | python -c ' \ +import sys \ +import compiler \ +\ +err = 0\ +for f in sys.stdin: \ + fd = open(f.strip()) \ + c = fd.read() \ + fd.close() \ + try: \ + compiler.parse(c) \ + except SyntaxError, e: \ + print "py_lint: %s: %s" % (f.strip(), e) \ + err = err + 1\ +\ +if err: \ + print >> sys.stderr, "\\npy_lint: ERROR: Syntax errors in %d files.\\n" % err \ + sys.exit(1) \ +else: \ + print >> sys.stderr, "py_lint: Found no syntax errors." \ +' \ +}; __py_lint %* \ +%{nil} + # vim:ts=4 sw=4 noet syn=spec