# /usr/lib/rpm/mageia/macros:
# Main Mangeia rpm configuration
# Only modified macros goes here
#
#
# This is a global RPM configuration file. All changes made here will
# be lost when the rpm package is upgraded. Any per-system configuration
# should be added to /etc/rpm/macros, while per-user configuration should
# be added to ~/.rpmmacros.

%_host_vendor mageia
%_real_vendor mageia

%_vendor Mageia

%_gnu -gnu
%_target_platform	%{_target_cpu}-%{_real_vendor}-%{_target_os}%{?_gnu}

%_host %{_host_cpu}-%{_real_vendor}-%{_host_os}%{?_gnu}


#==============================================================================
# ---- GPG/PGP/PGP5 signature macros.
#	Macro(s) to hold the arguments passed to GPG/PGP for package
#	signing and verification.
#

# We disable the gpg key automatic querying 
%_hkp_keyserver_query   %nil


#	Verify digest/signature flags for various rpm modes:
#	0x30300 (_RPMVSF_NODIGESTS)    --nohdrchk      if set, don't check digest(s)
#	0xc0c00 (_RPMVSF_NOSIGNATURES) --nosignature   if set, don't check signature(s)
#	0xf0000 (_RPMVSF_NOPAYLOAD)    --nolegacy      if set, check header+payload (if possible)
#	0x00f00 (_RPMVSF_NOHEADER)     --nohdrchk      if set, don't check rpmdb headers
%_vsflags_query		0xc0c00


#	Open all indices before doing chroot(2).
#
%_openall_before_chroot	1

%_repackage_all_erasures	0

%_query_all_fmt		%%{name}-%%{version}-%%{release}

%_rpmlock_path  %{_dbpath}/__db.000

# activate filetriggers (cf http://wiki.mandriva.com/en/Rpm_filetriggers)
%_filetriggers_dir /var/lib/rpm/filetriggers


%_sys_macros_dir /etc/rpm/macros.d
%build_sysmacrospath() %{_sys_macros_dir}/%{?1:%{1}}%{?!1:%{name}}.macros

# Various programs used in rpm scripts
%_update_icon_cache_bin %{_bindir}/gtk-update-icon-cache
%_gconftool_bin %{_bindir}/gconftool-2

#==============================================================================
# ---- 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.
#

%ix86 i386 i486 i586 i686 pentium3 pentium4 athlon k6

#	Multilibs
%_multilibpatt		(/%{_lib}|/usr/%{_lib}(|/gconv)|/usr/local/%{_lib}|/usr/X11R6/%{_lib}|/opt/%{_lib})/[^/]*\\.([oa]|la|so[0-9.]*)$

%_arch_tag_suffix %([ "%{?_lib}" = "lib64" ] && echo "()(64bit)")
%arch_tagged() %{1}%{_arch_tag_suffix} %{?2:%{2} %{3}%{?!3:%{error:undefined 3rd argument in arch_tagged}}}

# Games macros
%_gamesdir	games
%_gamesbindir   %{_prefix}/%{_gamesdir}
%_gamesdatadir  %{_datadir}/%{_gamesdir}

# Menu directories
%_menudir %{_prefix}/lib/menu
%_iconsdir %{_datadir}/icons
%_miconsdir %{_datadir}/icons/mini
%_liconsdir %{_datadir}/icons/large

%_xfontdir %_datadir/fonts

%_webconfdir %{_sysconfdir}/httpd/conf
%_webappconfdir %_webconfdir/sites.d

# compatibility
%webappconfdir %_webappconfdir

# For Appdata metainfo
%_metainfodir %{_datadir}/metainfo

#==============================================================================
# ---- Build configuration macros.
#
# Package version macro.
#	The type of package to produce, for compatibility with legacy
#	versions of rpm.
#
# Script gets packaged file list on input.
# Returns list of multiarch files that are not marked as such,
# i.e. files in $RPM_BUILD_ROOT that have arch-dependent values
#
# Note: Disable (by commenting out) for legacy compatibility.
#%__check_multiarch_files /usr/lib/rpm/check-multiarch-files %{buildroot}

# For rebuilding gcj-db
%_rebuildgcjdb_bin %{_bindir}/rebuild-gcj-db
%update_gcjdb if [ -x %{_rebuildgcjdb_bin} ]; then %{_rebuildgcjdb_bin} || true ; fi \
%{nil}

%clean_gcjdb if [ -x %{_rebuildgcjdb_bin} ]; then %{_rebuildgcjdb_bin} || true ; fi \
%{nil}

