# $Id: macros.in,v 1.47.2.3 2000/06/23 00:55:12 jbj Exp $
#==============================================================================
# Macro naming conventions (preliminary):
#
#	Macros that begin with an underscore are "local" in the sense that
#	they (if used) will not be exported in rpm headers. Some macros
#	that don't start with an underscore (but look like they should)
#	are compatible with macros generated by rpm-2.5.x and will be made
#	more consistent in a future release.
#

#==============================================================================
# ---- A macro that expands to nothing.
#
%nil	%{!?nil}

#==============================================================================
# ---- filesystem macros.
#
%_usr			@prefix@
%_usrsrc		%{_usr}/src
%_var			@varprefix@

#==============================================================================
# ---- Generally useful path macros.
#
%__awk			@AWK@
%__bzip2		%{_bzip2bin}
%__cat			@__CAT@
%__chgrp		@__CHGRP@
%__chmod		@__CHMOD@
%__chown		@__CHOWN@
%__cp			@__CP@
%__cpio			@__CPIO@
%__grep			@__GREP@
%__gzip			%{_gzipbin}
%__id			@__ID@
%__install		@__INSTALL@
%__ln_s			@LN_S@
%__make			@__MAKE@
%__mkdir		@__MKDIR@
%__mkdir_p		@MKDIR_P@
%__mv			@__MV@
%__patch		@__PATCH@
%__perl			@__PERL@
%__pgp			%{_pgpbin}
%__rm			@__RM@
%__rsh			@__RSH@
%__sed			@__SED@
%__ssh			@__SSH@
%__tar			@__TAR@

#==============================================================================
# ---- Build system path macros.
#
%__ar			@AR@
%__cc			@CC@
%__cpp			@CPP@
%__ld			@__LD@
%__nm			@__NM@
%__objcopy		@__OBJCOPY@
%__objdump		@__OBJDUMP@
%__ranlib		@RANLIB@
%__remsh		%{__rsh}
%__strip		@__STRIP@

# XXX avoid failures if tools are not installed when rpm is built.
%__libtoolize		libtoolize
%__aclocal		aclocal
%__autoheader		autoheader
%__automake		automake
%__autoconf		autoconf

#==============================================================================
# ---- Required rpmrc macros.
#	Macros that used to be initialized as a side effect of rpmrc parsing.
#	These are the default values that can be overridden by other
#	(e.g. per-platform, per-system, per-packager, per-package) macros.
#
%_builddir		%{_topdir}/BUILD
%_buildshell		/bin/sh
%_bzip2bin		@BZIP2BIN@
%_dbpath		%{_var}/lib/rpm
%_dbpath_rebuild	%{_dbpath}
%_defaultdocdir		%{_usr}/doc
#
%__find_provides	@FINDPROVIDES@
%__find_requires	@FINDREQUIRES@
#%__find_prereq		???
#%__find_conflicts	???
#%__find_obsoletes	???
#
# XXX fixowner, fixgroup, and fixperms are run at the end of hardcoded setup
%__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_GROUP@
%_fixperms		%{__chmod} -Rf @FIXPERMS@
#
%_gzipbin		@GZIPBIN@
%_instchangelog		5
%_pgpbin		@PGPBIN@
%_rpmdir		%{_topdir}/RPMS
#
# XXX Note escaped %% for use in headerSprintf
%_rpmfilename		%%{ARCH}/%%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm
%_signature		none
%_sourcedir		%{_topdir}/SOURCES
%_specdir		%{_topdir}/SPECS
%_srcrpmdir		%{_topdir}/SRPMS
%_tmppath		%{_var}/tmp
%_topdir		%{_usrsrc}/redhat

#==============================================================================
# ---- Optional rpmrc macros.
#	Macros that are initialized as a side effect of rpmrc and/or spec
#	file parsing.
#
#	Configurable build root path, same as BuildRoot: in a specfile.
#	(Note: the configured macro value will override the spec file value).
#
#%buildroot

#	The sub-directory (relative to %{_builddir}) where sources are compiled.
#	This macro is set after processing %setup, either explicitly from the
#	value given to -n or the default name-version.
#
#%buildsubdir

#	Configurable distribution information, same as Distribution: tag in a
#	specfile.
#
#%distribution

#	Configurable distribution URL, same as DistURL: tag in a specfile.
#	The URL will be used to supply reliable information to tools like
#	rpmfind.
#
# Note: You should not configure with disturl (or build packages with
# the DistURL: tag) unless you are willing to supply content in a
# yet-to-be-determined format at the URL specified.
#
#%disturl

