# Per-platform rpm configuration file.

#==============================================================================
# ---- per-platform macros.
#
%_arch			i386
%_vendor		pld
%_os			linux
%_target_platform	%{_target_cpu}-%{_vendor}-%{_target_os}
%optflags		-O2 -march=i486

#==============================================================================
# ---- configure macros.
#
%_prefix		/usr
%_exec_prefix		/usr
%_bindir		/usr/bin
%_sbindir		/usr/sbin
%_libexecdir		/usr/lib
%_datadir		/usr/share
%_sysconfdir		/etc
%_sharedstatedir	/usr/com
%_localstatedir		/var
%_lib			lib
%_libdir		/usr/%{_lib}
%_includedir		/usr/include
%_oldincludedir		/usr/include
%_infodir		/usr/share/info
%_mandir		/usr/share/man
%_initrddir		%{_sysconfdir}/rc.d/init.d

%_defaultdocdir		%{_usr}/share/doc

#==============================================================================
# ---- Build policy macros.
#
#------------------------------------------------------------------------
#	Expanded at end of %install
#

# Gets file list on input and buildroot as first parameter
# and returns list of files not found in any package
%__check_files		/usr/lib/rpm/check-files

%__arch_install_post   %{nil}

%__os_install_post    \
    /usr/lib/rpm/brp-compress \
    /usr/lib/rpm/brp-strip \
    /usr/lib/rpm/brp-strip-comment-note \
%{nil}

%__spec_install_post\
     %{__arch_install_post}\
     %{__os_install_post}\
%{nil}

# Executed at after copying %doc to DOCDIR, with $DOCDIR set
%__compress_doc		/usr/lib/rpm/compress-doc


#------------------------------------------------------------------------
#	Expanded at end of %prep
#
%__id_u			%{__id} -u
%__chown_Rhf		%{__chown} -Rhf
%__chgrp_Rhf		%{__chgrp} -Rhf
%_fixowner		[ `%{__id_u}` = '0' ] && %{__chown_Rhf} root
%_fixgroup		[ `%{__id_u}` = '0' ] && %{__chgrp_Rhf} root
%_fixperms		%{__chmod} -Rf a+rX,g-w,o-w


# PLD rpm macros

%_defaultdocdir  %{_usr}/share/doc
%_fixowner       [ `%{__id_u}` = '0' ] && %{__chown_Rhf} root.root
%_fixgroup       true
%_fixperms	 %{__chmod} -Rf a+rX,g-w,o-w
%_topdir         %(echo $HOME)/rpm
%_exec_prefix    %{_prefix}
%_bindir         %{_exec_prefix}/bin
%_sbindir        %{_exec_prefix}/sbin
%_libexecdir     %{_exec_prefix}/lib
%_datadir        %{_prefix}/share
%_sharedstatedir %{_prefix}/com
%_lib            lib
%_libdir         %{_exec_prefix}/%{_lib}
%_includedir     %{_prefix}/include
%_oldincludedir  /usr/include
%_sysconfdir     /etc
%_localstatedir  /var
%_infodir        /usr/share/info
%_mandir         %{_prefix}/share/man
#-----------------------------------------------------------------
# CFLAGS and LDFLAGS used to build

%debugcflags	-O0 -g -Wall
%rpmcflags	%{?debug:%debugcflags}%{!?debug:%optflags}
%rpmldflags	%{!?debug:-s}

# kernel compiler
%kgcc		gcc
%kgcc_package	gcc

#-----------------------------------------------------------------
# Build system path macros.
#
%__libtoolize           libtoolize --copy --force
%__gettextize { \
    if ! gettextize --version | grep -q '0\.10\.' ; then \
	if grep -qs 'AM_GNU_GETTEXT.*external' configure.{ac,in} ; then \
	    gettextize --copy --force --no-changelog; \
	else \
	    gettextize --copy --force --no-changelog --intl; \
	fi; \
	if [ ! -f po/Makevars ]; then \
	    cp -f po/Makevars{.template,}; \
	fi; \
    else \
	gettextize --copy --force; \
    fi; \
}
%__autopoint		autopoint --force
%__automake             automake -a -c -f --foreign
%__autoconf             autoconf %{?debug:-Wall}