# Rebuild icon cache
#
# following themes are handled through filetriggers:
%icon_cache_through_filetrigger_hicolor 1
%icon_cache_through_filetrigger_gnome 1
%icon_cache_through_filetrigger_oxygen 1

%update_icon_cache() %{expand: %%{!?icon_cache_through_filetrigger_%1:if [ -x %%{_update_icon_cache_bin} ]; then \
%%{_update_icon_cache_bin} --force --quiet %%{_iconsdir}/%%{1} || true; fi \
%%{nil}}}

%clean_icon_cache() %{expand: %%{!?icon_cache_through_filetrigger_%1:if [ -x %%{_update_icon_cache_bin} -a -r %%{_iconsdir}/%%{1}/index.theme ]; then \
%%{_update_icon_cache_bin} --force --quiet %%{_iconsdir}/%%{1} || true ; fi \
%%{nil}}}

# GConf schemas:
# uninstall still need to be done in %preun:
%preun_uninstall_gconf_schemas() if [ "$1" = "0" -a -x %{_gconftool_bin} ]; then \
SCHEMAS="" \
for SCHEMA in %{*} ; do \
  SCHEMAS="$SCHEMAS %{_sysconfdir}/gconf/schemas/$SCHEMA.schemas" \
done \
GCONF_CONFIG_SOURCE=`%{_gconftool_bin} --get-default-source` %{_gconftool_bin} --makefile-uninstall-rule  $SCHEMAS > /dev/null || true ; fi \
%{nil}

# Mageia Linux version
# (user may copy the following line in specfile)
%mgaversion		%distro_release

%distsuffix .mga

%__dist_ident %{?distsuffix:%distsuffix}%{?!distsuffix:.mga}%{?distro_release:%distro_release}

%__distro_section %{?distro_section:%distro_section}%{?!distro_section:core}

%mkrel(c:) %{-c: 0.%{-c*}.}%{1}%{?subrel:.%subrel}%{?dist:%dist}%{?!dist:%__dist_ident}%([ "%{__distro_section}" != "core" ] && echo .%__distro_section)

%_logdir		%{_var}/log
%_localstatedir		/var

%_pkgdocdir             %{_docdir}/%{name}
%_docdir_fmt            %%{NAME}

# Include minimal debug information in build binaries.
# Requires _enable_debug_packages.
#
%_enable_debug_packages 1
%_include_minidebuginfo 1
%_include_gdb_index     1
%_debugsource_packages  1
%_debuginfo_subpackages 1

#------------------------------------------------------------------------------
# definions merged from manbo-setup-build
#

# Default extension to use (for info files)
%_extension .xz

%__install_info /sbin/install-info

%_install_info() if [[ -f %{_infodir}/%{1}%{_extension} ]]; then %{__install_info} %{_infodir}/%{1}%{_extension} --dir=%{_infodir}/dir; fi \
%{nil}

# (nb: keep the "alone on its line ';'")
%_remove_install_info() if [ "$1" = "0" ]; then if [[ -f %{_infodir}/%{1}%{_extension} ]]; then %{__install_info} %{_infodir}/%{1}%{_extension} --dir=%{_infodir}/dir --remove ; fi; fi \
%{nil}

# Macro: %{mklibname <name> [<major> [<minor>]] [-s] [-d]}
# - %{mklibname test}               => lib64test, on a lib64 platform
# - %{mklibname test 1 -d}      => libtest1-devel
# - %{mklibname test 1 -d 0 -s} => libtest1_0-static-devel
%mklibname(ds)  %{_lib}%{1}%{?2:%{2}}%{?3:_%{3}}%{-s:-static}%{-d:-devel}

# Dynamic EVRD tags macro for use with versioned provides/requires in place of
# '%{version}-%{release}', ie. to automatically add distepoch or epoch if present
%EVRD		%{?epoch:%{epoch}:}%{?version:%{version}}%{?release:-%{release}}%{?distepoch::%{distepoch}}

#==============================================================================
# ---- compiler flags.

# C compiler flags.  This is traditionally called CFLAGS in makefiles.
# Historically also available as %%{optflags}, and %%build sets the
# environment variable RPM_OPT_FLAGS to this value.
%build_cflags %{optflags}

# C++ compiler flags.  This is traditionally called CXXFLAGS in makefiles.
%build_cxxflags %{optflags}

# Fortran compiler flags.  Makefiles use both FFLAGS and FCFLAGS as
# the corresponding variable names.
%build_fflags %{optflags} %{?_fmoddir:-I%_fmoddir}

