--- /dev/null
+%__java_requires env RPM_BUILD_ROOT=%{buildroot} MIN_CLASSDATAVERSION=%{?java_min_classdataversion} %{_rpmhome}/java-find-requires
+%__java_magic ^Java .*
+%__java_path \\.(jar|class)$
--- /dev/null
+%__kernel_provides %{_rpmhome}/kmod-deps.sh --provides --modinfo %__modinfo
+#__kernel_requires %{_rpmhome}/kmod-deps.sh --requires --modinfo %__modinfo
+%__kernel_path ^.*/lib/modules/.*\.ko(\.gz|\.xz)?$
--- /dev/null
+%__php_provides %{_rpmhome}/php.prov
+# define 'php_req_new' in ~/.rpmmacros to use php version of req finder
+%__php_requires env PHP_MIN_VERSION=%{?php_min_version} %{_rpmhome}/php.req%{?php_req_new:.php}
+%__php_magic ^PHP script.*
+%__php_path \\.php$
--- /dev/null
+%__ruby_provides %{_rpmhome}/rubygems.rb --provides
+%__ruby_requires %{_rpmhome}/rubygems.rb --requires
+%__ruby_magic ^[rR]uby script text.*
+%__ruby_path ^/usr/(share|lib|lib64|libx32)/(ruby|gems/specifications)/.*
--- /dev/null
+#!/bin/sh
+PROG=${0##*/}
+if [ $# = 2 ]; then
+ # for using same syntax as rpm own find-lang
+ RPM_BUILD_ROOT=$1
+ shift
+fi
+dir=$RPM_BUILD_ROOT/usr/share/dokuwiki
+langfile=$1
+tmp=$(mktemp) || exit 1
+rc=0
+
+find $dir -type d -name lang > $tmp
+
+echo '%defattr(644,root,root,755)' > $langfile
+while read dir; do
+ echo "%dir ${dir#$RPM_BUILD_ROOT}" >> $langfile
+ for dir in $dir/*; do
+ lang=${dir##*/}
+ dir=${dir#$RPM_BUILD_ROOT}
+ case "$lang" in
+ zh-tw)
+ lang=zh_TW
+ ;;
+ pt-br)
+ lang=pt_BR
+ ;;
+ sl-si)
+ lang=sl
+ ;;
+ id-ni)
+ lang=id_NI
+ ;;
+ ca-valencia)
+ lang=ca@valencia
+ ;;
+ hu-formal)
+ lang=hu
+ ;;
+ de-informal)
+ lang=de
+ ;;
+ zh-cn)
+ lang=zh_CN
+ ;;
+ *-*)
+ echo >&2 "ERROR: Need mapping for $lang!"
+ rc=1
+ ;;
+ esac
+ if [ "$lang" = "en" ]; then
+ echo "${dir#$RPM_BUILD_ROOT}" >> $langfile
+ else
+ echo "%lang($lang) ${dir#$RPM_BUILD_ROOT}" >> $langfile
+ fi
+ done
+done < $tmp
+
+if [ "$(grep -Ev '(^%defattr|^$)' $langfile | wc -l)" -le 0 ]; then
+ echo >&2 "$PROG: Error: international files not found!"
+ rc=1
+fi
+
+rm -f $tmp
+exit $rc
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+<xsl:output method="text"/>
+
+<!-- we match from root, not to left anything to default template -->
+<xsl:template match="/">
+ <xsl:apply-templates select="feature"/>
+</xsl:template>
+
+<xsl:template match="feature">
+ <!-- process provides -->
+ <xsl:if test="$mode = 'provides'">
+ <!-- include root tag of feature -->
+ <xsl:text>eclipse(</xsl:text>
+ <xsl:value-of select="@id"/>
+ <xsl:text>) = </xsl:text>
+ <xsl:value-of select="@version"/>
+ <xsl:text> </xsl:text>
+
+ <!-- is feature and plugin any way different? -->
+ <!-- process feature/plugin -->
+ <xsl:for-each select="plugin">
+ <xsl:text>eclipse(</xsl:text>
+ <xsl:value-of select="@id"/>
+ <xsl:text>) = </xsl:text>
+ <xsl:value-of select="@version"/>
+ <xsl:text> </xsl:text>
+ </xsl:for-each>
+ <!-- process feature/includes -->
+ <xsl:for-each select="includes">
+ <xsl:text>eclipse(</xsl:text>
+ <xsl:value-of select="@id"/>
+ <xsl:text>) = </xsl:text>
+ <xsl:value-of select="@version"/>
+ <xsl:text> </xsl:text>
+ </xsl:for-each>
+ </xsl:if>
+
+ <!-- process requires -->
+ <xsl:if test="$mode = 'requires'">
+ <xsl:for-each select="requires/import">
+ <xsl:text>eclipse(</xsl:text>
+ <!-- match plugin or feature -->
+ <xsl:if test="@plugin != ''">
+ <xsl:value-of select="@plugin"/>
+ </xsl:if>
+ <xsl:if test="@feature != ''">
+ <xsl:value-of select="@feature"/>
+ </xsl:if>
+ <xsl:text>)</xsl:text>
+
+ <!-- handle match="perfect" (probably means: same version as us) -->
+ <xsl:if test="@match = 'perfect'">
+ <xsl:text> = </xsl:text>
+ <xsl:value-of select="//feature/@version"/>
+ </xsl:if>
+
+ <xsl:if test="@match = 'compatible'">
+ <xsl:text> >= </xsl:text>
+ <xsl:value-of select="@version"/>
+ </xsl:if>
+
+ <!-- apparently: base ver or greater -->
+ <xsl:if test="@match = 'equivalent'">
+ <xsl:text> >= </xsl:text>
+ <xsl:value-of select="@version"/>
+ </xsl:if>
+
+ <!-- no qualifier, assume any? -->
+ <xsl:if test="@match = ''">
+ <xsl:text> >= </xsl:text>
+ <xsl:value-of select="@version"/>
+ </xsl:if>
+
+ <xsl:text> </xsl:text>
+ </xsl:for-each>
+ </xsl:if>
+
+</xsl:template>
+
+</xsl:stylesheet>
--- /dev/null
+#!/bin/sh
+
+# find-lang - automagically generate list of language specific files
+# for inclusion in an rpm spec file.
+# This does assume that the *.mo files are under .../share/locale/...
+# Run with no arguments gets a usage message.
+
+# findlang is copyright (c) 1998 by W. L. Estes <wlestes@uncg.edu>
+
+# Redistribution and use of this software are hereby permitted for any
+# purpose as long as this notice and the above copyright notice remain
+# in tact and are included with any redistribution of this file or any
+# work based on this file.
+
+# Changes:
+#
+# 2012-12-22 Elan Ruusamäe <glen@pld-linux.org>
+# * added --with-mate
+# 2006-08-28 Elan Ruusamäe <glen@pld-linux.org>
+# * fixed --all-name which got broken with last change.
+# 2006-08-09 Elan Ruusamäe <glen@pld-linux.org>
+# * huge performance boost for packages calling %find_lang multiple times (kde*i18n)
+# 2001-01-08 Michał Kochanowicz <mkochano@pld.org.pl>
+# * --all-name support for KDE.
+# 2000-11-28 Rafał Cygnarowski <pascalek@pld.org.pl>
+# * next simple rule for KDE
+# 2000-11-12 Rafał Cygnarowski <pascalek@pld.org.pl>
+# * simple rules for KDE help files
+# 2000-06-05 Michał Kochanowicz <mkochano@pld.org.pl>
+# * exact, not substring matching $NAME, i.e. find-lang top_dir NAME will
+# no longer find /usr/share/locale/pl/LC_MESSAGES/<anything>NAME.mo.
+# 2000-04-17 Arkadiusz Miśkiewicz <misiek@pld.org.pl>
+# * exit 1 when no files found
+# 1999-10-19 Artur Frysiak <wiget@pld.org.pl>
+# * added support for GNOME help files
+# * start support for KDE help files
+
+PROG=${0##*/}
+VERSION=1.40
+
+usage () {
+cat <<EOF
+Usage: $PROG TOP_DIR PACKAGE_NAME [prefix]
+
+where TOP_DIR is
+the top of the tree containing the files to be processed--should be
+\$RPM_BUILD_ROOT usually. TOP_DIR gets sed'd out of the output list.
+PACKAGE_NAME is the %{name} of the package. This should also be
+the basename of the .mo files. the output is written to
+PACKAGE_NAME.lang unless \$3 is given in which case output is written
+to \$3.
+Additional options:
+ --with-gnome find GNOME help files
+ --with-mate find MATE help files
+ --with-kde find KDE help files
+ --with-omf find OMF files
+ --with-qm find QT .qm files
+ --with-django find translations in Django project
+ --all-name match all package/domain names
+ --without-mo skip *.mo locale files
+ -o NAME output will be saved to NAME
+ -a NAME output will be appended to NAME
+EOF
+exit 1
+}
+
+if [ -z "$1" ]; then
+ usage
+elif [ $1 = / ]; then
+ echo >&2 "$PROG: expects non-/ argument for '$1'"
+ exit 1
+elif [ ! -d $1 ]; then
+ echo >&2 "$PROG: $1: No such directory"
+ exit 1
+else
+ TOP_DIR="${1%/}"
+fi
+shift
+
+if [ -z "$1" ]; then
+ usage
+else
+ NAME=$1
+fi
+shift
+
+GNOME='#'
+MATE='#'
+KDE='#'
+OMF='#'
+QM='#'
+DJANGO='#'
+MO=''
+OUTPUT=$NAME.lang
+ALL_NAME='#'
+NO_ALL_NAME=''
+APPEND=''
+while test $# -gt 0; do
+ case "$1" in
+ --with-gnome)
+ GNOME=''
+ echo >&2 "$PROG: Enabling with GNOME"
+ shift
+ ;;
+ --with-mate)
+ MATE=''
+ echo >&2 "$PROG: Enabling with MATE"
+ shift
+ ;;
+ --with-kde)
+ echo >&2 "$PROG: Enabling with KDE"
+ KDE=''
+ shift
+ ;;
+ --with-omf)
+ echo >&2 "$PROG: Enabling with OMF"
+ OMF=''
+ shift
+ ;;
+ --with-qm)
+ echo >&2 "$PROG: Enabling with Qt QM"
+ QM=''
+ shift
+ ;;
+ --with-django)
+ echo >&2 "$PROG: Enabling with Django"
+ DJANGO=''
+ shift
+ ;;
+ --without-mo)
+ echo >&2 "$PROG: Disabling .mo files"
+ MO='#'
+ shift
+ ;;
+ --all-name)
+ echo >&2 "$PROG: Enabling with all names"
+ ALL_NAME=''
+ NO_ALL_NAME='#'
+ shift
+ ;;
+ -o)
+ shift
+ OUTPUT=$1
+ shift
+ ;;
+ -a)
+ shift
+ OUTPUT=$1
+ APPEND='>'
+ shift
+ ;;
+ *)
+ OUTPUT=$1
+ shift
+ ;;
+ esac
+done
+
+echo >&2 "$PROG/$VERSION: find-lang '$NAME' $APPEND> $OUTPUT"
+
+MO_NAME=.$OUTPUT.tmp~
+echo '%defattr(644,root,root,755)' > $MO_NAME
+
+# .mo
+if [ ! -f __find.files ] || [ "$TOP_DIR" -nt __find.files ]; then
+ find $TOP_DIR -xtype f -name '*.mo' | xargs -r file -L | \
+ sed -e '
+ /, 1 message/d
+ s/:.*//
+ s:'"$TOP_DIR"'::' > __find.files
+else
+ echo >&2 "$PROG: Using cached __find.files"
+fi
+
+# .omf
+if [ ! -f __omf.files ] || [ "$TOP_DIR" -nt __omf.files ]; then
+ find $TOP_DIR -type f -name '*.omf' | \
+ sed -e '
+ s:'"$TOP_DIR"'::' > __omf.files
+else
+ echo >&2 "$PROG: Using cached __omf.files"
+fi
+
+# .qm
+if [ ! -f __qm.files ] || [ "$TOP_DIR" -nt __qm.files ]; then
+ find $TOP_DIR -type f -name '*.qm' | \
+ sed -e '
+ s:'"$TOP_DIR"'::' > __qm.files
+else
+ echo >&2 "$PROG: Using cached __qm.files"
+fi
+
+# .mo
+(
+ if [ "$ALL_NAME" ]; then
+ grep -F $NAME __find.files
+ else
+ cat __find.files
+ fi
+) | sed '
+'"$ALL_NAME$MO"'s:\(.*/share/locale/\)\([^/@]\+\)\(@quot\|@boldquot\)\?\(@[^/]*\)\?\(/.*\.mo$\):%lang(\2\4) \1\2\3\4\5:
+'"$NO_ALL_NAME$MO"'s:\(.*/share/locale/\)\([^/@]\+\)\(@quot\|@boldquot\)\?\(@[^/]*\)\?\(/.*/'"$NAME"'\.mo$\):%lang(\2\4) \1\2\3\4\5:
+/^[^%]/d
+s:%lang(C) ::' >> $MO_NAME
+
+# .omf
+(
+ if [ "$ALL_NAME" ]; then
+ grep -F $NAME __omf.files
+ else
+ cat __omf.files
+ fi
+) | sed '
+'"$ALL_NAME$OMF"'s:\(.*/share/omf/[^/]\+/\)\(.*-\)\([^-]*\)\(\.omf\):%lang(\3) \1\2\3\4:
+'"$NO_ALL_NAME$OMF"'s:\(.*/share/omf/'"$NAME"'/\)\(.*-\)\([^-]*\)\(\.omf\):%lang(\3) \1\2\3\4:
+/^[^%]/d
+s:%lang(C) ::' >> $MO_NAME
+
+# .qm
+(
+ if [ "$ALL_NAME" ]; then
+ grep -F $NAME __qm.files
+ else
+ cat __qm.files
+ fi
+) | sed '
+'"$NO_ALL_NAME$QM"'s:\(.*/'"$NAME"'_\([a-zA-Z]\{2\}\([_@].*\)\?\)\.qm$\):%lang(\2) \1:
+'"$NO_ALL_NAME$QM"'s:\(.*/share/locale/\)\([^/@]\+\)\(@quot\|@boldquot\)\?\(@[^/]*\)\?\(/.*/'"$NAME"'\.qm$\):%lang(\2\4) \1\2\3\4\5:
+'"$ALL_NAME$QM"'s:\(.*/[^/_]\+_\([a-zA-Z]\{2\}[_@].*\)\.qm$\):%lang(\2) \1:
+'"$ALL_NAME$QM"'s:\(.*/[^/_]\+_\([a-zA-Z]\{2\}\)\.qm$\):%lang(\2) \1:
+'"$ALL_NAME$QM"'s:^\([^%].*/[^/]\+_\([a-zA-Z]\{2\}[_@].*\)\.qm$\):%lang(\2) \1:
+'"$ALL_NAME$QM"'s:^\([^%].*/[^/]\+_\([a-zA-Z]\{2\}\)\.qm$\):%lang(\2) \1:
+s:^[^%].*::
+/^[^%]/d
+s:%lang(C) ::' >> $MO_NAME
+
+if [ ! -f __find.dirs ] || [ "$TOP_DIR" -nt __find.dirs ]; then
+ find $TOP_DIR -mindepth 1 -type d | sed 's:'"$TOP_DIR"'::' > __find.dirs
+else
+ echo >&2 "$PROG: Using cached __find.dirs"
+fi
+
+# gnome
+(
+ if [ "$ALL_NAME" ]; then
+ grep -F $NAME __find.dirs
+ else
+ cat __find.dirs
+ fi
+) | sed '
+'"$NO_ALL_NAME$GNOME"'s:\(.*/share/help/\)\([^/]\+\)\(/'"$NAME"'\)$:%lang(\2) \1\2\3:
+'"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'$\):%dir \1:
+'"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'/\)\([^/]\+\)$:%lang(\2) \1\2:
+'"$ALL_NAME$GNOME"'s:\(.*/share/help/\)\([^/]\+\)\(/[^/]\+\)$:%lang(\2) \1\2\3:
+'"$ALL_NAME$GNOME"'s:\(.*/gnome/help/[^/]\+$\):%dir \1:
+'"$ALL_NAME$GNOME"'s:\(.*/gnome/help/[^/]\+/\)\([^/]\+\)$:%lang(\2) \1\2:
+/^[^%]/d
+s:%lang(C) ::' >> $MO_NAME
+
+# mate
+(
+ if [ "$ALL_NAME" ]; then
+ grep -F $NAME __find.dirs
+ else
+ cat __find.dirs
+ fi
+) | sed '
+'"$NO_ALL_NAME$MATE"'s:\(.*/share/help/\)\([^/]\+\)\(/'"$NAME"'\)$:%lang(\2) \1\2\3:
+'"$NO_ALL_NAME$MATE"'s:\(.*/mate/help/'"$NAME"'$\):%dir \1:
+'"$NO_ALL_NAME$MATE"'s:\(.*/mate/help/'"$NAME"'/\)\([^/]\+\)$:%lang(\2) \1\2:
+'"$ALL_NAME$MATE"'s:\(.*/share/help/\)\([^/]\+\)\(/[^/]\+\)$:%lang(\2) \1\2\3:
+'"$ALL_NAME$MATE"'s:\(.*/mate/help/[^/]\+$\):%dir \1:
+'"$ALL_NAME$MATE"'s:\(.*/mate/help/[^/]\+/\)\([^/]\+\)$:%lang(\2) \1\2:
+/^[^%]/d
+s:%lang(C) ::' >> $MO_NAME
+
+# kde
+(
+ if [ "$ALL_NAME" ]; then
+ grep -F $NAME __find.dirs
+ else
+ cat __find.dirs
+ fi
+) | sed '
+'"$NO_ALL_NAME$KDE"'s:\(.*/doc/kde/HTML/\)\([^/]\+\)\(/'"$NAME"'\)$:%lang(\2) \1\2\3:
+'"$ALL_NAME$KDE"'s:\(.*/doc/kde/HTML/\)\([^/]\+\)\(/[^/]\+\)$:%lang(\2) \1\2\3:
+/^[^%]/d
+s:%lang(C) ::' >> $MO_NAME
+
+# OMF
+(
+ if [ "$ALL_NAME" ]; then
+ grep -F $NAME __find.dirs
+ else
+ cat __find.dirs
+ fi
+) | sed '
+'"$NO_ALL_NAME$OMF"'s:\(.*/share/omf/'"$NAME"'$\):%dir \1:
+'"$ALL_NAME$OMF"'s:\(.*/share/omf/[^/]\+$\):%dir \1:
+/^[^%]/d
+s:%lang(C) ::' >> $MO_NAME
+
+# Django
+cat __find.dirs | sed -r -e '
+'"$DJANGO"'s:(.+/share/python.+/locale/)([^/@]+)(@quot|@boldquot)?(@[^/]*)?$:%lang(\2\4) \1\2\3\4:
+/^[^%]/d
+s:%lang(C) ::' >> $MO_NAME
+
+if [ "$(grep -Ev '(^%defattr|^$)' $MO_NAME | wc -l)" -le 0 ]; then
+ echo >&2 "$PROG: Error: international files not found for '$NAME'!"
+ exit 1
+fi
+
+if [ "$APPEND" ]; then
+ cat $MO_NAME >> $OUTPUT
+ rm -f $MO_NAME
+else
+ mv -f $MO_NAME $OUTPUT
+fi
--- /dev/null
+#!/usr/bin/ruby
+#--
+# Copyright 2010 Per Øyvind Karlsen <peroyvind@mandriva.org>
+# This program is free software. It may be redistributed and/or modified under
+# the terms of the LGPL version 2.1 (or later).
+#++
+
+require 'optparse'
+require 'rubygems'
+
+# Write the .gemspec specification (in Ruby)
+def writespec(spec)
+ file_name = spec.full_name.untaint + '.gemspec'
+ File.open(file_name, "w") do |file|
+ file.puts spec.to_ruby_for_cache
+ end
+ print "Wrote: %s\n" % file_name
+end
+
+# make gemspec self-contained
+if ARGV[0] == "spec-dump"
+ spec = eval(File.read(ARGV[1]))
+ writespec(spec)
+ exit(0)
+end
+
+if ARGV[0] == "build" or ARGV[0] == "install" or ARGV[0] == "spec"
+ require 'yaml'
+ require 'zlib'
+
+ filter = nil
+ opts = nil
+ keepcache = false
+ fixperms = false
+ gemdir = nil
+ dry_run = false
+ files = []
+ argv = ARGV[1..-1]
+ # Push this into some environment variables as the modified classes doesn't
+ # seem to be able to access our global variables.. </lameworkaround>
+ ENV['GEM_MODE'] = ARGV[0]
+ if ARGV[0] == "build"
+ opts = OptionParser.new("#{$0} <--filter PATTERN>")
+ opts.on("-f", "--filter PATTERN", "Filter pattern to use for gem files") do |val|
+ filter = val
+ end
+ opts.on("-j", "--jobs JOBS", "Number of jobs to run simultaneously.") do |val|
+ ENV['jobs'] = "-j"+val
+ end
+ opts.on("--dry-run", "Only show the files the gem will include") do
+ ARGV.delete("--dry-run")
+ dry_run = true
+ end
+ elsif ARGV[0] == "install"
+ opts = OptionParser.new("#{$0} <--keep-cache>")
+ opts.on("--keep-cache", "Don't delete gem copy from cache") do
+ ARGV.delete("--keep-cache")
+ keepcache = true
+ end
+ opts.on("--fix-permissions", "Force standard permissions for files installed") do
+ ARGV.delete("--fix-permissions")
+ fixperms = true
+ end
+ opts.on("-i", "--install-dir GEMDIR", "Gem repository directory") do |val|
+ gemdir = val
+ end
+ end
+ while argv.length > 0
+ begin
+ opts.parse!(argv)
+ rescue OptionParser::InvalidOption => e
+ e.recover(argv)
+ end
+ argv.delete_at(0)
+ end
+
+ file_data = Zlib::GzipReader.open("metadata.gz") {|io| io.read}
+ header = YAML::load(file_data)
+ body = {}
+ # I don't know any better.. :/
+ header.instance_variables.each do |iv|
+ body[iv.to_s.sub(/^@/,'')] = header.instance_variable_get(iv)
+ end
+
+ spec = Gem::Specification.from_yaml(YAML.dump(header))
+
+ if ARGV[0] == "spec"
+ writespec(spec)
+ exit(0)
+ end
+
+ if ARGV[0] == "install"
+ system("gem %s %s.gem" % [ARGV.join(' '), spec.full_name])
+ if !keepcache
+ require 'fileutils'
+ FileUtils.rm_rf("%s/cache" % gemdir)
+ end
+ if fixperms
+ chmod = "chmod u+r,u+w,g-w,g+r,o+r -R %s" % gemdir
+ print "\nFixing permissions:\n\n%s\n" % chmod
+ system("%s" % chmod)
+ print "\n"
+ end
+ end
+
+ if body['extensions'].size > 0
+ require 'rubygems/ext'
+ module Gem::Ext
+ class Builder
+ def self.make(dest_path, results)
+ make_program = ENV['make']
+ unless make_program then
+ make_program = (/mswin/ =~ RUBY_PLATFORM) ? 'nmake' : 'make'
+ end
+ cmd = make_program
+ if ENV['GEM_MODE'] == "build"
+ cmd += " %s" % ENV['jobs']
+ elsif ENV['GEM_MODE'] == "install"
+ cmd += " DESTDIR='%s' install" % ENV['DESTDIR']
+ end
+ results << cmd
+ results << `#{cmd} #{redirector}`
+
+ raise Gem::ExtensionBuildError, "make failed:\n\n#{results}" unless
+ $?.success?
+ end
+ end
+ end
+
+ require 'rubygems/installer'
+ module Gem
+ class Installer
+ def initialize(spec, options={})
+ @gem_dir = Dir.pwd
+ @spec = spec
+ end
+ end
+ class ConfigFile
+ def really_verbose
+ true
+ end
+ end
+ end
+
+ unless dry_run
+ Gem::Installer.new(spec).build_extensions
+ else
+ for ext in body['extensions']
+ files.push(ext[0..ext.rindex("/")-1]+".so")
+ end
+ end
+
+ body['extensions'].clear()
+ end
+ if ARGV[0] == "build"
+ body['test_files'].clear()
+
+ # We don't want ext/ in require_paths, it will only contain content for
+ # building extensions which needs to be installed in sitearchdir anyways..
+ idx = 0
+ for i in 0..body['require_paths'].size()-1
+ if body['require_paths'][idx].match("^ext(/|$)")
+ body['require_paths'].delete_at(idx)
+ else
+ idx += 1
+ end
+ end
+
+ # We'll get rid of all the files we don't really need to install
+ idx = 0
+ for i in 0..body['files'].size()-1
+ if filter and body['files'][idx].match(filter)
+ match = true
+ else
+ match = false
+ for path in body['require_paths']
+ if body['files'][idx].match("^%s/" % path)
+ match = true
+ end
+ end
+ end
+ if !match
+ body['files'].delete_at(idx)
+ else
+ idx += 1
+ end
+ end
+
+ spec = Gem::Specification.from_yaml(YAML.dump(header))
+ unless dry_run
+ Gem::Builder.new(spec).build
+ else
+ files.concat(spec.files)
+ print "%s\n" % files.join("\n")
+ end
+ end
+end
--- /dev/null
+# browser plugins v2
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+#
+# Usage:
+# %browser_plugins_add_browser <name> -p <plugindir>
+#
+# <name> (required) -- name of the browser. usually %{name}.
+# -p <plugindir> (required) -- in what directory browser searches for its plugins.
+# -b -- default blacklists
+# -a <arch> override arch
+#
+# Example:
+# %browser_plugins_add_browser %{name} -p %{_firefoxdir}/plugins
+
+%_browserpluginsconfdir /etc/browser-plugins
+%_browserpluginsdir %{_libdir}/browser-plugins
+%update_browser_plugins /usr/sbin/update-browser-plugins || :
+
+%browser_plugins_add_browser(p:b:a:) \
+ browser=%1.%{!-a:%{_target_base_arch}}%{-a*} \
+ install -d $RPM_BUILD_ROOT%{_browserpluginsconfdir}/{blacklist,browsers}.d \
+ ln -s %{-p*} $RPM_BUILD_ROOT%{_browserpluginsconfdir}/browsers.d/$browser \
+ blacklist_file=$RPM_BUILD_ROOT%{_browserpluginsconfdir}/blacklist.d/$browser.blacklist \
+ echo '# This file format is shell globs at base dir of plugindir' > $blacklist_file \
+ %{-b:cat >> $blacklist_file %{-b*}} \
+%{nil}
--- /dev/null
+# Import or update Cacti template.
+#
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+#
+# Usage:
+# %cacti_import_template XMLFILE
+# XMLFILE -- XML template to import
+#
+# Sample:
+# %post
+# %cacti_import_template %{resourcedir}/cacti_host_template_varnish.xml
+#
+# Requires: cacti >= 0.8.7e-8
+# BuildRequires: rpmbuild(macros) >= 1.630
+# Note: 1.1 (cacti-0.8.7h) adds requirement for --with-template-rras or --with-user-rras option
+
+%cacti_import_template() {\
+v=$(%{__sed} -rne 's/.+Add Graphs Script ([0-9\.]+).+/\1/p' /usr/share/cacti/cli/import_template.php); \
+if [ "$v" != "1.0" ]; then \
+ rra="--with-template-rras"; \
+fi; \
+/usr/share/cacti/cli/import_template.php --filename=%1 $rra || :; \
+}%{nil}
--- /dev/null
+# (X)emacs support
+%___emacs_lispdir_helper -batch -q -eval '(while load-path (princ (concat (car load-path) "\\n")) (setq load-path (cdr load-path)))' 2> /dev/null|sed -n '/\\(.*\\/x\\?emacs\\/site-lisp\\)\\/\\?$/{s,,\\1,p;q;}'
+%_emacs_lispdir %{expand:%%global _emacs_lispdir %(Z=$(emacs %___emacs_lispdir_helper); echo ${Z:-ERROR})}%_emacs_lispdir
+%_xemacs_lispdir %{expand:%%global _xemacs_lispdir %(Z=$(xemacs %___emacs_lispdir_helper); echo ${Z:-ERROR})}%_xemacs_lispdir
--- /dev/null
+# 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; \
+ [ ! -x /usr/bin/ghc-pkg ] || /usr/bin/ghc-pkg recache; \
+};} \
+%{nil}
--- /dev/null
+# vim:ts=4 sw=4 noet ft=spec
+#
+# Java macros. based on jpackage macros.java
+#
+# Import packaging conventions from jpackage.org (prefixed with _
+# to avoid name collisions).
+#
+%_javadir %{_datadir}/java
+%_javadocdir %{_datadir}/javadoc
+
+# Root directory where all Java VMs/SDK/JREs are installed.
+%_jvmdir %{_libdir}/jvm
+
+# Root directory where all Java VMs/SDK/JREs expose their jars
+%_jvmjardir %{_libdir}/jvm-exports
+
+# Root directory for all Java VM/SDK/JRE's private things.
+%_jvmprivdir %{_libdir}/jvm-private
+
+# Root directory for all architecture dependent parts of Java VM/SDK/JRE's
+%_jvmlibdir %{_libdir}/jvm
+
+# Root directory for all architecture independent parts of Java VM/SDK/JRE's
+%_jvmdatadir %{_datadir}/jvm
+
+# Root directory for all configurations parts of Java VM/SDK/JRE's
+%_jvmsysconfdir %{_sysconfdir}/jvm
+
+# Root directory for all common architecture dependent parts of Java VM/SDK/JRE's
+%_jvmcommonlibdir %{_libdir}/jvm-common
+
+# Root directory for all common architecture independent parts of Java VM/SDK/JRE's
+%_jvmcommondatadir %{_datadir}/jvm-common
+
+# Root directory for all common configurations parts of Java VM/SDK/JRE's
+%_jvmcommonsysconfdir %{_sysconfdir}/jvm-common
+
+# Directory where arch-specific (JNI) version-independent jars are installed.
+%_jnidir %{_libdir}/java
+
+
+# JDK selection. Set this to name of the JDK implementation to use
+# insead of the system default
+#%use_jdk icedtea6
+
+# expands to the value with right jdk for BuildRequires header
+# 'jdk' if %%use_jdk is not defined, jdk(%%use_jdk) otherwise
+# The requirement will not replace current 'default' JDK
+%required_jdk jdk%{?use_jdk:(%{use_jdk})}
+
+%buildrequires_jdk BuildRequires: %required_jdk
+
+%java_home %{expand:%%global java_home %([ -f %{_javadir}-utils/java-functions ] || { echo ERROR; exit 0; }; %{!?use_jdk:unset JAVA_HOME; . %{_javadir}-utils/java-functions; set_jvm}%{?use_jdk:JAVA_HOME=%{_jvmdir}/%{use_jdk}}; echo ${JAVA_HOME:-ERROR})}%java_home
+
+%_javasrcdir %{_usrsrc}/java
+
+%ant JAVA_HOME=%{java_home} CLASSPATH=$CLASSPATH ant
+%jar %{java_home}/bin/jar
+%java %{expand:%%global java %([ -f %{_javadir}-utils/java-functions ] || { echo ERROR; exit 0; }; %{!?use_jdk:unset JAVACMD; . %{_javadir}-utils/java-functions; set_javacmd}%{?use_jdk:JAVACMD=%{java_home}/bin/java}; echo $JAVACMD)}%java
+%javac %{java_home}/bin/javac
+%javadoc %{java_home}/bin/javadoc
+
+%add_jvm_extension JAVA_LIBDIR=%{buildroot}/%{_javadir} %{_bindir}/jvmjar -l
+
+%jpackage_script() \
+install -d $RPM_BUILD_ROOT%{_bindir}\
+cat > $RPM_BUILD_ROOT%{_bindir}/%5 << 'EOF' \
+#!/bin/sh\
+#\
+# %{name} script\
+# JPackage Project <http://www.jpackage.org/>\
+\
+# Source functions library\
+. %{_javadir}-utils/java-functions\
+\
+# Source system prefs\
+if [ -f %{_sysconfdir}/java/%{name}.conf ]; then\
+ . %{_sysconfdir}/java/%{name}.conf\
+fi\
+\
+# Source user prefs\
+if [ -f $HOME/.%{name}rc ]; then\
+ . $HOME/.%{name}rc\
+fi\
+\
+# Configuration\
+MAIN_CLASS=%1\
+BASE_FLAGS=%2\
+BASE_OPTIONS=%3\
+BASE_JARS="%(echo %4 | tr ':' ' ')"\
+\
+# Set parameters\
+set_jvm\
+set_classpath $BASE_JARS\
+set_flags $BASE_FLAGS\
+set_options $BASE_OPTIONS\
+\
+# Let's start\
+run "$@"\
+EOF
+
+# jpackage 1.7
+# Directory for maven depmaps
+#
+%_mavendepmapdir /etc/maven
+%_mavendepmapfragdir /etc/maven/fragments
+
+#
+# add_to_depmap adds an entry to the depmap. The arguments are:
+#
+# %1 the original groupid
+# %2 the original artifact id
+# %3 the version
+# %4 the new groupid
+# %5 the new artifactid
+#
+
+%add_to_maven_depmap() \
+install -dm 755 $RPM_BUILD_ROOT/%{_mavendepmapfragdir}\
+cat >>$RPM_BUILD_ROOT/%{_mavendepmapfragdir}/%{name}<< EOF\
+<dependency>\
+ <maven>\
+ <groupId>%1</groupId>\
+ <artifactId>%2</artifactId>\
+ <version>%3</version>\
+ </maven>\
+ <jpp>\
+ <groupId>%4</groupId>\
+ <artifactId>%5</artifactId>\
+ <version>%3</version>\
+ </jpp>\
+</dependency>\
+\
+EOF\
+%{nil}
+
+#==============================================================================
+#
+# update_maven_depmap updates the main maven depmap
+#
+%update_maven_depmap() \
+echo -e "<dependencies>\\n" > %{_mavendepmapdir}/maven2-depmap.xml\
+if [ -d %{_mavendepmapfragdir} ] && [ -n "`find %{_mavendepmapfragdir} -type f`" ]; then\
+cat %{_mavendepmapfragdir}/* >> %{_mavendepmapdir}/maven2-depmap.xml\
+fi\
+echo -e "</dependencies>\\n" >> %{_mavendepmapdir}/maven2-depmap.xml
+
+# JAVA macros specific for TLD
+
+# Directory for tomcat context configuration files
+%_tomcatconfdir /etc/tomcat/Catalina/localhost
+
+# Tomcat cache path
+%_tomcatcachedir %{_sharedstatedir}/tomcat/work/Catalina/localhost
+
+# Clear tomcat cache
+# Author: Paweł Zuzelski <pawelz@pld-linux.org>
+#
+# Usage:
+# %%tomcat_clear_cache appname
+#
+# Call this script in %postun scriptlet. It will remove compiled jsps related to
+# given app.
+#
+%tomcat_clear_cache() %{!?1:ERROR}%{?2:ERROR} %{__rm} -rf %{_tomcatcachedir}/%1
--- /dev/null
+# vim:ts=4 sw=4 noet ft=spec
+# Kernel specific macro definitions.
+# To make use of these macros insert the following line into your spec file:
+# %{load:%{_usrlibrpm}/macros.d/kernel}
+
+%__modinfo /sbin/modinfo
+
+# Alternative kernel type/version
+%_alt_kernel %{nil}%{?alt_kernel:-%{?alt_kernel}}
+%_build_kernels %{nil}%{?build_kernels:%{?build_kernels}}%{!?build_kernels:%{?alt_kernel}}
+
+# Macros for building kernel packages for multiple kernels from same spec
+# Usage:
+#
+# %{expand:%buildrequires_kernel kernel%%{_alt_kernel}-module-build >= 3:2.6.20.2}}
+# %{expand:%create_kernel_packages}
+# %{expand:%build_kernel_packages}
+# %{expand:%install_kernel_packages}
+#
+%buildrequires_kernel() %(echo %{_build_kernels} | tr , '\\n' | while read n ; do \
+echo %%undefine alt_kernel \
+[ -z "$n" -o "$n" = "head" ] || echo %%define alt_kernel $n \
+echo "BuildRequires: %{*}" \
+done)
+
+%create_kernel_packages %(echo %{_build_kernels} | tr , '\\n' | while read n ; do \
+echo %%undefine alt_kernel \
+[ -z "$n" -o "$n" = "head" ] || echo %%define alt_kernel $n \
+echo %%kernel_pkg \
+done)
+
+%build_kernel_packages %(echo %{_build_kernels} | tr , '\\n' | while read n ; do \
+echo %%undefine alt_kernel \
+[ -z "$n" -o "$n" = "head" ] || echo %%define alt_kernel $n \
+echo %%build_kernel_pkg \
+done)
+
+%install_kernel_packages %(echo %{_build_kernels} | tr , '\\n' | while read n ; do \
+echo %%undefine alt_kernel \
+[ -z "$n" -o "$n" = "head" ] || echo %%define alt_kernel $n \
+echo %%install_kernel_pkg \
+done)
+
+# The directory holding Linux kernel sources
+%_kernelsrcdir /usr/src/linux%{_alt_kernel}
+
+# rpm -qf on kernel version.h file
+%__kernel_qf() %(R=$(cd %{_kernelsrcdir} 2>/dev/null && LC_ALL=C rpm -q --qf '%*' -f include/linux/version.h 2>/dev/null | grep -v 'is not'); echo ${R:-ERROR})
+
+# kernel %{name} and kernel %{epoch}:%{version}-%{release} macro respecing alt_kernel
+%kernel_name %(N=%{__kernel_qf %{N}}; echo ${N%%-headers})
+%kernel_version %{__kernel_qf %|E?{%{E}:}|%{V}-%{R}}
+
+# -n drm to generate kernel%{_alt_kernel}-drm dependency
+%releq_kernel(n:) %{kernel_name}%{?-n:-%{-n*}} = %{kernel_version}
+%releq_kernel_up(n:) %{kernel_name}-up%{?-n:-%{-n*}} = %{kernel_version}
+%releq_kernel_smp(n:) %{kernel_name}-smp%{?-n:-%{-n*}} = %{kernel_version}
+
+# -s post to generate Requires(post) dependency
+%requires_releq_kernel(s:n:) Requires%{-s:(%{-s*})}: %releq_kernel
+%requires_releq_kernel_up(s:n:) Requires%{-s:(%{-s*})}: %releq_kernel_up
+%requires_releq_kernel_smp(s:n:) Requires%{-s:(%{-s*})}: %releq_kernel_smp
+
+# kernel version-release handling, `uname -r` used for building/installing kernel modules
+%_kernel_ver %( \\
+ Z=$([ -f '%{_kernelsrcdir}/include/generated/utsrelease.h' ] && \\
+ awk -F'"' '/UTS_RELEASE/{print $2}' %{_kernelsrcdir}/include/{linux/version,generated/utsrelease}.h 2>/dev/null || \\
+ 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}; \\
+)
+# left for compatibility
+%__kernel_ver %{_kernel_ver}
+
+# package version to be used in @release field
+%_kernel_ver_str %( \\
+ Z=$([ -f '%{_kernelsrcdir}/include/generated/utsrelease.h' ] && \\
+ awk -F'"' '/UTS_RELEASE/{gsub(/-/,"_",$2); print $2}' %{_kernelsrcdir}/include/{linux/version,generated/utsrelease}.h 2>/dev/null || \\
+ awk -F'"' '/UTS_RELEASE/{gsub(/-/,"_",$2); 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 {z=sprintf("%d.%d.%d%s", v, p, s, e); gsub(/-/,"_",z); print z}' \\
+ %{_kernelsrcdir}/Makefile 2>/dev/null)}; \\
+ echo ${Z:-ERROR}; \\
+)
+
+%_kernel_version_code %( \\
+ Z=$(awk '/LINUX_VERSION_CODE/{print $3}' %{_kernelsrcdir}/include/linux/version.h 2>/dev/null); \\
+ echo ${Z:-ERROR}; \\
+)
+
+%_kernel_version_magic() %(echo $((%{1} * 65536 + %{2} * 256 + %{3})))
+
+%_host_base_arch %{expand:%%global _host_base_arch %(echo %{_host_cpu} | sed 's/i.86/i386/;s/athlon/i386/;s/pentium./i386/;s/amd64/x86_64/;s/ia32e/x86_64/;s/x32/x86_64/;s/sparcv./sparc/;s/arm.*/arm/')}%_host_base_arch
+%_target_base_arch %{expand:%%global _target_base_arch %(echo %{_target_cpu} | sed 's/i.86/i386/;s/athlon/i386/;s/pentium./i386/;s/amd64/x86_64/;s/ia32e/x86_64/;s/x32/x86_64/;s/sparcv./sparc/;s/arm.*/arm/')}%_target_base_arch
+
+# Compression used for %__spec_install_post_compress_modules
+# Supported values:
+# - "gzip -9nf" (module-init-tools and kmod)
+# - "xz" (kmod)
+# - "xz -9e" (kmod), however size difference with "xz" default options is very minimal
+# @since 1.707
+%kmod_compress_cmd %{__gzip} -9nf
+
+#-----------------------------------------------------------------
+# Find and compress all kernel modules
+#
+# Requires: find
+# Depends: kmod_compress_cmd
+#
+#%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 \
+ tool=$(%{kmod_compress_cmd} --version | head -n1); \
+ case "$tool" in gzip*) ext=gz;; xz*) ext=xz;; esac; \
+ q=$(find $RPM_BUILD_ROOT/lib/modules -name '*o' -type f -print); \
+ if [ "$q" ]; then \
+ printf "Compress %d kernel modules..." $(echo "$q" | wc -l); \
+ echo "$q" | xargs -r %{kmod_compress_cmd}; \
+ echo "DONE"; \
+ find $RPM_BUILD_ROOT/lib/modules -name '*o' -type l -printf "%p %l\n" | \
+ while read a b; do ln -sf $b.$ext $a.$ext; rm -f $a; done; \
+ fi; \
+ fi; \
+}; __spec_install_post_compress_modules } }
+
+# Build modules for kernels 2.6
+# Author: Przemyslaw Iskra <sparky@pld-linux.org>
+#
+# Usage:
+# %build_kernel_modules -m <modules> -C <directory>
+#
+# remember that proper Makefile is still required
+# Options:
+# -m <modules> (required) -- comma-separated list of modules to save,
+# without .ko extension, may be placed in subdirectory
+# -C <directory> -- change to <directory> before doing anything
+# -p <arg>, -P <arg> -- arguments passeed to make scripts
+# -c -- do not execute make clean
+# <additional arguments> -- all additional arguments will be passed to
+# make modules
+#
+# Additional patching supported via here document. Try:
+# %build_kernel_modules -m module <<'EOF'
+# your patch script here
+# EOF
+# Don't use it unless patching depends on config options.
+
+# Developer note: don't touch it unless you know how to handle '\'.
+# - \ in script expands to nothing
+# - \\\ in script expands to \
+# - \\\ inside definition expands to nothing
+# - \\\\\\\ inside definition expands to \
+# - in last line \ has to touch arguments so arguments passing
+# in new lines (using \) will be supported
+
+%build_kernel_modules(p:P:m:C:c) \
+%{!?-m:%{error:%{0}: Required module name/list missing} exit 1} \
+ \
+%define Opts \\\\\\\
+%if "%{_target_base_arch}" != "%{_host_base_arch}" \\\
+ %if "%{_host_base_arch}" == "x86_64" && "%{_target_base_arch}" == "i386" \\\
+ CC="%{__cc}" ARCH=%{_target_base_arch} \\\
+ %else \\\
+ ARCH=%{_target_base_arch} CROSS_COMPILE=%{_target_cpu}-pld-linux- \\\
+ %endif \\\
+%else \\\
+ CC="%{__cc}" \\\
+%endif \
+%define MakeOpts HOSTCC="%{__cc}" SYSSRC=%{_kernelsrcdir} SYSOUT=$PWD/o \\\\\\\
+ %{?with_verbose:V=1} %{Opts} \
+ \
+%{?-C:cd %{-C*}} \
+compile() { \
+ local L="<" PATCH_SH; \
+ [[ '%{*}' != *$L$L* ]] || PATCH_SH="set -x -e;$(cat)" \
+ set -e -x \
+ \
+ [ -r "%{_kernelsrcdir}/.config" ] || exit 1 \
+ rm -rf o \
+ install -d o/include/linux o/include/generated o/arch/x86/include o/arch/powerpc/lib \
+ ln -sf %{_kernelsrcdir}/.config o/.config \
+ ln -sf %{_kernelsrcdir}/Module.symvers o/Module.symvers \
+ if [ -f %{_kernelsrcdir}/include/generated/autoconf.h ]; then \
+ ln -sf %{_kernelsrcdir}/include/generated/autoconf.h o/include/generated/autoconf.h \
+ ln -s ../generated/autoconf.h o/include/linux/autoconf.h \
+ else \
+ ln -sf %{_kernelsrcdir}/include/linux/autoconf.h o/include/linux/autoconf.h \
+ fi \
+ if [ -d %{_kernelsrcdir}/arch/x86/include/generated ]; then \
+ ln -s %{_kernelsrcdir}/arch/x86/include/generated o/arch/x86/include \
+ fi \
+ \
+ set +x \
+ [ -z "$PATCH_SH" ] || echo "$PATCH_SH" | %__spec_build_shell \
+ set -x \
+ \
+ install -d o/include/config \
+ touch o/include/config/MARKER \
+ ln -sf %{_kernelsrcdir}/include/config/auto.conf o/include/config/auto.conf \
+ ln -sf %{_kernelsrcdir}/scripts o/scripts \
+ \
+ %{!?-c:%{__make} -C %{_kernelsrcdir} clean \\\
+ RCS_FIND_IGNORE="-name '*.[ks]o' -o" \\\
+ ${1+"$@"} \\\
+ M=$PWD %{MakeOpts}} \
+ \
+ %{__make} -C %{_kernelsrcdir} modules \\\
+ ${1+"$@"} \\\
+ M=$PWD CONSTIFY_PLUGIN="" %{MakeOpts} \
+%{?-C:cd -} \
+} \
+compile %{*} \
+%{nil}
+
+%build_kernel_modules_compat(p:P:m:C:c) \
+%{!?-m:%{error:%{0}: Required module name/list missing} exit 1} \
+ \
+%define Opts \\\\\\\
+%if "%{_target_base_arch}" != "%{_host_base_arch}" \\\
+ %if "%{_host_base_arch}" == "x86_64" && "%{_target_base_arch}" == "i386" \\\
+ CC="%{__cc}" ARCH=%{_target_base_arch} \\\
+ %else \\\
+ ARCH=%{_target_base_arch} CROSS_COMPILE=%{_target_cpu}-pld-linux- \\\
+ %endif \\\
+%else \\\
+ CC="%{__cc}" \\\
+%endif \
+%define MakeOpts HOSTCC="%{__cc}" SYSSRC=%{_kernelsrcdir} SYSOUT=$PWD/o \\\\\\\
+ %{?with_verbose:V=1} %{Opts} \
+ \
+%{?-C:cd %{-C*}} \
+compile() { \
+ 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}' \
+ \
+for cfg in ${cfgs:-dist}; do \
+ [ -r "%{_kernelsrcdir}/config-$cfg" ] || exit 1 \
+ \
+ rm -rf o \
+ install -d o/include/linux o/include/generated o/arch/powerpc/lib \
+ ln -sf %{_kernelsrcdir}/config-$cfg o/.config \
+ ln -sf %{_kernelsrcdir}/Module.symvers-$cfg o/Module.symvers \
+ if [ -f %{_kernelsrcdir}/include/generated/autoconf-$cfg.h ]; then \
+ ln -sf %{_kernelsrcdir}/include/generated/autoconf-$cfg.h o/include/generated/autoconf.h \
+ ln -s ../generated/autoconf.h o/include/linux/autoconf.h \
+ else \
+ ln -sf %{_kernelsrcdir}/include/linux/autoconf-$cfg.h o/include/linux/autoconf.h \
+ fi \
+ \
+ set +x \
+ [ -z "$PATCH_SH" ] || echo "$PATCH_SH" | %__spec_build_shell \
+ set -x \
+ \
+ %if %{with dist_kernel} || %(test -f %{_kernelsrcdir}/scripts/bin2c ; echo $?) \
+ %{__make} -j1 -C %{_kernelsrcdir} prepare scripts \\\
+ %{-p*} %{-P*} \\\
+ %{MakeOpts} \
+ %else \
+ install -d o/include/config \
+ touch o/include/config/MARKER \
+ ln -sf %{_kernelsrcdir}/include/config/auto-$cfg.conf o/include/config/auto.conf \
+ ln -sf %{_kernelsrcdir}/scripts o/scripts \
+ %endif \
+ \
+ %{!?-c:%{__make} -C %{_kernelsrcdir} clean \\\
+ RCS_FIND_IGNORE="-name '*.[ks]o' -o" \\\
+ ${1+"$@"} \\\
+ M=$PWD %{MakeOpts}} \
+ \
+ %{__make} -C %{_kernelsrcdir} modules \\\
+ ${1+"$@"} \\\
+ M=$PWD CONSTIFY_PLUGIN="" %{MakeOpts} \
+ \
+ for MODULE in {%{-m*},}; do \
+ [ -z "${MODULE}" ] || mv ${MODULE}{,-$cfg}.ko \
+ done \
+done \
+%{?-C:cd -} \
+} \
+compile %{*} \
+%{nil}
+
+
+# Install kernel modules built by %build_kernel_modules
+# Author: Przemyslaw Iskra <sparky@pld-linux.org>
+#
+# Usage:
+# %install_kernel_modules -m <modules> -d <directory>
+#
+# Options:
+# -m <modules> (required) -- comma-separated list of modules to install,
+# without .ko extension, may be placed in subdirectory
+# -d <directory> (required) -- in what subdirectory modules should be
+# installed (eg. misc, kernel/drivers/net)
+# -s <suffix> -- suffix to use when installing modules, useful when module
+# with same name exists in kernel already
+# -n <file> -- name of modprobe config file to use (without .conf extension)
+# for defining aliases, only useful with -s
+# -D <directory> -- DESTDIR, base directory for installed files,
+# defaults to RPM_BUILD_ROOT
+
+%install_kernel_modules(m:d:s:n:D:) \
+%{!?-m:%{error:%{0}: Required module name (-m) missing}exit 1} \
+%{!?-d:%{error:%{0}: Required module directory missing}exit 1} \
+%{?-n:%{!?-s:%{error:%{0}: Modprobe .conf file requires module suffix}exit 1}} \
+ \
+INSTALLROOT=%{-D*} \
+[ -n "$INSTALLROOT" ] || INSTALLROOT=$RPM_BUILD_ROOT \
+ \
+%{!?debug:set +x;} \
+ \
+for MODULE in {%{-m*},}; do \
+ [ -n "${MODULE}" ] || continue \
+ MNAME=${MODULE##*/} \
+ install -m 644 -D ${MODULE}.ko $INSTALLROOT/lib/modules/%{_kernel_ver}/%{-d*}/${MNAME}%{-s:-%{-s*}}.ko \
+ %{?-s:install -d $INSTALLROOT%{_sysconfdir}/modprobe.d/%{_kernel_ver} \
+ echo "alias ${MNAME} ${MNAME}-%{-s*}" >> $INSTALLROOT%{_sysconfdir}/modprobe.d/%{_kernel_ver}/%{-n*}.conf} \
+done \
+unset INSTALLROOT \
+%{nil}
+
+%install_kernel_modules_compat(m:d:s:n:D:) \
+%{!?-m:%{error:%{0}: Required module name (-m) missing}exit 1} \
+%{!?-d:%{error:%{0}: Required module directory missing}exit 1} \
+%{?-n:%{!?-s:%{error:%{0}: Modprobe .conf file requires module suffix}exit 1}} \
+ \
+INSTALLROOT=%{-D*} \
+[ -n "$INSTALLROOT" ] || INSTALLROOT=$RPM_BUILD_ROOT \
+ \
+%{!?debug:set +x;} \
+local cfgs='%{?with_dist_kernel:%{?with_smp: smp}%{?with_up: up}}%{!?with_dist_kernel: nondist}' \
+ \
+for MODULE in {%{-m*},}; do \
+ [ -n "${MODULE}" ] || continue \
+ for cfg in ${cfgs:-dist}; do \
+ [ "$cfg" = smp ] && suf=smp || suf= \
+ MNAME=${MODULE##*/} \
+ install -m 644 -D ${MODULE}-$cfg.ko \\\
+ $INSTALLROOT/lib/modules/%{_kernel_ver}$suf/%{-d*}/${MNAME}%{-s:-%{-s*}}.ko \
+ %{?-s:install -d $INSTALLROOT%{_sysconfdir}/modprobe.d/%{_kernel_ver}$suf \
+ echo "alias ${MNAME} ${MNAME}-%{-s*}" \\\
+ >> $INSTALLROOT%{_sysconfdir}/modprobe.d/%{_kernel_ver} $suf/%{-n*}.conf} \
+ done \
+done \
+unset INSTALLROOT \
+%{nil}
--- /dev/null
+#------------------------------------------------------------------------
+# mimetype(...) configuration.
+#
+# Path to script to autogenerate mimetype(foo) provides, based on MimeType
+# key from desktop files.
+#
+%__mimetype_provides %{_usrlibrpm}/mimetypedeps.sh --provides
--- /dev/null
+# Hook to register nagios object based plugins in Nagios NRPE daemon config.
+#
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+#
+# Usage:
+# -a NAME -- add command named NAME
+# -d NAME -- remove command named NAME
+# -f FILE -- specify plugin configuration FILE to extract command definition from
+#
+# Sample:
+# %triggerin -- nagios-nrpe
+# %nagios_nrpe -a %{plugin} -f %{_sysconfdir}/%{plugin}.cfg
+#
+# %triggerun -- nagios-nrpe
+# %nagios_nrpe -d %{plugin} -f %{_sysconfdir}/%{plugin}.cfg
+#
+# Requirements:
+# Requires: grep
+# Requires: sed >= 4.0
+# BuildRequires: rpmbuild(macros) >= 1.685
+%nagios_nrpe(a:d:c:f:) {\
+ if %{__grep} -q '^include_dir=/etc/nagios/nrpe.d' /etc/nagios/nrpe.cfg && [ -d /etc/nagios/nrpe.d ]; then \
+ file=/etc/nagios/nrpe.d/%{-a*}%{-d*}.cfg; \
+ else \
+ file=/etc/nagios/nrpe.cfg; \
+ fi; \
+ m=$(test -f $file && md5sum < $file); \
+ %{-a:# on -a and config exists \
+ if [ -f /etc/nagios/nrpe.cfg ]; then \
+ if [ ! -f $file ] || ! %{__grep} -q '^command\[%{-a*}\]' $file; then \
+ %{__sed} -ne 's/^[ \t]*command_line[ \t]\+\(.\+\)/command[%{-a*}]=\1/p' %{-f*} >> $file; \
+ fi; \
+ fi;} \
+ %{-d:# on package remove, -d and config exists \
+ if [ "$1" = "0" -a -f $file ]; then \
+ %{__sed} -i -e '/^[ \t]*command\[%{-d*}\]/d' $file; \
+ fi;} \
+ if [ "$m" != "$(md5sum < $file)" ]; then \
+ %service -q nrpe restart; \
+ fi; \
+}%{nil}
--- /dev/null
+# Register OpenLDAP schema.
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+#
+# Usage:
+# %%openldap_schema_register [-d core,nis] %{schemadir}/horde.schema
+#
+# -d specify dependant schemas, separated by comma
+#
+%openldap_schema_register(d:) \
+for schema in %*; do \
+ if ! grep -q "$schema" /etc/openldap/slapd.conf; then \
+ %{__sed} -i -e " \
+ /^include.*local.schema/{ \
+ iinclude\\t $schema\
+ } \
+ " /etc/openldap/slapd.conf \
+ fi \
+done \
+# enable dependant schemas \
+if [ "%{-d*}" ]; then \
+ %{__sed} -i -e ' \
+ /^#include.*\\(%(echo '%{-d*}' | %{__sed} -e 's/,/\\\\|/g')\\)\\.schema/{ \
+ s/^#// \
+ }' /etc/openldap/slapd.conf \
+fi \
+%{nil}
+
+# Unregister OpenLDAP schema.
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+#
+# Usage:
+# %%openldap_schema_unregister %{schemadir}/horde.schema
+#
+%openldap_schema_unregister() \
+for schema in %*; do \
+ if grep -q "$schema" /etc/openldap/slapd.conf; then \
+ %{__sed} -i -e " \
+ /^include.*$(echo "$schema" | %{__sed} -e 's,/,\\\\/,g')/d \
+ # for symmetry it would be nice if we disable enabled schemas in post, \
+ # but we really can not do that, it would break something else. \
+ " /etc/openldap/slapd.conf \
+ fi \
+done \
+%{nil}
--- /dev/null
+# Perl specific macro definitions.
+
+%__perl /usr/bin/perl
+
+%perl_privlib %{expand:%%global perl_privlib %(eval $(%{__perl} -V:installprivlib 2>/dev/null); echo ${installprivlib:-ERROR})}%perl_privlib
+%perl_archlib %{expand:%%global perl_archlib %(eval $(%{__perl} -V:installarchlib 2>/dev/null); echo ${installarchlib:-ERROR})}%perl_archlib
+%perl_vendorlib %{expand:%%global perl_vendorlib %(eval $(%{__perl} -V:installvendorlib 2>/dev/null); echo ${installvendorlib:-ERROR})}%perl_vendorlib
+%perl_vendorarch %{expand:%%global perl_vendorarch %(eval $(%{__perl} -V:installvendorarch 2>/dev/null); echo ${installvendorarch:-ERROR})}%perl_vendorarch
+%perl_sitelib %{expand:%%global perl_sitelib %(eval $(%{__perl} -V:installsitelib 2>/dev/null); echo ${installsitelib:-ERROR})}%perl_sitelib
+%perl_sitearch %{expand:%%global perl_sitearch %(eval $(%{__perl} -V:installsitearch 2>/dev/null); echo ${installsitearch:-ERROR})}%perl_sitearch
--- /dev/null
+# PHP specific macro definitions.
+
+# name of php package
+%php_name php%{?php_suffix}
+
+# use rpmbuild -D 'php_suffix 54' to build php extension for php 5.4
+# NOTE: error output must be empty. otherwise can't build pecl packages if no php*-devel is installed
+%php_suffix %{expand:%%global php_suffix %(c=$(php-config --sysconfdir 2>/dev/null) || echo '' && echo ${c#/etc/php})%%{nil}}%php_suffix
+
+# phpXY, version always present for using current php version (in regards of php*-devel package)
+%php_versuffix %{expand:%%global php_versuffix %((IFS=.; set -- $(php-config --version); echo $1$2))%%{nil}}%php_versuffix
+
+# php cli. version that php headers are installed for
+%__php /usr/bin/php%{php_versuffix}
+
+%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
+
+# extract php/zend api versions
+%php_major_version %{expand:%%global php_major_version %(awk '/#define PHP_MAJOR_VERSION/{print $3}' %{php_includedir}/main/php_version.h 2>/dev/null || echo ERROR)}%php_major_version
+%php_minor_version %{expand:%%global php_minor_version %(awk '/#define PHP_MINOR_VERSION/{print $3}' %{php_includedir}/main/php_version.h 2>/dev/null || echo ERROR)}%php_minor_version
+%php_api_version %{expand:%%global php_api_version %(awk '/#define PHP_API_VERSION/{print $3}' %{php_includedir}/main/php.h 2>/dev/null || echo ERROR)}%php_api_version
+%php_pdo_api_version %{expand:%%global php_pdo_api_version %(awk '/#define PDO_DRIVER_API/{print $3}' %{php_includedir}/ext/pdo/php_pdo_driver.h 2>/dev/null || echo ERROR)}%php_pdo_api_version
+%php_debug %{expand:%%global php_debug %(awk '/#define ZEND_DEBUG/{print $3}' %{php_includedir}/main/php_config.h 2>/dev/null || echo ERROR)}%php_debug
+%zend_module_api %{expand:%%global zend_module_api %(awk '/#define ZEND_MODULE_API_NO/{print $3}' %{php_includedir}/Zend/zend_modules.h 2>/dev/null || echo ERROR)}%zend_module_api
+%zend_extension_api %{expand:%%global zend_extension_api %(awk '/#define ZEND_EXTENSION_API_NO/{print $3}' %{php_includedir}/Zend/zend_extensions.h 2>/dev/null || echo ERROR)}%zend_extension_api
+%_zend_zts %{expand:%%global _zend_zts %(Z=$(grep -sc '^#define ZTS 1' %{php_includedir}/main/php_config.h); echo ${Z:-ERROR})}%_zend_zts
+# "_ts" if ZTS enabled, empty otherwise
+%zend_zts %{expand:%%global _zend_zts_%{?_zend_zts} 1}%{?_zend_zts_1:_ts}
+
+# helper macro
+%__php_api_requires() Requires: %{php_name}(%{expand:%1}) = %{expand:%{%{!?2:%{1}}%{?2}}}
+
+# macros for public use
+# for php extensions (php-pecl)
+%requires_php_extension %{__php_api_requires modules_api php_api_version} \
+%{__php_api_requires zend_module_api} \
+%{__php_api_requires debug php_debug} \
+%{__php_api_requires thread-safety _zend_zts}
+
+# for zend extensions
+%requires_zend_extension %{__php_api_requires zend_module_api} \
+%{__php_api_requires zend_extension_api} \
+%{__php_api_requires debug php_debug} \
+%{__php_api_requires thread-safety _zend_zts}
+
+# for php pdo modules (php-pecl-PDO_*)
+%requires_php_pdo_module %{__php_api_requires PDO_API php_pdo_api_version}
+
+# for using PHP post scripts. for PHP >= 5.0
+%php_webserver_restart \
+[ ! -f /etc/apache/conf.d/??_mod_php.conf ] || %service -q apache restart \
+[ ! -f /etc/httpd/conf.d/??_mod_php.conf ] || %service -q httpd restart \
+if [ -x /etc/rc.d/init.d/php-fcgi ]; then \
+ PHP_FCGI_BINARY=; . /etc/sysconfig/php-fcgi 2>/dev/null \
+ if [[ ${PHP_FCGI_BINARY:-php.fcgi} = *php.fcgi* ]]; then \
+ %service -q php-fcgi restart \
+ fi \
+fi \
+if [ -x /etc/rc.d/init.d/%{php_name}-fpm ]; then \
+ %service -q %{php_name}-fpm restart \
+fi \
+%{nil}
+
+# for using php post scripts. for PHP >= 4.0 && PHP < 5.0
+%php4_webserver_restart \
+[ ! -f /etc/apache/conf.d/??_mod_php4.conf ] || %service -q apache restart \
+[ ! -f /etc/httpd/conf.d/??_mod_php4.conf ] || %service -q httpd restart \
+if [ -x /etc/rc.d/init.d/php-fcgi ]; then \
+ PHP_FCGI_BINARY=; . /etc/sysconfig/php-fcgi 2>/dev/null \
+ if [[ ${PHP_FCGI_BINARY:-php.fcgi} = *php4.fcgi* ]]; then \
+ %service -q php-fcgi restart \
+ fi \
+fi \
+%{nil}
+
+# PEAR install macros
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+#
+# Usage:
+# %%pear_package_setup ...
+#
+# -a # - also unpack SOURCE#. for PEAR bootstrapping
+# -n FMT - create builddir with FMT, instead of default %%{pearname}-%%{version}
+# -z - unpack pear package and let pear use package.xml (not tarball) for install. for PEAR bootstrapping
+# -D - pass -D to %setup (so the build dir is not removed)
+# -c - register channel from local channel.xml file
+# -d - pass -d arg to pearcmd
+#
+# unpack PEAR package to %%{_builddir}/FMT. package is extracted with already
+# destination hierarchy. you should copy the tree to buildroot after
+# patching/reorganizing with %%pear_package_install.
+#
+# additionally BUILDROOT is stripped from files and files are converted to UNIX
+# line endings.
+#
+# the pear install process output is recorded to install.log, you should put it
+# to %%doc for later debug or just for information.
+#
+# additionally additional-packages.txt is produced if it was detected that the
+# package has optional dependencies. the file format is suitable of displaying
+# in %%post of a package. you should put this file to %%doc. noautocompressdoc is
+# automatically added for this file.
+
+
+# records install.log and transforms PEAR names to TLD Linux rpm package names.
+%__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-,' > 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 \
+ rm -f optional-packages.txt \
+fi \
+%{nil}
+
+# Command invoking PEAR CLI
+# Same as /usr/bin/pear, except we force GMT timezone
+%__pear %__php -doutput_buffering=1 -dopen_basedir="" -dmemory_limit=-1 -ddate.timezone=GMT /usr/share/pear/pearcmd.php
+
+%pear_install(a:d:n:zD) \
+%__pear \\\
+ -c %{builddir}/pearrc \\\
+ -d doc_dir=/docs \\\
+ -d temp_dir=/tmp \\\
+ -d php_dir=%{-c:%{builddir}/}%{php_pear_dir} \\\
+ -d bin_dir=%{_bindir} \\\
+ -d data_dir=%{php_pear_dir}/data \\\
+ -d test_dir=%{php_pear_dir}/tests \\\
+ %{-d:%(echo "%{-d*}" | awk 'BEGIN{RS=","}{printf("-d %%s \\\\\\n\\t", $1)}')} \\\
+ install \\\
+ --packagingroot=%{builddir} \\\
+ --offline \\\
+ --nodeps \\\
+ %{-f:--force} \\\
+ %{!-z:%{S:%{-a*}%{!-a:0}}}%{-z:$_P} > .install.log || { c=$?; cat .install.log; exit $c; }; \
+ %{-c:cp -a %{builddir}/%{builddir}/%{php_pear_dir} %{builddir}/%(dirname %{php_pear_dir}); rm -rf %{builddir}/%{builddir}; } \
+%{nil}
+
+# The main macro.
+# using this macro will append optional-packages.txt to the nocompressdoc list
+# as it's displayed to user after package install. and adding additional gzip
+# dep is just waste ;)
+%pear_package_setup(a:d:n:zDc:) \
+%define srcdir %{-n*}%{!-n:%{?_pearname}%{!?_pearname:%{pearname}}-%{version}} \
+%define builddir %{_builddir}/%{srcdir} \
+%setup -q -c -T %{-D:-D} -n %{srcdir} \
+%{-z:%{__tar} zxf %{S:0}; %{-a:%{__tar} zxf %{S:%{-a*}}}} \
+%{-z:_P=package2.xml; [ -f $_P ] || _P=package.xml; _N=%{srcdir}; mv $_P $_N; cd $_N} \
+%{-c:%{__pear} -c pearrc config-set php_dir %{builddir}/%{php_pear_dir}; %__pear -c %{builddir}/pearrc channel-add %{-c*}} \
+%pear_install \
+%{-z:cd ..} \
+%{__tar} --wildcards -zvxf %{S:0} package*.xml \
+cat %{-z:$_N/}.install.log | %__pear_install_log \
+%undos -f php,html,js,xml \
+%{!?_noautocompressdoc:%global _noautocompressdoc %{nil}}%{expand:%%global _noautocompressdoc %{_noautocompressdoc} optional-packages.txt} \
+%{!?_noautoprov:%global _noautoprov %{nil}}%{expand:%%global _noautoprov %{_noautoprov} 'pear(tests/.*)'} \
+%{nil}
+
+# 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 \
+ echo "AutoReqdep detected:" \
+ echo "_noautoreq $(cat _noautoreq)" \
+fi \
+%{nil}
+
+# Print optional package info for pear packages
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+# Usage:
+# %post -p <lua>
+# %%pear_package_print_optionalpackages
+#
+# Requirements:
+# BuildRequires: rpmbuild(macros) >= 1.571
+%pear_package_print_optionalpackages \
+f = io.open("%{_docdir}/%{name}-%{version}/optional-packages.txt", "r") \
+if f then \
+ for l in f:lines() do print(l); end \
+ f:close() \
+end \
+%{nil}
--- /dev/null
+# Python specific macro definitions.
+
+%__python /usr/bin/python2
+
+# python main version
+%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" 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}
+%py_sitedir %{py_libdir}/site-packages
+%py_sitescriptdir %{py_scriptdir}/site-packages
+%py_dyndir %{py_libdir}/lib-dynload
+
+# pure python modules compilation
+%py_comp python -c "import compileall; import sys; compileall.compile_dir(sys.argv[1], ddir=sys.argv[1][len('$RPM_BUILD_ROOT'):])"
+
+%py_ocomp python -O -c "import compileall; import sys; compileall.compile_dir(sys.argv[1], ddir=sys.argv[1][len('$RPM_BUILD_ROOT'):])"
+
+# Software written in Python language require Python with main version
+%pyrequires_eq() Requires: %1
+
+# Python 3.x
+# python main version
+%__python3 /usr/bin/python3
+%py3_ver %{expand:%%global py3_ver %(%{__python3} -c "import sys; print(sys.version[:3])" 2>/dev/null || echo ERROR)}%py3_ver
+
+# directories
+%py3_prefix %{expand:%%global py3_prefix %(%{__python3} -c "import sys; print(sys.prefix)" 2>/dev/null || echo ERROR)}%py3_prefix
+%py3_incdir %{expand:%%global py3_incdir %(%{__python3} -c "import sysconfig; print(sysconfig.get_path('include'))" 2>/dev/null || echo ERROR)}%py3_incdir
+%py3_libdir %{py3_prefix}/%{_lib}/python%{py3_ver}
+%py3_sitedir %{py3_libdir}/site-packages
+%py3_sitescriptdir %{py3_prefix}/share/python%{py3_ver}/site-packages
+%py3_dyndir %{py3_libdir}/lib-dynload
+
+# pure python modules compilation
+%py3_comp %{__python3} -c "import compileall; import sys; compileall.compile_dir(sys.argv[1], ddir=sys.argv[1][len('$RPM_BUILD_ROOT'):])"
+
+%py3_ocomp %{__python3} -O -c "import compileall; import sys; compileall.compile_dir(sys.argv[1], ddir=sys.argv[1][len('$RPM_BUILD_ROOT'):])"
+
+%py_build { \
+ LDFLAGS="${LDFLAGS:-%rpmldflags}"; export LDFLAGS; \
+ CFLAGS="${CFLAGS:-%rpmcppflags %rpmcflags}"; export CFLAGS; \
+ CXXFLAGS="${CXXFLAGS:-%rpmcppflags %rpmcxxflags}"; export CXXFLAGS; \
+ %{?__cc:CC="%{__cc}"; export CC;} \
+ %{?__cxx:CXX="%{__cxx}"; export CXX;} \
+ %{__python} setup.py \
+ build --build-base=build-2 \
+}
+
+# "shrink" filter to keep this macro without newlines,
+# so it could be used as make arguments
+%py_install_opts() %{shrink: \
+ --prefix=%{_prefix} \
+ --install-purelib=%{py_sitescriptdir} \
+ --install-platlib=%{py_sitedir} \
+ --optimize=2 \
+}
+
+%py_install { \
+ LDFLAGS="${LDFLAGS:-%rpmldflags}"; export LDFLAGS; \
+ CFLAGS="${CFLAGS:-%rpmcppflags %rpmcflags}"; export CFLAGS; \
+ CXXFLAGS="${CXXFLAGS:-%rpmcppflags %rpmcxxflags}"; export CXXFLAGS; \
+ %{?__cc:CC="%{__cc}"; export CC;} \
+ %{?__cxx:CXX="%{__cxx}"; export CXX;} \
+ %{__python} setup.py \
+ build --build-base=build-2 \
+ install --skip-build \
+ %{py_install_opts} \
+ --root=$RPM_BUILD_ROOT \
+}
+
+%py3_build { \
+ LDFLAGS="${LDFLAGS:-%rpmldflags}"; export LDFLAGS; \
+ CFLAGS="${CFLAGS:-%rpmcppflags %rpmcflags}"; export CFLAGS; \
+ CXXFLAGS="${CXXFLAGS:-%rpmcppflags %rpmcxxflags}"; export CXXFLAGS; \
+ %{?__cc:CC="%{__cc}"; export CC;} \
+ %{?__cxx:CXX="%{__cxx}"; export CXX;} \
+ %{__python3} setup.py build --build-base=build-3 \
+}
+
+# "shrink" filter to keep this macro without newlines,
+# so it could be used as make arguments
+%py3_install_opts() %{shrink: \
+ --prefix=%{_prefix} \
+ --install-purelib=%{py3_sitescriptdir} \
+ --install-platlib=%{py3_sitedir} \
+ --optimize=2 \
+}
+
+%py3_install { \
+ LDFLAGS="${LDFLAGS:-%rpmldflags}"; export LDFLAGS; \
+ CFLAGS="${CFLAGS:-%rpmcppflags %rpmcflags}"; export CFLAGS; \
+ CXXFLAGS="${CXXFLAGS:-%rpmcppflags %rpmcxxflags}"; export CXXFLAGS; \
+ %{?__cc:CC="%{__cc}"; export CC;} \
+ %{?__cxx:CXX="%{__cxx}"; export CXX;} \
+ %{__python3} setup.py \
+ build --build-base=build-3 \
+ install --skip-build \
+ %{py3_install_opts} \
+ --root=$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 pyc=%{tmpdir}/%{name}-%{version}-%{release}__rpm_pyc; \
+if [ -d "$RPM_BUILD_ROOT" ]; then \
+ find "$RPM_BUILD_ROOT" -name '*.pyc' > $pyc; \
+ while read a; do \
+ b="${a%.pyc}.pyo"; \
+ if cmp -s "$a" "$b"; then \
+ ln -f "$a" "$b"; \
+ c=$((c + 1)); \
+ fi; \
+ t=$((t + 1)); \
+ done < $pyc; \
+ [ $t -gt 0 ] && printf "Hardlink Python files: %d/%d files hardlinked\n" $c $t; \
+ rm -f $pyc; \
+fi; \
+}; __spec_install_post_py_hardlink } }
+
+# Remove Python 2.x sources,
+# TLD Linux policy is to package only compiled .py[co] for Python 2.x libraries.
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+#
+# Usage:
+# %py_postclean /usr/share/extra -x keepme.py,keeptoo.py
+# Options:
+# -x - comma separated of file basenames to preserve (rpmbuild(macros) >= 1.658)
+# ARGS - extra directories to clean for .py sources
+#
+# BuildRequires: rpmbuild(macros) >= 1.189
+#
+%py_postclean(x:) \
+for d in %{py_sitescriptdir} %{py_sitedir} %*; do \
+ [ ! -d "$RPM_BUILD_ROOT$d" ] || find "$RPM_BUILD_ROOT$d" -name '*.py' -print0 %{-x:| grep -ZzvE '/(%(echo '%{-x*}' | tr ',' '|'))$'} | xargs -0r -l512 rm;\
+done \
+%{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.602
+
+%py_lint() \
+__py_lint() { \
+%{!?debug:set +x;} \
+find "$@" -type f -name '*.py' | python -c ' \
+import sys \
+import compiler \
+\
+found = err = 0\
+for f in sys.stdin: \
+ 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.rstrip(), e) \
+ err = err + 1\
+\
+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: %d files scanned, found no syntax errors." % found \
+' \
+}; __py_lint %* \
+%{nil}
--- /dev/null
+# Ruby specific macro definitions.
+
+%__ruby /usr/bin/ruby
+
+# Ruby ABI version
+# NOTE: %ruby_version may be empty, depending how Ruby was built
+%ruby_abi %{expand:%%global ruby_abi %(%{__ruby} -r rbconfig -e 'print [RbConfig::CONFIG["MAJOR"], RbConfig::CONFIG["MINOR"]].join(".")' 2>/dev/null || echo ERROR)}%ruby_abi
+
+# get rbconfig parameter
+%__ruby_rbconfig() %(%{__ruby} -r rbconfig -e 'print RbConfig::CONFIG["%1"]' 2>/dev/null || echo ERROR)
+%__ruby_rbconfig_path() %(%{__ruby} -r rbconfig -r pathname -e 'print Pathname(RbConfig::CONFIG["%1"]).cleanpath' 2>/dev/null || echo ERROR)
+
+%ruby_archdir %{expand:%%global ruby_archdir %{__ruby_rbconfig_path archdir}}%ruby_archdir
+%ruby_libdir %{expand:%%global ruby_libdir %{__ruby_rbconfig rubylibdir}}%ruby_libdir
+%ruby_ridir %{expand:%%global ruby_ridir %(%{__ruby} -r rbconfig -e 'print File.join(RbConfig::CONFIG["datadir"], "ri", "system")' 2>/dev/null || echo ERROR)}%ruby_ridir
+%ruby_rubylibdir %{expand:%%global ruby_rubylibdir %{__ruby_rbconfig_path rubylibdir}}%ruby_rubylibdir
+%ruby_vendorarchdir %{expand:%%global ruby_vendorarchdir %{__ruby_rbconfig vendorarchdir}}%ruby_vendorarchdir
+%ruby_vendorlibdir %{expand:%%global ruby_vendorlibdir %{__ruby_rbconfig_path vendorlibdir}}%ruby_vendorlibdir
+%ruby_sitearchdir %{expand:%%global ruby_sitearchdir %{__ruby_rbconfig sitearchdir}}%ruby_sitearchdir
+%ruby_sitedir %{expand:%%global ruby_sitedir %{__ruby_rbconfig sitedir}}%ruby_sitedir
+%ruby_sitelibdir %{expand:%%global ruby_sitelibdir %{__ruby_rbconfig_path sitelibdir}}%ruby_sitelibdir
+%ruby_rdocdir /usr/share/rdoc
+%ruby_vendordir %{expand:%%global ruby_vendordir %{__ruby_rbconfig vendordir}}%ruby_vendordir
+%ruby_version %{expand:%%global ruby_version %(r=%{__ruby_rbconfig ruby_version}; echo ${r:-%%nil})}%ruby_version
+
+%ruby_gemdir %{expand:%%global ruby_gemdir %(%{__ruby} -r rubygems -e 'puts Gem.respond_to?(:default_dirs) ? Gem.default_dirs[:system][:gem_dir] : Gem.path.first' 2>/dev/null || echo ERROR)}%{ruby_gemdir}
+%ruby_specdir %{ruby_gemdir}/specifications
+
+# deprecated, ruby 2.0 noarch packages are versionless and extension dependency is generated by rpm5
+%ruby_ver_requires_eq %{nil}
+%ruby_mod_ver_requires_eq %{nil}
+
+%__gem_helper %{_usrlibrpm}/gem_helper.rb
+
+%gem_build(f:j:) \
+ %__gem_helper build \\\
+ %{-f:-f%{-f*}} \\\
+ %{!-j:%{_smp_mflags}}%{-j:-j%{-j*}}
+
+%gem_install(i:n:C) \
+ DESTDIR=${DESTDIR:-%{buildroot}} \\\
+ %__gem_helper install \\\
+ --env-shebang --rdoc --ri --force --ignore-dependencies \\\
+ %{!-i:--install-dir %{buildroot}%{ruby_gemdir}}%{-i:--install-dir %{-i*}} \\\
+ %{!-n:--bindir %{buildroot}%{_bindir}}%{-n:--bindir%{-n*}} \\\
+ %{!-C:--fix-permissions}
--- /dev/null
+# Disable all systemd related macros
+
+%systemd_reload %{nil}
+%systemd_service_enable %{nil}
+%systemd_service_disable %{nil}
+%systemd_service %{nil}
+%systemd_service_start %{nil}
+%systemd_service_stop %{nil}
+%systemd_service_restart %{nil}
+%systemd_service_reload %{nil}
+%systemd_trigger %{nil}
+%systemd_post %{nil}
+%systemd_preun %{nil}
+%systemdunitdir %{nil}
+%systemduserunitdir %{nil}
+%systemdtmpfilesdir %{nil}
+%journal_catalog_update %{nil}
--- /dev/null
+# TCL specific macro definitions.
+
+%__tclsh /usr/bin/tclsh
+
+%tcl_version %{expand:%%global tcl_version %(echo 'puts $tcl_version' | %{__tclsh})}%tcl_version
+%tcl_sitearch %{_libdir}/tcl%{tcl_version}
+%tcl_sitelib %{_datadir}/tcl%{tcl_version}
--- /dev/null
+# vim:ts=4 sw=4 noet ft=spec
+#
+# TLD Linux rpm macros.
+# <https://www.tld-linux.org/>
+
+# can be used by builder script to check for version
+%rpm_build_macros {Revision}
+
+%epoch 0
+%x8664 x86_64 amd64 ia32e
+
+# compiler 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
+
+# Build system path macros.
+%__autoconf autoconf %{?debug:-Wall}
+%__automake automake -a -c -f --foreign
+%__autopoint autopoint --force
+
+# add parallel build flags: -jN
+# jobs macro is available since 1.657
+#
+# if you want to disable parallel build do:
+# echo '%__jobs %{nil}' >> ~/.rpmmacros
+%__jobs %{expand:%%global __jobs %(_NCPUS=$(/usr/bin/getconf _NPROCESSORS_ONLN); [ "$_NCPUS" -gt 3 ] && echo $(($_NCPUS / 2)))%%{nil}}%__jobs
+
+# expands to -jN if %__jobs has a value
+%_smp_mflags %{expand:%%global _smp_mflags %(jobs=%{__jobs}; echo ${jobs:+-j$jobs}%%{nil})}%_smp_mflags
+
+%__make /usr/bin/make %{?_make_opts} %{?_smp_mflags}
+%__scons /usr/bin/scons %{?_smp_mflags}
+%__waf /usr/bin/waf %{?_smp_mflags}
+%__cmake /usr/bin/cmake -Wno-dev
+%__meson /usr/bin/meson
+%__meson_wrap_mode nodownload
+%__ninja /usr/bin/ninja
+%__ninja_common_opts -v %{?_smp_mflags}
+
+%__gettextize { \
+ gettextize --copy --force --no-changelog; \
+ if [ ! -f po/Makevars ]; then \
+ cp -f po/Makevars{.template,}; \
+ fi; \
+}
+
+%__glib_gettextize glib-gettextize --copy --force
+%__gnome_doc_common gnome-doc-common --copy
+%__gnome_doc_prepare gnome-doc-prepare --copy --force
+%__gtkdocize gtkdocize --copy
+%__intltoolize intltoolize --copy --force
+%__libtoolize libtoolize --copy --force --install
+
+# topdir is where builder script lives,
+# fallback to old style if SPECS/SOURCES dirs were found.
+%_topdir %{expand:%%global _topdir %(
+ if [ -d SPECS -a -d SOURCES ]; then
+ # old style rpmdir: in topdir
+ pwd
+ elif [ -d ../SPECS -a -d ../SOURCES ]; then
+ # old style rpmdir: in subdir
+ cd ..; pwd
+ elif [ -d $HOME/rpm/SPECS -a -d $HOME/rpm/SOURCES ]; then \
+ # if old style rpm dir exist, go with it
+ echo $HOME/rpm; \
+ elif [ -x ../builder -a ! -d ../builder ]; then
+ # relative new style rpmdir: in package dir
+ cd ..; pwd
+ elif [ -x builder -a ! -d builder ]; then
+ # relative new style rpmdir: in packages
+ pwd
+ elif [ -x packages/builder -a ! -d packages/builder ]; then
+ # relative new style rpmdir: packages dir in current dir
+ cd packages; pwd
+ else
+ # fallback to new style rpmdir
+ echo $HOME/rpm/packages
+ fi; \
+)}%_topdir
+
+# if %{_topdir}/SPECS exists, it's old style structure
+%_specdir %{expand:%%global _specdir %([ ! -d %{_topdir}/SPECS ] && echo %{_topdir}/%{name} || echo %{_topdir}/SPECS)}%_specdir
+%_sourcedir %{expand:%%global _sourcedir %([ ! -d %{_topdir}/SOURCES ] && echo %{_specdir} || echo %{_topdir}/SOURCES)}%_sourcedir
+
+# BUILD/RPMS/SRPMS are on same level by default as packages dir, if these exist
+# if they don't exist assume we are having custom topdir (which is not named as
+# "packages", i.e ~/rpm/kde/{kdelibs,BUILD/RPMS/SRPMS})
+# NOTE: readlink fails if some parent dir is not readable (/home/services/builder for example can't read /home/services), therefore the extra echo
+%_builddir %{expand:%%global _builddir %(if [ -d %{_topdir}/BUILD ]; then echo %{_topdir}/BUILD; else readlink -m %{_topdir}/../BUILD || echo %{_topdir}/../BUILD; fi)}%_builddir
+%_rpmdir %{expand:%%global _rpmdir %(if [ -d %{_topdir}/RPMS ]; then echo %{_topdir}/RPMS; else readlink -m %{_topdir}/../RPMS || echo readlink -m %{_topdir}/../RPMS; fi)}%_rpmdir
+%_srcrpmdir %{expand:%%global _srcrpmdir %(if [ -d %{_topdir}/SRPMS ]; then echo %{_topdir}/SRPMS; else readlink -m %{_topdir}/../SRPMS || echo readlink -m %{_topdir}/../SRPMS; fi)}%_srcrpmdir
+
+# The number of cvs changelog entries kept when building package.
+%_buildchangelogtruncate 20
+
+%dependencytracking %{nil}
+
+# Relations between package names that cause dependency loops
+# with legacy packages that cannot be fixed. Relations are
+# specified as
+# p>q
+# where package p has a Requires: on something that package q Provides:
+#
+# XXX Note: that there cannot be any whitespace within the string "p>q",
+# and that both p and q are package names (i.e. no version/release).
+%_dependency_whiteout %{nil}
+
+#-----------------------------------------------------------------
+#
+# (re)definition of %{rpm*flags} with %filterout_* support
+# BuildRequires: awk
+# BuildRequires: rpmbuild(macros) >= 1.315
+#
+# 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
+# as regular expression it must be escaped twice.
+
+%filter_out \
+ for (i = 1; i in I; i++) { A=0; \
+ for (f in F) { \
+ if (I[i] ~ "^" F[f] "$") A=1; \
+ }; \
+ if (!A) printf(I[i] FS); \
+ }
+
+%rpmcflags %(awk 'BEGIN {
+ split("%{?debug:%debugcflags}%{!?debug:%optflags}%{?debuginfocflags}",I);
+ split("%{?filterout} %{?filterout_c} %{?filterout_ld}",F);
+ %{filter_out}
+}')
+
+%rpmcxxflags %(awk 'BEGIN {
+ split("%{?debug:%debugcflags}%{!?debug:%optflags}%{?debuginfocflags}",I);
+ split("%{?filterout} %{?filterout_cxx} %{?filterout_ld}",F);
+ %{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)
+ %{filter_out}
+}')
+
+# rpmldflags with stripped -Wl, -- in the form flags have to be passed to 'ld'
+# but, don't use it, better use gcc as linker
+%ld_rpmldflags %(awk 'BEGIN {
+ split("%{rpmldflags}",F);
+ for (f in F) {
+ s = F[f];
+ if (s ~ /^-Wl,/) {
+ s = substr(s,5);
+ gsub(/,/," ",s);
+ };
+ printf(s FS);
+ };
+}')
+
+#-----------------------------------------------------------------
+#
+# Generate a command which cleans environment, leaving only the
+# most important variables.
+# If any spec requires any additional environment it should
+# redefine %_preserve_env in following manner:
+#
+# # ADDITIONAL_VAR is required because [a good reason here]
+# %define _preserve_env ADDITIONAL_VAR
+
+%_preserve_env_base PATH HOME TMP TMPDIR SSH_AUTH_SOCK
+
+# "env -i" must end in first line of expaned macros because it's used as first line of shell script (#! env...)
+%_clean_env env -i %(awk -vq="'" -vqq="\\"'\\"" -vq2q="'\\"'" 'BEGIN {
+ split("%{?_preserve_env:%_preserve_env %_preserve_env_base}%{!?_preserve_env:%_preserve_env_base}", P);
+ for (i in P) {
+ p = P[i];
+ if (!ENVIRON[p] || d[p]) {
+ continue;
+ }
+ d[p] = 1;
+ split(ENVIRON[p], V, "");
+ val = p "=";
+ for (j = 1; j in V; j++) {
+ v = V[j];
+ if (v == q)
+ v = qq;
+ else if (v == "\\"")
+ v = q2q;
+ else if (v == "\\\\")
+ v = "\\\\\\\\";
+ else
+ gsub("[^a-zA-Z0-9/:._-]", "\\"&\\"", v);
+ val = val "" v;
+ }
+ printf(val " ");
+ }
+}')
+
+# override %__spec_build_pre and %__spec_install_pre from macros.rpmbuild
+# adding %{_clean_env}
+%__spec_build_pre %{_clean_env}\
+%{___build_pre}\
+%{nil}
+%__spec_install_pre %{_clean_env}\
+%{___build_pre}\
+%{?buildroot:%{__rm} -rf '%{buildroot}'; %{__mkdir_p} '%{buildroot}'}\
+%{nil}
+
+#-----------------------------------------------------------------
+%configure2_13 { \
+ if [ -n "$LINGUAS" ]; then unset LINGUAS; fi; \
+ LDFLAGS="${LDFLAGS:-%rpmldflags}" ; export LDFLAGS ; \
+ CFLAGS="${CFLAGS:-%rpmcflags}" ; export CFLAGS ; \
+ CXXFLAGS="${CXXFLAGS:-%rpmcxxflags}" ; export CXXFLAGS ; \
+ FFLAGS="${FFLAGS:-%rpmcflags}" ; export FFLAGS ; \
+ FCFLAGS="${FCFLAGS:-%rpmcflags}" ; export FCFLAGS ; \
+ CPPFLAGS="${CPPFLAGS:-%rpmcppflags}" ; 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} \
+ --x-libraries=%{?_x_libraries}%{!?_x_libraries:%{_libdir}} \
+ %{dependencytracking} \
+}
+
+# Note: pass only standard cmake macros here.
+# The only exception is SYSCONF_INSTALL_DIR, used commonly in KDE packages,
+# where the default (${CMAKE_INSTALL_PREFIX}/etc) is not FHS-compliant and
+# absolute path MUST be used to comply with FHS.
+# The other non-standard cmake macros used commonly in KDE
+# (INCLUDE_INSTALL_DIR, LIB_INSTALL_DIR, SHARE_INSTALL_PREFIX)
+# have sane default values in KDE, and some packages use these names
+# in different way (e.g. expect them to be always relative or always
+# absolute).
+%cmake \
+%{?__cc:CC="${CC:-%{__cc}}"} \\\
+%{?__cxx:CXX="${CXX:-%{__cxx}}"} \\\
+CPPFLAGS="${CPPFLAGS:-%{rpmcppflags}}" \\\
+%{__cmake} \\\
+ -DCMAKE_VERBOSE_MAKEFILE=ON \\\
+ -DCMAKE_BUILD_TYPE=%{!?debug:TLD}%{?debug:Debug} \\\
+ -DCMAKE_INSTALL_BINDIR:PATH=%{_bindir} \\\
+ -DCMAKE_INSTALL_SBINDIR:PATH=%{_sbindir} \\\
+ -DCMAKE_INSTALL_LIBEXECDIR:PATH=%{_libexecdir} \\\
+ -DCMAKE_INSTALL_SYSCONFDIR:PATH=%{_sysconfdir} \\\
+ -DCMAKE_INSTALL_SHAREDSTATEDIRPATH:PATH=%{_sharedstatedir} \\\
+ -DCMAKE_INSTALL_LOCALSTATEDIRPATH:PATH=%{_localstatedir} \\\
+ -DCMAKE_INSTALL_LIBDIR:PATH=%{_libdir} \\\
+ -DCMAKE_INSTALL_INCLUDEDIR:PATH=%{_includedir} \\\
+ -DCMAKE_INSTALL_OLDINCLUDEDIR:PATH=%{_includedir} \\\
+ -DCMAKE_INSTALL_DATAROOTDIR:PATH=%{_datadir} \\\
+ -DCMAKE_INSTALL_DATADIR:PATH=%{_datadir} \\\
+ -DCMAKE_INSTALL_INFODIR:PATH=%{_infodir} \\\
+ -DCMAKE_INSTALL_LOCALEDIR:PATH=%{_localedir} \\\
+ -DCMAKE_INSTALL_MANDIR:PATH=%{_mandir} \\\
+ -DCMAKE_INSTALL_DOCDIR:PATH=%{_docdir} \\\
+ -DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} \\\
+ -DSYSCONF_INSTALL_DIR:PATH=%{_sysconfdir} \\\
+ -DCMAKE_CXX_FLAGS_TLD="${CXXFLAGS:-%{rpmcxxflags} -DNDEBUG -DQT_NO_DEBUG}" \\\
+ -DCMAKE_C_FLAGS_TLD="${CFLAGS:-%{rpmcflags} -DNDEBUG -DQT_NO_DEBUG}" \\\
+ -DCMAKE_Fortran_FLAGS_TLD="${CFLAGS:-%{rpmcflags} -DNDEBUG -DQT_NO_DEBUG}" \\\
+ -DCMAKE_EXE_LINKER_FLAGS_TLD="${LDFLAGS:-%{rpmldflags}}" \\\
+ -DCMAKE_SHARED_LINKER_FLAGS_TLD="${LDFLAGS:-%{rpmldflags}}" \\\
+ -DCMAKE_MODULE_LINKER_FLAGS_TLD="${LDFLAGS:-%{rpmldflags}}" \\\
+%if "%{_lib}" == "lib64" \
+ -DLIB_SUFFIX=64 \\\
+%endif \
+%if "%{_lib}" == "libx32" \
+ -DLIB_SUFFIX=x32 \\\
+%endif \
+ -DBUILD_SHARED_LIBS:BOOL=ON \\\
+%{nil}
+
+%scons { \
+%{__scons} \
+ LDFLAGS="${LDFLAGS:-%rpmldflags}" \
+ CFLAGS="${CFLAGS:-%rpmcflags}" \
+ CXXFLAGS="${CXXFLAGS:-%rpmcxxflags}" \
+ FFLAGS="${FFLAGS:-%rpmcflags}" \
+ CPPFLAGS="${CPPFLAGS:-%rpmcppflags}" \
+ %{?__cc:CC="%{__cc}"} \
+ %{?__cxx:CXX="%{__cxx}"} \
+ libsuffix=%{_lib} \
+ prefix=%{_prefix} \
+}
+
+# waf. see waf.spec
+%waf { \
+CC="%{__cc}" \
+CXX="%{__cxx}" \
+CPP="%{__cpp}" \
+CFLAGS="%{rpmcflags}" \
+CXXFLAGS="%{rpmcxxflags}" \
+LINKFLAGS="%{rpmldflags}" \
+%{__waf} \
+}
+
+# meson
+%meson { \
+%{?__cc:CC="${CC:-%{__cc}}"} \
+%{?__cxx:CXX="${CXX:-%{__cxx}}"} \
+CFLAGS="${CFLAGS:-%{rpmcflags}}" \
+CPPFLAGS="${CPPFLAGS:-%{rpmcppflags}}" \
+CXXFLAGS="${CXXFLAGS:-%{rpmcxxflags}}" \
+LDFLAGS="${LDFLAGS:-%{rpmldflags}}" \
+LC_ALL=C.UTF-8 %{__meson} \
+ --buildtype=plain \
+ --bindir=%{_bindir} \
+ --datadir=%{_datadir} \
+ --includedir=%{_includedir} \
+ --infodir=%{_infodir} \
+ --libdir=%{_libdir} \
+ --libexecdir=%{_libexecdir} \
+ --localedir=%{_localedir} \
+ --localstatedir=%{_localstatedir} \
+ --mandir=%{_mandir} \
+ --prefix=%{_prefix} \
+ --sbindir=%{_sbindir} \
+ --sharedstatedir=%{_sharedstatedir} \
+ --sysconfdir=%{_sysconfdir} \
+ --wrap-mode=%{__meson_wrap_mode} \
+ --default-library='both' \
+}
+
+%___meson_deprecate() {echo >&2 "DEPRECATED: %%%1 must be replaced with %%%2"; %{expand:%%%2} }
+%meson_build %___meson_deprecate meson_build ninja_build
+%meson_install %___meson_deprecate meson_install ninja_install
+%meson_test %___meson_deprecate meson_test ninja_test
+
+# ninja
+%ninja_build LC_ALL=C.UTF-8 %{__ninja} %{__ninja_common_opts}
+%ninja_install LC_ALL=C.UTF-8 DESTDIR=%{buildroot} %{__ninja} install %{__ninja_common_opts}
+%ninja_test LC_ALL=C.UTF-8 %{__ninja} test %{__ninja_common_opts}
+
+#----------------------------------------------------------------
+#%configure_cache 0
+%configure_cache_file %{buildroot}.configure.cache
+
+%configure {./configure \
+ LDFLAGS="${LDFLAGS:-%rpmldflags}" \
+ CFLAGS="${CFLAGS:-%rpmcflags}" \
+ CXXFLAGS="${CXXFLAGS:-%rpmcxxflags}" \
+ FFLAGS="${FFLAGS:-%rpmcflags}" \
+ FCFLAGS="${FCFLAGS:-%rpmcflags}" \
+ CPPFLAGS="${CPPFLAGS:-%rpmcppflags}" \
+ %{?__cc:CC="%{__cc}"} \
+ %{?__cxx:CXX="%{__cxx}"} \
+ --host=%{_target_platform} \
+ --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} \
+ --x-libraries=%{?_x_libraries}%{!?_x_libraries:%{_libdir}} \
+ %{dependencytracking} \
+ %{?configure_cache:--cache-file=%{configure_cache_file}} \
+}
+
+# Simple macros to simplify adding bconded options to configure scripts.
+# Each macro requires bcond name and accepts optional option name, if option
+# isn't specified bcond name is used as option name. Options returning
+# --with and --enable also allow third argument which will be added as value
+# ( --with-option=value or --enable-option=value ) in case or positive
+# condition, but won't be added otherwise ( nothing or just --disable-option ).
+
+# Requirements:
+# BuildRequires: rpmbuild(macros) >= 1.527
+
+# Usage example:
+# %{__enable bcond} - returns --enable-bcond iff build condition is set
+# %{__disable bcond option} - returns --enable-option iff bcond is not set
+# %{__enable_disable bcond option value} - returns --enable-option=value if
+# bcond is set, returns --disable-option otherwise
+
+# expand bconds to --enable-something and --disable-something
+%__enable() %{expand:%%{?with_%{1}:--enable-%{?2}%{!?2:%{1}}%{?3:=%{3}}}}
+%__disable() %{expand:%%{!?with_%{1}:--disable-%{?2}%{!?2:%{1}}}}
+%__enable_disable() %{expand:%%{?with_%{1}:--enable-%{?2}%{!?2:%{1}}%{?3:=%{3}}}%%{!?with_%{1}:--disable-%{?2}%{!?2:%{1}}}}
+
+# same as above, but condition inverted
+%__enable_unless() %{expand:%%{!?with_%{1}:--enable-%{?2}%{!?2:%{1}}%{?3:=%{3}}}}
+%__disable_if() %{expand:%%{?with_%{1}:--disable-%{?2}%{!?2:%{1}}}}
+%__enable_disable_not() %{expand:%%{!?with_%{1}:--enable-%{?2}%{!?2:%{1}}%{?3:=%{3}}}%%{?with_%{1}:--disable-%{?2}%{!?2:%{1}}}}
+
+# expand bconds to --with-something and --without-something
+%__with() %{expand:%%{?with_%{1}:--with-%{?2}%{!?2:%{1}}%{?3:=%{3}}}}
+%__without() %{expand:%%{!?with_%{1}:--without-%{?2}%{!?2:%{1}}}}
+%__with_without() %{expand:%%{?with_%{1}:--with-%{?2}%{!?2:%{1}}%{?3:=%{3}}}%%{!?with_%{1}:--without-%{?2}%{!?2:%{1}}}}
+
+# same as above, but condition inverted
+%__with_unless() %{expand:%%{!?with_%{1}:--with-%{?2}%{!?2:%{1}}%{?3:=%{3}}}}
+%__without_if() %{expand:%%{?with_%{1}:--without-%{?2}%{!?2:%{1}}}}
+%__with_without_not() %{expand:%%{!?with_%{1}:--with-%{?2}%{!?2:%{1}}%{?3:=%{3}}}%%{?with_%{1}:--without-%{?2}%{!?2:%{1}}}}
+
+# expands to true or false based on bcond; for use with meson or cmake
+%__true_false() %{expand:%%{?with_%{1}:true}%%{!?with_%{1}:false}}
+%__true_false_not() %{expand:%%{?with_%{1}:false}%%{!?with_%{1}:true}}
+
+# for use with cmake:
+# Usage: cmake_on_off BCOND_NAME [OPTION_NAME]
+# BuildRequires: rpmbuild(macros) >= 1.742
+%cmake_on_off() -D%{?2}%{!?2:%{1}}:BOOL=%{expand:%%{?with_%{1}:ON}%%{!?with_%{1}:OFF}}
+
+#-----------------------------------------------------------------
+
+# overload to insert debuginfo package
+%prep \
+%if 0%{?_enable_debug_packages}\
+%{debug_package}\
+%endif\
+%%prep\
+%{nil}
+
+# Location of autoconf macros
+%_aclocaldir %{expand:%%global _aclocaldir %(aclocal --print-ac-dir 2>/dev/null || echo ERROR)}%_aclocaldir
+
+# Location of omf files
+%_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
+%_applnkdir ERROR:_applnkdir_is_obsolete_use_desktopdir_instead
+
+# Location of pixmaps for applnk/desktop files
+%_pixmapsdir /usr/share/pixmaps
+
+# Location of themable icons for applnk/desktop files
+%_iconsdir /usr/share/icons
+
+# Location of fonts directories
+%_fontsdir /usr/share/fonts
+
+# Location of Gtk and associated libraries documentation
+%_gtkdocdir %{_defaultdocdir}/gtk-doc/html
+
+# Location of KDE documentation
+%_kdedocdir %{_defaultdocdir}/kde/HTML
+
+# unsermake script
+%__unsermake /usr/share/unsermake/unsermake
+
+# Current date
+%date %(LC_ALL=C date +"%a %b %d %Y")
+
+# Example files, programs, scripts...
+%_examplesdir /usr/src/examples
+
+# SysV-style initscripts dir
+%_initddir /etc/rc.d/init.d
+
+# If non-empty "debug" macro defined, add "dbg" suffix to release number
+%_rpmfilename %%{NAME}-%%{VERSION}-%%{RELEASE}%{?debug:dbg}.%%{ARCH}.rpm
+
+# Bootstrap release macros.
+# Usage:
+# %bcond_with bootstrap
+# Release: %{bootstrap_release 1}
+#
+# Package will have release 1 if built normally,
+# and release 0.zzz.bootstrap if built with bootstrap
+%bootstrap_release() %{!?with_bootstrap:%{1}%{?2:.%{2}}}%{?with_bootstrap:%{!?2:%(expr %{1} - 1)}%{?2:%{1}.%(expr %{2} - 1)}.zzz.bootstrap}
+
+# Requires name = version-release
+%requires_releq() %{!?1:ERROR}%{?2:ERROR}%{?1:%{!?2:%{expand:%%requires_eq_to -r %1 %1}}}
+# Requires: name = version
+%requires_eq() %{!?1:ERROR}%{?2:ERROR}%{?1:%{!?2:%{expand:%%requires_eq_to %1 %1}}}
+# Requires: name = version (version based on querying package %2)
+%requires_eq_to(r) %{!?2:ERROR}%{?3:ERROR}%{?2:%{!?3:%(if ! LC_ALL=C rpm -q --qf 'Requires: %1 = %|E?{%{E}:}|%{V}%{?-r:-%{R}}\\n' %2 | grep '^Requires:'; then echo "BuildRequires: %2"; fi)}}
+
+# Requires: name >= version
+%requires_ge() %{!?1:ERROR}%{?2:ERROR}%{?1:%{!?2:%{expand:%%requires_ge_to %1 %1}}}
+# Requires: name >= version (version based on querying package %2)
+%requires_ge_to(r) %{!?2:ERROR}%{?3:ERROR}%{?2:%{!?3:%(if ! LC_ALL=C rpm -q --qf 'Requires: %1 >= %|E?{%{E}:}|%{V}%{?-r:-%{R}}\\n' %2 | grep '^Requires:'; then echo "BuildRequires: %2"; fi)}}
+
+# helper for renaming packages
+# %rename old-package
+%rename() \
+Obsoletes: %{1} < %{?epoch:%{epoch}:}%{?version:%{version}}%{?release:-%{release}} \
+Provides: %{1} = %{?epoch:%{epoch}:}%{?version:%{version}}%{?release:-%{release}}
+
+%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
+
+# 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 \
+}
+
+# vim - "
+
+# minimum file size needed for compressed documents.
+# just smaller files than this get larger when compressed.
+# some stats:
+# - 0 byte file compressed was 25 bytes .gz
+# - 39 byte file was compressed as 57
+# - with test/test.spec@man 158 byte file was compressed also 158
+%_min_compress_bytes 159
+
+#-----------------------------------------------------------------
+# find and gzip all files in %{_mandir} and %{infodir}
+#
+# Requires: xargs, find
+#
+#%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' -print0 | xargs -0 -r %{__bzip2} -df; \
+ find "$RPM_BUILD_ROOT$i" -name '*.gz' -print0 | xargs -0 -r %{__gzip} -dnf; \
+ find $RPM_BUILD_ROOT$i -type l | while read a; do \
+ 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=${a#$RPM_BUILD_ROOT$i/}; \
+ l=${l%/*}; \
+ l="$l/$m"; \
+ fi; \
+ rm -f $a; \
+ echo ".so $l" > $a; \
+ echo >&2 "Converted ${a#$RPM_BUILD_ROOT} from symlink to man link: $l"; \
+ done; \
+ # verify that .so links point to existing files (not allowed to point to "other package") \
+ # TODO: iterate over all man dirs, but in Th there is only one true man dir \
+ err=$(grep -rl '^\.so ' "$RPM_BUILD_ROOT$i" | while read doc; do \
+ l=$(grep -r '^\.so ' "$doc"); \
+ l=${l#.so }; \
+ d=$(dirname $doc); \
+ test -e $RPM_BUILD_ROOT$i/$l || test -e $d/$(basename $l) || echo " ${doc#$RPM_BUILD_ROOT} points to inexistent manpage: $l"; \
+ done); \
+ test "$err" != "" && { echo >&2 "Man page link errors:"; echo >&2 "$err"; exit 1; }; \
+ find "$RPM_BUILD_ROOT$i" -type f -size +%{_min_compress_bytes}c -print0 | xargs -0 -r %{__gzip} -9nf; \
+ fi; \
+ done; \
+ if [ -d "$RPM_BUILD_ROOT%{_infodir}" ]; then \
+ echo "Compress info pages: %{_infodir}"; \
+ find "$RPM_BUILD_ROOT%{_infodir}" -name '*.bz2' -print0 | xargs -0 -r %{__bzip2} -df; \
+ find "$RPM_BUILD_ROOT%{_infodir}" -name '*.gz' -print0 | xargs -0 -r %{__gzip} -dnf; \
+ find "$RPM_BUILD_ROOT%{_infodir}" -name '*.info*' -type f -size +%{_min_compress_bytes}c -print0 | xargs -0 -r %{__gzip} -9nf; \
+ fi; \
+}; __spec_install_post_compress_docs } }
+
+#-----------------------------------------------------------------
+# Strip executable binaries and shared object files
+#
+# Requires: find, awk, strip, cut, xargs
+#
+# Special macros which affect this process:
+#%no_install_post_strip 1 # disable stripping at all
+#%_noautostrip regexp # exclude files matching (anchored!) regex from stripping
+#%_autostripall regexp # strip files matching (anchored!) regex using plain strip
+#%_autostripunneeded regexp # strip files matching (anchored!) regex using strip --strip-unneeded
+#%_autostripdebug regexp # strip files matching (anchored!) regex using strip --strip-debug
+#
+%__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' -o -name '*.ko' \) -type f -print); \
+ if [ "$modulelist" ]; then \
+ modulecount=$(echo "$modulelist" | wc -l); \
+ printf "Stripping %d kernel modules..." $modulecount; \
+ echo "$modulelist" | xargs -l512 chmod u+w; \
+ echo "$modulelist" | xargs -l512 %{__strip} -g --remove-section=.comment --remove-section=.note.GNU-stack; \
+ echo "DONE"; \
+ fi; \
+ fi; \
+ filelist=$(find $RPM_BUILD_ROOT -type f ! -regex ".*/usr/lib[x0-9]*/debug/.*\.debug" ! -regex ".*/usr/lib[x0-9]*.*/guile/.*\.go" ! -regex ".*/lib/modules/.*" ! -regex ".*%{_docdir}/.*" ! -regex ".*%{_includedir}/.*" %{?_noautostrip:! -regex "%{_noautostrip}"} %{?_autostripall:! -regex "%{_autostripall}"} %{?_autostripunneeded:! -regex "%{_autostripunneeded}"} %{?_autostripdebug:! -regex "%{_autostripdebug}"}); \
+ if [ -n "$filelist" ]; then \
+ filetypes=`echo "$filelist" | xargs -r -d'\\n' file`; \
+ elfexelist=`echo "$filetypes" | awk -F: '/ELF.*executable/ {print $1}'`; \
+ elfsharedlist=`echo "$filetypes" | awk -F: '/LF.*shared object/ {print $1}'`; \
+ archiveslist=`echo "$filetypes" | awk -F: '/current ar archive/ {print $1}'`; \
+ if [ -n "$elfexelist" ]; then \
+ printf "Stripping %d ELF executables..." $(echo "$elfexelist" | wc -l); \
+ 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); \
+ 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); \
+ 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; \
+ filelist_all=%{?_autostripall:$(find $RPM_BUILD_ROOT -type f -regex "%{_autostripall}")}; \
+ filelist_unneeded=%{?_autostripunneeded:$(find $RPM_BUILD_ROOT -type f -regex "%{_autostripunneeded}")}; \
+ filelist_debug=%{?_autostripdebug:$(find $RPM_BUILD_ROOT -type f -regex "%{_autostripdebug}")}; \
+ if [ -n "$filelist_all" ]; then \
+ printf "Stripping everything from %d additional files..." $(echo "$filelist_all" | wc -l); \
+ chmod u+w $filelist_all; \
+ %{__strip} --remove-section=.note --remove-section=.comment $filelist_all; \
+ echo "DONE"; \
+ fi; \
+ if [ -n "$filelist_unneeded" ]; then \
+ printf "Stripping unneeded from %d additional files..." $(echo "$filelist_unneeded" | wc -l); \
+ chmod u+w $filelist_unneeded; \
+ %{__strip} --strip-unneeded --remove-section=.note --remove-section=.comment $filelist_unneeded; \
+ echo "DONE"; \
+ fi; \
+ if [ -n "$filelist_debug" ]; then \
+ printf "Stripping debuginfo from %d additional files..." $(echo "$filelist_debug" | wc -l); \
+ chmod u+w $filelist_debug; \
+ %{__strip} --strip-debug --remove-section=.note --remove-section=.comment $filelist_debug; \
+ echo "DONE"; \
+ fi; \
+fi; }; __spec_install_post_strip } } }
+
+#-----------------------------------------------------------------
+# remove all RPATH/RUNPATH from executable binaries and shared object files
+#
+# Requires: find, awk, cut, xargs, chrpath, uname
+#
+# Special macros which affect this process
+#%no_install_post_chrpath 1 # disable chrpath at all
+#%_noautochrpath regex # exclude files matching (anchored!) regex from chrpath
+#
+%__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 \
+ objs=`echo "$files" | xargs -r -d'\\n' file | awk -F: '/ELF.*(executable.*dynamically linked|shared object)/ {print $1}'`; \
+ fi; \
+ if [ -n "$objs" ]; then \
+ printf "Remove RPATH/RUNPATH from %d executable binaries and shared object files.\n" $(echo "$objs" | wc -l); \
+ echo "$objs" | \
+ while read file; do \
+ rpath= ; \
+ chmod u+w "$file"; \
+ for dir in $(chrpath -l "$file" | awk '/(R|RUN)PATH=/ { gsub(/.*RPATH=/,""); gsub(/.*RUNPATH=/,""); 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"; \
+ ;; \
+ * ) \
+ 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; \
+fi; }; __spec_install_post_chrpath } } }
+
+# vim: "
+
+#-----------------------------------------------------------------
+# Find all shared object files with unresolved symbols. Warn
+# and terminate if any found (termination can be turned off by define).
+#%no_install_post_check_so 1
+#%skip_post_check_so libwithunresolvedok.so.*
+#
+# NOTE: define skip_post_check_so only if such library really requires
+# unresolved symbols and always leave a comment why it is required:
+# # executable provides symbols foo, bar for those libraries:
+# %define skip_post_check_so libwithoutfoo.so.* libwithoutbar.so.*
+#
+%__spec_install_post_check_so { \
+__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; skip["_ZSt15__once_callable"]=1; skip["_ZSt11__once_call"]=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 }}
+
+#-----------------------------------------------------------------
+# Find all ELF files with executable stac. Warn and terminate if any found
+# (termination can be turned off by define).
+# Details: https://wiki.gentoo.org/wiki/Hardened/GNU_stack_quickstart
+#%no_install_post_check_stackexec 1
+#%skip_post_check_stackexec libwithexecstackok.so.*
+#
+# NOTE: define skip_post_check_stackexec only if such program or library
+# really requires executable stack and always leave a comment why
+# it is required:
+# # Programs full of nested functions that cannot be fixed
+# %define skip_post_check_execstack /bin/foo libwithexecstack.so.*
+#
+%__spec_install_post_check_execstack { \
+__spec_install_post_check_execstack() { \
+%{!?debug:set +x;} \
+ fail=0; \
+ printf "Searching for ELF programs with executable stack..."; \
+ for f in $(find $RPM_BUILD_ROOT -type f -print) ; do \
+ LC_ALL=C readelf -lW $f 2>/dev/null | \
+ LC_ALL=C awk -v "file=$f" 'BEGIN { found=0; } /GNU_STACK/ { if ($7 ~ "E") { found=1 } } END { if (found) { print "\nExecutable stack found in: " file; %{?skip_post_check_execstack:split("%{skip_post_check_execstack}", R); for (i=1; i in R; i++) { if (file ~ "(^|/)" R[i] "$") { print "File marked with skip_post_check_execstack, ignoring errors.\n"; exit(0); } } } exit(1); } }' || fail=1 ; \
+ done ; \
+ echo " DONE"; \
+ %{!?no_install_post_check_execstack:return $fail;} \
+}; __spec_install_post_check_execstack }}
+
+#-----------------------------------------------------------------
+# Verify that for each directory under /var/run package contains
+# tmpfiles.d configuration. Warn and terminate build if config is
+# missing.
+#
+#%no_install_post_check_tmpfiles 1
+#
+%__spec_install_post_check_tmpfiles { \
+__spec_install_post_check_tmpfiles() { \
+%{!?debug:set +x;} \
+ fail=0; \
+ echo "Checking /var/run <-> tmpfiles.d completeness..."; \
+ for d in $RPM_BUILD_ROOT/var/run/*; do \
+ [ -d "$d" ] || continue; \
+ d=${d##$RPM_BUILD_ROOT}; \
+ if ! grep -qsF "$d" $RPM_BUILD_ROOT/usr/lib/tmpfiles.d/*.conf $RPM_BUILD_ROOT/etc/tmpfiles.d/*.conf; then\
+ echo "No tmpfiles configuration for '$d'";\
+ fail=1 ; \
+ fi \
+ done ; \
+ echo " DONE"; \
+ %{!?no_install_post_check_tmpfiles:return $fail;} \
+}; __spec_install_post_check_tmpfiles }}
+
+#-----------------------------------------------------------------
+# Verify that scripts have reasonable shebangs
+# Test spec: see "test/spec_install_post_check_shebangs" branch on packages/test.spec
+#
+#%no_install_post_check_shebangs 1
+#
+%__spec_install_post_check_shebangs { \
+__spec_install_post_check_shebangs() { \
+%{!?debug:set +x;} \
+ echo "Checking script shebangs..."; \
+ fail=` \
+ find $RPM_BUILD_ROOT -type f -perm -500 -print | { fail=0; while IFS= read -r f; do \
+ shebang="$(sed -e'1s/#! *\(.*\)/\1/;t;d;q' "$f")" ; \
+ f="${f##$RPM_BUILD_ROOT}"; \
+ case "$shebang" in \
+ "%{__python}"|"%{__python3}"|"%{__python} "*|"%{__python3} "* \
+ |"/usr/bin/python%{py_ver}"|"/usr/bin/python%{py_ver} "* \
+ |"/usr/bin/python%{py3_ver}"|"/usr/bin/python%{py3_ver} "*) \
+ ;; \
+ "/usr/bin/env python"*|"/usr/bin/python"|"/usr/bin/python "*) \
+ echo "$f starts with '#!$shebang', should be '#!%{__python}' or '#!%{__python3}'" >&2;\
+ fail=1 ; \
+ ;; \
+ "/usr/bin/env "*) \
+ echo "$f starts with '#!$shebang', should be explicit interpreter path" >&2;\
+ fail=1 ; \
+ ;; \
+ *) ;;\
+ esac ; \
+ done ; \
+ echo "$fail" ; \
+ }`; \
+ echo " DONE" ; \
+ %{!?no_install_post_check_shebangs:return $fail;} \
+}; __spec_install_post_check_shebangs }}
+
+# Remove common Perl files we don't package
+%__spec_install_post_perl_clean {\
+%{!?no_install_post_perl_clean: \
+%{?pdir:rm -f $RPM_BUILD_ROOT{%{perl_archlib}/perllocal.pod,%{perl_vendorarch}/auto/%{pdir}%{?pnam:/%(echo %{pnam} | tr - /)}/.packlist}} \
+} }
+
+# Helpers to specify SONAME depdendencies, e.g.:
+# Requires: %{_soname_prov libfoo.so.1}
+# Requires: %{_soname_prov libfoo.so.1(SOME_SYMVER)}
+#
+# BuildRequires: rpmbuild(macros) >= 1.721
+#
+%_soname_tag %(echo %{_lib} | sed -e 's/^lib//' -e 's/^\\(.\\+\\)$/(\\1bit)/')
+%_soname_prov() %(echo "%{1}()%{_soname_tag}" | sed -e 's/^\\([^(]*([^)]\\+)\\)()%{_soname_tag}$/\\1%{_soname_tag}/;s/()$//')
+
+#-----------------------------------------------------------------
+# Update 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/%{?1}%{!?1:*.schemas} > /dev/null; \
+%{nil}
+
+%gconf_schema_uninstall() \
+if [ $1 = 0 -a -x /usr/bin/gconftool-2 ]; then \
+ umask 022; \
+ GCONF_CONFIG_SOURCE="xml:readwrite:/etc/gconf/gconf.xml.defaults" \\\
+ /usr/bin/gconftool-2 --makefile-uninstall-rule /etc/gconf/schemas/%{?1} > /dev/null \
+fi; \
+%{nil}
+
+#-----------------------------------------------------------------
+# Update desktop MIME database
+# requires: desktop-file-utils
+%update_desktop_database() {{ \
+ umask 022; \
+ /usr/bin/update-desktop-database -q; \
+};} \
+%{nil}
+
+%update_desktop_database_post %update_desktop_database
+
+%update_desktop_database_postun() {{ \
+if [ "$1" = "0" ]; then \
+ %update_desktop_database \
+fi; \
+};} \
+%{nil}
+
+#-----------------------------------------------------------------
+# Update shared MIME info database
+# requires: shared-mime-info
+# Note: https://bugs.freedesktop.org/show_bug.cgi?id=70366#c19
+# https://bugzilla.redhat.com/show_bug.cgi?id=1052173
+# TODO: if you want this running with fdatasync(), make sure it's:
+# 1. announcing ~minute delay by echoing appropriate message,
+# 2. running only once after rpm transaction.
+#
+%update_mime_database() {{ \
+ umask 022; \
+ PKGSYSTEM_ENABLE_FSYNC=0 \
+ /usr/bin/update-mime-database %{_datadir}/mime; \
+};} \
+%{nil}
+
+#-----------------------------------------------------------------
+# Update icon cache
+# BuildRequires: rpmbuild(macros) >= 1.596
+# Requires: hicolor-icon-theme
+#
+%update_icon_cache() {{ \
+ %{!?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}
+
+#-----------------------------------------------------------------
+# Update scrollkeeper database
+# requires: scrollkeeper
+#
+%scrollkeeper_update_post() \
+ /usr/bin/scrollkeeper-update -q; \
+%{nil}
+
+%scrollkeeper_update_postun() \
+if [ "$1" = "0" ]; then \
+ /usr/bin/scrollkeeper-update -q; \
+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
+# - 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-linux.org>
+#
+%__noautoreqfiles %(sed -e s'/#.*//' /etc/rpm/noautoreqfiles)%{?_noautoreqfiles: %{_noautoreqfiles}}
+%__noautoprovfiles %(sed -e s'/#.*//' /etc/rpm/noautoprovfiles)%{?_noautoprovfiles: %{_noautoprovfiles}}
+%__noautoreqdep %(sed -e s'/#.*//' /etc/rpm/noautoreqdep)%{?_noautoreqdep: %{_noautoreqdep}}
+%__noautoprov %(sed -e s'/#.*//' /etc/rpm/noautoprov) \
+ %{?_noautoprov: %{_noautoprov}} \
+ %{?_noautoprov_java: %{__noauto_regexp_helper -p java %{_noautoprov_java}}} \
+ %{?_noautoprov_mono: %{__noauto_regexp_helper -p mono %{_noautoprov_mono}}} \
+ %{?_noautoprov_pear: %{__noauto_regexp_helper -p pear %{_noautoprov_pear}}} \
+ %{?_noautoprov_perl: %{__noauto_regexp_helper -p perl %{_noautoprov_perl}}} \
+ %{?_noautoprov_pyegg: %{__noauto_regexp_helper -p pythonegg %{_noautoprov_pyegg}}} \
+ %{?_noautoprov_py3egg: %{__noauto_regexp_helper -p python3egg %{_noautoprov_py3egg}}} \
+ %{nil}
+%__noautoreq %(sed -e s'/#.*//' /etc/rpm/noautoreq) \
+ %{?_noautoreq: %{_noautoreq}} \
+ %{?_noautoreq_java: %{__noauto_regexp_helper -p java %{_noautoreq_java}}} \
+ %{?_noautoreq_mono: %{__noauto_regexp_helper -p mono %{_noautoreq_mono}}} \
+ %{?_noautoreq_pear: %{__noauto_regexp_helper -p pear %{_noautoreq_pear}}} \
+ %{?_noautoreq_perl: %{__noauto_regexp_helper -p perl %{_noautoreq_perl}}} \
+ %{?_noautoreq_pyegg: %{__noauto_regexp_helper -p pythonegg %{_noautoreq_pyegg}}} \
+ %{?_noautoreq_py3egg: %{__noauto_regexp_helper -p python3egg %{_noautoreq_py3egg}}} \
+ %{nil}
+
+# helper for wrapping _noautoreq between perl() or pear()
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+# Usage:
+# BuildRequires: rpmbuild(macros) >= 1.654
+# %define _noautoreq_pear Excluded.php PEAR/Something.php
+# %define _noautoreq_perl Apache::.*
+# BuildRequires: rpmbuild(macros) >= 1.672
+# %define _noautoreq_java ClassDataVersion
+# BuildRequires: rpmbuild(macros) >= 1.709
+# %define _noautoreq_pyegg argparse
+# %define _noautoreq_py3egg backports.ssl-match-hostname ipaddress
+# BuildRequires: rpmbuild(macros) >= 1.730
+# %define _noautoreq_mono Gendarme.Framework
+# BuildRequires: rpmbuild(macros) >= 1.737
+# %define _noautoprov_java Class
+# %define _noautoprov_mono Excluded.Provide
+# %define _noautoprov_pear Excluded.php
+# %define _noautoprov_perl Excluded::Module
+# %define _noautoprov_pyegg excluded
+# %define _noautoprov_py3egg excluded3
+#
+%__noauto_regexp_helper(p:) %(echo "%*" | awk 'BEGIN{RS=" "}{printf("%{-p*}%{__qchar}(%%s%{__qchar}) ", $1)}')
+# detect quote character runtime
+%__qchar_4 \\\\%{nil}
+%__qchar_5 \\\\\\%{nil}
+%__qchar %{expand:%%global __qchar %%__qchar_%(echo %{_rpmversion} | cut -c1)}%__qchar
+
+#%_noautocompressdoc %{nil}
+#
+%_missing_doc_files_terminate_build 1%{nil}
+%_unpackaged_files_terminate_build %{nil}
+
+# node.js libdir
+# Requirements:
+# BuildRequires: rpmbuild(macros) >= 1.634
+%nodejs_libdir /usr/lib/node_modules
+
+# bash-completion 2.0 completions dir
+# Requirements:
+# BuildRequires: rpmbuild(macros) >= 1.673
+# Requires: bash-completion >= 2.0
+%bash_compdir /usr/share/bash-completion/completions
+
+# fish completions dir
+# Requirements:
+# BuildRequires: rpmbuild(macros) >= 1.720
+%fish_compdir /usr/share/fish/vendor_completions.d
+
+# zsh completions dir
+# Requirements:
+# BuildRequires: rpmbuild(macros) >= 1.719
+%zsh_compdir /usr/share/zsh/site-functions
+
+# depmod macro
+%depmod() { \
+umask 022; \
+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; \
+}
+
+# user/group checking macros
+#
+# Usage:
+# %userremove myuser
+#
+%userremove /usr/lib/rpm/user_group.sh user del
+%groupremove /usr/lib/rpm/user_group.sh group del
+#
+# Usage:
+# if %usertestrm myuser; then
+# /usr/sbin/userdel -r myuser
+# Note:
+# use these macros only if you need to call userdel/groupdel with
+# a non-standard option or take an extra action; otherwise use the
+# %userremove/%groupremove macros
+#
+%usertestrm /usr/lib/rpm/user_group.sh user testrm
+%grouptestrm /usr/lib/rpm/user_group.sh group testrm
+# user group membership management macros
+#
+# Usage:
+# %addusertogroup [-q] myuser agroup
+#
+# -q if user or group don't exist, don't make big noise of it (MISSINGOK behaviour)
+#
+# Requirements:
+# BuildRequires: rpmbuild(macros) >= 1.515
+%addusertogroup(q) quiet=%{-q:1} /usr/lib/rpm/user_group.sh user addtogroup %*; \
+%{nil}
+
+# banner support (useful in {pre,post}{,un} and triggers)
+#
+# Usage:
+# %banner name [-a] [-e] [-n] [-tn] [-o] <<EOF
+# the banner text, the banner text
+# the banner text, and following line
+#EOF
+# You can use any form of here-document, <<'EOF' <<-EOT will do.
+# NOTE: if your use "<<-EOF", then You can actually indent inside here-document.
+#
+# -a - append to the banner
+# -e - send to stderr instead of stdout
+# -n - don't 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(aenot:) %{-o:([ "$1" != 1 ] ||} ( \
+RPM_SCRIPTVERBOSITY=5 \
+[ -r /etc/sysconfig/rpm ] && . /etc/sysconfig/rpm \
+if [ -x /usr/bin/banner.sh ]; then \
+ CMD="/usr/bin/banner.sh %{-e:--stderr} %{!-n:$([ $RPM_SCRIPTVERBOSITY -ge %{-t:%{-t*}}%{!-t:5} ] && echo -s)} %{!-a:-m}%{-a:-M} %1" \
+else \
+ CMD="cat%{-e: >&2}" \
+fi \
+eval $CMD %{?2:%2}%{?3: %3})%{-o:)} \
+%{nil}
+
+# useradd/groupadd macros
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+#
+# Usage:
+# %useradd [-P package] [-u uid] [-d home_dir] [-s shell] [-c comment]
+# [-g initial_group] [-G group[,...]] login
+#
+# -u uid. REQUIRED
+# -g gid/group. REQUIRED
+# -s defaults to /bin/false
+# -d defaults to /usr/share/empty
+# -c No default
+# -r is accepted but ignored (it's always set)
+# -k skeleton dir. defaults to /usr/share/empty
+# rpm specific flags
+# -P package name. defaults to %{name}
+#
+%useradd(c:d:e:f:g:G:Mmk:op:s:u:rP:) \
+%{!-u:%{error:useradd: Required argument -u missing}} \
+%{!-g:%{error:useradd: Required argument -g missing}} \
+%{!?1:%{error:useradd: Required parameter login missing}} \
+if [ -n "`/bin/id -u %{expand:%{%{#}}} 2>/dev/null`" ]; then \
+ if [ "`/bin/id -u %{expand:%{%{#}}}`" != "%{-u*}" ]; then \
+ echo "Error: user %{expand:%{%{#}}} doesn't have uid=%{-u*}. Correct this before installing %{-P*}%{!?-P:%{name}}." 1>&2 \
+ exit 1 \
+ fi \
+else \
+ echo "Adding user %{expand:%{%{#}}} UID=%{-u*}." \
+ /usr/sbin/useradd \\\
+ %{-m:-m -k %{-k*}%{!-k:/usr/share/empty}} \\\
+ -u %{-u*} \\\
+ -r \\\
+ -d %{-d*}%{!-d:/usr/share/empty} \\\
+ -s %{-s*}%{!-s:/bin/false} \\\
+ %{-c:-c "%(set -- %{-c*} %{*}; echo $1)"}\\\
+ -g %{-g*} \\\
+ %{-M} \\\
+ %{-G:-G %{-G*}} \\\
+ %{expand:%{%{#}}} 1>&2 || exit $? \
+ [ ! -x /usr/sbin/nscd ] || /usr/sbin/nscd -i passwd || : \
+fi;
+# vim: "
+
+# Usage:
+# %groupadd [-P package] [-g gid] group
+#
+# -g gid. REQUIRED
+#
+# Sample:
+# %groupadd -P %{name}-base -g %{gid} %{name}
+
+%groupadd(g:P:rfo) \
+%{!-g:%{error:groupadd: Required argument -g missing}} \
+%{!?1:%{error:groupadd: Required parameter group missing}} \
+if /usr/bin/getgid %{1} > /dev/null 2>&1; then \
+ if [ "`/usr/bin/getgid %{1}`" != "%{-g*}" ]; then \
+ echo "Error: group %{1} doesn't have gid=%{-g*}. Correct this before installing %{-P*}%{!?-P:%{name}}." 1>&2 \
+ exit 1 \
+ fi \
+else \
+ echo "Adding group %{1} GID=%{-g*}." \
+ /usr/sbin/groupadd -g %{-g*} -r %{1} 1>&2 || exit $? \
+ [ ! -x /usr/sbin/nscd ] || /usr/sbin/nscd -i group || : \
+fi;
+
+# service macro.
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+#
+# calls usual service restart on package %post, but skips the restart if
+# administrator has disabled automatic service restarts in either global
+# /etc/sysconfig/rpm or per service /etc/sysconfig/SERVICE file.
+# NOTE: systemd_booted machines do not print
+# Run "{command}" to restart {service}.
+# message for packages without native systemd unit (not here, no %systemd_post).
+#
+# Usage:
+# %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
+#
+# 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} RPM_BUILD_ROOT=%{buildroot}; /usr/lib/rpm/service_generator.sh %{*}) };}
+
+%env_update [ ! -x /sbin/env-update ] || /sbin/env-update -u || :
+
+# patchset macros
+# generate SourceX urls from range START STOP
+# Format can be SINGLE format char of %e, %f, %g, see seq(1)
+# The sources start from 10000
+#
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+#
+# Usage:
+# %patchset_source -f <seq(1) format> <start> [<end>]
+# %patchset_patch <start> [<end>]
+# If <end> is omited, it is assumed to be <start>.
+#
+# For example in preamble:
+# %patchset_source -f ftp://ftp.vim.org/pub/editors/vim/patches/7.0/7.0.%03g 33 44
+# and in %prep:
+# %patchset_patch 33 44
+#
+# Using sources list:
+# BuildRequires: rpmbuild(macros) >= 1.426
+# %patchset_source -f <url> -s <filelist>
+# %patchset_patch -s <filelist>
+# For example (ncurses):
+# BuildRequires: rpmbuild(macros) >= 1.683
+# %patchset_source -f ftp://dickey.his.com/ncurses/%{basever}/ -s sources
+# %patchset_patch -s sources -p1
+#
+
+%patchset_source(f:b:s:) %(
+ base=%{-b*}%{!-b*:10000}
+%{-s:
+ baseurl='%{-f*}'
+ filelist='%{-s*}'
+ i=$base
+ while read checksum file; do
+ printf "Patch%d: %s%s\\n" $i "$baseurl" "$file"
+ i=$((i+1))
+ done < $filelist
+}
+%{!-s:
+ start=$(expr $base + %1);
+ end=$(expr $base + %{?2}%{!?2:%{1}});
+ # we need to call seq twice as it doesn't allow two formats
+ seq -f 'Patch%g:' $start $end > %{tmpdir}/__ps1;
+ seq -f '%{-f*}' %1 %{?2}%{!?2:%{1}} > %{tmpdir}/__ps2;
+ paste %{tmpdir}/__ps{1,2};
+ rm -f %{tmpdir}/__ps{1,2};
+}
+) \
+%{nil}
+
+# apply sources from %patchset_source
+# -p specify -pX for %patch line
+# -b base offset: defaults to 10000
+# -s filelist to read files from
+%patchset_patch(f:p:b:s:) %(
+ base=%{-b*}%{!-b*:10000}
+ patchlevel=%{-p*:-p%{-p*}}
+%{-s:
+ filelist='%{-s*}'
+ i=$base
+ while read checksum file; do
+ printf "patch%d %s\\n" $i "$patchlevel" | sed -e s,^,%%,
+ i=$((i+1))
+ done < $filelist
+}
+%{!-s:
+ start=$(expr $base + %1);
+ end=$(expr $base + %{?2}%{!?2:%{1}});
+ echo ": patchset_patch %1%{?2: to %2}";
+ seq -f "patch%g $patchlevel" $start $end | sed -e s,^,%%,;
+}
+) \
+%{nil}
+
+# return EXPANDED source url N from current spec
+%sourceurl(n:) %(test "$IN_RPM" = 1 && exit 1; export IN_RPM=1; rpmbuild --nodigest --nosignature --nobuild -D "prep %%dump" %{_specdir}/%{name}.spec 2>&1 | awk '$2 ~ /^SOURCEURL%{-n*}/ {print $3}')
+
+# Helper for LUA.
+# split string separated by space into quoted list
+#
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+#
+# %__lua_split /bin/sh /bin/pdksh -> "/bin/sh", "/bin/pdksh"
+%__lua_split() %(echo "%*" | awk '{for (i=1;i<=NF;i++) printf("\\"%%s\\"%%s", $i, i == NF ? "" : ", ")}')
+
+# adjust /etc/shells by adding and removing shells from there
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+#
+# Usage:
+# %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
+#
+
+%lua_add_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 _, s in ipairs({%{expand:%%__lua_split %*}}) do\
+ if not t[s] then\
+ print("Adding "..s.." to /etc/shells")\
+ f = io.open("/etc/shells", "a")\
+ if f then\
+ f:write(s.."\\n")\
+ f:close()\
+ end\
+ end\
+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\
+f = io.open("/etc/shells", "w")\
+if f then\
+ f:write(s)\
+ f:close()\
+end\
+%{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}\
+%{expand:%%lua_remove_etc_shells %*}\
+%{-p:end} \
+%{nil}
+
+# Undos files
+#
+# Author: Paweł Zuzelski <pawelz@pld-linux.org>
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+#
+# Usage:
+# %undos list_of_files
+# %undos -f EXT[,EXT]
+# %undos -i -f EXT[,EXT]
+#
+# -f EXT[,EXT] - find(1) files by extensions
+# -i - case insensitive file search
+#
+# Example:
+# Un-DOS all *.js, *.css files
+# %undos -f js,css
+# Un-DOS all *.js, *.JS files
+# %undos -f js -i
+# undos all Makefiles
+# %{__find} -name Makefile | xargs %undos
+#
+# Requirements:
+# BuildRequires: sed >= 4.0
+# BuildRequires: rpmbuild(macros) >= 1.674
+
+# NB: make sure this macro stays on one line
+# NB: make sure it includes newline escape
+%undos(f:i) %{-f:%{__find} -type f -regextype posix-extended -%{-i:i}regex '^.+\\.(%(echo %{-f*} | tr ',' '|'))$' -print0 | xargs -0} %{__sed} -i -e 's,\\r$,,' %* \
+%{nil}
+
+#-----------------------------------------------------------------
+# Update hardware database index
+#
+# Requirements:
+# BuildRequires: rpmbuild(macros) >= 1.691
+# Requires: udev-core >= 1:196
+
+%udev_hwdb_update() \
+/sbin/udevadm hwdb --update >/dev/null 2>&1 || : \
+%{nil}
+
+# Generate vim help tags file
+#
+# Requirements:
+# BuildRequires: rpmbuild(macros) >= 1.718
+# Requires(post,postun): /usr/bin/vim
+# Requires(post,postun): vim-rt >= 4:7.4.2054-2
+%vim_doc_helptags() \
+umask 022; \
+/usr/bin/vim -c ':helptags /usr/share/vim/doc' -c ':q' 2>/dev/null \
+%{nil}
+
+# EOF
--- /dev/null
+# pre/post script for -upstart subpackages
+#
+# Author: Jacek Konieczny <jajcus@jajcus.net>
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+#
+# Usage:
+# %upstart_post service_name
+# %upstart_postun service_name
+#
+# Sample:
+# %post upstart
+# %upstart_post %{name}
+#
+# %postun upstart
+# %upstart_postun %{name}
+#
+# Requirements:
+# BuildRequires: rpmbuild(macros) >= 1.690
+# Requires: rc-scripts >= 0.4.3
+
+# migrate from init script to upstart job
+%upstart_post() \
+ if [ -x /sbin/initctl ] && [ -f /var/lock/subsys/%1 ]; then \
+ /sbin/service --no-upstart %1 stop \
+ /sbin/service %1 start \
+ fi \
+%{nil}
+
+# restart the job after upgrade or migrate to init script on removal
+# cannot be stopped with 'service' as /etc/init/$name.conf may be missing
+# at this point
+%upstart_postun() \
+ if [ -x /sbin/initctl ] && /sbin/initctl status %1 2>/dev/null | grep -q 'running' ; then \
+ /sbin/initctl stop %1 >/dev/null 2>&1 \
+ [ -f /etc/rc.d/init.d/%1 -o -f /etc/init/%1.conf ] && { echo -n "Re-"; /sbin/service %1 start; }; \
+ fi \
+%{nil}
--- /dev/null
+# webapp macros
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+#
+# The config is installed/removed inside trigger, this means that you can any
+# time install apache1/apache/lighttpd package and the configuration file is
+# updated. if you don't need the config for various reason for specific
+# webserver, just remove the symlink from config directory using webapp
+# program. the trigger will not recreate the symlink on upgrades. In other
+# words the config is linked to webserver config directory on first install of
+# PACKAGE or WEBSERVER.
+#
+# Add package's webserver config to webserver webapps dir.
+# Usage:
+# %webapp_register [-f] WEBSERVER WEBAPP
+#
+%webapp_register(f) \
+%{?debug:set -x; echo "webapp_register: %{name}-%{version}-%{release} 1:[$1]; 2:[$2]"} \
+if [ -n "%{-f:1}" ] || [ "$1" = "1" ] && [ "$2" = "1" ]; then\
+ /usr/sbin/webapp register %1 %2\
+fi\
+# reload webserver if the config symlink is there and skip reload if webserver is upgraded\
+if [ -L /etc/%1/webapps.d/%(echo "%2" | tr '/' '-').conf ] && [ "$2" -lt "2" ]; then\
+ %{expand:%service -q %%1 reload}\
+fi\
+%{nil}
+
+# Remove package's config from webserver webapps dir.
+# Usage:
+# %webapp_register [-f] WEBSERVER WEBAPP
+%webapp_unregister(f) \
+%{?debug:set -x; echo "webapp_unregister: %{name}-%{version}-%{release}: 1:[$1]; 2:[$2]"} \
+# remove link if either of the packages are gone \
+if [ -n "%{-f:1}" ] || [ "$1" = "0" ] || [ "$2" = "0" ] && [ -L /etc/%1/webapps.d/%(echo "%2" | tr '/' '-').conf ]; then \
+ /usr/sbin/webapp unregister %1 %2\
+ %{expand:%service -q %%1 reload}\
+fi \
+%{nil}
--- /dev/null
+# XMMS specific macros
+%xmms_prefix %{expand:%%global xmms_prefix %(xmms-config --prefix 2>/dev/null || echo ERROR)}%xmms_prefix
+%xmms_exec_prefix %{expand:%%global xmms_exec_prefix %(xmms-config --exec-prefix 2>/dev/null || echo ERROR)}%xmms_exec_prefix
+%xmms_version %{expand:%%global xmms_version %(xmms-config --version 2>/dev/null || echo ERROR)}%xmms_version
+%xmms_datadir %{expand:%%global xmms_datadir %(xmms-config --data-dir 2>/dev/null || echo ERROR)}%xmms_datadir
+%xmms_plugindir %{expand:%%global xmms_plugindir %(xmms-config --plugin-dir 2>/dev/null || echo ERROR)}%xmms_plugindir
+%xmms_visualization_plugindir %{expand:%%global xmms_visualization_plugindir %(xmms-config --visualization-plugin-dir 2>/dev/null || echo ERROR)}%xmms_visualization_plugindir
+%xmms_input_plugindir %{expand:%%global xmms_input_plugindir %(xmms-config --input-plugin-dir 2>/dev/null || echo ERROR)}%xmms_input_plugindir
+%xmms_output_plugindir %{expand:%%global xmms_output_plugindir %(xmms-config --output-plugin-dir 2>/dev/null || echo ERROR)}%xmms_output_plugindir
+%xmms_effect_plugindir %{expand:%%global xmms_effect_plugindir %(xmms-config --effect-plugin-dir 2>/dev/null || echo ERROR)}%xmms_effect_plugindir
+%xmms_general_plugindir %{expand:%%global xmms_general_plugindir %(xmms-config --general-plugin-dir 2>/dev/null || echo ERROR)}%xmms_general_plugindir
--- /dev/null
+# X.org helper macros
+%__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
+# vim: '
+
+%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}
--- /dev/null
+--- ./rpm.macros~ 2008-08-12 20:54:19.000000000 +0300
++++ ./rpm.macros 2008-08-18 22:58:42.471609996 +0300
+@@ -764,9 +764,14 @@
+ # remove python sources, so that check-files won't complain
+ # (idea by glen <at> pld-linux <dot> org)
+ %py_postclean() \
++%{expand:%%define __sip_%{?_enable_debug_packages} 1} \
++%{?__sip_1:> debugfiles-add.list;}\
+ for d in %{py_sitescriptdir} %{py_sitedir} %*; do \
+- [ ! -d "$RPM_BUILD_ROOT$d" ] || find "$RPM_BUILD_ROOT$d" -name '*.py' -print0 | xargs -0r -l512 rm;\
++ [ ! -d "$RPM_BUILD_ROOT$d" ] || find "$RPM_BUILD_ROOT$d" -name '*.py' \\\
++ %{?__sip_1:>> debugfiles-add.list;}\
++ %{!?__sip_1:-print0 | xargs -0r %{__rm} -f;}\
+ done \
++%{expand:%%undefine __sip_%{?_enable_debug_packages}}\
+ %{nil}
+
+ # depmod macro
--- /dev/null
+#!/bin/sh
+#
+# Compress documentation files found in $DOCDIR. Omit some files we don't
+# want to get compressed.
+#
+# /etc/rpm/noautocompressdoc and --noautocompressdoc= option can contain
+# whitespace delimated list of patters to omit.
+#
+
+#set -x
+
+COMPRESS_CMD="gzip -9nf"
+EXCLUDE_SUFFIXES="htm html jpg jpeg png gif pdf css dia js abw HTM JPG PNG GIF PDF CSS JS"
+EXCLUDE_MASKS=
+RECOMPRESS_BZIP2=yes
+
+nocompressdoc=''
+while [ $# -gt 0 ]; do
+ case "$1" in
+ --noautocompressdoc=*)
+ EXCLUDE_MASKS=`echo "${1#--noautocompressdoc=}" | sed -e 's/^ *//;s/ *$//;s/ \+/|/g'`
+ esac
+ shift
+done
+
+if [ -r /etc/rpm/noautocompressdoc ]; then
+ exclude=$(cat /etc/rpm/noautocompressdoc | grep -v '^#' | xargs echo | sed -e 's/^ *//;s/ *$//;s/ \+/|/g')
+ if [ -n "${exclude}" ]; then
+ if [ -n "${EXCLUDE_MASKS}" ]; then
+ EXCLUDE_MASKS="${EXCLUDE_MASKS}|${exclude}"
+ else
+ EXCLUDE_MASKS="${exclude}"
+ fi
+ fi
+fi
+
+if [ "$DOCDIR" = "" ] ; then
+ echo '$DOCDIR not set; exiting.'
+ exit 1
+fi
+
+cd $DOCDIR
+
+echo "Compressing documentation in $DOCDIR..."
+
+if test "$EXCLUDE_MASKS" ; then
+ echo "Excluding pattern '$EXCLUDE_MASKS'"
+fi
+
+FIND_CMD="find . -type f "
+for SUF in $EXCLUDE_SUFFIXES ; do
+ FIND_CMD="$FIND_CMD -a -not -name '*.$SUF'"
+done
+
+eval $FIND_CMD | while read FILENAME ; do
+ if test -n "$EXCLUDE_MASKS" ; then
+ if eval "case \$(basename \"$FILENAME\") in
+ $EXCLUDE_MASKS ) true ;;
+ * ) false ;;
+ esac" ; then
+ continue
+ fi
+ fi
+ case "$FILENAME" in
+ *.gz | *.Z)
+ gzip -d "$FILENAME"
+ FILENAME=$(echo "$FILENAME" | sed -e 's/\.gz$//; s/\.Z$//')
+ ;;
+ *.bz2)
+ if [ "$RECOMPRESS_BZIP2" = yes ] ; then
+ bzip2 -d "$FILENAME"
+ FILENAME=$(echo "$FILENAME" | sed -e 's/\.bz2$//')
+ else
+ continue
+ fi
+ ;;
+ esac
+
+ $COMPRESS_CMD "$FILENAME"
+
+ echo -n "$FILENAME "
+done
+
+echo
+echo "Documentation compressed."
--- /dev/null
+#!/bin/sh
+# Display bcond (_with_*, _without_*) macros from given spec
+# $Id$
+
+if [ "$#" = 0 ]; then
+ echo "Usage: $0 SPEC"
+ exit 1
+fi
+
+SPEC=$1
+if [ $SPEC = "--" ]; then
+ if [ "$#" -lt 2 ]; then
+ echo "Usage: rpmbuild --bcond SPEC"
+ exit 1
+ fi
+ SPEC=$2
+fi
+
+if [ ! -f $SPEC ]; then
+ echo "rpmbuild: $SPEC: no such file"
+ exit 1
+fi
+
+bconds=`awk -F"\n" 'BEGIN { chlog=0 }
+ /^%changelog/ { chlog=1 }
+ /_with(out)?_[_a-zA-Z0-9]+/ && chlog == 0 {
+ match($0, /_with(out)?_[_a-zA-Z0-9]+/);
+ print substr($0, RSTART, RLENGTH)
+ }
+ /^%bcond_with/ && chlog == 0 {
+ match($0, /bcond_with(out)?[ \t]+[_a-zA-Z0-9]+/);
+ bcond = substr($0, RSTART +5 , RLENGTH -5);
+ gsub(/[ \t]+/,"_",bcond);
+ print bcond
+ }' $SPEC | sort -u`
+
+for c in $bconds; do
+ echo -n "$c"
+
+ if ! echo `rpm --eval "%$c"` | grep $c >/dev/null; then
+ echo " (on)"
+ else
+ echo ""
+ fi
+done
+
+
+for bcond in $bconds; do
+ isset=`awk -F"\n" "BEGIN { val=0 }
+ /^%define[\t ]+$bcond/ {
+ if (match(\\$0, /$bcond[\t ]+0[\t ]*$/)) {
+ val = 0
+ } else if (match(\\$0, /$bcond[\t ]+1[\t ]*$/)) {
+ val = 1
+ } else {
+ print \"couldn't determine $bcond value from \", \\$0
+ }
+ } END { print val }" $SPEC`;
+
+ if [ x"$isset" = x"1" ]; then
+ echo "WARN: $bcond defined in spec";
+ fi
+done
+
--- /dev/null
+#!/bin/sh
+# This script reads filenames from STDIN and outputs any relevant requires
+# information that needs to be included in the package.
+#
+# Based on rpm-4.4.2/scripts/find-req.pl
+# Authors: Elan Ruusamäe <glen@pld-linux.org>
+
+export PATH="/sbin:/usr/sbin:/bin:/usr/bin"
+
+# Set the prefix, unless it is overriden
+: ${RPM_LIBDIR=/usr/lib/rpm}
+
+# Enable debug: JAVADEPS_DEBUG=true
+: ${JAVADEPS_DEBUG=false}
+
+# xsltproc for eclipse feature.xml
+: ${xsltproc=/usr/bin/xsltproc}
+
+# "%define java_min_classdataversion 51.0" in spec to minimum version to be 51.0
+: ${MIN_CLASSDATAVERSION=}
+
+# save $- state, to enable in functions
+debug=$-
+
+javaclassversionfilter() {
+ if [ "$MIN_CLASSDATAVERSION" ]; then
+ set -- $* "$MIN_CLASSDATAVERSION"
+ fi
+
+ local v
+ for v in $*; do
+ echo "java(ClassDataVersion) >= $v"
+ done | sort -V | tail -n 1
+}
+
+javaclassversion() {
+ set -$debug
+ local mode=$1; shift
+ [ $# -gt 0 ] || return 1
+ $JAVADEPS_DEBUG && echo >&2 ">> javaclassversion($mode): $*"
+
+ # process only requires
+ [ "$mode" = requires ] || return $ret
+
+ local classver=$(echo "$@" | xargs -r file | grep -o 'compiled Java class data, version [0-9.]*' | awk '{print $NF}' | sort -u)
+ if [ -z "$classver" ]; then
+ return 1
+ fi
+
+ javaclassversionfilter $classver
+ return 0
+}
+
+javajarversion() {
+ set -$debug
+ local mode=$1; shift
+ local jar=$1
+ local tmp ret=0
+ $JAVADEPS_DEBUG && echo >&2 ">> javajarversion($mode): $jar"
+
+ # check only files, symlinks could point outside buildroot
+ [ -f "$jar" -a ! -L "$jar" ] || return $ret
+
+ tmp=$(mktemp -d)
+ unzip -q -d $tmp $jar >&2
+ # workaround for .jar files with stupid permissions
+ chmod -R u+rwX $tmp
+
+ # find .jar and .class files
+ find_javadeps $mode $(find $tmp -type f -regextype posix-extended -regex '^.+\.(class|jar)$') || ret=1
+ rm -rf $tmp
+ return $ret
+}
+
+eclipse_feature() {
+ set -$debug
+ local mode=$1; shift
+ local file=$1
+ local ret=0
+
+ $JAVADEPS_DEBUG && echo >&2 ">> eclipse_feature($mode): $file"
+
+ if [ ! -x $xsltproc ]; then
+ return 0
+ fi
+
+ $xsltproc --stringparam mode $mode ${RPM_LIBDIR}/eclipse-feature.xslt $file
+}
+
+find_javadeps() {
+ set -$debug
+ local mode=$1; shift
+ local ret=0
+
+ $JAVADEPS_DEBUG && echo >&2 ">> find_javadeps($mode): $*"
+ for file in $@; do
+ case $file in
+ *.jar)
+ javajarversion $mode "$file" || ret=1
+ ;;
+ *.class)
+ javaclassversion $mode "$file" || {
+ echo >&2 "ERROR: Class version could not be extracted from $file"
+ ret=1
+ }
+ ;;
+ */feature.xml)
+ eclipse_feature $mode "$file" || ret=1
+ ;;
+ *)
+ $JAVADEPS_DEBUG && echo >&2 ">> find_javadeps($mode): no handle: $file"
+ ;;
+ esac
+ done
+ return $ret
+}
+
+ret=0
+# default mode to requires for backward compat
+mode=requires
+case $1 in
+-P|--provides)
+ mode=provides
+ shift
+ ;;
+-R|--requires)
+ mode=requires
+ shift
+ ;;
+esac
+
+t=$(mktemp)
+find_javadeps $mode $(cat -) > $t || ret=1
+sort -u $t
+rm -f $t
+
+exit $ret
--- /dev/null
+#!/bin/sh
+
+case $1 in
+-P|--provides)
+ while read filename; do
+ case "$filename" in
+ *.desktop)
+ mime=$(awk -F= '/^MimeType=/{print $2}' "$filename")
+ IFS=';'
+ for type in $mime; do
+ if [ -n "$type" ]; then
+ echo "mimetype($type)"
+ fi
+ done
+ ;;
+ esac
+ done
+ ;;
+esac
+
+exit 0
--- /dev/null
+#!/usr/bin/perl
+#####################################################################
+# #
+# Check system dependences between php-pear modules #
+# #
+# Pawe³ Go³aszewski <blues@ds.pg.gda.pl> #
+# Micha³ Moskal <malekith@pld-linux.org> #
+# ------------------------------------------------------------------#
+# TODO: #
+#####################################################################
+
+$pear = "/usr/share/pear";
+
+foreach (@ARGV ? @ARGV : <>) {
+ chomp;
+ $f = $_;
+ next unless ($f =~ /$pear.*\.php$/);
+ $f =~ s/.*$pear\///;
+ print "pear($f)\n";
+}
--- /dev/null
+#!/usr/bin/perl
+#####################################################################
+# #
+# Check system dependences between php-pear modules #
+# #
+# Pawe³ Go³aszewski <blues@ds.pg.gda.pl> #
+# Micha³ Moskal <malekith@pld-linux.org> #
+# ------------------------------------------------------------------#
+# TODO: #
+# - extension_loaded - dependencies. #
+# - some clean-up... #
+#####################################################################
+
+$pear = "/usr/share/pear";
+
+@files = ();
+%req = ();
+
+foreach (@ARGV ? $ARGV : <> ) {
+ chomp;
+ $f = $_;
+ push @files, $f;
+ # skip non-php files
+ next unless ($f =~ /\.php$/);
+ open(F, "< $f") or die;
+
+ if ($f =~ /$pear/) {
+ $file_dir = $f;
+ $file_dir =~ s|.*$pear/||;
+ $file_dir =~ s|/[^/]*$||;
+ } else {
+ $file_dir = undef;
+ }
+
+ while (<F>) {
+ # skip comments
+ next if (/^\s*(#|\/\/|\*|\/\*)/);
+
+ while (/(\W|^)(require|include)(_once)?
+ \s* \(? \s* ("([^"]*)"|'([^']*)')
+ \s* \)? \s* ;/xg) {
+ if ($5 ne "") {
+ $x = $5;
+ } elsif ($6 ne "") {
+ $x = $6;
+ } else {
+ next;
+ }
+
+ next if ($x =~ m|^\./| or $x =~ /\$/);
+ next unless ($x =~ /\.php$/);
+ $req{$x} = 1;
+ }
+
+ next unless (defined $file_dir);
+
+ while (/(\W|^)(require|include)(_once)?
+ \s* \(? \s* dirname \s* \( \s* __FILE__ \s* \) \s* \. \s*
+ ("([^"]*)"|'([^']*)')
+ \s* \)? \s* ;/xg) {
+ if ($5 ne "") {
+ $x = $5;
+ } elsif ($6 ne "") {
+ $x = $6;
+ } else {
+ next;
+ }
+
+ next if ($x =~ /\$/);
+ next unless ($x =~ /\.php$/);
+
+ $x = "$file_dir/$x";
+ $x =~ s|/+|/|g;
+ $req{$x} = 1;
+ }
+ }
+}
+
+f: for $f (keys %req) {
+ for $g (@files) { next f if ($g =~ /\Q$f\E$/); }
+ print "pear($f)\n";
+}
--- /dev/null
+#!/usr/bin/php
+<?php
+/*
+ * minify.spec does not see these: pear(HTTP/ConditionalGet.php) pear(HTTP/Encoder.php)
+ * perl version does
+ */
+/**
+ *
+ * Check system dependences between php-pear modules.
+ *
+ * Paweł Gołaszewski <blues@pld-linux.org> (Perl version)
+ * Michał Moskal <malekith@pld-linux.org> (Perl version)
+ * Elan Ruusamäe <glen@pld-linux.org>
+ *
+ * URL: <http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/rpm/rpm-php-requires.php>
+ *
+ * Requires: php-pear-PHP_CompatInfo
+ * Requires: php-pcre
+ */
+
+/**
+ * Produce pear(Path/To/File.php) deps
+ * Ported to PHP from Perl version of rpm-php-requires.
+ *
+ * @TODO: use tokenizer to parse php files.
+ */
+function peardeps($files) {
+ // files inside php_pear_dir have this prefix
+ $prefix = RPM_BUILD_ROOT. PHP_PEAR_DIR . DIRECTORY_SEPARATOR;
+ $length = strlen($prefix);
+
+ $req = array();
+ foreach ($files as $f) {
+ // skip non-php files
+ if (substr($f, -4) != '.php') {
+ continue;
+ }
+
+ // subdir inside php_pear_dir
+ if (substr($f, 0, $length) == $prefix) {
+ $file_dir = dirname(substr($f, $length));
+ } else {
+ $file_dir = null;
+ }
+
+ foreach (file($f) as $line) {
+ // skip comments -- not perfect, matches "*" at start of line (very rare altho)
+ if (preg_match('/^\s*(#|\/\/|\*|\/\*)/', $line)) {
+ continue;
+ }
+
+ if (preg_match("/(\W|^)(require|include)(_once)?
+ \s* \(? \s*
+ (\"([^\"]*)\"|'([^']*)')
+ \s* \)? \s* ;/x", $line, $m)) {
+
+ if ($m[5]) {
+ $x = $m[5];
+ } else if ($m[6]) {
+ $x = $m[6];
+ } else {
+ continue 2;
+ }
+
+ if (substr($x, 0, 2) == './' || substr($x, -1) == '$') { # XXX must be: CONTAINS DOLLAR
+ continue 2;
+ }
+
+ if (substr($x, -4) != '.php') {
+ continue 2;
+ }
+ $req[$x] = 1;
+ continue 2;
+ }
+
+ if (is_null($file_dir)) {
+ continue;
+ }
+
+ if (preg_match("/(\W|^)(require|include)(_once)?
+ \s* \(? \s* dirname \s* \( \s* __FILE__ \s* \) \s* \. \s*
+ (\"([^\"]*)\"|'([^']*)')
+ \s* \)? \s* ;/x", $line, $m)) {
+
+ if ($m[5]) {
+ $x = $m[5];
+ } else if ($m[6]) {
+ $x = $m[6];
+ } else {
+ continue 2;
+ }
+
+ if (substr($x, -1) == '$') { # XXX must be: CONTAINS DOLLAR
+ continue 2;
+ }
+ if (substr($x, -4) != '.php') {
+ continue 2;
+ }
+
+ $x = "$file_dir/$x";
+ // remove double slashes
+ // TODO: resolve simpletest/test/../socket.php -> simpletest/socket.php
+ $x = str_replace("//", "/", $x);
+ $req[$x] = 1;
+ continue;
+ }
+ }
+ }
+
+ foreach (array_keys($req) as $f) {
+ // skip self deps
+ if (array_key_exists($f, $files)) {
+ continue;
+ }
+ echo "pear($f)\n";
+ }
+}
+
+/**
+ * Produce dependencies for extensions using PEAR PHP_CompatInfo package.
+ */
+function extdeps($files) {
+ require_once 'PHP/CompatInfo.php';
+
+ $info = new PHP_CompatInfo('null');
+ $res = $info->parseData($files);
+
+ // minimum php version we accept
+ // "%define php_min_version 5.1.2" in spec to minimum version to be 5.1.2
+ $version = max(PHP_MIN_VERSION, $res['version']);
+
+ if (version_compare($version, '5.0.0', 'ge')) {
+ # force php-<name> only deps when php5
+ # XXX what about php-pecl-<name> virtual provides?
+ $fmt = 'php-%s';
+ $epoch = 4;
+ } else {
+ $fmt = 'php(%s)';
+ $epoch = 3;
+ }
+ echo "php-common >= ", $epoch, ":", $version, "\n";
+
+ // process extensions
+ foreach ($res['extensions'] as $ext) {
+ // bz2 ext is in php-bzip2 package
+ if ($ext == 'bz2') {
+ $ext = 'bzip2';
+ }
+ // libxml ext is in php-xml package
+ if ($ext == 'libxml') {
+ $ext = 'xml';
+ }
+
+ // these need to be lowercased
+ if (in_array($ext, array('SPL', 'PDO', 'SQLite', 'Reflection', 'SimpleXML'))) {
+ $ext = strtolower($ext);
+ }
+
+ printf("$fmt\n", $ext);
+ }
+}
+
+define('RPM_BUILD_ROOT', getenv('RPM_BUILD_ROOT'));
+define('PHP_PEAR_DIR', '/usr/share/pear');
+define('PHP_MIN_VERSION', getenv('PHP_MIN_VERSION'));
+
+if ($argc > 1) {
+ $files = array_splice($argv, 1);
+} else {
+ $files = explode(PHP_EOL, trim(file_get_contents('php://stdin')));
+}
+
+peardeps($files);
+extdeps($files);
--- /dev/null
+%define rpm_macros_rev 1.747
+%define find_lang_rev 1.40
+# split into individual X_prov_ver if there is a reason to desync
+%define prov_ver 4.15
+Summary: TLD Linux RPM macros
+Summary(pl.UTF-8): Makra RPM dla Linuksa TLD
+Name: rpm-tld-macros
+Version: %{rpm_macros_rev}
+Release: 1
+License: GPL v2+
+Group: Development/Building
+Source0: macros.tld
+Source1: service_generator.sh
+Source3: find-lang.sh
+Source4: dokuwiki-find-lang.sh
+Source5: macros.kernel
+Source6: attr.kernel
+Source8: rpm-compress-doc
+Source9: rpm-find-spec-bcond
+
+Source10: attr.ruby
+Source11: macros.ruby
+Source12: rubygems.rb
+Source13: gem_helper.rb
+
+Source20: attr.java
+Source21: macros.java
+Source22: rpm-java-requires
+Source23: eclipse-feature.xslt
+
+Source30: attr.php
+Source31: macros.php
+Source32: rpm-php-provides
+Source33: rpm-php-requires
+Source34: rpm-php-requires.php
+
+Source40: macros.browser-plugins
+Source41: macros.cacti
+Source42: macros.emacs
+Source43: macros.ghc
+Source44: macros.nagios
+Source45: macros.openldap
+Source46: macros.perl
+Source47: macros.python
+Source48: macros.systemd
+Source49: macros.tcl
+Source50: macros.upstart
+Source51: macros.webapp
+Source52: macros.xmms
+Source53: macros.xorg
+
+Source60: rpm-mimetypedeps
+Source61: macros.mimetype
+
+BuildRequires: rpm >= 4.4.9-56
+BuildRequires: sed >= 4.0
+BuildArch: noarch
+BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
+
+# redefine to bootstrap
+%define _usrlibrpm %{_prefix}/lib/rpm
+
+%description
+This package contains rpm macros for TLD Linux.
+
+%description -l pl.UTF-8
+Ten pakiet zawiera makra rpm-a dla Linuksa TLD.
+
+%package build
+Summary: TLD Linux RPM build macros
+Summary(pl.UTF-8): Makra do budowania pakietów RPM dla Linuksa TLD
+Group: Development/Building
+Requires: findutils >= 1:4.2.26
+Provides: rpmbuild(find_lang) = %{find_lang_rev}
+Provides: rpmbuild(macros) = %{rpm_macros_rev}
+Obsoletes: rpm-build-macros
+Obsoletes: rpm-macros
+# rm: option `--interactive' doesn't allow an argument
+Conflicts: coreutils < 6.9
+Conflicts: gettext-devel < 0.11
+# tmpdir/_tmppath macros problems; optcppflags missing
+Conflicts: rpm < 4.4.9-72
+# macros.d/*
+Conflicts: rpm-build < 4.5-90
+# php-config --sysconfdir
+Conflicts: php-devel < 4:5.2.0-3
+Conflicts: php4-devel < 3:4.4.4-10
+# sysconfig module with proper 'purelib' path
+Conflicts: python3 < 1:3.2.1-3
+# libtool --install
+Conflicts: libtool < 2:2.2
+
+%description build
+This package contains rpm build macros for TLD Linux.
+
+%description build -l pl.UTF-8
+Ten pakiet zawiera makra rpm-a do budowania pakietów dla Linuksa TLD.
+
+%package rubyprov
+Summary: Ruby tools, which simplify creation of RPM packages with Ruby software
+Summary(pl.UTF-8): Makra ułatwiające tworzenie pakietów RPM z programami napisanymi w Ruby
+Group: Applications/File
+Requires: %{name}-build = %{version}-%{release}
+Requires: ruby
+Requires: ruby-modules
+Requires: ruby-rubygems
+Provides: rpm-rubyprov = %{prov_ver}
+Obsoletes: rpm-rubyprov
+
+%description rubyprov
+Ruby tools, which simplifies creation of RPM packages with Ruby
+software.
+
+%description rubyprov -l pl.UTF-8
+Makra ułatwiające tworzenie pakietów RPM z programami napisanymi w
+Ruby.
+
+%package javaprov
+Summary: Additional utilities for checking Java provides/requires in RPM packages
+Summary(pl.UTF-8): Dodatkowe narzędzia do sprawdzania zależności kodu w Javie w pakietach RPM
+Group: Applications/File
+Requires: %{name}-build = %{version}-%{release}
+Requires: jar
+Requires: jre
+Requires: file
+Requires: findutils >= 1:4.2.26
+Requires: mktemp
+Requires: unzip
+Provides: rpm-javaprov = %{prov_ver}
+Obsoletes: rpm-javaprov
+
+%description javaprov
+Additional utilities for checking Java provides/requires in RPM
+packages.
+
+%description javaprov -l pl.UTF-8
+Dodatkowe narzędzia do sprawdzania zależności kodu w Javie w pakietach
+RPM.
+
+%package php-pearprov
+Summary: Additional utilities for checking PHP PEAR provides/requires in RPM packages
+Summary(pl.UTF-8): Dodatkowe narzędzia do sprawdzania zależności skryptów php w RPM
+Group: Applications/File
+Requires: %{name}-build = %{version}-%{release}
+Requires: sed >= 4.0
+Suggests: php-pear-PHP_CompatInfo
+Provides: rpm-php-pearprov = %{prov_ver}
+Obsoletes: rpm-php-pearprov
+
+%description php-pearprov
+Additional utilities for checking PHP PEAR provides/requires in RPM
+packages.
+
+%description php-pearprov -l pl.UTF-8
+Dodatkowe narzędzia do sprawdzenia zależności skryptów PHP PEAR w
+pakietach RPM.
+
+%prep
+%setup -qcT
+cp -p %{SOURCE0} .
+cp -p %{SOURCE1} .
+
+%build
+%{__sed} -i -e 's,{Revision},%{rpm_macros_rev},' macros.tld
+
+rev=$(awk '/^%%rpm_build_macros/{print $2}' macros.tld)
+if [ "$rev" != "%rpm_macros_rev" ]; then
+ : Update rpm_macros_rev define to $rev, and retry
+ exit 1
+fi
+rev=$(awk -F= '/^VERSION/{print $2}' %{SOURCE3})
+if [ "$rev" != "%find_lang_rev" ]; then
+ : Update find_lang_rev define to $rev, and retry
+ exit 1
+fi
+
+%install
+rm -rf $RPM_BUILD_ROOT
+install -d $RPM_BUILD_ROOT%{_usrlibrpm}/{macros.d,tld}
+
+cp -p macros.tld $RPM_BUILD_ROOT%{_usrlibrpm}/macros.build
+cp -p %{SOURCE8} $RPM_BUILD_ROOT%{_usrlibrpm}/compress-doc
+cp -p %{SOURCE9} $RPM_BUILD_ROOT%{_usrlibrpm}/find-spec-bcond
+
+cat %{SOURCE5} %{SOURCE6} >$RPM_BUILD_ROOT%{_usrlibrpm}/macros.d/macros.kernel
+
+install -p service_generator.sh $RPM_BUILD_ROOT%{_usrlibrpm}
+install -p %{SOURCE3} $RPM_BUILD_ROOT%{_usrlibrpm}/find-lang.sh
+install -p %{SOURCE4} $RPM_BUILD_ROOT%{_usrlibrpm}/dokuwiki-find-lang.sh
+
+cat %{SOURCE11} %{SOURCE10} >$RPM_BUILD_ROOT%{_usrlibrpm}/macros.d/macros.ruby
+install -p %{SOURCE12} $RPM_BUILD_ROOT%{_usrlibrpm}/rubygems.rb
+install -p %{SOURCE13} $RPM_BUILD_ROOT%{_usrlibrpm}/gem_helper.rb
+
+cat %{SOURCE21} %{SOURCE20} >$RPM_BUILD_ROOT%{_usrlibrpm}/macros.d/macros.java
+install %{SOURCE22} $RPM_BUILD_ROOT%{_usrlibrpm}/java-find-requires
+install %{SOURCE23} $RPM_BUILD_ROOT%{_usrlibrpm}/eclipse-feature.xslt
+
+cat %{SOURCE31} %{SOURCE30} >$RPM_BUILD_ROOT%{_usrlibrpm}/macros.d/macros.php
+cp -p %{SOURCE32} $RPM_BUILD_ROOT%{_usrlibrpm}/php.prov
+cp -p %{SOURCE33} $RPM_BUILD_ROOT%{_usrlibrpm}/php.req
+cp -p %{SOURCE34} $RPM_BUILD_ROOT%{_usrlibrpm}/php.req.php
+
+cp -p %{SOURCE40} $RPM_BUILD_ROOT%{_usrlibrpm}/macros.d/macros.browser-plugins
+cp -p %{SOURCE41} $RPM_BUILD_ROOT%{_usrlibrpm}/macros.d/macros.cacti
+cp -p %{SOURCE42} $RPM_BUILD_ROOT%{_usrlibrpm}/macros.d/macros.emacs
+cp -p %{SOURCE43} $RPM_BUILD_ROOT%{_usrlibrpm}/macros.d/macros.ghc
+cp -p %{SOURCE44} $RPM_BUILD_ROOT%{_usrlibrpm}/macros.d/macros.nagios
+cp -p %{SOURCE45} $RPM_BUILD_ROOT%{_usrlibrpm}/macros.d/macros.openldap
+cp -p %{SOURCE46} $RPM_BUILD_ROOT%{_usrlibrpm}/macros.d/macros.perl
+cp -p %{SOURCE47} $RPM_BUILD_ROOT%{_usrlibrpm}/macros.d/macros.python
+cp -p %{SOURCE48} $RPM_BUILD_ROOT%{_usrlibrpm}/macros.d/macros.systemd
+cp -p %{SOURCE49} $RPM_BUILD_ROOT%{_usrlibrpm}/macros.d/macros.tcl
+cp -p %{SOURCE50} $RPM_BUILD_ROOT%{_usrlibrpm}/macros.d/macros.upstart
+cp -p %{SOURCE51} $RPM_BUILD_ROOT%{_usrlibrpm}/macros.d/macros.webapp
+cp -p %{SOURCE52} $RPM_BUILD_ROOT%{_usrlibrpm}/macros.d/macros.xmms
+cp -p %{SOURCE53} $RPM_BUILD_ROOT%{_usrlibrpm}/macros.d/macros.xorg
+
+cp -p %{SOURCE60} $RPM_BUILD_ROOT%{_usrlibrpm}/mimetypedeps.sh
+cp -p %{SOURCE61} $RPM_BUILD_ROOT%{_usrlibrpm}/macros.d/macros.mimetype
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files build
+%defattr(644,root,root,755)
+%{_usrlibrpm}/macros.build
+%{_usrlibrpm}/macros.d/macros.browser-plugins
+%{_usrlibrpm}/macros.d/macros.cacti
+%{_usrlibrpm}/macros.d/macros.emacs
+%{_usrlibrpm}/macros.d/macros.ghc
+%{_usrlibrpm}/macros.d/macros.java
+%{_usrlibrpm}/macros.d/macros.kernel
+%{_usrlibrpm}/macros.d/macros.mimetype
+%{_usrlibrpm}/macros.d/macros.nagios
+%{_usrlibrpm}/macros.d/macros.openldap
+%{_usrlibrpm}/macros.d/macros.perl
+%{_usrlibrpm}/macros.d/macros.php
+%{_usrlibrpm}/macros.d/macros.python
+%{_usrlibrpm}/macros.d/macros.ruby
+%{_usrlibrpm}/macros.d/macros.systemd
+%{_usrlibrpm}/macros.d/macros.tcl
+%{_usrlibrpm}/macros.d/macros.upstart
+%{_usrlibrpm}/macros.d/macros.webapp
+%{_usrlibrpm}/macros.d/macros.xmms
+%{_usrlibrpm}/macros.d/macros.xorg
+%attr(755,root,root) %{_usrlibrpm}/service_generator.sh
+%attr(755,root,root) %{_usrlibrpm}/find-lang.sh
+%attr(755,root,root) %{_usrlibrpm}/dokuwiki-find-lang.sh
+%attr(755,root,root) %{_usrlibrpm}/compress-doc
+%attr(755,root,root) %{_usrlibrpm}/find-spec-bcond
+%attr(755,root,root) %{_usrlibrpm}/mimetypedeps.sh
+
+%files rubyprov
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_usrlibrpm}/gem_helper.rb
+%attr(755,root,root) %{_usrlibrpm}/rubygems.rb
+
+%files javaprov
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_usrlibrpm}/java-find-requires
+%{_usrlibrpm}/eclipse-feature.xslt
+
+%files php-pearprov
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_usrlibrpm}/php.prov
+%attr(755,root,root) %{_usrlibrpm}/php.req
+%attr(755,root,root) %{_usrlibrpm}/php.req.php
--- /dev/null
+#!/usr/bin/ruby
+#--
+# Copyright 2010 Per Øyvind Karlsen <peroyvind@mandriva.org>
+# This program is free software. It may be redistributed and/or modified under
+# the terms of the LGPL version 2.1 (or later).
+#
+# FIXME: Someone with actual ruby skills should really clean up and sanitize
+# this! fugliness obvious...
+#++
+
+require 'optparse'
+require 'rbconfig'
+
+provides = false
+requires = false
+
+opts = OptionParser.new("#{$0} <--provides|--requires>")
+opts.on("-P", "--provides", "Print provides") do |val|
+ provides = true
+end
+opts.on("-R", "--requires", "Print requires") do |val|
+ requires= true
+end
+
+rest = opts.permute(ARGV)
+
+if rest.size != 0 or (!provides and !requires) or (provides and requires)
+ $stderr.puts "Use either --provides OR --requires"
+ $stderr.puts opts
+ exit(1)
+end
+
+require 'rubygems'
+gem_dir = Gem.respond_to?(:default_dirs) ? Gem.default_dirs[:system][:gem_dir] : Gem.path.first
+specpatt = "#{gem_dir}/specifications/.*\.gemspec$"
+gems = []
+ruby_versioned = false
+abi_provide = false
+# as ruby_version may be empty, take version from basename of archdir
+ruby_version = RbConfig::CONFIG["ruby_version"].empty? ? File.basename(RbConfig::CONFIG["archdir"]) : RbConfig::CONFIG["ruby_version"]
+
+for path in $stdin.readlines
+ # way fugly, but we make the assumption that if the package has
+ # this file, the package is the current ruby version, and should
+ # therefore provide ruby(abi) = version
+ if provides and path.match(RbConfig::CONFIG["archdir"] + "/rbconfig.rb")
+ abi_provide = true
+ ruby_versioned = true
+ elsif path.match(specpatt)
+ gems.push(path.chomp)
+ # this is quite ugly and lame, but the assumption made is that if any files
+ # found in any of these directories specific to this ruby version, the
+ # package is dependent on this specific version.
+ # FIXME: only supports current ruby version
+ elsif not ruby_versioned
+ if path.match(RbConfig::CONFIG["rubylibdir"])
+ ruby_versioned = true
+ elsif path.match(RbConfig::CONFIG["archdir"])
+ ruby_versioned = true
+ elsif path.match(RbConfig::CONFIG["sitelibdir"])
+ ruby_versioned = !RbConfig::CONFIG["ruby_version"].empty?
+ elsif path.match(RbConfig::CONFIG["sitearchdir"])
+ ruby_versioned = true
+ elsif path.match(RbConfig::CONFIG["vendorlibdir"])
+ ruby_versioned = !RbConfig::CONFIG["ruby_version"].empty?
+ elsif path.match(RbConfig::CONFIG["vendorarchdir"])
+ ruby_versioned = true
+ end
+ end
+end
+
+if requires or abi_provide
+ abidep = "ruby(abi)"
+ if ruby_versioned
+ abidep += " = %s" % ruby_version
+ end
+ print abidep + "\n"
+end
+
+if gems.length > 0
+ require 'rubygems'
+
+ if requires
+
+ module Gem
+ class Requirement
+ def rpm_dependency_transform(name, version)
+ pessimistic = ""
+ if version == "> 0.0.0" or version == ">= 0"
+ version = ""
+ else
+ if version[0..1] == "~>"
+ pessimistic = "rubygem(%s) < %s\n" % [name, Gem::Version.create(version[3..-1]).bump]
+ version = version.gsub(/\~>/, '=>')
+ end
+ if version[0..1] == "!="
+ version = version.gsub(/\!=/, '>')
+ end
+ version = version.sub(/^/, ' ')
+ end
+ version = "rubygem(%s)%s\n%s" % [name, version, pessimistic]
+ end
+
+ def to_rpm(name)
+ result = as_list
+ return result.map { |version| rpm_dependency_transform(name, version) }
+ end
+
+ end
+ end
+ end
+
+ for gem in gems
+ data = File.read(gem)
+ spec = eval(data)
+ if provides
+ print "rubygem(%s) = %s\n" % [spec.name, spec.version]
+ end
+ if requires
+ for d in spec.dependencies
+ print d.requirement.to_rpm(d.name)[0] unless d.type != :runtime
+ end
+ for d in spec.required_rubygems_version.to_rpm("rubygems")
+ print d.gsub(/(rubygem\()|(\))/, "")
+ end
+ end
+ end
+end
--- /dev/null
+#!/bin/sh
+# init vars
+service="$1"
+action="$2"
+desc="$3"
+quiet=$quiet
+noop=$noop
+if [ -z "$desc" ]; then
+ desc="$1 service"
+fi
+
+# action stop implies quiet mode and check disabling
+if [ "$action" = "stop" ]; then
+ quiet=1
+else
+ check=1
+fi
+
+# common part
+service_body() {
+ cat <<-EOF
+ if [ -f /var/lock/subsys/$service ]; then
+ EOF
+ if [ "$noop" = 1 ]; then
+ echo :
+ else
+ cat <<-EOF
+ /sbin/service $service $action 1>&2 || :;
+ EOF
+ fi
+
+ if [ "$quiet" != 1 ]; then
+ cat <<-EOF
+ else
+ echo 'Run "/sbin/service $service start" to start $desc.'
+ EOF
+ fi
+ cat <<-EOF
+ fi
+ EOF
+}
+
+# include check function
+skip_auto_restart_body() {
+ cat <<-EOF
+ skip_auto_restart() {
+ [ -f /etc/sysconfig/rpm ] && . /etc/sysconfig/rpm
+ [ -f /etc/sysconfig/$service ] && . /etc/sysconfig/$service
+ echo \${RPM_SKIP_AUTO_RESTART:-no}
+ };
+ EOF
+}
+
+echo ''
+if [ "$check" = 1 ]; then
+ skip_auto_restart_body
+ echo 'if [ $(skip_auto_restart) = no ]; then'
+ service_body
+ echo 'else'
+ # service restart was disabled, tell them to restart it
+ cat <<-EOF
+ if [ -f /var/lock/subsys/$service ]; then
+ echo 'Run "/sbin/service $service restart" to restart $desc.'
+ fi
+ EOF
+ echo 'fi'
+else
+ service_body
+fi
+
+exit 0
+
+# for testing - no syntax errors allowed
+rpm -E '%service monit restart' | sh
+rpm -E '%service monit restart -q' | sh
+rpm -E '%service monit stop' | sh
+rpm -E '%service monit stop -q' | sh
+rpm -E '%service monit stop "Monit Daemon"' | sh
+rpm -E '%service monit stop "Monit Daemon" -q' | sh
+rpm -E '%service monit restart "Monit Daemon"' | sh
+rpm -E '%service monit restart -q "Monit Daemon"' | sh
+rpm -E '%service monit reload "Monit Daemon"' | sh
+rpm -E '%service monit reload -q "Monit Daemon"' | sh
+rpm -E '%{service monit reload "Monit Daemon"} date' | sh
+rpm -E '%{service monit reload "Monit Daemon" -q} date' | sh
+rpm -E '%{service -n monit restart "Monit Daemon" } date' | sh
+