#-----------------------------------------------------------------
%configure2_13 { \
 if [ -n "$LINGUAS" ]; then unset LINGUAS; fi; \
 LDFLAGS="${LDFLAGS:-%rpmldflags}" ; export LDFLAGS ; \
 CFLAGS="${CFLAGS:-%rpmcflags}" ; export CFLAGS ; \
 CXXFLAGS="${CXXFLAGS:-%rpmcflags}" ; export CXXFLAGS ; \
 FFLAGS="${FFLAGS:-%rpmcflags}" ; export FFLAGS ; \
 CPPFLAGS="${CPPFLAGS:-}" ; export CPPFLAGS ; \
 %{?__cc:CC=%{__cc} ; export CC ; } \
 %{?__cxx:CXX=%{__cxx} ; export CXX ; } \
 %{?configuredir:%{configuredir}}%{!?configuredir:.}/configure \
	--host=%{_target_platform} \
 	--prefix=%{_prefix} \
	--exec-prefix=%{_exec_prefix} \
	--bindir=%{_bindir} \
	--sbindir=%{_sbindir} \
	--sysconfdir=%{_sysconfdir} \
	--datadir=%{_datadir} \
	--includedir=%{_includedir} \
	--libdir=%{_libdir} \
	--libexecdir=%{_libexecdir} \
	--localstatedir=%{_localstatedir} \
	--sharedstatedir=%{_sharedstatedir} \
	--mandir=%{_mandir} \
	--infodir=%{_infodir} \
}

#----------------------------------------------------------------
%configure {./configure \
 	LDFLAGS="${LDFLAGS:-%rpmldflags}" \
	CFLAGS="${CFLAGS:-%rpmcflags}" \
	CXXFLAGS="${CXXFLAGS:-%rpmcflags}" \
	FFLAGS="${FFLAGS:-%rpmcflags}" \
	CPPFLAGS="${CPPFLAGS:-}" \
	%{?__cc:CC=%{__cc}} \
	%{?__cxx:CXX=%{__cxx}} \
	--build=%{_target_platform} \
 	--prefix=%{_prefix} \
	--exec-prefix=%{_exec_prefix} \
	--bindir=%{_bindir} \
	--sbindir=%{_sbindir} \
	--sysconfdir=%{_sysconfdir} \
	--datadir=%{_datadir} \
	--includedir=%{_includedir} \
	--libdir=%{_libdir} \
	--libexecdir=%{_libexecdir} \
	--localstatedir=%{_localstatedir} \
	--sharedstatedir=%{_sharedstatedir} \
	--mandir=%{_mandir} \
	--infodir=%{_infodir} \
}

# ------------------------------------------------------------------------
# Conditional build stuff.

# Check if symbol is defined.
# Example usage: %if %{defined with_foo} && %{undefined with_bar} ...
%defined()	%{expand:%%{?%{1}:1}%%{!?%{1}:0}}
%undefined()	%{expand:%%{?%{1}:0}%%{!?%{1}:1}}

# Shorthand for %{defined with_...}
%with()		%{expand:%%{?with_%{1}:1}%%{!?with_%{1}:0}}
%without()	%{expand:%%{?with_%{1}:0}%%{!?with_%{1}:1}}

# Handle conditional builds. %bcond_with is for case when feature is
# default off and needs to be activated with --with ... command line 
# switch. %bcond_without is for the dual case.
#
# %bcond_with foo defines symbol with_foo if --with foo was specified on
# command line.
# %bcond_without foo defines symbol with_foo if --without foo was *not* 
# specified on command line.
#
# For example:
#
# %bcond_with extra_fonts
# %bcond_without static
# %if %{with extra_fonts}
# ...
# %endif
# %ifdef %{with static}
# ...
# %endif
# %{?with_static: ... }
# %{!?with_static: ... }
# %{?with_extra_fonts: ... }
# %{!?with_extra_fonts: ... }
# 
# The bottom line: never use without_foo, _with_foo nor _without_foo, only
# with_foo. This way changing default set of bconds for given spec is just
# a matter of changing single line in it and syntax is more readable.
%bcond_with()		%{expand:%%{?_with_%{1}:%%global with_%{1} 1}}
%bcond_without()	%{expand:%%{!?_without_%{1}:%%global with_%{1} 1}}
# ------------------------------------------------------------------------