#	Boolean (i.e. 1 == "yes", 0 == "no") that controls whether files
#	marked as %doc should be installed.
#%_excludedocs

#	The port and machine name of a FTP proxy host running TIS firewall.
#
#%_ftpport
#%_ftpproxy

#	The signature to use and the location of configuration files for
#	signing packages with GNU gpg.
#
#%_gpg_name
#%_gpg_path

#	The port and machine name of an HTTP proxy host.
#
#%_httpport
#%_httpproxy

#	The PATH put into the environment before running %pre/%post et al.
#
%_install_script_path	/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin

#	A colon separated list of desired locales to be installed;
#	"all" means install all locale specific files.
#	
%_install_langs	all

#
#	Deprecated.
#%_langpatt

#	A colon separated list of paths where files should *not* be installed.
#	Usually, these are network file system mount points.
#
#%_netsharedpath

#	Configurable packager information, same as Packager: in a specfile.
#
#%packager

#	Compression type and level for source/binary package payloads.
#		"w9.gzdio"	gzip level 9 (default).
#		"w9.bzdio"	bzip2 level 9.
#
#%_source_payload	w9.gzdio
#%_binary_payload	w9.gzdio

#	The signature to use and the location of configuration files for
#	signing packages with PGP.
#
#%_pgp_name
#%_pgp_path

#	Configurable virtual provides (unimplemented, use Provides: ...
#	in an rpmrc file).
#
#%_provides

#	Deprecated.
#
#%_timecheck

#	Configurable vendor information, same as Vendor: in a specfile.
#
#%vendor

#==============================================================================
# ---- per-platform macros.
#	Macros that are specific to an individual platform. The values here
#	will be used if the per-platform macro file does not exist..
#
%_arch			@RPMCANONARCH@
%_vendor		@RPMCANONVENDOR@
%_os			@RPMCANONOS@
%_target_platform	%{_target_cpu}-%{_vendor}-%{_target_os}
#
# XXX use the rpmrc instantiated macro for now
#%optflags		-O2

%__arch_install_post	%{nil}
%__os_install_post	%{___build_post}

#==============================================================================
# ---- Scriptlet template templates.
#	Global defaults used for building scriptlet templates.
#
# XXX legacy configuration, this will be eliminated after rpm-3.0.4.
%_preScriptEnvironment	\
RPM_SOURCE_DIR=\"%{_sourcedir}\"\
RPM_BUILD_DIR=\"%{_builddir}\"\
RPM_OPT_FLAGS=\"%{optflags}\"\
RPM_ARCH=\"%{_arch}\"\
RPM_OS=\"%{_os}\"\
export RPM_SOURCE_DIR RPM_BUILD_DIR RPM_OPT_FLAGS RPM_ARCH RPM_OS\
RPM_DOC_DIR=\"%{_docdir}\"\
export RPM_DOC_DIR\
RPM_PACKAGE_NAME=\"%{name}\"\
RPM_PACKAGE_VERSION=\"%{version}\"\
RPM_PACKAGE_RELEASE=\"%{release}\"\
export RPM_PACKAGE_NAME RPM_PACKAGE_VERSION RPM_PACKAGE_RELEASE\
%{?buildroot:RPM_BUILD_ROOT=\"%{buildroot}\"\
export RPM_BUILD_ROOT}

%___build_shell		%{?_buildshell:%{_buildshell}}%{!?_buildshell:/bin/sh}
%___build_args		-e
%___build_cmd		%{?_sudo:%{_sudo} }%{?_remsh:%{_remsh} %{_remhost} }%{?_remsudo:%{_remsudo} }%{?_remchroot:%{_remchroot} %{_remroot} }%{___build_shell} %{___build_args}
%___build_pre	\
RPM_SOURCE_DIR=\"%{u2p:%{_sourcedir}}\"\
RPM_BUILD_DIR=\"%{u2p:%{_builddir}}\"\
RPM_OPT_FLAGS=\"%{optflags}\"\
RPM_ARCH=\"%{_arch}\"\
RPM_OS=\"%{_os}\"\
export RPM_SOURCE_DIR RPM_BUILD_DIR RPM_OPT_FLAGS RPM_ARCH RPM_OS\
RPM_DOC_DIR=\"%{_docdir}\"\
export RPM_DOC_DIR\
RPM_PACKAGE_NAME=\"%{name}\"\
RPM_PACKAGE_VERSION=\"%{version}\"\
RPM_PACKAGE_RELEASE=\"%{release}\"\
export RPM_PACKAGE_NAME RPM_PACKAGE_VERSION RPM_PACKAGE_RELEASE\
%{?buildroot:RPM_BUILD_ROOT=\"%{u2p:%{buildroot}}\"\
export RPM_BUILD_ROOT}\
\
%{verbose:set -x}%{!verbose:exec > /dev/null}\
umask 022\
cd %{u2p:%{_builddir}}\