# Link editor flags.  This is usually called LDFLAGS in makefiles.
# (Some makefiles use LFLAGS instead.)  The default value assumes that
# the flags, while intended for ld, are still passed through the gcc
# compiler driver.  At the beginning of %%build, the environment
# variable RPM_LD_FLAGS to this value.
%build_ldflags %{?!_disable_ld_as_needed: -Wl,--as-needed}%{?!_disable_ld_no_undefined: -Wl,--no-undefined}%{?!_disable_ld_relro: -Wl,-z,relro}%{?!_disable_ld_O1: -Wl,-O1}%{?!_disable_ld_build_id: -Wl,--build-id}%{?!_disable_ld_enable_new_dtags: -Wl,--enable-new-dtags}

# For compatibility
%ldflags %build_ldflags

# Expands to shell code to seot the compiler/linker environment
# variables CFLAGS, CXXFLAGS, FFLAGS, FCFLAGS, LDFLAGS if they have
# not been set already.  RPM_OPT_FLAGS and RPM_LD_FLAGS have already
# been set implicitly at the start of the %%build section.
%set_build_flags \
  CFLAGS="${CFLAGS:-%{build_cflags}}" ; export CFLAGS ; \
  CXXFLAGS="${CXXFLAGS:-%{build_cxxflags}}" ; export CXXFLAGS ; \
  FFLAGS="${FFLAGS:-%{build_fflags}}" ; export FFLAGS ; \
  FCFLAGS="${FCFLAGS:-%{build_fflags}}" ; export FCFLAGS ; \
  LDFLAGS="${LDFLAGS:-%{build_ldflags}}" ; export LDFLAGS

# For compatibility
%setup_compile_flags \
  %{warn:%%setup_compile_flags is deprecated, use %%set_build_flags instead} \
  %set_build_flags

%debugcflags %{?_enable_debug_packages:-g}

%_fortify_cflags -Wp,-D_FORTIFY_SOURCE=2

# cf http://wiki.mandriva.com/en/Development/Packaging/Problems#format_not_a_string_literal_and_no_format_arguments
%Werror_cflags -Wformat -Werror=format-security

%_ssp_cflags -fstack-protector --param=ssp-buffer-size=4%{?_serverbuild_flags: %_serverbuild_flags}
%__common_cflags -O2 %{debugcflags} -pipe %{Werror_cflags} %{?_fortify_cflags}%{?_legacy_common_support: -fcommon}
%__common_cflags_with_ssp %{__common_cflags} %{?_ssp_cflags}

# Servers opt flags.
# Also set the env variables for backward compatibility (mdv #32050).
%serverbuild %define _serverbuild_flags -fstack-protector-all \
export CFLAGS="%optflags"; export CXXFLAGS="%optflags"; export RPM_OPT_FLAGS="%optflags" \
%{nil}

%make \
  %{warn:%%make is deprecated, use %%make_build instead} \
  %{__make} -O %_smp_mflags

%makeinstall_std \
  %{warn:%%makeinstall_std is deprecated, use %%make_install instead} \
  make DESTDIR=%{?buildroot:%{buildroot}} install

%__fix_libtool_ltmain_from_overlinking /usr/lib/rpm/mageia/fix-libtool-ltmain-from-overlinking
%__fix_libtool_from_moving_options_after_libs /usr/lib/rpm/mageia/fix-libtool-from-moving-options-after-libs
%__fix_dlsearch_path_in_libtool_for_multilib /usr/lib/rpm/mageia/fix-dlsearch-path-in-libtool-for-multilib

# Update config.{guess,sub}
%_configure_gnuconfig_hack 1

%before_configure \
  %set_build_flags \
  CONFIGURE_TOP="${CONFIGURE_TOP:-.}"; \
  if [ "%_configure_gnuconfig_hack" = "1" ]; then \
    for i in $(find ${CONFIGURE_TOP} -name config.guess -o -name config.sub); do \
      [ -f %{_rpmconfigdir}/%{_real_vendor}/$(basename $i) ] && cp -af %{_rpmconfigdir}/%{_real_vendor}/$(basename $i) $i; \
    done; \
  fi; \
  %{?!_disable_ld_as_needed:/usr/lib/rpm/mageia/force-as-needed-for-shared-lib-in-libtool ;} \
  %{?!_disable_ld_no_undefined:/usr/lib/rpm/mageia/drop-ld-no-undefined-for-shared-lib-modules-in-libtool ;} \
  %{__fix_libtool_ltmain_from_overlinking} ; \
  %{__fix_libtool_from_moving_options_after_libs} $CONFIGURE_TOP ; \
  %{__fix_dlsearch_path_in_libtool_for_multilib} $CONFIGURE_TOP %{_lib}