# Location of autoconf macros
%_aclocaldir	%(aclocal --print-ac-dir)

# Location of omf files
%_omf_dest_dir	%(scrollkeeper-config --omfdir)

# Location of pkgconfig files
%_pkgconfigdir	/usr/lib/pkgconfig

# Location of top applink dir
%_applnkdir	/usr/X11R6/share/applnk

# Location of desktop files
%_desktopdir	/usr/X11R6/share/applications

# Location of pixmaps for applnk/desktop files
%_pixmapsdir	/usr/X11R6/share/pixmaps

# Location of themable icons for applnk/desktop files
%_iconsdir	/usr/X11R6/share/icons

# Location of fonts directories
%_fontsdir	/usr/share/fonts

# Location of Gtk and associated libraries documentation
%_gtkdocdir	%{_defaultdocdir}/gtk-doc/html

# Current date
%date 		%(LC_ALL="C" date +"%a %b %d %Y")

# tmp directory
%tmpdir		%(echo "${TMPDIR:-/tmp}")

# Example files, programs, scripts...
%_examplesdir	/usr/src/examples

# The directory holding Linux kernel sources
%_kernelsrcdir	/usr/src/linux

# XMMS specific macros
%xmms_prefix			%(xmms-config --prefix)
%xmms_exec_prefix		%(xmms-config --exec-prefix)
%xmms_version			%(xmms-config --version)
%xmms_datadir			%(xmms-config --data-dir)
%xmms_plugindir			%(xmms-config --plugin-dir)
%xmms_visualization_plugindir	%(xmms-config --visualization-plugin-dir)
%xmms_input_plugindir		%(xmms-config --input-plugin-dir)
%xmms_output_plugindir		%(xmms-config --output-plugin-dir)
%xmms_effect_plugindir		%(xmms-config --effect-plugin-dir)
%xmms_general_plugindir		%(xmms-config --general-plugin-dir)

# If non-empty "debug" macro defined, add "dbg" suffix to release number
%_rpmfilename		%%{NAME}-%%{VERSION}-%%{RELEASE}%{?debug:dbg}.%%{ARCH}.rpm

# requires name = version-release
%requires_releq()		%(LC_ALL="C" rpm -q --queryformat 'Requires:%%{NAME} = %%{VERSION}-%%{RELEASE}' %1| grep -v "is not")
%requires_kernel_releq() 	%(LC_ALL="C" rpm -q --queryformat 'Prereq:kernel = %%{VERSION}-%%{RELEASE}' kernel-headers | grep -v "is not")
%requires_releq_kernel_up() 	%(LC_ALL="C" rpm -q --queryformat 'Prereq:kernel-up = %%{VERSION}-%%{RELEASE}' kernel-headers | grep -v "is not")
%requires_releq_kernel_smp() 	%(LC_ALL="C" rpm -q --queryformat 'Prereq:kernel-smp = %%{VERSION}-%%{RELEASE}' kernel-headers | grep -v "is not")
%requires_eq_to %(LC_ALL="C" rpm -q --qf 'Requires: %1 = %%{epoch}:%%{version}\\n' %2 | sed -e 's/ (none):/ /' -e 's/ 0:/ /' | grep -v "is not")

%apache_modules_api %(awk '/#define MODULE_MAGIC_NUMBER_MAJOR/ {print $3}' `apr-config --includedir`/ap_mmn.h)

# kernel version-release handling
%__kernel_ver    %(grep UTS_RELEASE %{_kernelsrcdir}/include/linux/version.h 2>/dev/null | cut -d'"' -f2)
%__kernel_rel    %(LC_ALL="C" rpm -qf %{_kernelsrcdir}/include/linux/version.h --queryformat "%{RELEASE}" | grep -v "is not")
%_kernel_ver     %(echo %{__kernel_ver}%{!?_without_dist_kernel:-%{__kernel_rel}})
%_kernel_ver_str %(echo %{_kernel_ver} | sed s/-/_/g)

