%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.
%__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
# 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
%{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)
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 \
CFLAGS="${CFLAGS:-%rpmcflags}" \
CXXFLAGS="${CXXFLAGS:-%rpmcxxflags}" \
FFLAGS="${FFLAGS:-%rpmcflags}" \
- CPPFLAGS="${CPPFLAGS:-}" \
+ CPPFLAGS="${CPPFLAGS:-%rpmcppflags}" \
%{?__cc:CC="%{__cc}"} \
%{?__cxx:CXX="%{__cxx}"} \
libsuffix=%{_lib} \
CXXFLAGS="${CXXFLAGS:-%rpmcxxflags}" \
FFLAGS="${FFLAGS:-%rpmcflags}" \
FCFLAGS="${FCFLAGS:-%rpmcflags}" \
- CPPFLAGS="${CPPFLAGS:-}" \
+ CPPFLAGS="${CPPFLAGS:-%rpmcppflags}" \
%{?__cc:CC="%{__cc}"} \
%{?__cxx:CXX="%{__cxx}"} \
--host=%{_target_platform} \
%{nil}
# Location of autoconf macros
-%_aclocaldir %{expand:%%global _aclocaldir %(aclocal --print-ac-dir)}%_aclocaldir
+%_aclocaldir %{expand:%%global _aclocaldir %(aclocal --print-ac-dir || echo ERROR)}%_aclocaldir
# Location of omf files
-%_omf_dest_dir %{expand:%%global _omf_dest_dir %(scrollkeeper-config --omfdir)}%_omf_dest_dir
+%_omf_dest_dir %{expand:%%global _omf_dest_dir %(scrollkeeper-config --omfdir || echo ERROR)}%_omf_dest_dir
# Location of pkgconfig files
%_pkgconfigdir /usr/%{_lib}/pkgconfig
+# noarch pkgconfig files
+%_npkgconfigdir /usr/share/pkgconfig
# Location of desktop files
%_desktopdir /usr/share/applications
# 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
%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 ;
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"; \
#-----------------------------------------------------------------
# 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
###################################################################
# Requires/Provides automation
-# exceptions system by Jacek Konieczny <jajcus@pld.org.pl>
+# exceptions system by Jacek Konieczny <jajcus@pld-linux.org>
#
%__noautoreqfiles %(sed -e s'/#.*//' /etc/rpm/noautoreqfiles)%{?_noautoreqfiles: %{_noautoreqfiles}}
%__noautoprovfiles %(sed -e s'/#.*//' /etc/rpm/noautoprovfiles)%{?_noautoprovfiles: %{_noautoprovfiles}}
%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
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}
# /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
\
%{?-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}' \
\
# Author: Elan Ruusamäe <glen@pld-linux.org>
#
# Usage:
-# %post -p %add_etc_shells -p /bin/sh /bin/pdksh
-# %preun -p %remove_etc_shells -p /bin/sh /bin/pdksh
+# %post -p <lua>
+# %lua_add_etc_shells /bin/sh /bin/pdksh
+#
+# %preun -p <lua>
+# 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 <lua> as first line)
-%add_etc_shells(p) %{-p:<lua>}\
+%lua_add_etc_shells() \
t = {}\
f = io.open("/etc/shells", "r")\
if f then\
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 <glen@pld-linux.org>
+#
+# 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 <lua> as first line)
+#
+# Requirements:
+# BuildRequires: rpmbuild(macros) >= 1.429
+#
+%add_etc_shells(p) %{-p:<lua>}\
+%{expand:%%lua_add_etc_shells %*}\
+%{nil}
+
%remove_etc_shells(p) %{-p:<lua>}\
%{-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 <glen@pld-linux.org>
+# Author: Arkadiusz Miśkiewicz <arekm@pld-linux.org>
+#
+# 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