%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
+%cc_version %{expand:%%global cc_version %(%{__cc} -dumpversion 2>/dev/null || echo 0.0)}%cc_version
+%cxx_version %{expand:%%global cxx_version %(%{__cxx} -dumpversion 2>/dev/null || echo 0.0)}%cxx_version
%__rm /bin/rm --interactive=never
%{?__cc:CC="%{__cc}"} \\\
%{?__cxx:CXX="%{__cxx}"} \\\
CPPFLAGS="${CPPFLAGS:-%{rpmcppflags}}" \\\
-CFLAGS="${CFLAGS:-%{rpmcflags}}" \\\
-FFLAGS="${FFLAGS:-%{rpmcflags}}" \\\
-FCFLAGS="${FCFLAGS:-%{rpmcflags}}" \\\
-CXXFLAGS="${CXXFLAGS:-%{rpmcxxflags}}" \\\
-LDFLAGS="${LDFLAGS:-%{rpmldflags}}" \\\
%{__cmake} \\\
-DCMAKE_VERBOSE_MAKEFILE=ON \\\
- -DCMAKE_BUILD_TYPE=%{!?debug:Release}%{?debug:Debug} \\\
+ -DCMAKE_BUILD_TYPE=%{!?debug:PLD}%{?debug:Debug} \\\
-DCMAKE_INSTALL_LIBDIR:PATH=%{_libdir} \\\
-DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} \\\
-DINCLUDE_INSTALL_DIR:PATH=%{_includedir} \\\
-DLIB_INSTALL_DIR:PATH=%{_libdir} \\\
-DSHARE_INSTALL_PREFIX:PATH=%{_datadir} \\\
-DSYSCONF_INSTALL_DIR:PATH=%{_sysconfdir} \\\
+ -DCMAKE_CXX_FLAGS_PLD="${CXXFLAGS:-%{rpmcxxflags} -DNDEBUG}" \\\
+ -DCMAKE_C_FLAGS_PLD="${CFLAGS:-%{rpmcflags} -DNDEBUG}" \\\
+ -DCMAKE_Fortran_FLAGS_PLD="${CFLAGS:-%{rpmcflags} -DNDEBUG}" \\\
+ -DCMAKE_EXE_LINKER_FLAGS_PLD="${LDFLAGS:-%{rpmldflags}}" \\\
+ -DCMAKE_SHARED_LINKER_FLAGS_PLD="${LDFLAGS:-%{rpmldflags}}" \\\
+ -DCMAKE_MODULE_LINKER_FLAGS_PLD="${LDFLAGS:-%{rpmldflags}}" \\\
%if "%{_lib}" == "lib64" \
-DLIB_SUFFIX=64 \\\
%endif \
#%no_install_post_compress_docs 1
%__spec_install_post_compress_docs { \
%{!?no_install_post_compress_docs:__spec_install_post_compress_docs() { \
+ %{!?debug:set +x;} \
for i in /usr/share/man /usr/X11R6/man; do \
if [ -d "$RPM_BUILD_ROOT$i" ]; then \
echo "Compress man pages: $i"; \
find "$RPM_BUILD_ROOT$i" -name '*.bz2' -print | xargs -r %{__bzip2} -df; \
find "$RPM_BUILD_ROOT$i" -name '*.gz' -print | xargs -r %{__gzip} -dnf; \
find $RPM_BUILD_ROOT$i -type l | while read a; do \
- m=$(readlink $a); \
+ m=$(readlink "$a"); \
+ if [[ "$m" = */* ]]; then \
+ # handle links to different man section \
+ l=$(readlink -f "$a"); \
+ # full/relative paths that resolve symlink \
+ l=${l#$RPM_BUILD_ROOT/usr/share/man/}; \
+ l=${l#$RPM_BUILD_ROOT/usr/X11R6/man/}; \
+ # full paths that do not resolve symlink \
+ l=${l#/usr/share/man/}; \
+ l=${l#/usr/X11R6/man/}; \
+ else \
+ l=$m; \
+ fi; \
rm -f $a; \
- echo .so ${m##*/} > $a; \
- echo >&2 "Converted ${a#$RPM_BUILD_ROOT} from symlink to man link: ${m##*/}"; \
+ echo ".so $l" > $a; \
+ echo >&2 "Converted ${a#$RPM_BUILD_ROOT} from symlink to man link: $l"; \
done; \
find "$RPM_BUILD_ROOT$i" -type f -size +%{_min_compress_bytes}c -print | xargs -r %{__gzip} -9nf; \
fi; \
#
%__spec_install_post_strip {%{!?debug: \
%{!?no_install_post_strip:__spec_install_post_strip() { \
+%{!?debug:set +x;} \
if [ -d "$RPM_BUILD_ROOT" ]; then \
if [ -d $RPM_BUILD_ROOT/lib/modules ]; then \
modulelist=$(find $RPM_BUILD_ROOT/lib/modules -name '*o' -type f -print); \
modulecount=$(echo "$modulelist" | wc -l); \
printf "Stripping %d kernel modules..." $modulecount; \
echo "$modulelist" | xargs -l512 chmod u+w; \
- echo "$modulelist" | xargs -l512 %{__strip} --strip-unneeded --remove-section=.comment --remove-section=.note.GNU-stack; \
+ echo "$modulelist" | xargs -l512 %{__strip} -g --remove-section=.comment --remove-section=.note.GNU-stack; \
echo "DONE"; \
fi; \
fi; \
archiveslist=`echo "$filetypes" | awk -F: '/current ar archive/ {print $1}'`; \
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 "$elfexelist" | xargs -r -d'\n' chmod u+w; \
+ echo "$elfexelist" | xargs -r -d'\n' %{__strip} --remove-section=.note --remove-section=.comment; \
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 "$elfsharedlist" | xargs -r -d'\n' chmod u+w; \
+ echo "$elfsharedlist" | xargs -r -d'\n' %{__strip} --strip-unneeded --remove-section=.note --remove-section=.comment; \
echo "DONE"; \
fi; \
if [ -n "$archiveslist" ]; then \
printf "Stripping %d ar archives..." $(echo "$archiveslist" | wc -l); \
- chmod u+w $archiveslist; \
- %{__strip} --strip-debug --remove-section=.note --remove-section=.comment $archiveslist; \
+ echo "$archiveslist" | xargs -r -d'\n' chmod u+w; \
+ echo "$archiveslist" | xargs -r -d'\n' %{__strip} --strip-debug --remove-section=.note --remove-section=.comment; \
echo "DONE"; \
fi; \
fi; \
#
%__spec_install_post_chrpath {%{!?debug: \
%{!?no_install_post_chrpath: __spec_install_post_chrpath() { \
+%{!?debug:set +x;} \
if [ -d "$RPM_BUILD_ROOT" ]; then \
files=`find $RPM_BUILD_ROOT -type f ! -regex ".*ld-[0-9.]*so.*" ! -regex ".*/usr/lib[0-9]*/debug/.*" ! -regex ".*/lib/modules/.*" ! -regex ".*%{_docdir}/.*" ! -regex ".*%{_includedir}/.*" %{?_noautochrpath:! -regex "%{_noautochrpath}"}`; \
if [ -n "$files" ]; then \
# %define skip_post_check_so libwithoutfoo.so.* libwithoutbar.so.*
#
%__spec_install_post_check_so { \
- __spec_install_post_check_so() { \
- fail=0; \
- printf "Searching for shared objects with unresolved symbols..."; \
- for f in $(find $RPM_BUILD_ROOT -type f -name '*.so.*' -print); do \
- LC_ALL=C objdump -T $f 2> /dev/null | LC_ALL=C awk -v "file=$f" 'BEGIN { found=0; skip["program_name"]=1; symbols = "" } /^[0-9a-z]+ +D +\*UND\*/ { if ($NF in skip) { next; }; found = 1; symbols = symbols "\n\t" $NF } END { if (found) { print "\nUnresolved symbols found in: " file symbols; %{?skip_post_check_so:split("%{skip_post_check_so}", R); for (i=1; i in R; i++) { if (file ~ "(^|/)" R[i] "$") { print "Library marked with skip_post_check_so, ignoring errors.\n"; exit(0); } } } exit(1); } } ' || fail=1 ; \
- done ; \
- echo " DONE"; \
- %{!?no_install_post_check_so:return $fail;} \
+__spec_install_post_check_so() { \
+%{!?debug:set +x;} \
+ fail=0; \
+ printf "Searching for shared objects with unresolved symbols..."; \
+ for f in $(find $RPM_BUILD_ROOT -type f -name '*.so.*' -print); do \
+ LC_ALL=C objdump -T $f 2> /dev/null | LC_ALL=C awk -v "file=$f" 'BEGIN { found=0; skip["program_name"]=1; symbols = "" } /^[0-9a-z]+ +D +\*UND\*/ { if ($NF in skip) { next; }; found = 1; symbols = symbols "\n\t" $NF } END { if (found) { print "\nUnresolved symbols found in: " file symbols; %{?skip_post_check_so:split("%{skip_post_check_so}", R); for (i=1; i in R; i++) { if (file ~ "(^|/)" R[i] "$") { print "Library marked with skip_post_check_so, ignoring errors.\n"; exit(0); } } } exit(1); } } ' || fail=1 ; \
+ done ; \
+ echo " DONE"; \
+ %{!?no_install_post_check_so:return $fail;} \
}; __spec_install_post_check_so }}
#-----------------------------------------------------------------
#%no_install_post_compress_modules 1
%__spec_install_post_compress_modules { \
%{!?no_install_post_compress_modules: __spec_install_post_compress_modules() { \
+%{!?debug:set +x;} \
if [ -d $RPM_BUILD_ROOT/lib/modules ]; then \
q=$(find $RPM_BUILD_ROOT/lib/modules -name '*o' -type f -print); \
if [ "$q" ]; then \
#-----------------------------------------------------------------
# Update icon cache
-# requires: gtk+
+# BuildRequires: rpmbuild(macros) >= 1.596
+# Requires: hicolor-icon-theme
#
%update_icon_cache() {{ \
- umask 022; \
- /usr/bin/gtk-update-icon-cache -qf %{_datadir}/icons/%1; \
+ %{!?1:%{error:%{0}: Required theme name missing}} \
+ if [ -x /usr/bin/gtk-update-icon-cache ]; then \
+ umask 022; \
+ touch --no-create %{_iconsdir}/%1; \
+ /usr/bin/gtk-update-icon-cache -qf %{_iconsdir}/%1; \
+ fi; \
};} \
%{nil}
fi; \
%{nil}
+#-----------------------------------------------------------------
+# Compile GSettings schemas
+# requires: glib2 >= 1:2.26.0
+#
+%glib_compile_schemas() {{ \
+ umask 022; \
+ /usr/bin/glib-compile-schemas %{_datadir}/glib-2.0/schemas; \
+};} \
+%{nil}
+
#-----------------------------------------------------------------
# post %install sequence:
# - autodeps exceptions
# directories
%py3_prefix %{expand:%%global py3_prefix %(%{__python3} -c "import sys; print(sys.prefix)" 2>/dev/null || echo ERROR)}%py3_prefix
-%py3_libdir %{py3_prefix}/%{_lib}/python%{py3_ver}
+%py3_libdir %{expand:%%global py3_libdir %(%{__python3} -c "import sysconfig; print(sysconfig.get_path('platstdlib'))" 2>/dev/null || echo ERROR)}%py3_libdir
+%py3_incdir %{expand:%%global py3_incdir %(%{__python3} -c "import sysconfig; print(sysconfig.get_path('include'))" 2>/dev/null || echo ERROR)}%py3_incdir
+%py3_sitedir %{expand:%%global py3_sitedir %(%{__python3} -c "import sysconfig; print(sysconfig.get_path('platlib'))" 2>/dev/null || echo ERROR)}%py3_sitedir
+%py3_sitescriptdir %{expand:%%global py3_sitescriptdir %(%{__python3} -c "import sysconfig; print(sysconfig.get_path('purelib'))" 2>/dev/null || echo ERROR)}%py3_sitescriptdir
%py3_scriptdir %{py3_prefix}/share/python%{py3_ver}
-%py3_incdir /usr/include/python%{py3_ver}
-%py3_sitedir %{py3_libdir}/site-packages
-%py3_sitescriptdir %{py3_scriptdir}/site-packages
%py3_dyndir %{py3_libdir}/lib-dynload
# pure python modules compilation
%py3_ocomp %{__python3} -O -c "import compileall; import sys; compileall.compile_dir(sys.argv[1], ddir=sys.argv[1][len('$RPM_BUILD_ROOT'):])"
+
# Hardlink binary identical .pyc and .pyo files
%__spec_install_post_py_hardlink {\
%{!?no_install_post_py_hardlink: __spec_install_post_py_hardlink() { \
+%{!?debug:set +x;} \
local a b c=0 t=0; \
if [ -d "$RPM_BUILD_ROOT" ]; then \
find "$RPM_BUILD_ROOT" -name '*.pyc' > __rpm_pyc; \
done \
%{nil}
-%py3_postclean() \
-for d in %{py3_sitescriptdir} %{py3_sitedir} %*; do \
- [ ! -d "$RPM_BUILD_ROOT$d" ] || find "$RPM_BUILD_ROOT$d" -name '*.py' -print0 | xargs -0r -l512 rm;\
-done \
-%{nil}
-
# depmod macro
%depmod() { \
umask 022; \
# banner support (useful in {pre,post}{,un} and triggers)
#
# Usage:
-# %banner name [-a] [-e] [-n] [-tn] <<EOF
+# %banner name [-a] [-e] [-n] [-tn] [-o] <<EOF
# the banner text, the banner text
# the banner text, and following line
#EOF
# -e - send to stderr instead of stdout
# -n - no show banner (overrides -t)
# -t - show only, if RPM_SCRIPTVERBOSITY >= n; default n=5
+# -o - show only once, i.e when package is installed for the first time
#
# Tests:
# (rpm -E '%banner -e banner <<EOF'; echo -e 'hi\nEOF') > m; sh -x m
+# (rpm -E '%banner -o -e banner <<EOF'; echo -e 'hi\nEOF') > m; sh -x m
+# (rpm -E '%banner -o -e banner <<EOF'; echo -e 'hi\nEOF') > m; sh -x m 1
# rpm -E 'date | %banner -e banner' > m; sh -x m
+# rpm -E 'date | %banner -o -e banner' > m; sh -x m
#
-%banner(aent:) ( \
+%banner(aenot:) %{-o:([ "$1" != 1 ] ||} ( \
RPM_SCRIPTVERBOSITY=5 \
[ -r /etc/sysconfig/rpm ] && . /etc/sysconfig/rpm \
if [ -x /usr/bin/banner.sh ]; then \
else \
CMD="cat%{-e: >&2}" \
fi \
-eval $CMD %{?2:%2}%{?3: %3}) \
+eval $CMD %{?2:%2}%{?3: %3})%{-o:)} \
%{nil}
# useradd/groupadd macros
%__pear_install_log \
tee install.log \
# make post message of optional packages \
-grep -E 'can optionally use|Optional feature' install.log | sed -e 's,package "pear/,package "php-pear-,g;s,^pear/,php-pear-,;s,^pear/,php-pear-,;s,^channel://.*/,,' > optional-packages.txt \
+grep -E 'can optionally use|Optional feature' install.log | sed -e 's,package "pear/,package "php-pear-,g;s,^pear/,php-pear-,;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 \
%{!?_noautoprov:%global _noautoprov %{nil}}%{expand:%%global _noautoprov %{_noautoprov} 'pear(tests/.*)'} \
%{nil}
-# Copies exctracted PEAR package structure and PEAR registry to buildroot.
+# Copies extracted PEAR package structure and PEAR registry to buildroot.
# Author: Elan Ruusamäe <glen@pld-linux.org>
%pear_package_install() \
cp -a ./%{php_pear_dir}/{.registry,*} $RPM_BUILD_ROOT%{php_pear_dir} \
+# tests should not be packaged \
+%{__rm} -rf $RPM_BUILD_ROOT%{php_pear_dir}/tests \
+# cleanup backups \
find $RPM_BUILD_ROOT%{php_pear_dir} '(' -name '*~' -o -name '*.orig' ')' | xargs -r rm -v \
# help the developer out a little: \
if [ -f _noautoreq ]; then \
%endif \
\
%{!?-c:%{__make} -C %{_kernelsrcdir} clean \\\
- RCS_FIND_IGNORE="-name '*.ko' -o" \\\
+ RCS_FIND_IGNORE="-name '*.[ks]o' -o" \\\
${1+"$@"} \\\
M=$PWD %{MakeOpts}} \
\
%{__make} -C %{_kernelsrcdir} modules \\\
${1+"$@"} \\\
- M=$PWD %{MakeOpts} \
+ M=$PWD CONSTIFY_PLUGIN="" %{MakeOpts} \
\
for MODULE in {%{-m*},}; do \
[ -z "${MODULE}" ] || mv ${MODULE}{,-$cfg}.ko \
%define ModprobeD $RPM_BUILD_ROOT%{_sysconfdir}/modprobe.d/%{_kernel_ver} \
\
__install_kernel_modules() { \
+%{!?debug:set +x;} \
local cfgs='%{?with_dist_kernel:%{?with_smp: smp}%{?with_up: up}}%{!?with_dist_kernel: nondist}' \
\
for MODULE in {%{-m*},}; do \
#
# Requirements:
# BuildRequires: python
-# BuildRequires: rpmbuild(macros) >= 1.469
+# BuildRequires: rpmbuild(macros) >= 1.602
%py_lint() \
__py_lint() { \
+%{!?debug:set +x;} \
find "$@" -type f -name '*.py' | python -c ' \
import sys \
import compiler \
\
-err = 0\
+found = err = 0\
for f in sys.stdin: \
- fd = open(f.strip()) \
+ fd = open(f.rstrip()) \
c = fd.read() \
fd.close() \
+ found = found + 1 \
try: \
compiler.parse(c) \
except SyntaxError, e: \
- print "py_lint: %s: %s" % (f.strip(), e) \
+ print "py_lint: %s: %s" % (f.rstrip(), e) \
err = err + 1\
\
-if err: \
+if not found:\
+ print >> sys.stderr, "\\npy_lint: ERROR: No files processed.\\n" \
+ sys.exit(1) \
+elif 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." \
+ print >> sys.stderr, "py_lint: %d files scanned, found no syntax errors." % found \
' \
}; __py_lint %* \
%{nil}
[ -f /etc/rc.d/init.d/%1 -o -f /etc/init/%1.conf ] && { echo -n "Re-"; /sbin/service %1 start; }; \
fi
+# Haskell Macros
+# BuildRequires: rpmbuild(macros) >= 1.608
+%ghcdir ghc-%(/usr/bin/ghc --numeric-version 2>/dev/null || echo ERROR)
+
+# update /usr/lib*/ghc-*/package.conf.d/package.cache
+# Requires: ghc
+# BuildRequires: rpmbuild(macros) >= 1.607
+#
+%ghc_pkg_recache() {{ \
+ umask 022; \
+ /usr/bin/ghc-pkg recache; \
+};} \
+%{nil}
+
+
+# pre/post script for -systemd subpackages
+#
+# Author: Bartlomiej Zimon <uzi18@o2.pl>
+#
+# Usage:
+# %systemd_reload
+# %systemd_post service_name1.service service_name2.service
+# %systemd_preun service_name1.service service_name2.service
+#
+# Sample:
+# %post systemd
+# %systemd_reload
+# or if service must be enabled by default:
+# %post systemd
+# %systemd_post %{name}.service
+#
+# %preun systemd
+# %systemd_preun %{name}.service
+#
+# %postun systemd
+# %systemd_reload
+#
+# Requirements:
+# BuildRequires: rpmbuild(macros) >= 1.627
+# Requires: systemd-units >= 37-0.10
+
+%systemd_reload /bin/systemd_booted && SYSTEMD_LOG_LEVEL=warning SYSTEMD_LOG_TARGET=syslog /bin/systemctl --quiet daemon-reload || :
+
+%systemd_post() \
+ export SYSTEMD_LOG_LEVEL=warning SYSTEMD_LOG_TARGET=syslog \
+ /bin/systemd_booted && /bin/systemctl --quiet daemon-reload || : \
+ if [ $1 -eq 1 ]; then \
+ /bin/systemctl --quiet enable %{*} || : \
+ fi \
+ if [ $1 -gt 1 ] && [ -z "$NORESTART" ]; then \
+ /bin/systemctl --quiet try-restart %{*} || : \
+ fi \
+%{nil}
+
+%systemd_preun() \
+ if [ $1 -eq 0 ]; then \
+ export SYSTEMD_LOG_LEVEL=warning SYSTEMD_LOG_TARGET=syslog; \
+ /bin/systemctl --no-reload --quiet disable %{*} || : \
+ if /bin/systemd_booted; then \
+ /bin/systemctl --quiet stop %{*} || : \
+ fi \
+ fi \
+%{nil}
+
+%systemdunitdir /lib/systemd/system
+
# EOF