# 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
%xmlcat_add_rewrite      /usr/bin/xmlcatalog --noout --add rewriteSystem
%xmlcat_create()          /usr/bin/xmlcatalog --noout --create %1
%sgmlcat_add()           /usr/bin/install-catalog --add %1 %2 > /dev/null
%sgmlcat_del()           /usr/bin/install-catalog --remove %1 %2 > /dev/null
%docbook_sgmlcat_fix() { for l in \
'' \
'  -- default decl --' \
'DTDDECL "-//OASIS//DTD DocBook XML V%2//EN" "../../xml.dcl"' \
'  -- hacks for opensp --' \
'SYSTEM "file://%{_datadir}/sgml/docbook/xml-dtd-%2/docbookx.dtd" "%{_datadir}/sgml/docbook/xml-dtd-%2/docbookx.dtd"' \
'SYSTEM "http://www.oasis-open.org/docbook/xml/%2/docbookx.dtd"                  "%{_datadir}/sgml/docbook/xml-dtd-%2/docbookx.dtd"' \
'' \
; do echo $l; done >> %1 \
}

#-----------------------------------------------------------------
# find and gzip all files in %{_mandir} and %{infodir}
#
# Requires: xargs, find
#
#%no_install_post_compress_docs	1
%__spec_install_post_compress_docs { \
echo "Compress man and info pages."; \
%{!?no_install_post_compress_docs: \
	%{?verbose:set -x;} \
	for i in /usr/share/man /usr/X11R6/man /usr/share/info; do \
		if [ -d "$RPM_BUILD_ROOT$i" ]; then \
			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 f -print | xargs -r %{__gzip} -9nf; \
		fi; \
	done; \
} }