#%___build_body		%{nil}
%___build_post		exit 0

%___build_template	#!%{___build_shell}\
%{___build_pre}\
%{nil}

#%{___build_body}\
#%{___build_post}\
#%{nil}

#==============================================================================
# ---- Scriptlet templates.
#	Macro(s) that expand to a command and script that is executed.
#	CAVEAT: All macro expansions must fit in a BUFSIZ (8192 byte) buffer.
#
%__spec_prep_shell	%{___build_shell}
%__spec_prep_args	%{___build_args}
%__spec_prep_cmd	%{___build_cmd}
%__spec_prep_pre	%{___build_pre}
%__spec_prep_body	%{___build_body}
%__spec_prep_post	%{___build_post}
%__spec_prep_template	#!%{__spec_prep_shell}\
%{__spec_prep_pre}\
%{nil}

#%{__spec_prep_body}\
#%{__spec_prep_post}\
#%{nil}

%__spec_build_shell	%{___build_shell}
%__spec_build_args	%{___build_args}
%__spec_build_cmd	%{___build_cmd}
%__spec_build_pre	%{___build_pre}
%__spec_build_body	%{___build_body}
%__spec_build_post	%{___build_post}
%__spec_build_template	#!%{__spec_build_shell}\
%{__spec_build_pre}\
%{nil}

#%{__spec_build_body}\
#%{__spec_build_post}\
#%{nil}

%__spec_install_shell	%{___build_shell}
%__spec_install_args	%{___build_args}
%__spec_install_cmd	%{___build_cmd}
%__spec_install_pre	%{___build_pre}
%__spec_install_body	%{___build_body}
%__spec_install_post\
%{__arch_install_post}\
%{__os_install_post}\
%{nil}
%__spec_install_template	#!%{__spec_install_shell}\
%{__spec_install_pre}\
%{nil}

#%{__spec_install_body}\
#%{__spec_install_post}\
#%{nil}

#%__spec_autodep_shell	%{___build_shell}
#%__spec_autodep_args	%{___build_args}
#%__spec_autodep_cmd	%{___build_cmd}
#%__spec_autodep_pre	%{___build_pre}
#%__spec_autodep_body	%{___build_body}
#%__spec_autodep_post	%{___build_post}
#%__spec_autodep_template	#!%{__spec_autodep_shell}\
#%{__spec_autodep_pre}\
#%{nil}

#%{__spec_autodep_body}\
#%{__spec_autodep_post}\
#%{nil}

%__spec_clean_shell	%{___build_shell}
%__spec_clean_args	%{___build_args}
%__spec_clean_cmd	%{___build_cmd}
%__spec_clean_pre	%{___build_pre}
%__spec_clean_body	%{___build_body}
%__spec_clean_post	%{___build_post}
%__spec_clean_template	#!%{__spec_clean_shell}\
%{__spec_clean_pre}\
%{nil}

#%{__spec_clean_body}\
#%{__spec_clean_post}\
#%{nil}

%__spec_rmbuild_shell	%{___build_shell}
%__spec_rmbuild_args	%{___build_args}
%__spec_rmbuild_cmd	%{___build_cmd}
%__spec_rmbuild_pre	%{___build_pre}
%__spec_rmbuild_body	%{___build_body}
%__spec_rmbuild_post	%{___build_post}
%__spec_rmbuild_template	#!%{__spec_rmbuild_shell}\
%{__spec_rmbuild_pre}\
%{nil}

#%{__spec_rmbuild_body}\
#%{__spec_rmbuild_post}\
#%{nil}