# This is an improved version of %configure (originally from PLD team).
%_configure $CONFIGURE_TOP/configure
%configure \
  %{before_configure}; \
  %{_configure} --host=%{_host} --build=%{_build} \\\
	--program-prefix=%{?_program_prefix} \\\
	--disable-dependency-tracking \\\
	--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}

%configure2_5x \
  %{warn:%%configure2_5x is deprecated, use %%configure instead} \
  %configure

# Maximum number of CPU's to use when building, 0 for unlimited.
%_smp_ncpus_max 0

# Deprecated names.  For backwards compatibility only.
%__global_cflags %{build_cflags}
%__global_cxxflags %{build_cxxflags}
%__global_fflags %{build_fflags}
%__global_fcflags %{build_fflags}
%__global_ldflags %{build_ldflags}

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


#==============================================================================
# ---- specfile macros.
#	Macro(s) here can be used reliably for reproducible builds.
#	(Note: Above is the goal, below are the macros under development)
#

#------------------------------------------------------------------------------
# Useful perl macros 
# (initially from Artur Frysiak <wiget@t17.ds.pwr.wroc.pl>)
# (modified by Pixel <pixel@mandriva.com>)
#
#	[...]
#	Group: Development/Perl
#	[...]
#	%build
#	perl Makefile.PL INSTALLDIRS=vendor
#	%make
#	[...]
#	%install
#	rm -rf $RPM_BUILD_ROOT
#	make install PREFIX="$RPM_BUILD_ROOT/%{prefix}"
#	[...]
#	%files
#	%defattr(644,root,root,755)
#	%{perl_vendorlib}/CGI
# or
#	%{perl_vendorarch}/DBI
#	%{perl_vendorarch}/auto/DBI
#	%{_mandir}/*/*
#