#-----------------------------------------------------------------
# Strip executable binaries and shared object files
#
# Requires: find, awk, strip, cut, xargs
#
#%no_install_post_strip	1
%__spec_install_post_strip {%{!?debug: \
%{!?no_install_post_strip: \
	%{?verbose:set -x;} \
	echo "Strip executable binaries and shared object files."; \
	filelist=`find $RPM_BUILD_ROOT -type f ! -regex ".*ld-[0-9.]*so.*"`; \
	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`; \
	if [ -n "$elfexelist" ]; then \
		strip --remove-section=.note  --remove-section=.comment $elfexelist; \
	fi; \
	if [ -n "$elfsharedlist" ]; then \
		strip --strip-unneeded --remove-section=.note  --remove-section=.comment $elfsharedlist; \
	fi; } \
} }
#-----------------------------------------------------------------
# remove all RPATH from executable binaries and shared object files
#
# Requires: find, awk, cut, xargs, chrpath, uname
#
#%no_install_post_chrpath	1
%__spec_install_post_chrpath {%{!?debug: \
%{!?no_install_post_chrpath: \
	%{?verbose:set -x;} \
echo "Remove RPATH from executable binaries and shared object files."; \
if [ "$(uname -m)" != alpha ] ; then \
find $RPM_BUILD_ROOT -type f ! -regex ".*ld-[0-9.]*so.*" | xargs -r file | \
	awk '/ELF.*(executable|shared object)/ {print $1}' | cut -d: -f1 | \
while read file ; do \
	rpath= ; \
	chmod u+w "$file"; \
	for dir in `chrpath -l "$file" | \
		    awk '/RPATH=/ { gsub(/.*RPATH=/,""); gsub(/:/," "); print $0 }'` ; do \
			case $dir in \
			/home/* | /tmp/* | /usr/lib | /lib | /usr/local/lib | /usr/X11R6/lib ) \
				echo "remove-rpath: $dir in $file"; \
				;; \
			* ) \
				if [ "$rpath" = "" ] ; then rpath="$dir" ; \
				else rpath="$rpath:$dir" ; fi ; \
				;; \
			esac ; \
	done ; \
	if [ "$rpath" = "" ] ; then chrpath -d "$file" > /dev/null ; \
	else chrpath -r "$rpath" "$file" > /dev/null ; fi ; \
done; fi; } \
} }
#-----------------------------------------------------------------
# Find and gzip all kernel modules
#
# Requires: find
#
#%no_install_post_compress_modules  1
%__spec_install_post_compress_modules { \
%{!?no_install_post_compress_modules: \
echo "Compress kernel modules if any."; \
    %{?verbose:set -x;} \
    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; \
} }

%_source_payload        w9.gzdio
%_binary_payload        w9.bzdio

#-----------------------------------------------------------------
# Update all GConf2 schemas
#
# Requires: GConf2
#
%gconf_schema_install { umask 022; \
    GCONF_CONFIG_SOURCE="xml:readwrite:/etc/gconf/gconf.xml.defaults" \
    /usr/bin/gconftool-2 --makefile-install-rule \
    /etc/gconf/schemas/*.schemas > /dev/null \
}

#-----------------------------------------------------------------
# post %install sequence:
# - autodeps exceptions
# - compress all man and info pages,
# - strip all ELF executables and ELF shared objects if not %debug.
# - compress kernel modules if any

###################################################################
# Requires/Provides automation
# exceptions system by Jacek Konieczny <jajcus@pld.org.pl>
%__spec_prep_pre \
_autoreqprov=n \
%{?_noautoreqfiles:_autoreqprov=y}\
%{?_noautoreq:_autoreqprov=y}\
%{?_noautoreqdep:_autoreqprov=y}\
%{?_noautoprovfiles:_autoreqprov=y}\
%{?_noautoprov:_autoreqprov=y}\
%{?_noautocompressdoc:_autoreqprov=y}\
if [ "$_autoreqprov" = "y" ] ; then \
    if [ -f %{_builddir}/__rpm_lock ] ; then \
	echo "Some package using \%_noauto*  macros is already being built" >&2 \
	echo "If it is not true delete %{_builddir}/__rpm_lock" >&2 \
	exit 1 \
    else \
	rm -f %{_builddir}/__rpm_*\
    	touch %{_builddir}/__rpm_lock \
    fi \
fi \
%{?_noautocompressdoc:echo '%{_noautocompressdoc}' > %{_builddir}/__rpm_noautocompressdoc}\
%{___build_pre}\
%{nil}

%__os_install_post \
%{?_noautoreqfiles:for f in %{_noautoreqfiles} ; do echo %{?buildroot:%{buildroot}}$f >> %{_builddir}/__rpm_noautoreqfiles ; done }\
%{?_noautoreq:for f in %{_noautoreq} ; do echo "$f" >> %{_builddir}/__rpm_noautoreq ; done }\
%{?_noautoreqdep:for f in %{_noautoreqdep} ; do echo "$f" >> %{_builddir}/__rpm_noautoreqdep ; done }\
%{?_noautoprovfiles:for f in %{_noautoprovfiles} ; do echo %{?buildroot:%{buildroot}}$f >> %{_builddir}/__rpm_noautoprovfiles ; done }\
%{?_noautoprov:for f in %{_noautoprov} ; do echo "$f" >> %{_builddir}/__rpm_noautoprov ; done }\
%{__spec_install_post_strip}\
%{__spec_install_post_chrpath}\
%{__spec_install_post_compress_docs}\
%{__spec_install_post_compress_modules}\
%{__arch_install_post}\
%{nil}

%__spec_clean_pre	%{___build_pre}\
_autoreqprov=n \
%{?_noautoreqfiles:_autoreqprov=y}\
%{?_noautoreq:_autoreqprov=y}\
%{?_noautoreqdep:_autoreqprov=y}\
%{?_noautoprovfiles:_autoreqprov=y}\
%{?_noautoprov:_autoreqprov=y}\
%{?_noautoreqfiles:_autoreqprov=y}\
%{?_noautocompressdoc:_autoreqprov=y}\
if [ "$_autoreqprov" = "y" ] ; then \
	rm -f %{_builddir}/__rpm_* \
fi \
%{nil}


#%_noautoreqfiles	"%{_defaultdocdir}.*" "%{_examplesdir}.*"
#%_noautoreq		%{nil}
#%_noautoreqdep		%{nil}
#%_noautoprovfiles	%{nil}
#%_noautoprov		%{nil}

# depmod macro
%depmod() { \
if [ -e /boot/System.map-%1 ]; then \
        /sbin/depmod -a -F /boot/System.map-%1 %1; \
else \
        if [ -e /boot/System.map ]; then \
                /sbin/depmod -a -F /boot/System.map %1; \
        else \
                /sbin/depmod -a %1; \
        fi \
fi; \
}