# XXX We don't expand pre/post install scriptlets (yet).
#%__spec_pre_pre		%{nil}
#%__spec_pre_post		%{nil}
#%__spec_post_pre		%{nil}
#%__spec_post_post		%{nil}
#%__spec_preun_pre		%{nil}
#%__spec_preun_post		%{nil}
#%__spec_postun_pre		%{nil}
#%__spec_postun_post		%{nil}
#%__spec_triggerpostun_pre	%{nil}
#%__spec_triggerpostun_post	%{nil}
#%__spec_triggerun_pre		%{nil}
#%__spec_triggerun_post		%{nil}
#%__spec_triggerin_pre		%{nil}
#%__spec_triggerin_post		%{nil}

#==============================================================================
# ---- configure macros.
#	Macro(s) slavishly copied from autoconf's config.status.
#
%_prefix		@prefix@
%_exec_prefix		%{_prefix}
%_bindir		%{_exec_prefix}/bin
%_sbindir		%{_exec_prefix}/sbin
%_libexecdir		%{_exec_prefix}/libexec
%_datadir		%{_prefix}/share
%_sysconfdir		%{_prefix}/etc
%_sharedstatedir	%{_prefix}/com
%_localstatedir		%{_prefix}/var
%_lib			lib
%_libdir		%{_exec_prefix}/%{_lib}
%_includedir		%{_prefix}/include
%_oldincludedir		/usr/include
%_infodir		%{_prefix}/info
%_mandir		%{_prefix}/man

#==============================================================================
# ---- config.guess platform macros.
#	Macro(s) similar to the tokens used by configure.
#
%_build			%{_host}
%_build_alias		%{_host_alias}
%_build_cpu		%{_host_cpu}
%_build_vendor		%{_host_vendor}
%_build_os		%{_host_os}
%_host			@host@
%_host_alias		@host_alias@
%_host_cpu		@host_cpu@
%_host_vendor		@host_vendor@
%_host_os		@host_os@
%_target		%{_host}
%_target_alias		%{_host_alias}
%_target_cpu		%{_host_cpu}
%_target_vendor		%{_host_vendor}
%_target_os		%{_host_os}

#==============================================================================
# ---- specfile macros.
#	Macro(s) here can be used reliably for reproducible builds.
#	(Note: Above is the goal, below are the macros under development)
#
# The configure macro does the following:
#	optionally change to a subdirectory (not implemented).
#	attempt to update config.guess and config.sub.
#	run configure with correct prefix, platform, and CFLAGS.
#	optionally restore current directory (not implemented).
# The configure macro should be invoked as %configure (rather than %{configure})
# because the rest of the arguments will be expanded using %*. Another
# gotcha is that arguments, if present, should be on the same line as the
# %configure.
#
# This is the version of %configure used throuugh rpm-3.0.4.
#%configure	\
#  %{?__libtoolize:[ -f configure.in ] && %{__libtoolize} --copy --force} \
#  CFLAGS="%{optflags}" ./configure %{_target_platform} --prefix=%{_prefix}
#
#------------------------------------------------------------------------------
# This is an improved version of %configure (from PLD team).
%configure \
CFLAGS="${CFLAGS:-%optflags}" ; export CFLAGS ; \
CXXFLAGS="${CXXFLAGS:-%optflags}" ; export CXXFLAGS ; \
FFLAGS="${FFLAGS:-%optflags}" ; export FFLAGS ; \
%{?__libtoolize:[ -f configure.in ] && %{__libtoolize} --copy --force} ; \
./configure %{_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}
#------------------------------------------------------------------------------
# The make install analogue of %configure:
%makeinstall \
   make \\\
	prefix=%{?buildroot:%{buildroot}}%{_prefix} \\\
	exec_prefix=%{?buildroot:%{buildroot}}%{_exec_prefix} \\\
	bindir=%{?buildroot:%{buildroot}}%{_bindir} \\\
	sbindir=%{?buildroot:%{buildroot}}%{_sbindir} \\\
	sysconfdir=%{?buildroot:%{buildroot}}%{_sysconfdir} \\\
	datadir=%{?buildroot:%{buildroot}}%{_datadir} \\\
	includedir=%{?buildroot:%{buildroot}}%{_includedir} \\\
	libdir=%{?buildroot:%{buildroot}}%{_libdir} \\\
	libexecdir=%{?buildroot:%{buildroot}}%{_libexecdir} \\\
	localstatedir=%{?buildroot:%{buildroot}}%{_localstatedir} \\\
	sharedstatedir=%{?buildroot:%{buildroot}}%{_sharedstatedir} \\\
	mandir=%{?buildroot:%{buildroot}}%{_mandir} \\\
	infodir=%{?buildroot:%{buildroot}}%{_infodir} \\\
   install