%perl_convert_version() %(perl -Mversion -le '
	$x = "%{1}";
	$y = $x;
	$x =~ s/[[:alpha:]]*$//;
	$y =~ s/^$x//;
	$x =~ s/\D*$//;
	$v = version->new($x)->normal;
	$v =~ s/^v//;
	print "$v$y";
')

#--------------------------------------------------------------------------------
# Macro from conectiva

%rename() \
Obsoletes: %{1} < %{?2:%2}%{?!2:%{?epoch:%epoch}%{?!epoch:0}:%{version}-%{release}} \
Provides: %{1} = %{?2:%2}%{?!2:%{?epoch:%epoch}%{?!epoch:0}:%{version}-%{release}}

# Shorthand for %{defined with_...}
# macros provided by rpm 4.4, but buggy :(
%_with() %{expand: %%{?_with_%1:1} %%{!?_with_%1: %%{?_without_%1:0} %%{!?_without_%1: %%{?with_%1:%%{with_%1}} %%{!?with_%1: %%{?without_%1:!%%{without_%1}} %%{!?without_%1: %%{?2:%%2} %%{!?2:1} } } } } }
%_without() !%{expand: %%{with %1 %{?2:%2}}}

#------------------------------------------------------------------------------
# Java Macros 
#

%gcj_support 0
%gcj_native \
%if %{gcj_support} \
BuildRequires: java-gcj-compat-devel \
%else \
BuildArch: noarch \
%endif

%aot_compile_rpm_bin %{_bindir}/aot-compile-rpm

%gcj_compile \
%if %{gcj_support} \
%aot_compile_rpm_bin \
%endif

%gcj_files \
%if %{gcj_support} \
%dir %{_libdir}/gcj/%{name} \
%attr(-,root,root) %{_libdir}/gcj/%{name}/* \
%endif

%remove_java_binaries \
find . -name "*.jar" -delete

%create_jar_links() \
pushd %{buildroot}%{_javadir}; \
for jar in *-%{version}.jar; do ln -sf ${jar} ${jar/-%{version}/}; done \
popd

#------------------------------------------------------------------------------
# Ocaml macro
#

%ocaml_sitelib %(if [ -x /usr/bin/ocamlc ]; then ocamlc -where;fi)/site-lib

#------------------------------------------------------------------------------
# Systemd and general service related macros
#

%_tmpfilescreate() /usr/bin/systemd-tmpfiles --create %{1}.conf \
%{nil}

# Minimum versions for various packaging helpers.
# These is defined here to easy upgrading from previous distros when the various
# service helpers change and thus those pacakges need to be installed first to
# ensure a smooth upgrade
%rpmhelper_required_version 0.24.11
%systemd_required_version 195

#------------------------------------------------------------------------------
# Redefine RPM sections to allow jumping over them using "--without <section>".
# This an interesting alternative to --short-circuit.
# The following are mostly equivalent:
# % rpmbuild -bi --short-circuit foo.spec && rpmbuild -bb --short-circuit foo.spec
# % rpmbuild -bb --without build foo.spec

%prep %%prep \
[ %{_with prep} -eq 1 ] || exit 0 \
[ %{_with build} -eq 1 ] || exit 0 \
[ %{_with install} -eq 1 ] || exit 0 \
%{nil}

%build %%build \
[ %{_with install} -eq 1 ] || exit 0 \
[ %{_with build} -eq 1 ] || exit 0 \
%{nil}

#---------------------------------------------------------------------
#       Expanded at beginning of %install scriptlet.
#

%__spec_install_pre %{___build_pre}\
if [ %{_with install} -eq 1 ]; then\
    [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "${RPM_BUILD_ROOT}"\
    mkdir -p `dirname "$RPM_BUILD_ROOT"`\
    mkdir "$RPM_BUILD_ROOT"\
fi

#---------------------------------------------------------------------
#	Expanded at end of %install scriptlet.

%__brp_strip /usr/lib/rpm/brp-strip %{__strip}
%__brp_strip_comment_note /usr/lib/rpm/brp-strip-comment-note %{__strip} %{__objdump}
%__brp_strip_static_archive /usr/lib/rpm/brp-strip-static-archive %{__strip}
%__brp_strip_shared /usr/lib/rpm/brp-strip-shared %{__strip}
%__brp_python_bytecompile /usr/lib/rpm/brp-python-bytecompile "%{__python}" "%{?_python_bytecompile_errors_terminate_build}" "%{?_python_bytecompile_extra}"
%__brp_python_hardlink /usr/lib/rpm/brp-python-hardlink
# __brp_mangle_shebangs_exclude - shebangs to exclude
# __brp_mangle_shebangs_exclude_file - file from which to get shebangs to exclude
# __brp_mangle_shebangs_exclude_from - files to ignore
# __brp_mangle_shebangs_exclude_from_file - file from which to get files to ignore
%__brp_mangle_shebangs /usr/lib/rpm/redhat/brp-mangle-shebangs %{?__brp_mangle_shebangs_exclude:--shebangs "%{?__brp_mangle_shebangs_exclude}"} %{?__brp_mangle_shebangs_exclude_file:--shebangs-from "%{__brp_mangle_shebangs_exclude_file}"} %{?__brp_mangle_shebangs_exclude_from:--files "%{?__brp_mangle_shebangs_exclude_from}"} %{?__brp_mangle_shebangs_exclude_from_file:--files-from "%{__brp_mangle_shebangs_exclude_from_file}"}

%__arch_install_post   /usr/lib/rpm/check-buildroot

%__os_install_post    \
    %{?__spec_helper_post}%{?!__spec_helper_post:/usr/share/spec-helper/spec-helper} \
    %{!?__debug_package:\
    %{?__brp_strip} \
    %{?__brp_strip_comment_note} \
    %{?__brp_strip_static_archive} \
    %{?__brp_strip_shared} \
    } \
    %{?py_auto_byte_compile:%{?__brp_python_bytecompile}} \
    %{?__brp_python_hardlink} \
    %{?__brp_mangle_shebangs} \
%{nil}

%__spec_install_post\
    %{?__debug_package:%{__debug_install_post}}\
    %{__arch_install_post}\
    %{__os_install_post}\
%{nil}

%install %{?_enable_debug_packages:%{?buildsubdir:%{debug_package}}}\
%%install\
[ %{_with install} -eq 1 ] || exit 0 \
%{nil}

%check %%check \
[ %{_with check} -eq 1 ] || exit 0 \
%{nil}

#
# Should missing buildids terminate a build?
%_missing_build_ids_terminate_build    1

#
## Automatically compile python files
%py_auto_byte_compile 1

#
## Should python bytecompilation errors terminate a build?
%_python_bytecompile_errors_terminate_build 1

#
## Should python bytecompilation compile outisde python specific directories?
%_python_bytecompile_extra 1

# Use SHA-256 for FILEDIGESTS instead of default MD5
%_source_filedigest_algorithm 8
%_binary_filedigest_algorithm 8

# Use Zstandard compression for binary payloads
%_binary_payload w19.zstdio

# Automatically trim changelog entries after 2 years
%_changelog_trimtime	%{lua:print(os.time() - 2 * 365 * 86400)}