#------------------------------------------------------------------------------
# The GNUconfigure macro does the following:
#       update config.guess and config.sub.
#       regenerate all autoconf/automake files
#       optionally change to a directory (make the directory if requested).
#       run configure with correct prefix, platform, and CFLAGS.
#       optionally restore current directory.
#
# Based on autogen.sh from GNOME and orginal GNUconfigure
#
%GNUconfigure(MCs:)      \
  CFLAGS="${CFLAGS:-%optflags}" ; export CFLAGS; \
  LDFLAGS="${LDFLAGS:-'%{-s:-s}'}"  ; export LDFLAGS; \
  %{-C:_mydir="`pwd`"; %{-M: %{__mkdir} -p %{-C*};} cd %{-C*}} \
  dirs="`find ${_mydir} -name configure.in -print`"; export dirs; \
    for coin in `echo ${dirs}` \
do \
  dr=`dirname ${coin}`; \
if test -f ${dr}/NO-AUTO-GEN; then \
 : \
else \
     macrodirs=`sed -n -e 's,AM_ACLOCAL_INCLUDE(\(.*\)),\1,gp' < ${coin}`; \
    ( cd ${dr}; \
      aclocalinclude="${ACLOCAL_FLAGS}"; \
      for k in ${macrodirs}; do \
        if test -d ${k}; then \
          aclocalinclude="${aclocalinclude} -I ${k}"; \
        ##else \
        ##  echo "**Warning**: No such directory \`${k}'.  Ignored." \
        fi \
      done \
      if grep "^AM_GNU_GETTEXT" configure.in >/dev/null; then \
        if grep "sed.*POTFILES" configure.in >/dev/null; then \
          : do nothing -- we still have an old unmodified configure.in \
        else \
          test -r ${dr}/aclocal.m4 || touch ${dr}/aclocal.m4; \
          echo "no" | gettextize --force --copy; \
          test -r ${dr}/aclocal.m4 && %{__chmod} u+w ${dr}/aclocal.m4; \
        fi \
      fi \
      if grep "^AM_PROG_LIBTOOL" configure.in >/dev/null; then \
        %{__libtoolize} --force --copy; \
      fi \
      aclocal ${aclocalinclude}; \
      if grep "^AM_CONFIG_HEADER" configure.in >/dev/null; then \
        %{__autoheader}; \
      fi \
      echo "Running automake --gnu ${am_opt} ..."; \
      %{__automake} --add-missing --gnu ${am_opt}; \
      %{__autoconf}; \
    ); \
  fi \
done \
  %{-C:${_mydir}}%{!-C:.}/configure %{_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} %* ; \
  %{-C:cd ${_mydir}; unset _mydir}

#------------------------------------------------------------------------------
# Useful perl macros (from Artur Frysiak <wiget@t17.ds.pwr.wroc.pl>)
#
# For example, these can be used as (from ImageMagick.spec from PLD site)
#	[...]
#	BuildPrereq: perl
#	[...]
#	%package perl
#	Summary: libraries and modules for access to ImageMagick from perl
#	Group: Development/Languages/Perl
#	Requires: %{name} = %{version}
#	%requires_eq    perl
#	[...]
#	%install
#	rm -fr $RPM_BUILD_ROOT
#	install -d $RPM_BUILD_ROOT/%{perl_sitearch}
#	[...]
#	%files perl
#	%defattr(644,root,root,755)
#	%{perl_sitearch}/Image
#	%dir %{perl_sitearch}/auto/Image
#
%requires_eq()	%(LC_ALL="C" rpm -q --queryformat 'Requires:%%{NAME} = %%{VERSION}' %1| grep -v "is not")
%perl_sitearch	%(eval "`perl -V:installsitearch`"; echo $installsitearch)
%perl_archlib	%(eval "`perl -V:installarchlib`"; echo $installarchlib)

#------------------------------------------------------------------------------
# arch macro for all Intel i?86 compatibile processors
#  (Note: This macro (and it's analogues) will probably be obsoleted when
#   rpm can use regular expressions against target platforms in macro
#   conditionals. This change will be introduced after rpm-3.0.4).
#
%ix86   i386 i486 i586 i686 i786 i886 i986

#------------------------------------------------------------------------
# Use in %install to generate locale specific file lists. For example,
#
# %install
# ...
# %find_lang %{name}
# ...
# %files -f %{name}.lang
#
%find_lang	@RPMCONFIGDIR@/find-lang.sh %{buildroot}
