From 14f5e1d6c8c3e822597add378eb79d54ff12ae58 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Tue, 17 May 2022 04:55:22 -0400 Subject: [PATCH] import redhat-rpm-config-194-1.el9 --- .gitignore | 0 .redhat-rpm-config.metadata | 0 SOURCES/brp-fix-pyc-reproducibility | 18 + SOURCES/brp-ldconfig | 13 + SOURCES/brp-mangle-shebangs | 165 ++ SOURCES/brp-python-bytecompile | 141 ++ SOURCES/brp-strip-lto | 17 + SOURCES/buildflags.md | 532 +++++ SOURCES/common.lua | 294 +++ SOURCES/config.guess | 1462 +++++++++++++ SOURCES/config.sub | 1823 +++++++++++++++++ SOURCES/dist.sh | 66 + SOURCES/find-provides | 50 + SOURCES/find-requires | 39 + SOURCES/forge.lua | 312 +++ SOURCES/gpgverify | 111 + SOURCES/libsymlink.attr | 5 + SOURCES/macros | 372 ++++ SOURCES/macros.dwz | 39 + SOURCES/macros.fedora-misc | 63 + SOURCES/macros.fedora-misc-srpm | 43 + SOURCES/macros.forge | 70 + SOURCES/macros.ldc-srpm | 2 + SOURCES/macros.ldconfig | 9 + SOURCES/macros.mono-srpm | 5 + SOURCES/macros.nodejs-srpm | 7 + SOURCES/macros.valgrind-srpm | 3 + SOURCES/macros.vpath | 7 + SOURCES/redhat-annobin-cc1 | 2 + SOURCES/redhat-annobin-plugin-select.sh | 199 ++ ...redhat-annobin-select-annobin-built-plugin | 2 + .../redhat-annobin-select-gcc-built-plugin | 2 + SOURCES/redhat-hardened-cc1 | 2 + SOURCES/redhat-hardened-clang.cfg | 1 + SOURCES/redhat-hardened-ld | 2 + SOURCES/rpmrc | 97 + SPECS/redhat-rpm-config.spec | 1354 ++++++++++++ 37 files changed, 7329 insertions(+) create mode 100644 .gitignore create mode 100644 .redhat-rpm-config.metadata create mode 100644 SOURCES/brp-fix-pyc-reproducibility create mode 100755 SOURCES/brp-ldconfig create mode 100755 SOURCES/brp-mangle-shebangs create mode 100755 SOURCES/brp-python-bytecompile create mode 100755 SOURCES/brp-strip-lto create mode 100644 SOURCES/buildflags.md create mode 100644 SOURCES/common.lua create mode 100644 SOURCES/config.guess create mode 100644 SOURCES/config.sub create mode 100755 SOURCES/dist.sh create mode 100755 SOURCES/find-provides create mode 100755 SOURCES/find-requires create mode 100644 SOURCES/forge.lua create mode 100755 SOURCES/gpgverify create mode 100644 SOURCES/libsymlink.attr create mode 100644 SOURCES/macros create mode 100644 SOURCES/macros.dwz create mode 100644 SOURCES/macros.fedora-misc create mode 100644 SOURCES/macros.fedora-misc-srpm create mode 100644 SOURCES/macros.forge create mode 100644 SOURCES/macros.ldc-srpm create mode 100644 SOURCES/macros.ldconfig create mode 100644 SOURCES/macros.mono-srpm create mode 100644 SOURCES/macros.nodejs-srpm create mode 100644 SOURCES/macros.valgrind-srpm create mode 100644 SOURCES/macros.vpath create mode 100644 SOURCES/redhat-annobin-cc1 create mode 100644 SOURCES/redhat-annobin-plugin-select.sh create mode 100644 SOURCES/redhat-annobin-select-annobin-built-plugin create mode 100644 SOURCES/redhat-annobin-select-gcc-built-plugin create mode 100644 SOURCES/redhat-hardened-cc1 create mode 100644 SOURCES/redhat-hardened-clang.cfg create mode 100644 SOURCES/redhat-hardened-ld create mode 100644 SOURCES/rpmrc create mode 100644 SPECS/redhat-rpm-config.spec diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/.redhat-rpm-config.metadata b/.redhat-rpm-config.metadata new file mode 100644 index 0000000..e69de29 diff --git a/SOURCES/brp-fix-pyc-reproducibility b/SOURCES/brp-fix-pyc-reproducibility new file mode 100644 index 0000000..4118d97 --- /dev/null +++ b/SOURCES/brp-fix-pyc-reproducibility @@ -0,0 +1,18 @@ +#!/bin/bash -e + +# If using normal root, avoid changing anything. +if [ -z "$RPM_BUILD_ROOT" -o "$RPM_BUILD_ROOT" = "/" ]; then + exit 0 +fi + +# Defined as %py_reproducible_pyc_path macro and passed here as +# the first command-line argument +path_to_fix=$1 + +# First, check that the parser is available: +if [ ! -x /usr/bin/marshalparser ]; then + echo "ERROR: If %py_reproducible_pyc_path is defined, you have to also BuildRequire: /usr/bin/marshalparser !" + exit 1 +fi + +find "$path_to_fix" -type f -name "*.pyc" | xargs /usr/bin/marshalparser --fix --overwrite diff --git a/SOURCES/brp-ldconfig b/SOURCES/brp-ldconfig new file mode 100755 index 0000000..e169609 --- /dev/null +++ b/SOURCES/brp-ldconfig @@ -0,0 +1,13 @@ +#!/bin/sh -efu +# Force creating of DSO symlinks. + +# If using normal root, avoid changing anything. +if [ -z "$RPM_BUILD_ROOT" -o "$RPM_BUILD_ROOT" = "/" ]; then + exit 0 +fi + +# Create an empty config file for ldconfig to shut up a warning +config=$(mktemp -p "$RPM_BUILD_ROOT") +/sbin/ldconfig -f $(basename "$config") -N -r "$RPM_BUILD_ROOT" +rm -f "$config" +# TODO: warn if it created new symlinks and guide people. diff --git a/SOURCES/brp-mangle-shebangs b/SOURCES/brp-mangle-shebangs new file mode 100755 index 0000000..ab7af60 --- /dev/null +++ b/SOURCES/brp-mangle-shebangs @@ -0,0 +1,165 @@ +#!/bin/bash -eu + +# If using normal root, avoid changing anything. +if [ -z "$RPM_BUILD_ROOT" -o "$RPM_BUILD_ROOT" = "/" ]; then + exit 0 +fi + +exclude_files="" +exclude_files_from="" +exclude_shebangs="" +exclude_shebangs_from="" + +usage() { + local verbose=$1 && shift + local outfile=$1 && shift + local status=$1 && shift + + ( + echo 'usage: brp-mangle-shebangs [--files ] [--files-from ] [--shebangs ] [--shebangs-from ]' + if [ "${verbose}" == "yes" ]; then + echo ' --files: extended regexp of files to ignore' + echo ' --files-from: file containing a list of extended regexps of files to ignore' + echo ' --shebangs: extended regexp of shebangs to ignore' + echo ' --shebangs-from: file containing a list of extended regexps of shebangs to ignore' + fi + ) >>${outfile} + exit ${status} +} + +while [ $# -gt 0 ] ; do + case "$1" in + --files) + exclude_files="${2}" + shift + ;; + --files=*) + exclude_files="${1##--files=}" + ;; + --files-from) + exclude_files_from="${2}" + shift + ;; + --files-from=*) + exclude_files_from="${1##--files-from=}" + ;; + --shebangs) + exclude_shebangs="${2}" + shift + ;; + --shebangs=*) + exclude_shebangs="${1##--shebangs=}" + ;; + --shebangs-from) + exclude_shebangs_from="${2}" + shift + ;; + --shebangs-from=*) + exclude_shebangs_from="${1##--shebangs-from=}" + ;; + --help|--usage|"-?"|-h) + usage yes /dev/stdout 0 + ;; + *) + echo "Unknown option \"${1}\"" 1>&2 + usage no /dev/stderr 1 + ;; + esac + shift +done + +cd "$RPM_BUILD_ROOT" + +# Large packages such as kernel can have thousands of executable files. +# We take care to not fork/exec thousands of "file"s and "grep"s, +# but run just two of them. +# (Take care to exclude filenames which would mangle "file" output). +find -executable -type f ! -path '*:*' ! -path $'*\n*' \ +| file -N --mime-type -f - \ +| grep -P ".+(?=: (text/|application/javascript))" \ +| { +fail=0 +while IFS= read -r line; do + f=${line%%:*} + + # Remove the dot + path="${f#.}" + + if [ -n "$exclude_files" ]; then + echo "$path" | grep -q -E "$exclude_files" && continue + fi + if [ -n "$exclude_files_from" ]; then + echo "$path" | grep -q -E -f "$exclude_files_from" && continue + fi + + + if ! read shebang_line < "$f"; then + echo >&2 "*** WARNING: Cannot read the first line from $f, removing executable bit" + ts=$(stat -c %y "$f") + chmod -x "$f" + touch -d "$ts" "$f" + continue + fi + + orig_shebang="${shebang_line#\#!}" + if [ "$orig_shebang" = "$shebang_line" ]; then + echo >&2 "*** WARNING: $f is executable but has no shebang, removing executable bit" + ts=$(stat -c %y "$f") + chmod -x "$f" + touch -d "$ts" "$f" + continue + fi + + # Trim spaces + while shebang="${orig_shebang// / }"; [ "$shebang" != "$orig_shebang" ]; do + orig_shebang="$shebang" + done + # Treat "#! /path/to " as "#!/path/to" + orig_shebang="${orig_shebang# }" + + shebang="$orig_shebang" + + if [ -z "$shebang" ]; then + echo >&2 "*** WARNING: $f is executable but has empty shebang, removing executable bit" + ts=$(stat -c %y "$f") + chmod -x "$f" + touch -d "$ts" "$f" + continue + fi + if [ -n "${shebang##/*}" ]; then + echo >&2 "*** ERROR: $f has shebang which doesn't start with '/' ($shebang)" + fail=1 + continue + fi + + if ! { echo "$shebang" | grep -q -P "^/(?:usr/)?(?:bin|sbin)/"; }; then + continue + fi + + # Replace "special" env shebang: + # /whatsoever/env /whatever/foo → /whatever/foo + shebang=$(echo "$shebang" | sed -r -e 's@^(.+)/env /(.+)$@/\2@') + # /whatsoever/env foo → /whatsoever/foo + shebang=$(echo "$shebang" | sed -r -e 's@^(.+/)env (.+)$@\1\2@') + + # If the shebang now starts with /bin, change it to /usr/bin + # https://bugzilla.redhat.com/show_bug.cgi?id=1581757 + shebang=$(echo "$shebang" | sed -r -e 's@^/bin/@/usr/bin/@') + + # Replace ambiguous python with python2 + py_shebang=$(echo "$shebang" | sed -r -e 's@/usr/bin/python(\s|$)@/usr/bin/python2\1@') + + if [ "$shebang" != "$py_shebang" ]; then + echo >&2 "*** ERROR: ambiguous python shebang in $path: #!$orig_shebang. Change it to python3 (or python2) explicitly." + fail=1 + elif [ "#!$shebang" != "#!$orig_shebang" ]; then + echo "mangling shebang in $path from $orig_shebang to #!$shebang" + ts=$(stat -c %y "$f") + sed -i -e "1c #!$shebang" "$f" + touch -d "$ts" "$f" + fi + +done + +exit $fail +} diff --git a/SOURCES/brp-python-bytecompile b/SOURCES/brp-python-bytecompile new file mode 100755 index 0000000..ead7022 --- /dev/null +++ b/SOURCES/brp-python-bytecompile @@ -0,0 +1,141 @@ +#!/bin/bash +errors_terminate=$2 + +# Usage of %_python_bytecompile_extra is not allowed anymore +# See: https://fedoraproject.org/wiki/Changes/No_more_automagic_Python_bytecompilation_phase_3 +# Therefore $1 ($default_python) is not needed and is invoked with "" by default. +# $default_python stays in the arguments for backward compatibility and $extra for the following check: +extra=$3 +if [ 0$extra -eq 1 ]; then + echo -e "%_python_bytecompile_extra is discontinued, use %py_byte_compile instead.\nSee: https://fedoraproject.org/wiki/Changes/No_more_automagic_Python_bytecompilation_phase_3" >/dev/stderr + exit 1 +fi + +# If using normal root, avoid changing anything. +if [ -z "$RPM_BUILD_ROOT" -o "$RPM_BUILD_ROOT" = "/" ]; then + exit 0 +fi + +# Figure out how deep we need to descend. We could pick an insanely high +# number and hope it's enough, but somewhere, somebody's sure to run into it. +depth=`(find "$RPM_BUILD_ROOT" -type f -name "*.py" -print0 ; echo /) | \ + xargs -0 -n 1 dirname | sed 's,[^/],,g' | sort -u | tail -n 1 | wc -c` +if [ -z "$depth" -o "$depth" -le "1" ]; then + exit 0 +fi + +# This function now implements Python byte-compilation in three different ways: +# Python >= 3.4 and < 3.9 uses a new module compileall2 - https://github.com/fedora-python/compileall2 +# Python < 3.4 (inc. Python 2) uses compileall module from stdlib with some hacks +# When we drop support for Python 2, we'd be able to use all compileall2 features like: +# - -s and -p options to manipulate with a path baked into pyc files instead of $real_libdir +# - -o 0 -o 1 to produce multiple files in one run - each with a different optimization level - instead of $options +# - removed useless $depth - both compileall and compileall2 are limited by sys.getrecursionlimit() +# These changes will make this script much simpler +# In Python >= 3.9, compileall2 was merged back to standard library (compileall) so we can use it directly again. +function python_bytecompile() +{ + local options=$1 + local python_binary=$2 + local exclude=$3 + local python_libdir=$4 + local depth=$5 # Not used for Python >= 3.4 + local real_libdir=$6 # Not used for Python >= 3.4 + + python_version=$($python_binary -c "import sys; sys.stdout.write('{0.major}{0.minor}'.format(sys.version_info))") + + # + # Python 3.9 and higher + # + if [ "$python_version" -ge 39 ]; then + + [ ! -z $exclude ] && exclude="-x '$exclude'" + # -q disables verbose output + # -f forces the process to overwrite existing compiled files + # -x excludes paths defined by regex + # -e excludes symbolic links pointing outside the build root + # -x and -e together implements the same functionality as the Filter class below + # -s strips $RPM_BUILD_ROOT from the path + # -p prepends the leading slash to the path to make it absolute + $python_binary -B $options -m compileall -q -f $exclude -s $RPM_BUILD_ROOT -p / -e $RPM_BUILD_ROOT $python_libdir + + # + # Python 3.4 and higher + # + elif [ "$python_version" -ge 34 ]; then + + [ ! -z $exclude ] && exclude="-x '$exclude'" + # /usr/lib/rpm/redhat/ contains compileall2 Python module + # -q disables verbose output + # -f forces the process to overwrite existing compiled files + # -x excludes paths defined by regex + # -e excludes symbolic links pointing outside the build root + # -x and -e together implements the same functionality as the Filter class below + # -s strips $RPM_BUILD_ROOT from the path + # -p prepends the leading slash to the path to make it absolute + PYTHONPATH=/usr/lib/rpm/redhat/ $python_binary -B $options -m compileall2 -q -f $exclude -s $RPM_BUILD_ROOT -p / -e $RPM_BUILD_ROOT $python_libdir + else +# +# Python 3.3 and lower (incl. Python 2) +# + +cat << EOF | $python_binary $options +import compileall, sys, os, re + +python_libdir = "$python_libdir" +depth = $depth +real_libdir = "$real_libdir" +build_root = "$RPM_BUILD_ROOT" +exclude = r"$exclude" + +class Filter: + def search(self, path): + ret = not os.path.realpath(path).startswith(build_root) + if exclude: + ret = ret or re.search(exclude, path) + return ret + +sys.exit(not compileall.compile_dir(python_libdir, depth, real_libdir, force=1, rx=Filter(), quiet=1)) +EOF + +fi +} + +# .pyc/.pyo files embed a "magic" value, identifying the ABI version of Python +# bytecode that they are for. +# +# The files below RPM_BUILD_ROOT could be targeting multiple versions of +# python (e.g. a single build that emits several subpackages e.g. a +# python26-foo subpackage, a python31-foo subpackage etc) +# +# Support this by assuming that below each /usr/lib/python$VERSION/, all +# .pyc/.pyo files are to be compiled for /usr/bin/python$VERSION. +# +# For example, below /usr/lib/python2.6/, we're targeting /usr/bin/python2.6 +# and below /usr/lib/python3.1/, we're targeting /usr/bin/python3.1 + +# Disable Python hash seed randomization +# This should help with byte-compilation reproducibility: https://bugzilla.redhat.com/show_bug.cgi?id=1686078 +export PYTHONHASHSEED=0 + +shopt -s nullglob +for python_libdir in `find "$RPM_BUILD_ROOT" -type d|grep -E "/(usr|app)/lib(64)?/python[0-9]\.[0-9]+$"`; +do + python_binary=$(basename $python_libdir) + real_libdir=${python_libdir/$RPM_BUILD_ROOT/} + echo "Bytecompiling .py files below $python_libdir using $python_binary" + + # Generate normal (.pyc) byte-compiled files. + python_bytecompile "" "$python_binary" "" "$python_libdir" "$depth" "$real_libdir" + if [ $? -ne 0 -a 0$errors_terminate -ne 0 ]; then + # One or more of the files had a syntax error + exit 1 + fi + + # Generate optimized (.pyo) byte-compiled files. + python_bytecompile "-O" "$python_binary" "" "$python_libdir" "$depth" "$real_libdir" + if [ $? -ne 0 -a 0$errors_terminate -ne 0 ]; then + # One or more of the files had a syntax error + exit 1 + fi +done diff --git a/SOURCES/brp-strip-lto b/SOURCES/brp-strip-lto new file mode 100755 index 0000000..8890541 --- /dev/null +++ b/SOURCES/brp-strip-lto @@ -0,0 +1,17 @@ +#!/usr/bin/sh +# If using normal root, avoid changing anything. +if [ -z "$RPM_BUILD_ROOT" ] || [ "$RPM_BUILD_ROOT" = "/" ]; then + exit 0 +fi + +STRIP=${1:-strip} +NCPUS=${RPM_BUILD_NCPUS:-1} + +case `uname -a` in +Darwin*) exit 0 ;; +*) ;; +esac + +# Strip ELF binaries +find "$RPM_BUILD_ROOT" -type f -name '*.[ao]' \! -regex "$RPM_BUILD_ROOT/*usr/lib/debug.*" -print0 | \ + eu-elfclassify --not-program --not-library --not-linux-kernel-module --stdin0 --print0 | xargs -0 -r -P$NCPUS -n32 sh -c "$STRIP -p -R .gnu.lto_* -R .gnu.debuglto_* -N __gnu_lto_v1 \"\$@\"" ARG0 diff --git a/SOURCES/buildflags.md b/SOURCES/buildflags.md new file mode 100644 index 0000000..58a27ad --- /dev/null +++ b/SOURCES/buildflags.md @@ -0,0 +1,532 @@ +This document contains documentation of the individual compiler flags +and how to use them. + +[TOC] + +# Using RPM build flags + +For packages which use autoconf to set up the build environment, use +the `%configure` macro to obtain the full complement of flags, like +this: + + %configure + +This will invoke the `./configure` with arguments (such as +`--prefix=/usr`) to adjust the paths to the packaging defaults. +Prior to that, some common problems in autotools scripts are +automatically patched across the source tree. + +As a side effect, this will set the environment variables `CFLAGS`, +`CXXFLAGS`, `FFLAGS`, `FCFLAGS`, `LDFLAGS` and `LT_SYS_LIBRARY_PATH`, +so they can be used by makefiles and other build tools. (However, +existing values for these variables are not overwritten.) + +If your package does not use autoconf, you can still set the same +environment variables using + + %set_build_flags + +early in the `%build` section. (Again, existing environment variables +are not overwritten.) `%set_build_flags` does not perform autotools +script rewriting, unlike `%configure`. + +Individual build flags are also available through RPM macros: + +* `%{build_cflags}` for the C compiler flags (also known as the + `CFLAGS` variable). Also historically available as `%{optflags}`. + Furthermore, at the start of the `%build` section, the environment + variable `RPM_OPT_FLAGS` is set to this value. +* `%{build_cxxflags}` for the C++ compiler flags (usually assigned to + the `CXXFLAGS` shell variable). +* `%{build_fflags} for `FFLAGS` (the Fortran compiler flags, also + known as the `FCFLAGS` variable). +* `%{build_ldflags}` for the link editor (ld) flags, usually known as + `LDFLAGS`. Note that the contents quotes linker arguments using + `-Wl`, so this variable is intended for use with the `gcc` compiler + driver. At the start of the `%build` section, the environment + variable `RPM_LD_FLAGS` is set to this value. + +The variable `LT_SYS_LIBRARY_PATH` is defined here to prevent the `libtool` +script (v2.4.6+) from hardcoding %_libdir into the binaries' RPATH. + +These RPM macros do not alter shell environment variables. + +For some other build tools separate mechanisms exist: + +* CMake builds use the the `%cmake` macro from the `cmake-rpm-macros` + package. + +Care must be taking not to compile the current selection of compiler +flags into any RPM package besides `redhat-rpm-config`, so that flag +changes are picked up automatically once `redhat-rpm-config` is +updated. + +# Flag selection for the build type + +The default flags are suitable for building applications. + +For building shared objects, you must compile with `-fPIC` in +(`CFLAGS` or `CXXFLAGS`) and link with `-shared` (in `LDFLAGS`). + +For other considerations involving shared objects, see: + +* [Fedora Packaging Guidelines: Shared Libraries](https://docs.fedoraproject.org/en-US/packaging-guidelines/#_shared_libraries) + +# Customizing compiler and other build flags + +It is possible to set RPM macros to change some aspects of the +compiler flags. Changing these flags should be used as a last +recourse if other workarounds are not available. + +### Toolchain selection + +The default toolchain uses GCC, and the `%toolchain` macro is defined +as `gcc`. + +It is enough to override `toolchain` macro and all relevant macro for C/C++ +compilers will be switched. Either in the spec or in the command-line. + + %global toolchain clang + +or: + + rpmbuild -D "toolchain clang" … + +Inside a spec file it is also possible to determine which toolchain is in use +by testing the same macro. For example: + + %if "%{toolchain}" == "gcc" + BuildRequires: gcc + %endif + +or: + + %if "%{toolchain}" == "clang" + BuildRequires: clang compiler-rt + %endif + +### Disable autotools compatibility patching + +By default, the invocation of the `%configure` macro replaces +`config.guess` files in the source tree with the system version. To +disable that, define this macro: + + %global _configure_gnuconfig_hack 0 + +`%configure` also patches `ltmain.sh` scripts, so that linker flags +are set as well during libtool-. This can be switched off using: + + %global _configure_libtool_hardening_hack 0 + +Further patching happens in LTO mode, see below. + +### Disabling Link-Time Optimization + +By default, builds use link-time optimization. In this build mode, +object code is generated at the time of the final link, by combining +information from all available translation units, and taking into +account which symbols are exported. + +To disable this optimization, include this in the spec file: + + %define _lto_cflags %{nil} + +If LTO is enabled, `%configure` applies some common required fixes to +`configure` scripts. To disable that, define the RPM macro +`_fix_broken_configure_for_lto` as `true` (sic; it has to be a shell +command). + +### Lazy binding + +If your package depends on the semantics of lazy binding (e.g., it has +plugins which load additional plugins to complete their dependencies, +before which some referenced functions are undefined), you should put +`-Wl,-z,lazy` at the end of the `LDFLAGS` setting when linking objects +which have such requirements. Under these circumstances, it is +unnecessary to disable hardened builds (and thus lose full ASLR for +executables), or link everything without `-Wl,z,now` (non-lazy +binding). + +### Hardened builds + +By default, the build flags enable fully hardened builds. To change +this, include this in the RPM spec file: + + %undefine _hardened_build + +This turns off certain hardening features, as described in detail +below. The main difference is that executables will be +position-dependent (no full ASLR) and use lazy binding. + +### Annotated builds/watermarking + +By default, the build flags cause a special output section to be +included in ELF files which describes certain aspects of the build. +To change this for all compiler invocations, include this in the RPM +spec file: + + %undefine _annotated_build + +Be warned that this turns off watermarking, making it impossible to do +full hardening coverage analysis for any binaries produced. + +It is possible to disable annotations for individual compiler +invocations, using the `-fplugin-arg-annobin-disable` flag. However, +the annobin plugin must still be loaded for this flag to be +recognized, so it has to come after the hardening flags on the command +line (it has to be added at the end of `CFLAGS`, or specified after +the `CFLAGS` variable contents). + +### Keeping dependencies on unused shared objects + +By default, ELF shared objects which are listed on the linker command +line, but which have no referencing symbols in the preceding objects, +are not added to the output file during the final link. + +In order to keep dependencies on shared objects even if none of +their symbols are used, include this in the RPM spec file: + + %undefine _ld_as_needed + +For example, this can be required if shared objects are used for their +side effects in ELF constructors, or for making them available to +dynamically loaded plugins. + +### Strict symbol checks in the link editor (ld) + +Optionally, the link editor will refuse to link shared objects which +contain undefined symbols. Such symbols lack symbol versioning +information and can be bound to the wrong (compatibility) symbol +version at run time, and not the actual (default) symbol version which +would have been used if the symbol definition had been available at +static link time. Furthermore, at run time, the dynamic linker will +not have complete dependency information (in the form of DT_NEEDED +entries), which can lead to errors (crashes) if IFUNC resolvers are +executed before the shared object containing them is fully relocated. + +To switch on these checks, define this macro in the RPM spec file: + + %define _strict_symbol_defs_build 1 + +If this RPM spec option is active, link failures will occur if the +linker command line does not list all shared objects which are needed. +In this case, you need to add the missing DSOs (with linker arguments +such as `-lm`). As a result, the link editor will also generated the +necessary DT_NEEDED entries. + +In some cases (such as when a DSO is loaded as a plugin and is +expected to bind to symbols in the main executable), undefined symbols +are expected. In this case, you can add + + %undefine _strict_symbol_defs_build + +to the RPM spec file to disable these strict checks. Alternatively, +you can pass `-z undefs` to ld (written as `-Wl,-z,undefs` on the gcc +command line). The latter needs binutils 2.29.1-12.fc28 or later. + +### Legacy -fcommon + +Since version 10, [gcc defaults to `-fno-common`](https://gcc.gnu.org/gcc-10/porting_to.html#common). +Builds may fail with `multiple definition of ...` errors. + +As a short term workaround for such failure, +it is possible to add `-fcommon` to the flags by defining `%_legacy_common_support`. + + %define _legacy_common_support 1 + +Properly fixing the failure is always preferred! + +### Post-build ELF object processing + +By default, DWARF debugging information is separated from installed +ELF objects and put into `-debuginfo` subpackages. To disable most +debuginfo processing (and thus the generation of these subpackages), +define `_enable_debug_packages` as `0`. + +Processing of debugging information is controlled using the +`find-debuginfo` tool from the `debugedit` package. Several aspects +of its operation can be controlled at the RPM level. + +* Creation of `-debuginfo` subpackages is enabled by default. + To disable, undefine `_debuginfo_subpackages`. +* Likewise, `-debugsource` subpackages are automatically created. + To disable, undefine `_debugsource_subpackages`. + See [Separate Subpackage and Source Debuginfo](https://fedoraproject.org/wiki/Changes/SubpackageAndSourceDebuginfo) + for background information. +* `_build_id_links`, `_unique_build_ids`, `_unique_debug_names`, + `_unique_debug_srcs` control how debugging information and + corresponding source files are represented on disk. + See `/usr/lib/rpm/macros` for details. The defaults + enable parallel installation of `-debuginfo` packages for + different package versions, as described in + [Parallel Installable Debuginfo](https://fedoraproject.org/wiki/Changes/ParallelInstallableDebuginfo). +* By default, a compressed symbol table is preserved in the + `.gnu_debugdata` section. To disable that, undefine + `_include_minidebuginfo`. +* To speed up debuggers, a `.gdb_index` section is created. It can be + disabled by undefining `_include_gdb_index`. +* Missing build IDs result in a build failure. To ignore such + problems, undefine `_missing_build_ids_terminate_build`. +* During processing, build IDs are recomputed to match the binary + content. To skip this step, define `_no_recompute_build_ids` as `1`. +* By default, the options in `_find_debuginfo_dwz_opts` turn on `dwz` + (DWARF compression) processing. Undefine this macro to disable this + step. +* Additional options can be passed by defining the + `_find_debuginfo_opts` macro. + +After separation of debugging information, additional transformations +are applied, most of them also related to debugging information. +These steps can be skipped by undefining the corresponding macros: + +* `__brp_strip`: Removal of leftover debugging information. The tool + specified by the `__strip` macro is invoked with the `-g` option on + ELF object (`.o`) files. +* `__brp_strip_static_archive`: This is similar to `__brp_strip`, but + processes static `.a` archives instead. +* `__brp_strip_comment_note`: This step removes unallocated `.note` + sections, and `.comment` sections from ELF files. +* `__brp_strip_lto`: This step removes GCC LTO intermediate representation + in ELF sections starting with `.gnu.lto_` and `.gnu.debuglto_`. Skipping + this step is strongly discouraged because the tight coupling of LTO + data with the GCC version. The underlying tool is again determined by the + `__strip` macro. +* `__brp_llvm_compile_lto_elf`: This step replaces LLVM bitcode files + with object files, thereby removing LLVM bitcode from the installed + files. This transformation is applied to object files in static `.a` + archives, too. +* `__brp_ldconfig`: For each shared object on the library search path + whose soname does not match its file name, a symbolic link from the + soname to the file name is created. This way, these shared objects + are loadable immediately after installation, even if they are not yet + listed in the `/etc/ld.so.cache` file (because `ldconfig` has not been + invoked yet). + +# Individual compiler flags + +Compiler flags end up in the environment variables `CFLAGS`, +`CXXFLAGS`, `FFLAGS`, and `FCFLAGS`. + +The general (architecture-independent) build flags are: + +* `-O2`: Turn on various GCC optimizations. See the [GCC manual](https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-O2). + Optimization improves performance, the accuracy of warnings, and the + reach of toolchain-based hardening, but it makes debugging harder. +* `-g`: Generate debugging information (DWARF). In Fedora, this data + is separated into `-debuginfo` RPM packages whose installation is + optional, so debuging information does not increase the size of + installed binaries by default. +* `-pipe`: Run compiler and assembler in parallel and do not use a + temporary file for the assembler input. This can improve + compilation performance. (This does not affect code generation.) +* `-Wall`: Turn on various GCC warnings. + See the [GCC manual](https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wall). +* `-Werror=format-security`: Turn on format string warnings and treat + them as errors. + See the [GCC manual](https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wformat-security). + This can occasionally result in compilation errors. In this case, + the best option is to rewrite the source code so that only constant + format strings (string literals) are used. +* `-Wp,-D_FORTIFY_SOURCE=2`: Source fortification activates various + hardening features in glibc: + * String functions such as `memcpy` attempt to detect buffer lengths + and terminate the process if a buffer overflow is detected. + * `printf` format strings may only contain the `%n` format specifier + if the format string resides in read-only memory. + * `open` and `openat` flags are checked for consistency with the + presence of a *mode* argument. + * Plus other minor hardening changes. + (These changes can occasionally break valid programs.) +* `-fexceptions`: Provide exception unwinding support for C programs. + See the [`-fexceptions` option in the GCC + manual](https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#index-fexceptions) + and the [`cleanup` variable + attribute](https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html#index-cleanup-variable-attribute). + This also hardens cancellation handling in C programs because + it is not required to use an on-stack jump buffer to install + a cancellation handler with `pthread_cleanup_push`. It also makes + it possible to unwind the stack (using C++ `throw` or Rust panics) + from C callback functions if a C library supports non-local exits + from them (e.g., via `longjmp`). +* `-fasynchronous-unwind-tables`: Generate full unwind information + covering all program points. This is required for support of + asynchronous cancellation and proper unwinding from signal + handlers. It also makes performance and debugging tools more + useful because unwind information is available without having to + install (and load) debugging information. +* `-Wp,-D_GLIBCXX_ASSERTIONS`: Enable lightweight assertions in the + C++ standard library, such as bounds checking for the subscription + operator on vectors. (This flag is added to both `CFLAGS` and + `CXXFLAGS`; C compilations will simply ignore it.) +* `-fstack-protector-strong`: Instrument functions to detect + stack-based buffer overflows before jumping to the return address on + the stack. The *strong* variant only performs the instrumentation + for functions whose stack frame contains addressable local + variables. (If the address of a variable is never taken, it is not + possible that a buffer overflow is caused by incorrect pointer + arithmetic involving a pointer to that variable.) +* `-fstack-clash-protection`: Turn on instrumentation to avoid + skipping the guard page in large stack frames. (Without this flag, + vulnerabilities can result where the stack overlaps with the heap, + or thread stacks spill into other regions of memory.) This flag is + fully ABI-compatible and has adds very little run-time overhead. + This flag is currently not available on aarch64 with the `clang` toolchain. +* `-flto=auto`: Enable link-time optimization (LTO), using `make` job server + integration for parallel processing. (`gcc` toolchain only) +* `-ffat-lto-objects`: Generate EFL object files which contain both + object code and LTO intermediate representation. (`gcc` toolchain only) +* `-flto`: Enable link-time optimization. (`clang` toolchain only) +* `-grecord-gcc-switches`: Include select GCC command line switches in + the DWARF debugging information. This is useful for detecting the + presence of certain build flags and general hardening coverage. +* `-fcommon`: This optional flag is used to build legacy software + which relies on C tentative definitions. It is disabled by default. + +For hardened builds (which are enabled by default, see above for how +to disable them), the flag +`-specs=/usr/lib/rpm/redhat/redhat-hardened-cc1` is added to the +command line. It adds the following flag to the command line: + +* `-fPIE`: Compile for a position-independent executable (PIE), + enabling full address space layout randomization (ASLR). This is + similar to `-fPIC`, but avoids run-time indirections on certain + architectures, resulting in improved performance and slightly + smaller executables. However, compared to position-dependent code + (the default generated by GCC), there is still a measurable + performance impact. + + If the command line also contains `-r` (producing a relocatable + object file), `-fpic` or `-fPIC`, this flag is automatically + dropped. (`-fPIE` can only be used for code which is linked into + the main program.) Code which goes into static libraries should be + compiled with `-fPIE`, except when this code is expected to be + linked into DSOs, when `-fPIC` must be used. + + To be effective, `-fPIE` must be used with the `-pie` linker flag + when producing an executable, see below. + +To support [binary watermarks for ELF +objects](https://fedoraproject.org/wiki/Toolchain/Watermark) using +annobin, the `-specs=/usr/lib/rpm/redhat/redhat-annobin-cc1` flag is +added by default (with the `gcc` toolchain). This can be switched off +by undefining the `%_annotated_build` RPM macro (see above). Binary +watermarks are currently disabled with the `clang` toolchain. + +### Architecture-specific compiler flags + +These compiler flags are enabled for all builds (hardened/annotated or +not), but their selection depends on the architecture: + +* `-fcf-protection`: Instrument binaries to guard against + ROP/JOP attacks. Used on i686 and x86_64. +* `-m64` and `-m32`: Some GCC builds support both 32-bit and 64-bit in + the same compilation. For such architectures, the RPM build process + explicitly selects the architecture variant by passing this compiler + flag. + +In addition, `redhat-rpm-config` re-selects the built-in default +tuning in the `gcc` package. These settings are: + +* **i686**: `-march=i686` is used to select a minmum support CPU level + of i686 (corresponding to the Pentium Pro). SSE2 support is + enabled with `-msse2` (so only CPUs with SSE2 support can run the + compiled code; SSE2 was introduced first with the Pentium 4). + `-mtune=generic` activates tuning for a current blend of CPUs + (under the assumption that most users of i686 packages obtain them + through an x86_64 installation on current hardware). + `-mfpmath=sse` instructs GCC to use the SSE2 unit for floating + point math to avoid excess precision issues. `-mstackrealign` + avoids relying on the stack alignment guaranteed by the current + version of the i386 ABI. +* **ppc64le**: `-mcpu=power9 -mtune=power9` selects a minimum supported + CPU level of POWER9. +* **s390x**: `-march=z14 -mtune=z15` specifies a minimum supported CPU + level of z14, while optimizing for a subsequent CPU generation + (z15). +* **x86_64**: `-march=x86-64-v2 -mtune=generic` builds for the + [x86-64-v2 micro-architecture level](https://gitlab.com/x86-psABIs/x86-64-ABI/-/blob/master/x86-64-ABI/low-level-sys-info.tex) + and selects tuning which is expected to beneficial for a broad range + of current CPUs. +* **aarch64** does not have any architecture-specific tuning. + +# Individual linker flags + +Linker flags end up in the environment variable `LDFLAGS`. + +The linker flags listed below are injected. Note that they are +prefixed with `-Wl` because it is expected that these flags are passed +to the compiler driver `gcc`, and not directly to the link editor +`ld`. + +* `-z relro`: Activate the *read-only after relocation* feature. + Constant data and relocations are placed on separate pages, and the + dynamic linker is instructed to revoke write permissions after + dynamic linking. Full protection of relocation data requires the + `-z now` flag (see below). +* `--as-needed`: In the final link, only generate ELF dependencies + for shared objects that actually provide symbols required by the link. + Shared objects which are not needed to fulfill symbol dependencies + are essentially ignored due to this flag. +* `-z defs`: Refuse to link shared objects (DSOs) with undefined symbols + (optional, see above). + +For hardened builds, the +`-specs=/usr/lib/rpm/redhat/redhat-hardened-ld` flag is added to the +compiler driver command line. (This can be disabled by undefining the +`%_hardened_build` macro; see above) This activates the following +linker flags: + +* `-pie`: Produce a PIE binary. This is only activated for the main + executable, and only if it is dynamically linked. This requires + that all objects which are linked in the main executable have been + compiled with `-fPIE` or `-fPIC` (or `-fpie` or `-fpic`; see above). + By itself, `-pie` has only a slight performance impact because it + disables some link editor optimization, however the `-fPIE` compiler + flag has some overhead. +* `-z now`: Disable lazy binding and turn on the `BIND_NOW` dynamic + linker feature. Lazy binding involves an array of function pointers + which is writable at run time (which could be overwritten as part of + security exploits, redirecting execution). Therefore, it is + preferable to turn of lazy binding, although it increases startup + time. + +# Support for extension builders + +Some packages include extension builders that allow users to build +extension modules (which are usually written in C and C++) under the +control of a special-purpose build system. This is a common +functionality provided by scripting languages such as Python and Perl. +Traditionally, such extension builders captured the Fedora build flags +when these extension were built. However, these compiler flags are +adjusted for a specific Fedora release and toolchain version and +therefore do not work with a custom toolchain (e.g., different C/C++ +compilers), and users might want to build their own extension modules +with such toolchains. + +The macros `%{extension_cflags}`, `%{extension_cxxflags}`, +`%{extension_fflags}`, `%{extension_ldflags}` contain a subset of +flags that have been adjusted for compatibility with alternative +toolchains, while still preserving some of the compile-time security +hardening that the standard Fedora build flags provide. + +The current set of differences are: + +* No GCC plugins (such as annobin) are activated. +* No GCC spec files (`-specs=` arguments) are used. + +Additional flags may be removed in the future if they prove to be +incompatible with alternative toolchains. + +Extension builders should detect whether they are performing a regular +RPM build (e.g., by looking for an `RPM_OPT_FLAGS` variable). In this +case, they should use the *current* set of Fedora build flags (that +is, the output from `rpm --eval '%{build_cflags}'` and related +commands). Otherwise, when not performing an RPM build, they can +either use hard-coded extension builder flags (thus avoiding a +run-time dependency on `redhat-rpm-config`), or use the current +extension builder flags (with a run-time dependency on +`redhat-rpm-config`). + +As a result, extension modules built for Fedora will use the official +Fedora build flags, while users will still be able to build their own +extension modules with custom toolchains. diff --git a/SOURCES/common.lua b/SOURCES/common.lua new file mode 100644 index 0000000..db53f39 --- /dev/null +++ b/SOURCES/common.lua @@ -0,0 +1,294 @@ +-- Convenience Lua functions that can be used within rpm macros + +-- Reads an rpm variable. Unlike a basic rpm.expand("{?foo}"), returns nil if +-- the variable is unset, which is convenient in lua tests and enables +-- differentiating unset variables from variables set to "" +local function read(rpmvar) + if not rpmvar or + (rpm.expand("%{" .. rpmvar .. "}") == "%{" .. rpmvar .. "}") then + return nil + else + return rpm.expand("%{?" .. rpmvar .. "}") + end +end + +-- Returns true if the macro that called this function had flag set +-- – for example, hasflag("z") would give the following results: +-- %foo -z bar → true +-- %foo -z → true +-- %foo → false +local function hasflag(flag) + return (rpm.expand("%{-" .. flag .. "}") ~= "") +end + +-- Returns the argument passed to flag in the macro that called this function +-- – for example, readflag("z") would give the following results: +-- %foo -z bar → bar +-- %foo → nil +-- %foo -z "" → empty string +-- %foo -z '' → empty string +local function readflag(flag) + if not hasflag(flag) then + return nil + else + local a = rpm.expand("%{-" .. flag .. "*}") + -- Handle "" and '' as empty strings + if (a == '""') or (a == "''") then + a = '' + end + return a + end +end + +-- Sets a spec variable; echoes the result if verbose +local function explicitset(rpmvar, value, verbose) + local value = value + if (value == nil) or (value == "") then + value = "%{nil}" + end + rpm.define(rpmvar .. " " .. value) + if verbose then + rpm.expand("%{warn:Setting %%{" .. rpmvar .. "} = " .. value .. "}") + end +end + +-- Unsets a spec variable if it is defined; echoes the result if verbose +local function explicitunset(rpmvar, verbose) + if (rpm.expand("%{" .. rpmvar .. "}") ~= "%{" .. rpmvar .. "}") then + rpm.define(rpmvar .. " %{nil}") + if verbose then + rpm.expand("%{warn:Unsetting %%{" .. rpmvar .. "}}") + end + end +end + +-- Sets a spec variable, if not already set; echoes the result if verbose +local function safeset(rpmvar, value, verbose) + if (rpm.expand("%{" .. rpmvar .. "}") == "%{" .. rpmvar .. "}") then + explicitset(rpmvar,value,verbose) + end +end + +-- Aliases a list of rpm variables to the same variables suffixed with 0 (and +-- vice versa); echoes the result if verbose +local function zalias(rpmvars, verbose) + for _, sfx in ipairs({{"","0"},{"0",""}}) do + for _, rpmvar in ipairs(rpmvars) do + local toalias = "%{?" .. rpmvar .. sfx[1] .. "}" + if (rpm.expand(toalias) ~= "") then + safeset(rpmvar .. sfx[2], toalias, verbose) + end + end + end +end + +-- Takes a list of rpm variable roots and a suffix and alias current to +-- if it resolves to something not empty +local function setcurrent(rpmvars, suffix, verbose) + for _, rpmvar in ipairs(rpmvars) do + if (rpm.expand("%{?" .. rpmvar .. suffix .. "}") ~= "") then + explicitset( "current" .. rpmvar, "%{" .. rpmvar .. suffix .. "}", verbose) + else + explicitunset("current" .. rpmvar, verbose) + end + end +end + +-- Echo the list of rpm variables, with suffix, if set +local function echovars(rpmvars, suffix) + for _, rpmvar in ipairs(rpmvars) do + rpmvar = rpmvar .. suffix + local header = string.sub(" " .. rpmvar .. ": ",1,21) + rpm.expand("%{?" .. rpmvar .. ":%{echo:" .. header .. "%{?" .. rpmvar .. "}}}") + end +end + +-- Returns an array, indexed by suffix, containing the non-empy values of +-- , with suffix an integer string or the empty string +local function getsuffixed(rpmvar) + local suffixes = {} + zalias({rpmvar}) + for suffix=0,9999 do + local value = rpm.expand("%{?" .. rpmvar .. suffix .. "}") + if (value ~= "") then + suffixes[tostring(suffix)] = value + end + end + -- rpm convention is to alias no suffix to zero suffix + -- only add no suffix if zero suffix is different + local value = rpm.expand("%{?" .. rpmvar .. "}") + if (value ~= "") and (value ~= suffixes["0"]) then + suffixes[""] = value + end + return suffixes +end + +-- Returns the list of suffixes, including the empty string, for which +-- is set to a non empty value +local function getsuffixes(rpmvar) + suffixes = {} + for suffix in pairs(getsuffixed(rpmvar)) do + table.insert(suffixes,suffix) + end + table.sort(suffixes, + function(a,b) return (tonumber(a) or 0) < (tonumber(b) or 0) end) + return suffixes +end + +-- Returns the suffix for which has a non-empty value that +-- matches best the beginning of the value string +local function getbestsuffix(rpmvar, value) + local best = nil + local currentmatch = "" + for suffix, setvalue in pairs(getsuffixed(rpmvar)) do + if (string.len(setvalue) > string.len(currentmatch)) and + (string.find(value, "^" .. setvalue)) then + currentmatch = setvalue + best = suffix + end + end + return best +end + +-- %writevars core +local function writevars(macrofile, rpmvars) + for _, rpmvar in ipairs(rpmvars) do + print("sed -i 's\029" .. string.upper("@@" .. rpmvar .. "@@") .. + "\029" .. rpm.expand( "%{" .. rpmvar .. "}" ) .. + "\029g' " .. macrofile .. "\n") + end +end + +-- https://github.com/rpm-software-management/rpm/issues/566 +-- Reformat a text intended to be used used in a package description, removing +-- rpm macro generation artefacts. +-- – remove leading and ending empty lines +-- – trim intermediary empty lines to a single line +-- – fold on spaces +-- Should really be a %%{wordwrap:…} verb +local function wordwrap(text) + text = rpm.expand(text .. "\n") + text = string.gsub(text, "\t", " ") + text = string.gsub(text, "\r", "\n") + text = string.gsub(text, " +\n", "\n") + text = string.gsub(text, "\n+\n", "\n\n") + text = string.gsub(text, "^\n", "") + text = string.gsub(text, "\n( *)[-*—][  ]+", "\n%1– ") + output = "" + for line in string.gmatch(text, "[^\n]*\n") do + local pos = 0 + local advance = "" + for word in string.gmatch(line, "%s*[^%s]*\n?") do + local wl, bad = utf8.len(word) + if not wl then + print("%{warn:Invalid UTF-8 sequence detected in:}" .. + "%{warn:" .. word .. "}" .. + "%{warn:It may produce unexpected results.}") + wl = bad + end + if (pos == 0) then + advance, n = string.gsub(word, "^(%s*– ).*", "%1") + if (n == 0) then + advance = string.gsub(word, "^(%s*).*", "%1") + end + advance = string.gsub(advance, "– ", " ") + pos = pos + wl + elseif (pos + wl < 81) or + ((pos + wl == 81) and string.match(word, "\n$")) then + pos = pos + wl + else + word = advance .. string.gsub(word, "^%s*", "") + output = output .. "\n" + pos = utf8.len(word) + end + output = output .. word + if pos > 80 then + pos = 0 + if not string.match(word, "\n$") then + output = output .. "\n" + end + end + end + end + output = string.gsub(output, "\n*$", "\n") + return output +end + +-- Because rpmbuild will fail if a subpackage is declared before the source +-- package itself, provide a source package declaration shell as fallback. +local function srcpkg(verbose) + if verbose then + rpm.expand([[ +%{echo:Creating a header for the SRPM from %%{source_name}, %%{source_summary} and} +%{echo:%%{source_description}. If that is not the intended result, please declare the} +%{echo:SRPM header and set %%{source_name} in your spec file before calling a macro} +%{echo:that creates other package headers.} +]]) + end + print(rpm.expand([[ +Name: %{source_name} +Summary: %{source_summary} +%description +%wordwrap -v source_description +]])) + explicitset("currentname", "%{source_name}", verbose) +end + +-- %new_package core +local function new_package(source_name, pkg_name, name_suffix, first, verbose) + -- Safety net when the wrapper is used in conjunction with traditional syntax + if (not first) and (not source_name) then + rpm.expand([[ +%{warn:Something already set a package name. However, %%{source_name} is not set.} +%{warn:Please set %%{source_name} to the SRPM name to ensure reliable processing.} +]]) + if name_suffix then + print(rpm.expand("%package " .. name_suffix)) + else + print(rpm.expand("%package -n " .. pkg_name)) + end + return + end + -- New processing + if not (pkg_name or name_suffix or source_name) then + rpm.expand([[ +%{error:You need to set %%{source_name} or provide explicit package naming!} +]]) + end + if name_suffix then + print(rpm.expand("%package " .. name_suffix)) + explicitset("currentname", "%{source_name}-" .. name_suffix, verbose) + else + if not source_name then + source_name = pkg_name + end + if (pkg_name == source_name) then + safeset("source_name", source_name, verbose) + print(rpm.expand("Name: %{source_name}")) + else + if source_name and first then + srcpkg(verbose) + end + print(rpm.expand("%package -n " .. pkg_name)) + end + explicitset("currentname", pkg_name, verbose) + end +end + +return { + read = read, + hasflag = hasflag, + readflag = readflag, + explicitset = explicitset, + explicitunset = explicitunset, + safeset = safeset, + zalias = zalias, + setcurrent = setcurrent, + echovars = echovars, + getsuffixed = getsuffixed, + getsuffixes = getsuffixes, + getbestsuffix = getbestsuffix, + writevars = writevars, + wordwrap = wordwrap, + new_package = new_package, +} diff --git a/SOURCES/config.guess b/SOURCES/config.guess new file mode 100644 index 0000000..2e9ad7f --- /dev/null +++ b/SOURCES/config.guess @@ -0,0 +1,1462 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright 1992-2016 Free Software Foundation, Inc. + +timestamp='2016-10-02' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). +# +# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. +# +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess +# +# Please send patches to . + + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright 1992-2016 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +case "${UNAME_SYSTEM}" in +Linux|GNU|GNU/*) + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + LIBC=gnu + + eval $set_cc_for_build + cat <<-EOF > $dummy.c + #include + #if defined(__UCLIBC__) + LIBC=uclibc + #elif defined(__dietlibc__) + LIBC=dietlibc + #else + LIBC=gnu + #endif + EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` + ;; +esac + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ + /sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || \ + echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + earmv*) + arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` + endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` + machine=${arch}${endian}-unknown + ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently (or will in the future) and ABI. + case "${UNAME_MACHINE_ARCH}" in + earm*) + os=netbsdelf + ;; + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # Determine ABI tags. + case "${UNAME_MACHINE_ARCH}" in + earm*) + expr='s/^earmv[0-9]/-eabi/;s/eb$//' + abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}${abi}" + exit ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:LibertyBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:Sortix:*:*) + echo ${UNAME_MACHINE}-unknown-sortix + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE=alpha ;; + "EV4.5 (21064)") + UNAME_MACHINE=alpha ;; + "LCA4 (21066/21068)") + UNAME_MACHINE=alpha ;; + "EV5 (21164)") + UNAME_MACHINE=alphaev5 ;; + "EV5.6 (21164A)") + UNAME_MACHINE=alphaev56 ;; + "EV5.6 (21164PC)") + UNAME_MACHINE=alphapca56 ;; + "EV5.7 (21164PC)") + UNAME_MACHINE=alphapca57 ;; + "EV6 (21264)") + UNAME_MACHINE=alphaev6 ;; + "EV6.7 (21264A)") + UNAME_MACHINE=alphaev67 ;; + "EV6.8CB (21264C)") + UNAME_MACHINE=alphaev68 ;; + "EV6.8AL (21264B)") + UNAME_MACHINE=alphaev68 ;; + "EV6.8CX (21264D)") + UNAME_MACHINE=alphaev68 ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE=alphaev69 ;; + "EV7 (21364)") + UNAME_MACHINE=alphaev7 ;; + "EV7.9 (21364A)") + UNAME_MACHINE=alphaev79 ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm*:riscos:*:*|arm*:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH=i386 + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH=x86_64 + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/lslpp ] ; then + IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 + 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH=hppa2.0n ;; + 64) HP_ARCH=hppa2.0w ;; + '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = hppa2.0w ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH=hppa2.0w + else + HP_ARCH=hppa64 + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + UNAME_PROCESSOR=`/usr/bin/uname -p` + case ${UNAME_PROCESSOR} in + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW64*:*) + echo ${UNAME_MACHINE}-pc-mingw64 + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + *:MSYS*:*) + echo ${UNAME_MACHINE}-pc-msys + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + aarch64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC=gnulibc1 ; fi + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arc:Linux:*:* | arceb:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi + else + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf + fi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + cris:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-${LIBC} + exit ;; + crisv32:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-${LIBC} + exit ;; + e2k:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + frv:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + hexagon:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + i*86:Linux:*:*) + echo ${UNAME_MACHINE}-pc-linux-${LIBC} + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + k1om:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } + ;; + mips64el:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + openrisc*:Linux:*:*) + echo or1k-unknown-linux-${LIBC} + exit ;; + or32:Linux:*:* | or1k*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-${LIBC} + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; + PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; + *) echo hppa-unknown-linux-${LIBC} ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-${LIBC} + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-${LIBC} + exit ;; + ppc64le:Linux:*:*) + echo powerpc64le-unknown-linux-${LIBC} + exit ;; + ppcle:Linux:*:*) + echo powerpcle-unknown-linux-${LIBC} + exit ;; + riscv32:Linux:*:* | riscv64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux-${LIBC} + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + tile*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-${LIBC} + exit ;; + x86_64:Linux:*:*) + echo ${UNAME_MACHINE}-pc-linux-${LIBC} + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configure will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + x86_64:Haiku:*:*) + echo x86_64-unknown-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + SX-ACE:SUPER-UX:*:*) + echo sxace-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + eval $set_cc_for_build + if test "$UNAME_PROCESSOR" = unknown ; then + UNAME_PROCESSOR=powerpc + fi + if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + fi + elif test "$UNAME_PROCESSOR" = i386 ; then + # Avoid executing cc on OS X 10.9, as it ships with a stub + # that puts up a graphical alert prompting to install + # developer tools. Any system running Mac OS X 10.7 or + # later (Darwin 11 and later) is required to have a 64-bit + # processor. This is not true of the ARM version of Darwin + # that Apple uses in portable devices. + UNAME_PROCESSOR=x86_64 + fi + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = x86; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NEO-?:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk${UNAME_RELEASE} + exit ;; + NSE-*:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = 386; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'` + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; + x86_64:VMkernel:*:*) + echo ${UNAME_MACHINE}-unknown-esx + exit ;; + amd64:Isilon\ OneFS:*:*) + echo x86_64-unknown-onefs + exit ;; +esac + +cat >&2 </dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/SOURCES/config.sub b/SOURCES/config.sub new file mode 100644 index 0000000..cc69b06 --- /dev/null +++ b/SOURCES/config.sub @@ -0,0 +1,1823 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright 1992-2016 Free Software Foundation, Inc. + +timestamp='2016-09-05' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). + + +# Please send patches to . +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright 1992-2016 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ + linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ + kopensolaris*-gnu* | cloudabi*-eabi* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + android-linux) + os=-linux-android + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze*) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*178) + os=-lynxos178 + ;; + -lynx*5) + os=-lynxos5 + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arceb \ + | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ + | avr | avr32 \ + | ba \ + | be32 | be64 \ + | bfin \ + | c4x | c8051 | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | e2k | epiphany \ + | fido | fr30 | frv | ft32 \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | k1om \ + | le32 | le64 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r6 | mipsisa32r6el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r6 | mipsisa64r6el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nios | nios2 | nios2eb | nios2el \ + | ns16k | ns32k \ + | open8 | or1k | or1knd | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pyramid \ + | riscv32 | riscv64 \ + | rl78 | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu \ + | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | visium \ + | we32k \ + | x86 | xc16x | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + c54x) + basic_machine=tic54x-unknown + ;; + c55x) + basic_machine=tic55x-unknown + ;; + c6x) + basic_machine=tic6x-unknown + ;; + leon|leon[3-9]) + basic_machine=sparc-$basic_machine + ;; + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + strongarm | thumb | xscale) + basic_machine=arm-unknown + ;; + xgate) + basic_machine=$basic_machine-unknown + os=-none + ;; + xscaleeb) + basic_machine=armeb-unknown + ;; + + xscaleel) + basic_machine=armel-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | aarch64-* | aarch64_be-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | ba-* \ + | be32-* | be64-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | c8051-* | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | e2k-* | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | hexagon-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | k1om-* \ + | le32-* | le64-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | microblaze-* | microblazeel-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa32r6-* | mipsisa32r6el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64r6-* | mipsisa64r6el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipsr5900-* | mipsr5900el-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nds32-* | nds32le-* | nds32be-* \ + | nios-* | nios2-* | nios2eb-* | nios2el-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | open8-* \ + | or1k*-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pyramid-* \ + | riscv32-* | riscv64-* \ + | rl78-* | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ + | tahoe-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile*-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ + | vax-* \ + | visium-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + asmjs) + basic_machine=asmjs-unknown + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c54x-*) + basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c55x-*) + basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c6x-*) + basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16 | cr16-*) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + e500v[12]) + basic_machine=powerpc-unknown + os=$os"spe" + ;; + e500v[12]-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + os=$os"spe" + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + leon-*|leon[3-9]-*) + basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze*) + basic_machine=microblaze-xilinx + ;; + mingw64) + basic_machine=x86_64-pc + os=-mingw64 + ;; + mingw32) + basic_machine=i686-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + moxiebox) + basic_machine=moxie-unknown + os=-moxiebox + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + msys) + basic_machine=i686-pc + os=-msys + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + nacl) + basic_machine=le32-unknown + os=-nacl + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + neo-tandem) + basic_machine=neo-tandem + ;; + nse-tandem) + basic_machine=nse-tandem + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc | ppcbe) basic_machine=powerpc-unknown + ;; + ppc-* | ppcbe-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + os=-rdos + ;; + rdos32) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + strongarm-* | thumb-*) + basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tile*) + basic_machine=$basic_machine-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + xscale-* | xscalee[bl]-*) + basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* | -plan9* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* | -cloudabi* | -sortix* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-musl* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ + | -onefs* | -tirtos* | -phoenix*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -nacl*) + ;; + -ios) + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + c8051-*) + os=-elf + ;; + hexagon-*) + os=-elf + ;; + tic54x-*) + os=-coff + ;; + tic55x-*) + os=-coff + ;; + tic6x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/SOURCES/dist.sh b/SOURCES/dist.sh new file mode 100755 index 0000000..23bb032 --- /dev/null +++ b/SOURCES/dist.sh @@ -0,0 +1,66 @@ +#!/bin/bash +# dist.sh +# Author: Tom "spot" Callaway +# License: GPL +# This is a script to output the value for the %{dist} +# tag. The dist tag takes the following format: .$type$num +# Where $type is one of: el, fc, rh +# (for RHEL, Fedora Core, and RHL, respectively) +# And $num is the version number of the distribution. +# NOTE: We can't detect Rawhide or Fedora Test builds properly. +# If we successfully detect the version number, we output the +# dist tag. Otherwise, we exit with no output. + +RELEASEFILE=/etc/redhat-release + +function check_num { + MAINVER=`cut -d "(" -f 1 < $RELEASEFILE | \ + sed -e "s/[^0-9.]//g" -e "s/$//g" | cut -d "." -f 1` + + echo $MAINVER | grep -q '[0-9]' && echo $MAINVER +} + +function check_rhl { + grep -q "Red Hat Linux" $RELEASEFILE && ! grep -q "Advanced" $RELEASEFILE && echo $DISTNUM +} + +function check_rhel { + egrep -q "(Enterprise|Advanced|CentOS)" $RELEASEFILE && echo $DISTNUM +} + +function check_fedora { + grep -q Fedora $RELEASEFILE && echo $DISTNUM +} + +DISTNUM=`check_num` +DISTFC=`check_fedora` +DISTRHL=`check_rhl` +DISTRHEL=`check_rhel` +if [ -n "$DISTNUM" ]; then + if [ -n "$DISTFC" ]; then + DISTTYPE=fc + elif [ -n "$DISTRHEL" ]; then + DISTTYPE=el + elif [ -n "$DISTRHL" ]; then + DISTTYPE=rhl + fi +fi +[ -n "$DISTTYPE" -a -n "$DISTNUM" ] && DISTTAG=".${DISTTYPE}${DISTNUM}" + +case "$1" in + --el) echo -n "$DISTRHEL" ;; + --fc) echo -n "$DISTFC" ;; + --rhl) echo -n "$DISTRHL" ;; + --distnum) echo -n "$DISTNUM" ;; + --disttype) echo -n "$DISTTYPE" ;; + --help) + printf "Usage: $0 [OPTIONS]\n" + printf " Default mode is --dist. Possible options:\n" + printf " --el\t\tfor RHEL version (if RHEL)\n" + printf " --fc\t\tfor Fedora version (if Fedora)\n" + printf " --rhl\t\tfor RHL version (if RHL)\n" + printf " --dist\t\tfor distribution tag\n" + printf " --distnum\tfor distribution number (major)\n" + printf " --disttype\tfor distribution type\n" ;; + *) echo -n "$DISTTAG" ;; +esac diff --git a/SOURCES/find-provides b/SOURCES/find-provides new file mode 100755 index 0000000..be1669d --- /dev/null +++ b/SOURCES/find-provides @@ -0,0 +1,50 @@ +#!/bin/bash + +# This script reads filenames from STDIN and outputs any relevant provides +# information that needs to be included in the package. + +if [ "$1" ] +then + package_name="$1" +fi + +filelist=`sed "s/['\"]/\\\&/g"` + +[ -x /usr/lib/rpm/rpmdeps -a -n "$filelist" ] && + echo $filelist | tr '[:blank:]' \\n | /usr/lib/rpm/rpmdeps --provides + +# +# --- any other extra find-provides scripts +for i in /usr/lib/rpm/redhat/find-provides.d/*.prov +do + [ -x $i ] && + (echo $filelist | tr '[:blank:]' \\n | $i | sort -u) +done + +# +# --- Kernel module imported symbols +# +# Since we don't (yet) get passed the name of the package being built, we +# cheat a little here by looking first for a kernel, then for a kmod. +# + +is_kmod=1 +for f in $filelist; do + if [ $(echo "$f" | sed -r -ne 's:^.*/lib/modules/(.*)/(.*).ko$:\2:p') ] + then + is_kernel=1; + fi + if [ $(echo "$f" | sed -r -ne 's:^.*/boot/(.*):\1:p') ] + then + unset is_kmod; + fi +done +if [ ! "$is_kernel" ] || [ "$package_name" == "kernel" ] +then + unset is_kmod +fi + +[ -x /usr/lib/rpm/redhat/find-provides.ksyms ] && [ "$is_kmod" ] && + printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/redhat/find-provides.ksyms + +exit 0 diff --git a/SOURCES/find-requires b/SOURCES/find-requires new file mode 100755 index 0000000..a9596ba --- /dev/null +++ b/SOURCES/find-requires @@ -0,0 +1,39 @@ +#!/bin/bash + +# +# Auto-generate requirements for executables (both ELF and a.out) and library +# sonames, script interpreters, and perl modules. +# + +ulimit -c 0 + +filelist=`sed "s/[]['\"*?{}]/\\\\\&/g"` + +[ -x /usr/lib/rpm/rpmdeps -a -n "$filelist" ] && \ + echo $filelist | tr '[:blank:]' \\n | /usr/lib/rpm/rpmdeps --requires + +# +# --- Kernel module imported symbols +# +# Since we don't (yet) get passed the name of the package being built, we +# cheat a little here by looking first for a kernel, then for a kmod. +# + +unset is_kmod + +for f in $filelist; do + if [ $(echo "$f" | sed -r -ne 's:^.*/lib/modules/(.*)/(.*).ko$:\2:p') ] + then + is_kmod=1; + elif [ $(echo "$f" | sed -r -ne 's:^.*/boot/(.*):\1:p') ] + then + unset is_kmod; + break; + fi +done + +# Disabling for now while the Fedora kernel doesn't produce kABI deps. +#[ -x /usr/lib/rpm/redhat/find-requires.ksyms ] && [ "$is_kmod" ] && +# printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/redhat/find-requires.ksyms + +exit 0 diff --git a/SOURCES/forge.lua b/SOURCES/forge.lua new file mode 100644 index 0000000..f396395 --- /dev/null +++ b/SOURCES/forge.lua @@ -0,0 +1,312 @@ +-- Lua code used by macros.forge and derivatives + +-- Computes the suffix of a version string, removing vprefix if it matches +-- For example with vprefix 1.2.3: 1.2.3.rc2 → .rc2 but 1.2.30 → 1.2.30 not 0 +local function getversionsuffix(vstring,vprefix) + if (string.sub(vstring, 1, #vprefix) == vprefix) and + (not string.match(string.sub(vstring, #vprefix + 1), "^%.?%d")) then + return string.sub(vstring, #vprefix + 1) + else + return vstring + end +end + +-- Check if an identified url is sane +local function checkforgeurl(url, id, silent) + local checkedurl = nil + local checkedid = nil + local urlpatterns = { + gitlab = { + pattern = 'https://[^/]+/[^/]+/[^/#?]+', + description = 'https://(…[-.])gitlab[-.]…/owner/repo'}, + pagure = { + pattern = 'https://[^/]+/[^/#?]+', + description = 'https://pagure.io/repo'}, + pagure_ns = { + pattern = 'https://[^/]+/[^/]+/[^/#?]+', + description = 'https://pagure.io/namespace/repo'}, + pagure_fork = { + pattern = 'https://[^/]+/fork/[^/]+/[^/#?]+', + description = 'https://pagure.io/fork/owner/repo'}, + pagure_ns_fork = { + pattern = 'https://[^/]+/fork/[^/]+/[^/]+/[^/#?]+', + description = 'https://pagure.io/fork/owner/namespace/repo'}, + ["gitea.com"] = { + pattern = 'https://[^/]+/[^/]+/[^/#?]+', + description = 'https://gitea.com/owner/repo'}, + github = { + pattern = 'https://[^/]+/[^/]+/[^/#?]+', + description = 'https://(…[-.])github[-.]…/owner/repo'}, + ["code.googlesource.com"] = { + pattern = 'https://code.googlesource.com/[^#?]*[^/#?]+', + description = 'https://code.googlesource.com/…/repo'}, + ["bitbucket.org"] = { + pattern = 'https://[^/]+/[^/]+/[^/#?]+', + description = 'https://bitbucket.org/owner/repo'}} + if (urlpatterns[id] ~= nil) then + checkedurl = string.match(url,urlpatterns[id]["pattern"]) + if (checkedurl == nil) then + if not silent then + rpm.expand("%{error:" .. id .. " URLs must match " .. urlpatterns[id]["description"] .. " !}") + end + else + checkedid = id + end + end + return checkedurl, checkedid +end + +-- Check if an url matches a known forge +local function idforge(url, silent) + local forgeurl = nil + local forge = nil + if (url ~= "") then + forge = string.match(url, "^[^:]+://([^/]+)/") + if (forge == nil) then + if not silent then + rpm.expand("%{error:URLs must include a protocol such as https:// and a path starting with / !}") + end + else + if (forge == "pagure.io") then + if string.match(url, "[^:]+://pagure.io/fork/[^/]+/[^/]+/[^/]+") then + forge = "pagure_ns_fork" + elseif string.match(url, "[^:]+://pagure.io/fork/[^/]+/[^/]+") then + forge = "pagure_fork" + elseif string.match(url, "[^:]+://pagure.io/[^/]+/[^/]+") then + forge = "pagure_ns" + elseif string.match(url, "[^:]+://pagure.io/[^/]+") then + forge = "pagure" + end + elseif (string.match(forge, "^gitlab[%.-]") or string.match(forge, "[%.-]gitlab[%.]")) then + forge = "gitlab" + elseif (string.match(forge, "^github[%.-]") or string.match(forge, "[%.-]github[%.]")) then + forge = "github" + end + forgeurl, forge = checkforgeurl(url, forge, silent) + end + end + return forgeurl, forge +end + +-- The forgemeta macro main processing function +-- See the documentation in the macros.forge file for argument description +-- Also called directly by gometa +local function meta(suffix, verbose, informative, silent) + local fedora = require "fedora.common" + local ismain = (suffix == "") or (suffix == "0") + if ismain then + fedora.zalias({"forgeurl", "forgesource", "forgesetupargs", + "archivename", "archiveext", "archiveurl", + "topdir", "extractdir", "repo", "owner", "namespace", + "scm", "tag", "commit", "shortcommit", "branch", "version", + "date", "distprefix"}, verbose) + end + local variables = { + default = { + scm = "git", + archiveext = "tar.bz2", + repo = '%{lua:print(string.match(rpm.expand("%{forgeurl' .. suffix .. '}"), "^[^:]+://[^/]+/[^/]+/([^/?#]+)"))}', + archivename = "%{repo" .. suffix .. "}-%{ref" .. suffix .. "}", + topdir = "%{archivename" .. suffix .. "}" }, + gitlab = { + archiveurl = "%{forgeurl" .. suffix .. "}/-/archive/%{ref" .. suffix .. "}/%{archivename" .. suffix .. "}.%{archiveext" .. suffix .. "}" }, + pagure = { + archiveext = "tar.gz", + repo = '%{lua:print(string.match(rpm.expand("%{forgeurl' .. suffix .. '}"), "^[^:]+://[^/]+/([^/?#]+)"))}', + archiveurl = "%{forgeurl" .. suffix .. "}/archive/%{ref" .. suffix .. "}/%{archivename" .. suffix .. "}.%{archiveext" .. suffix .. "}" }, + pagure_ns = { + archiveext = "tar.gz", + namespace = '%{lua:print(string.match(rpm.expand("%{forgeurl' .. suffix .. '}"), "^[^:]+://[^/]+/([^/]+)/[^/?#]+"))}', + repo = '%{lua:print(string.match(rpm.expand("%{forgeurl' .. suffix .. '}"), "^[^:]+://[^/]+/[^/]+/([^/?#]+)"))}', + archivename = "%{namespace" .. suffix .. "}-%{repo" .. suffix .. "}-%{ref" .. suffix .. "}", + archiveurl = "%{forgeurl" .. suffix .. "}/archive/%{ref" .. suffix .. "}/%{archivename" .. suffix .. "}.%{archiveext" .. suffix .. "}" }, + pagure_fork = { + archiveext = "tar.gz", + owner = '%{lua:print(string.match(rpm.expand("%{forgeurl' .. suffix .. '}"), "https://[^/]+/fork/([^/]+)/[^/?#]+"))}', + repo = '%{lua:print(string.match(rpm.expand("%{forgeurl' .. suffix .. '}"), "https://[^/]+/fork/[^/]+/([^/?#]+)"))}', + archivename = "%{owner" .. suffix .. "}-%{repo" .. suffix .. "}-%{ref" .. suffix .. "}", + archiveurl = "%{forgeurl" .. suffix .. "}/archive/%{ref" .. suffix .. "}/%{archivename" .. suffix .. "}.%{archiveext" .. suffix .. "}" }, + pagure_ns_fork = { + owner = '%{lua:print(string.match(rpm.expand("%{forgeurl' .. suffix .. '}"), "https://[^/]+/fork/([^/]+)/[^/]+/[^/?#]+"))}', + namespace = '%{lua:print(string.match(rpm.expand("%{forgeurl' .. suffix .. '}"), "https://[^/]+/fork/[^/]+/([^/]+)/[^/?#]+")}', + repo = '%{lua:print(string.match(rpm.expand("%{forgeurl' .. suffix .. '}"), "https://[^/]+/fork/[^/]+/[^/]+/([^/?#]+)")}', + archivename = "%{owner" .. suffix .. "}-%{namespace" .. suffix .. "}-%{repo" .. suffix .. "}-%{ref" .. suffix .. "}", + archiveurl = "%{forgeurl" .. suffix .. "}/archive/%{ref" .. suffix .. "}/%{archivename" .. suffix .. "}.%{archiveext" .. suffix .. "}" }, + ["gitea.com"] = { + archiveext = "tar.gz", + archivename = "%{fileref" .. suffix .. "}", + archiveurl = "%{forgeurl" .. suffix .. "}/archive/%{ref" .. suffix .. "}.%{archiveext" .. suffix .. "}", + topdir = "%{repo}" }, + github = { + archiveext = "tar.gz", + archivename = "%{repo" .. suffix .. "}-%{fileref" .. suffix .. "}", + archiveurl = "%{forgeurl" .. suffix .. "}/archive/%{ref" .. suffix .. "}/%{archivename" .. suffix .. "}.%{archiveext" .. suffix .. "}" }, + ["code.googlesource.com"] = { + archiveext = "tar.gz", + repo = '%{lua:print(string.match(rpm.expand("%{forgeurl' .. suffix .. '}"), "^[^:]+://.+/([^/?#]+)"))}', + archiveurl = "%{forgeurl" .. suffix .. "}/+archive/%{ref" .. suffix .. "}.%{archiveext" .. suffix .. "}", + topdir = "" }, + ["bitbucket.org"] = { + shortcommit = '%{lua:print(string.sub(rpm.expand("%{commit' .. suffix .. '}"), 1, 12))}', + owner = '%{lua:print(string.match(rpm.expand("%{forgeurl' .. suffix .. '}"), "^[^:]+://[^/]+/([^/?#]+)"))}', + archivename = "%{owner" .. suffix .. "}-%{repo" .. suffix .. "}-%{shortcommit" .. suffix .. "}", + archiveurl = "%{forgeurl" .. suffix .. "}/get/%{ref" .. suffix .. "}.%{archiveext" .. suffix .. "}" } } + -- Packaging a moving branch is quite a bad idea, but since at least Gitlab + -- will treat branches and tags the same way better support branches explicitly + -- than have packagers hijack %{tag} to download branch states + local spec = {} + for _, v in ipairs({'forgeurl','tag','commit','branch','version'}) do + spec[v] = rpm.expand("%{?" .. v .. suffix .. "}") + end + -- Compute the reference of the object to fetch + local isrelease = false + if (spec["tag"] ~= "") then ref = "%{?tag" .. suffix .. "}" + elseif (spec["commit"] ~= "") then ref = "%{?commit" .. suffix .. "}" + elseif (spec["branch"] ~= "") then ref = "%{?branch" .. suffix .. "}" + else ref = "%{?version" .. suffix .. "}" + isrelease = true + end + if (rpm.expand(ref) == "") then + if (suffix == "") then + rpm.expand("%{error:You need to define Version:, %{commit} or %{tag} before the macro invocation !}") + else + rpm.expand("%{error:You need to define %{version" .. suffix .. "}, %{commit" .. suffix .. "} or %{tag" .. suffix .. "} before the macro invocation !}") + end + end + local forgeurl = spec["forgeurl"] + -- For backwards compatibility only + local expliciturl = rpm.expand("%{?-u*}") + if (expliciturl ~= "") then + rpm.expand("%{warn:-u use in %%forgemeta is deprecated, use -z instead to select a separate set of rpm variables!}") + forgeurl = expliciturl + end + local forge + forgeurl, forge = idforge(forgeurl, silent) + if (forge ~= nil) then + fedora.explicitset("forgeurl" .. suffix, forgeurl, verbose) + -- Custom processing of quirky forges that can not be handled with simple variables + if (forge == "github") then + -- Workaround the way GitHub injects "v"s before some version strings (but not all!) + -- To package one of the minority of sane GitHub projects that do not munge their version + -- strings set tag to %{version} in your spec + local fileref = ref + if (ref == "%{?version" .. suffix .. "}") then + ref = "v" .. ref + elseif (fileref ~= "%{?commit" .. suffix .. "}") and + string.match(rpm.expand(fileref), "^v[%d]") then + fileref = string.gsub(rpm.expand(fileref), "^v", "") + elseif (string.match(rpm.expand(fileref), "/")) then + fileref = string.gsub(rpm.expand(fileref), "/", "-") + end + fedora.safeset("fileref" .. suffix, fileref, verbose) + elseif (forge == "gitea.com") then + -- Workaround the way gitea mangles /s in ref names + local fileref = ref + fileref = string.gsub(rpm.expand(fileref), "/", "-") + fedora.safeset("fileref" .. suffix, fileref, verbose) + elseif (forge == "code.googlesource.com") then + if (ref == "%{?version" .. suffix .. "}") then + ref = "v" .. ref + end + elseif (forge == "bitbucket.org") then + if (spec["commit"] == "") then + rpm.expand("%{error:All BitBucket URLs require commit value knowledge: you need to define %{commit}!}") + end + end + fedora.safeset("ref" .. suffix, ref, verbose) + -- Mass setting of the remaining variables + for k,v in pairs(variables[forge]) do + fedora.safeset(k .. suffix, variables[forge][k], verbose) + end + for k,v in pairs(variables["default"]) do + if (variables[forge][k] == nil) then + fedora.safeset(k .. suffix, variables["default"][k], verbose) + end + end + end + -- Generic rules + for _, v in ipairs({'archiveurl','archivename','archiveext','topdir'}) do + spec[v] = rpm.expand("%{?" .. v .. suffix .. "}") + end + -- Source URL processing (computing the forgesource spec variable) + local forgesource = "%{archiveurl" .. suffix .. "}" + if (string.match(spec["archiveurl"], "/([^/]+)$") ~= spec["archivename"] .. "." .. spec["archiveext"]) then + forgesource = "%{?archiveurl" .. suffix .. "}#/%{?archivename" .. suffix .. "}.%{archiveext" .. suffix .. "}" + end + fedora.safeset("forgesource" .. suffix, forgesource, verbose) + -- Setup processing (computing the forgesetup and extractdir variables) + local forgesetupargs = "-n %{extractdir" .. suffix .. "}" + local extractdir = "%{topdir" .. suffix .. "}" + if (spec["topdir"] == "") then + forgesetupargs = "-c " .. forgesetupargs + extractdir = "%{archivename" .. suffix .. "}" + end + if not ismain then + if (spec["topdir"] ~= "") then + forgesetupargs = "-T -D -b " .. suffix .. " " .. forgesetupargs + else + forgesetupargs = "-T -D -a " .. suffix .. " " .. forgesetupargs + end + end + fedora.safeset("forgesetupargs" .. suffix, forgesetupargs, verbose) + fedora.safeset("extractdir" .. suffix, extractdir, verbose) + -- dist processing (computing the correct prefix for snapshots) + local distprefix = "" + if not isrelease then + distprefix = string.lower(rpm.expand(ref)) + if (ref == "%{?commit" .. suffix .. "}") then + distprefix = string.sub(distprefix, 1, 7) + elseif (ref ~= "%{?branch" .. suffix .. "}") then + distprefix = string.gsub(distprefix, "[%p%s]+", ".") + distprefix = string.gsub(distprefix, "^" .. string.lower(rpm.expand("%{?repo}")) .. "%.?", "") + local v = string.gsub(rpm.expand("%{version}"), "[%p%s]+", ".") + for _, p in ipairs({'','v','v.','version','version.','tags.v', 'tags.v.'}) do + distprefix = getversionsuffix(distprefix, p .. v) + end + distprefix = string.gsub(distprefix, "^%.", "") + end + if (distprefix ~= "") then + distprefix = "%{scm" .. suffix .. "}" .. distprefix + date = rpm.expand("%{?date" .. suffix .. "}") + if (date ~= "") then + distprefix = date .. distprefix + else + distprefix = "%([ -r %{_sourcedir}/%{archivename" .. suffix .. "}.%{archiveext" .. suffix .. "} ] && date +%Y%m%d -u -r %{_sourcedir}/%{archivename" .. suffix .. "}.%{archiveext" .. suffix .. "})" .. distprefix + end + distprefix = "." .. distprefix + end + end + if (spec["version"] ~= "") and + (spec["version"] ~= "0") and + (spec["version"] ~= rpm.expand("%{?version}")) then + distprefix = ".%{version" .. suffix .. "}" .. distprefix + end + if (rpm.expand(distprefix) ~= "") then + if not ismain then + distprefix = string.gsub(distprefix, "^%.", ".s") + end + fedora.safeset ("distprefix" .. suffix, distprefix, verbose) + end + if ismain then + fedora.zalias({"forgeurl", "forgesource", "forgesetupargs", + "archivename", "archiveext", "archiveurl", + "topdir", "extractdir", "repo", "owner", "namespace", + "scm", "shortcommit", "distprefix"}, verbose) + end + -- Final spec variable summary if the macro was called with -i + if informative then + rpm.expand("%{echo:Packaging variables read or set by %%forgemeta}") + fedora.echovars({"forgeurl", "forgesource", "forgesetupargs", + "archivename", "archiveext", "archiveurl", + "topdir", "extractdir", "repo", "owner", "namespace", + "scm", "tag", "commit", "shortcommit", "branch", "version", + "date", "distprefix"}, suffix) + fedora.echovars({"dist"},"") + rpm.expand("%{echo: (snapshot date is either manually supplied or computed once %%{_sourcedir}/%%{archivename" .. suffix .. "}.%%{archiveext" .. suffix .. "} is available)}") + end +end + +return { + meta = meta, +} + diff --git a/SOURCES/gpgverify b/SOURCES/gpgverify new file mode 100755 index 0000000..524a396 --- /dev/null +++ b/SOURCES/gpgverify @@ -0,0 +1,111 @@ +#!/bin/bash + +# Copyright 2018 B. Persson, Bjorn@Rombobeorn.se +# +# This material is provided as is, with absolutely no warranty expressed +# or implied. Any use is at your own risk. +# +# Permission is hereby granted to use or copy this shellscript +# for any purpose, provided the above notices are retained on all copies. +# Permission to modify the code and to distribute modified code is granted, +# provided the above notices are retained, and a notice that the code was +# modified is included with the above copyright notice. + + +function print_help { + cat <<'EOF' +Usage: gpgverify --keyring= --signature= --data= + +gpgverify is a wrapper around gpgv designed for easy and safe scripting. It +verifies a file against a detached OpenPGP signature and a keyring. The keyring +shall contain all the keys that are trusted to certify the authenticity of the +file, and must not contain any untrusted keys. + +The differences, compared to invoking gpgv directly, are that gpgverify accepts +the keyring in either ASCII-armored or unarmored form, and that it will not +accidentally use a default keyring in addition to the specified one. + +Parameters: + --keyring= keyring with all the trusted keys and no others + --signature= detached signature to verify + --data= file to verify against the signature +EOF +} + + +fatal_error() { + message="$1" # an error message + status=$2 # a number to use as the exit code + echo "gpgverify: $message" >&2 + exit $status +} + + +require_parameter() { + term="$1" # a term for a required parameter + value="$2" # Complain and terminate if this value is empty. + if test -z "${value}" ; then + fatal_error "No ${term} was provided." 2 + fi +} + + +check_status() { + action="$1" # a string that describes the action that was attempted + status=$2 # the exit code of the command + if test $status -ne 0 ; then + fatal_error "$action failed." $status + fi +} + + +# Parse the command line. +keyring= +signature= +data= +for parameter in "$@" ; do + case "${parameter}" in + (--help) + print_help + exit + ;; + (--keyring=*) + keyring="${parameter#*=}" + ;; + (--signature=*) + signature="${parameter#*=}" + ;; + (--data=*) + data="${parameter#*=}" + ;; + (*) + fatal_error "Unknown parameter: \"${parameter}\"" 2 + ;; + esac +done +require_parameter 'keyring' "${keyring}" +require_parameter 'signature' "${signature}" +require_parameter 'data file' "${data}" + +# Make a temporary working directory. +workdir="$(mktemp --directory)" +check_status 'Making a temporary directory' $? +workring="${workdir}/keyring.gpg" + +# Decode any ASCII armor on the keyring. This is harmless if the keyring isn't +# ASCII-armored. +gpg2 --homedir="${workdir}" --yes --output="${workring}" --dearmor "${keyring}" +check_status 'Decoding the keyring' $? + +# Verify the signature using the decoded keyring. +gpgv2 --homedir="${workdir}" --keyring="${workring}" "${signature}" "${data}" +check_status 'Signature verification' $? + +# (--homedir isn't actually necessary. --dearmor processes only the input file, +# and if --keyring is used and contains a slash, then gpgv2 uses only that +# keyring. Thus neither command will look for a default keyring, but --homedir +# makes extra double sure that no default keyring will be touched in case +# another version of GPG works differently.) + +# Clean up. (This is not done in case of an error that may need inspection.) +rm --recursive --force ${workdir} diff --git a/SOURCES/libsymlink.attr b/SOURCES/libsymlink.attr new file mode 100644 index 0000000..4e4981f --- /dev/null +++ b/SOURCES/libsymlink.attr @@ -0,0 +1,5 @@ +# Make libfoo.so symlinks require the soname-provide of the target library +%__libsymlink_requires %{_rpmconfigdir}/elfdeps --provides --soname-only +%__libsymlink_magic ^symbolic link to .*lib.*\.so\..*$ +%__libsymlink_path ^.*\.so$ +%__libsymlink_flags magic_and_path diff --git a/SOURCES/macros b/SOURCES/macros new file mode 100644 index 0000000..81471b0 --- /dev/null +++ b/SOURCES/macros @@ -0,0 +1,372 @@ +# Per-platform rpm configuration file. + +#============================================================================== +# ---- per-platform macros. +# +%_vendor redhat +%_os linux +%_target_platform %{_target_cpu}-%{_vendor}-%{_target_os}%{?_gnu} + +#============================================================================== +# ---- configure macros. note that most of these are inherited +# from the defaults. +# +%_localstatedir /var + +%_pkgdocdir %{_docdir}/%{name} +%_docdir_fmt %%{NAME} + +%_fmoddir %{_libdir}/gfortran/modules + +%source_date_epoch_from_changelog 1 + +%_enable_debug_packages 1 +%_include_minidebuginfo 1 +%_include_gdb_index 1 +%_debugsource_packages 1 +%_debuginfo_subpackages 1 + +# GCC toolchain +%__cc_gcc gcc +%__cxx_gcc g++ +%__cpp_gcc gcc -E + +# Clang toolchain +%__cc_clang clang +%__cxx_clang clang++ +%__cpp_clang clang-cpp + +# Default to the GCC toolchain +%toolchain gcc + +%__cc %{expand:%%{__cc_%{toolchain}}} +%__cxx %{expand:%%{__cxx_%{toolchain}}} +%__cpp %{expand:%%{__cpp_%{toolchain}}} + +#============================================================================== +# ---- compiler flags. + +# C compiler flags. This is traditionally called CFLAGS in makefiles. +# Historically also available as %%{optflags}, and %%build sets the +# environment variable RPM_OPT_FLAGS to this value. +%build_cflags %{optflags} + +# C++ compiler flags. This is traditionally called CXXFLAGS in makefiles. +%build_cxxflags %{optflags} + +# Fortran compiler flags. Makefiles use both FFLAGS and FCFLAGS as +# the corresponding variable names. +%build_fflags %{optflags} -I%{_fmoddir} + +# Link editor flags. This is usually called LDFLAGS in makefiles. +# (Some makefiles use LFLAGS instead.) The default value assumes that +# the flags, while intended for ld, are still passed through the gcc +# compiler driver. At the beginning of %%build, the environment +# variable RPM_LD_FLAGS to this value. +# When clang is used as a linker driver, it does not auto-detect the LTO +# bytecode and neither does bfd, so we need to explicitly pass the -flto +# flag when linking. +%build_ldflags -Wl,-z,relro %{_ld_as_needed_flags} %{_ld_symbols_flags} %{_hardened_ldflags} %{_annotation_ldflags} %[ "%{toolchain}" == "clang" ? "%{?_lto_cflags}" : "" ] + +# Expands to shell code to set the compiler/linker environment +# variables CFLAGS, CXXFLAGS, FFLAGS, FCFLAGS, LDFLAGS if they have +# not been set already. RPM_OPT_FLAGS and RPM_LD_FLAGS have already +# been set implicitly at the start of the %%build section. +# LT_SYS_LIBRARY_PATH is used by libtool script. +%set_build_flags \ + CFLAGS="${CFLAGS:-%{build_cflags}}" ; export CFLAGS ; \ + CXXFLAGS="${CXXFLAGS:-%{build_cxxflags}}" ; export CXXFLAGS ; \ + FFLAGS="${FFLAGS:-%{build_fflags}}" ; export FFLAGS ; \ + FCFLAGS="${FCFLAGS:-%{build_fflags}}" ; export FCFLAGS ; \ + LDFLAGS="${LDFLAGS:-%{build_ldflags}}" ; export LDFLAGS ; \ + LT_SYS_LIBRARY_PATH="${LT_SYS_LIBRARY_PATH:-%_libdir:}" ; export LT_SYS_LIBRARY_PATH ; \ + CC="${CC:-%{__cc}}" ; export CC ; \ + CXX="${CXX:-%{__cxx}}" ; export CXX + +# Internal-only. Do not use. Expand a variable and strip the flags +# not suitable to extension builders. +%__extension_strip_flags() %{lua: +local name = rpm.expand("%{1}") +local value = " " .. rpm.expand("%{build_" .. name .. "}") +local specs_pattern = "%s+-specs=[^%s]+" +local lto_flags_pattern = rpm.expand("%{?_lto_cflags}"):gsub("[%-%.]", "%%%1") +local result = value:gsub(specs_pattern, " "):gsub(lto_flags_pattern, "") +print(result) +} + +# Variants of CFLAGS, CXXFLAGS, FFLAGS, LDFLAGS for use within +# extension builders. +%extension_cflags %{__extension_strip_flags cflags} +%extension_cxxflags %{__extension_strip_flags cxxflags} +%extension_fflags %{__extension_strip_flags fflags} +%extension_ldflags %{__extension_strip_flags ldflags} + +# Deprecated names. For backwards compatibility only. +%__global_cflags %{build_cflags} +%__global_cxxflags %{build_cxxflags} +%__global_fflags %{build_fflags} +%__global_fcflags %{build_fflags} +%__global_ldflags %{build_ldflags} + +# Architecture-specific support. Internal. Do not use directly. + +%__cflags_arch_x86_64 %[0%{?rhel} >= 9 ? "-march=x86-64-v2" : ""] + +# Also used for s390. +%__cflags_arch_s390x %[0%{?rhel} >= 9 ? "-march=z14 -mtune=z15" : "-march=zEC12 -mtune=z13"] + +# Also used for ppc64le. +%__cflags_arch_ppc64le %[0%{?rhel} >= 9 ? "-mcpu=power9 -mtune=power9" : "-mcpu=power8 -mtune=power8"] + +#============================================================================== +# ---- configure and makeinstall. +# +%_configure_gnuconfig_hack 1 +%_configure_libtool_hardening_hack 1 +# If defined, _configure_disable_silent_rules will cause --disable-silent-rules +# to be added to the list of options passed to the configure script. +# Eventually we'll want to turn this on by default, but this gives packagers a +# way to turn it back off. +# %_configure_disable_silent_rules 1 + +# This fixes various easy resolved configure tests that are compromised by LTO. +# +# We use this within the standard %configure macro, but also make it available +# for packages which don't use %configure +# +# The first three are common ways to test for the existence of a function, so +# we ensure the reference to the function is preserved +# +# The fourth are constants used to then try to generate NaNs and other key +# floating point numbers. We then use those special FP numbers to try and +# raise a SIGFPE. By declaring x & y volatile we prevent the optimizers +# from removing the computation +# +# The fifth (and worst) addresses problems with autoconf/libtool's approach +# to extracting symbols from .o files and generating C code. In an LTO world +# types matter much more closely and you can't have an object in one context +# that is a function definition and a simple scalar variable in another. +# Thankfully HP-UX has always had that restriction and is supported by +# autoconf/libtool. The insane sed script replaces the "generic" code with +# the HP-UX version. +# +# If we do not make changes, we put the original file back. This avoids +# unnecessary rebuilds of things that may have dependencies on the configure +# files. +# +%_fix_broken_configure_for_lto \ + for file in $(find . -type f -name configure -print); do \ + %{__sed} -r --in-place=.backup 's/^char \\(\\*f\\) \\(\\) = /__attribute__ ((used)) char (*f) () = /g' $file; \ + diff -u $file.backup $file && mv $file.backup $file \ + %{__sed} -r --in-place=.backup 's/^char \\(\\*f\\) \\(\\);/__attribute__ ((used)) char (*f) ();/g' $file; \ + diff -u $file.backup $file && mv $file.backup $file \ + %{__sed} -r --in-place=.backup 's/^char \\$2 \\(\\);/__attribute__ ((used)) char \\$2 ();/g' $file; \ + diff -u $file.backup $file && mv $file.backup $file \ + %{__sed} --in-place=.backup '1{$!N;$!N};$!N;s/int x = 1;\\nint y = 0;\\nint z;\\nint nan;/volatile int x = 1; volatile int y = 0; volatile int z, nan;/;P;D' $file; \ + diff -u $file.backup $file && mv $file.backup $file \ + %{__sed} --in-place=.backup 's#^lt_cv_sys_global_symbol_to_cdecl=.*#lt_cv_sys_global_symbol_to_cdecl="sed -n -e '"'"'s/^T .* \\\\(.*\\\\)$/extern int \\\\1();/p'"'"' -e '"'"'s/^$symcode* .* \\\\(.*\\\\)$/extern char \\\\1;/p'"'"'"#' $file; \ + diff -u $file.backup $file && mv $file.backup $file \ + done + +%configure \ + %{set_build_flags}; \ + [ "%{_lto_cflags}"x != x ] && %{_fix_broken_configure_for_lto}; \ + [ "%_configure_gnuconfig_hack" = 1 ] && for i in $(find $(dirname %{_configure}) -name config.guess -o -name config.sub) ; do \ + [ -f /usr/lib/rpm/redhat/$(basename $i) ] && %{__rm} -f $i && %{__cp} -fv /usr/lib/rpm/redhat/$(basename $i) $i ; \ + done ; \ + [ "%_configure_libtool_hardening_hack" = 1 ] && [ x != "x%{_hardened_ldflags}" ] && \ + for i in $(find . -name ltmain.sh) ; do \ + %{__sed} -i.backup -e 's~compiler_flags=$~compiler_flags="%{_hardened_ldflags}"~' $i \ + done ; \ + %{_configure} --build=%{_build} --host=%{_host} \\\ + --program-prefix=%{?_program_prefix} \\\ + --disable-dependency-tracking \\\ + %{?_configure_disable_silent_rules:--disable-silent-rules} \\\ + --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} + +#============================================================================== +# ---- Build policy macros. +# +# +#--------------------------------------------------------------------- +# Expanded at beginning of %install scriptlet. +# + +%__spec_install_pre %{___build_pre}\ + [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "${RPM_BUILD_ROOT}"\ + mkdir -p `dirname "$RPM_BUILD_ROOT"`\ + mkdir "$RPM_BUILD_ROOT"\ +%{nil} + +#--------------------------------------------------------------------- +# Expanded at end of %install scriptlet. +# + +%__arch_install_post /usr/lib/rpm/check-buildroot + +# Build root policy macros. Standard naming: +# convert all '-' in basename to '_', add two leading underscores. +%__brp_ldconfig /usr/lib/rpm/redhat/brp-ldconfig +%__brp_compress /usr/lib/rpm/brp-compress +%__brp_strip /usr/lib/rpm/brp-strip %{__strip} +%__brp_strip_lto /usr/lib/rpm/redhat/brp-strip-lto %{__strip} +%__brp_strip_comment_note /usr/lib/rpm/brp-strip-comment-note %{__strip} %{__objdump} +%__brp_strip_static_archive /usr/lib/rpm/brp-strip-static-archive %{__strip} +%__brp_python_bytecompile /usr/lib/rpm/redhat/brp-python-bytecompile "" "%{?_python_bytecompile_errors_terminate_build}" "%{?_python_bytecompile_extra}" +%__brp_fix_pyc_reproducibility /usr/lib/rpm/redhat/brp-fix-pyc-reproducibility +%__brp_python_hardlink /usr/lib/rpm/brp-python-hardlink +# __brp_mangle_shebangs_exclude - shebangs to exclude +# __brp_mangle_shebangs_exclude_file - file from which to get shebangs to exclude +# __brp_mangle_shebangs_exclude_from - files to ignore +# __brp_mangle_shebangs_exclude_from_file - file from which to get files to ignore +%__brp_mangle_shebangs /usr/lib/rpm/redhat/brp-mangle-shebangs %{?__brp_mangle_shebangs_exclude:--shebangs "%{?__brp_mangle_shebangs_exclude}"} %{?__brp_mangle_shebangs_exclude_file:--shebangs-from "%{__brp_mangle_shebangs_exclude_file}"} %{?__brp_mangle_shebangs_exclude_from:--files "%{?__brp_mangle_shebangs_exclude_from}"} %{?__brp_mangle_shebangs_exclude_from_file:--files-from "%{__brp_mangle_shebangs_exclude_from_file}"} + +%__os_install_post \ + %{?__brp_ldconfig} \ + %{?__brp_compress} \ + %{!?__debug_package:\ + %{?__brp_strip} \ + %{?__brp_strip_comment_note} \ + } \ + %{?__brp_strip_lto} \ + %{?__brp_strip_static_archive} \ + %{?py_auto_byte_compile:%{?__brp_python_bytecompile}} \ + %{?py_reproducible_pyc_path:%{?__brp_fix_pyc_reproducibility} "%{py_reproducible_pyc_path}"} \ + %{?__brp_python_hardlink} \ + %{?__brp_mangle_shebangs} \ +%{nil} + +%__spec_install_post\ + %{?__debug_package:%{__debug_install_post}}\ + %{__arch_install_post}\ + %{__os_install_post}\ +%{nil} + +%install %{?_enable_debug_packages:%{?buildsubdir:%{debug_package}}}\ +%%install\ +%{nil} + +# +# Should missing buildids terminate a build? +%_missing_build_ids_terminate_build 1 + +# +## Automatically compile python files +%py_auto_byte_compile 1 + +# +## Should python bytecompilation errors terminate a build? +%_python_bytecompile_errors_terminate_build 1 +## Should python bytecompilation compile outisde python specific directories? +%_python_bytecompile_extra 0 + +# Use SHA-256 for FILEDIGESTS instead of default MD5 +%_source_filedigest_algorithm 8 +%_binary_filedigest_algorithm 8 + +# Use Zstandard compression for binary payloads +%_binary_payload w19.zstdio + +%_hardening_gcc_cflags -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 +%_hardening_clang_cflags --config /usr/lib/rpm/redhat/redhat-hardened-clang.cfg +%_hardening_cflags %{expand:%%{_hardening_%{toolchain}_cflags}} -fstack-protector-strong +# we don't escape symbols '~', '"', etc. so be careful when changing this +%_hardening_ldflags -Wl,-z,now %[ "%{toolchain}" == "gcc" ? "-specs=/usr/lib/rpm/redhat/redhat-hardened-ld" : "" ] + +# Harden packages by default for Fedora 23+: +# https://fedorahosted.org/fesco/ticket/1384 (accepted on 2014-02-11) +# Use "%undefine _hardened_build" to disable. +%_hardened_build 1 +%_hardened_cflags %{?_hardened_build:%{_hardening_cflags}} +%_hardened_ldflags %{?_hardened_build:%{_hardening_ldflags}} + +# Add extra information to binary objects created by the compiler: +# https://pagure.io/fesco/issue/1780 (accepted on 2017-10-30) +# Use "%undefine _annotated_build" to disable. +%_annotated_build 1 +%_annobin_gcc_plugin -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 +# The annobin plugin is not built for clang yet +%_annobin_clang_plugin %dnl-fplugin=/usr/lib64/clang/`clang -dumpversion`/lib/annobin.so +%_annotation_cflags %{?_annotated_build:%{expand:%%{_annobin_%{toolchain}_plugin}}} +%_annotation_ldflags %{?_lto_cflags:%{_annotation_cflags}} + +# Fail linking if there are undefined symbols. Required for proper +# ELF symbol versioning support. Disabled by default. +# Use "%define _ld_strict_symbol_defs 1" to enable. +#%_ld_strict_symbol_defs 1 +%_ld_symbols_flags %{?_ld_strict_symbol_defs:-Wl,-z,defs} + +# https://fedoraproject.org/wiki/Changes/RemoveExcessiveLinking +# use "%undefine _ld_as_needed" to disable. +%_ld_as_needed 1 +%_ld_as_needed_flags %{?_ld_as_needed:-Wl,--as-needed} + +# LTO is the default in Fedora. +# "%define _lto_cflags %{nil}" to opt out +# +# We currently have -ffat-lto-objects turned on out of an abundance of +# caution. To remove it we need to do a check of the installed .o/.a files +# to verify they have real sections/symbols after LTO stripping. That +# way we can detect installing an unusable .o/.a file. This is on the TODO +# list for F34. +%_gcc_lto_cflags -flto=auto -ffat-lto-objects +%_clang_lto_cflags -flto +%_lto_cflags %{expand:%%{_%{toolchain}_lto_cflags}} + +%_general_options -O2 %{?_lto_cflags} -fexceptions -g -grecord-gcc-switches -pipe +%_warning_options -Wall -Werror=format-security +%_preprocessor_defines -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS + +# Common variables are no longer generated by default by gcc and clang +# If they are needed then add "%define _legacy_common_support 1" to the spec file. +%_legacy_options %{?_legacy_common_support: -fcommon} + +%__global_compiler_flags %{_general_options} %{_warning_options} %{_preprocessor_defines} %{_hardened_cflags} %{_annotation_cflags} %{_legacy_options} + +# Automatically trim changelog entries after 2 years +%_changelog_trimtime %{lua:print(os.time() - 2 * 365 * 86400)} + +#============================================================================== +# ---- Generic auto req/prov filtering macros +# +# http://fedoraproject.org/wiki/PackagingDrafts/AutoProvidesAndRequiresFiltering + +# prevent anything matching from being scanned for provides +%filter_provides_in(P) %{expand: \ +%global __filter_prov_cmd %{?__filter_prov_cmd} %{__grep} -v %{-P} '%*' | \ +} + +# prevent anything matching from being scanned for requires +%filter_requires_in(P) %{expand: \ +%global __filter_req_cmd %{?__filter_req_cmd} %{__grep} -v %{-P} '%*' | \ +} + +# filter anything matching out of the provides stream +%filter_from_provides() %{expand: \ +%global __filter_from_prov %{?__filter_from_prov} | %{__sed} -e '%*' \ +} + +# filter anything matching out of the requires stream +%filter_from_requires() %{expand: \ +%global __filter_from_req %{?__filter_from_req} | %{__sed} -e '%*' \ +} + +# actually set up the filtering bits +%filter_setup %{expand: \ +%global _use_internal_dependency_generator 0 \ +%global __deploop() while read FILE; do echo "${FILE}" | /usr/lib/rpm/rpmdeps -%{1}; done | /bin/sort -u \ +%global __find_provides /bin/sh -c "%{?__filter_prov_cmd} %{__deploop P} %{?__filter_from_prov}" \ +%global __find_requires /bin/sh -c "%{?__filter_req_cmd} %{__deploop R} %{?__filter_from_req}" \ +} diff --git a/SOURCES/macros.dwz b/SOURCES/macros.dwz new file mode 100644 index 0000000..f1e4813 --- /dev/null +++ b/SOURCES/macros.dwz @@ -0,0 +1,39 @@ +# Macros for reducing debug info size using dwz(1) utility. + +# The two default values below should result in dwz taking at most +# 3GB of RAM or so on 64-bit hosts and 2.5GB on 32-bit hosts +# on the largest *.debug files (in mid 2012 those are +# libreoffice-debuginfo, debuginfos containing +# libxul.so.debug and libwebkitgtk-*.so.*.debug). +# This needs to be tuned based on the amount of available RAM +# on build boxes for each architecture as well as virtual address +# space limitations if dwz is 32-bit program. While it needs less +# memory than 64-bit program because pointers are smaller, it can +# never have more than 4GB-epsilon of RAM and on some architecture +# even less than that (e.g. 2GB). + +# Number of debugging information entries (DIEs) above which +# dwz will stop considering file for multifile optimizations +# and enter a low memory mode, in which it will optimize +# in about half the memory needed otherwise. +%_dwz_low_mem_die_limit 10000000 +# Number of DIEs above which dwz will stop processing +# a file altogether. +%_dwz_max_die_limit 50000000 + +# On x86_64 increase the higher limit to make libwebkit* optimizable. +# libwebkit* in mid 2012 contains roughly 87mil DIEs, and 64-bit +# dwz is able to optimize it from ~1.1GB to ~410MB using 5.2GB of RAM. +%_dwz_max_die_limit_x86_64 110000000 + +# On ARM, build boxes often have only 512MB of RAM and are very slow. +# Lower both the limits. +%_dwz_low_mem_die_limit_armv5tel 4000000 +%_dwz_low_mem_die_limit_armv7hl 4000000 +%_dwz_max_die_limit_armv5tel 10000000 +%_dwz_max_die_limit_armv7hl 10000000 + +%_dwz_limit() %{expand:%%{?%{1}_%{_arch}}%%{!?%{1}_%{_arch}:%%%{1}}} +%_find_debuginfo_dwz_opts --run-dwz\\\ + --dwz-low-mem-die-limit %{_dwz_limit _dwz_low_mem_die_limit}\\\ + --dwz-max-die-limit %{_dwz_limit _dwz_max_die_limit} diff --git a/SOURCES/macros.fedora-misc b/SOURCES/macros.fedora-misc new file mode 100644 index 0000000..82286f3 --- /dev/null +++ b/SOURCES/macros.fedora-misc @@ -0,0 +1,63 @@ +# Fedora macros, safe to use after the SRPM build stage + +# Lists files matching inclusion globs, excluding files matching exclusion +# globs +# – globs are space-separated lists of shell globs. Such lists require +# %{quote:} use when passed as rpm arguments or flags. +# Control variables, flags and arguments: +# %{listfiles_include} inclusion globs +# %{listfiles_exclude} exclusion globs +# -i inclusion globs +# -x exclusion globs +# … arguments passed to the macro without flags will be +# interpreted as inclusion globs +%listfiles(i:x:) %{expand: +%if %{lua: print(string.len(rpm.expand("%{?-i*}%{?listfiles_include}%*")))} + listfiles_include=$(realpath -e --relative-base=. %{?-i*} %{?listfiles_include} %* | sort -u) + %if %{lua: print(string.len(rpm.expand("%{?-x*}%{?listfiles_exclude}")))} + while IFS= read -r finc ; do + realpath -qe --relative-base=. %{?-x*} %{?listfiles_exclude} \\ + | sort -u | grep -q "${finc}" || echo "${finc}" + done <<< "${listfiles_include}" + %else + echo "${listfiles_include}" + %endif +%endif +} + +# https://github.com/rpm-software-management/rpm/issues/581 +# Writes the contents of a list of rpm variables to a macro file +# Control variables, flags and arguments: +# -f the macro file to process: +# – it must contain corresponding anchors +# – for example %writevars -f myfile foo bar will replace: +# @@FOO@@ with the rpm evaluation of %{foo} and +# @@BAR@@ with the rpm evaluation of %{bar} +# in myfile +%writevars(f:) %{lua: +local fedora = require "fedora.common" +local macrofile = rpm.expand("%{-f*}") +local rpmvars = {} +for i = 1, rpm.expand("%#") do + table.insert(rpmvars, rpm.expand("%" .. i)) +end +fedora.writevars(macrofile,rpmvars) +} + +# gpgverify verifies signed sources. There is documentation in the script. +%gpgverify(k:s:d:) %{lua: +local script = rpm.expand("%{_rpmconfigdir}/redhat/gpgverify ") +local keyring = rpm.expand("%{-k*}") +local signature = rpm.expand("%{-s*}") +local data = rpm.expand("%{-d*}") +print(script) +if keyring ~= "" then + print(rpm.expand("--keyring='%{SOURCE" .. keyring .. "}' ")) +end +if signature ~= "" then + print(rpm.expand("--signature='%{SOURCE" .. signature .. "}' ")) +end +if data ~= "" then + print(rpm.expand("--data='%{SOURCE" .. data .. "}' ")) +end +} diff --git a/SOURCES/macros.fedora-misc-srpm b/SOURCES/macros.fedora-misc-srpm new file mode 100644 index 0000000..f3ac0ce --- /dev/null +++ b/SOURCES/macros.fedora-misc-srpm @@ -0,0 +1,43 @@ +# Fedora macros, safe to use at SRPM build stage + +# A directory for rpm macros +%rpmmacrodir /usr/lib/rpm/macros.d + +# A directory for appdata metainfo. This has changed between releases so a +# macro is useful. +%_metainfodir %{_datadir}/metainfo + +# A directory for SWID tag files describing the installation +%_swidtagdir %{_prefix}/lib/swidtag/fedoraproject.org + +# Applies the fedora.wordwrap filter to the content of an rpm variable, and +# prints the result. +# – putting multiple lines of UTF-8 text inside a variable is usually +# accomplished with %{expand:some_text} +# Control variables, flags and arguments: +# -v (default value: _description) +%wordwrap(v:) %{lua: +local fedora = require "fedora.common" +local variable = "%{?" .. rpm.expand("%{-v*}%{!-v:_description}") .. "}" +print(fedora.wordwrap(variable)) +} + +# A single Name: and %package substitute +# Control variables, flags and arguments: +# %{source_name} the SRPM name +# %{source_summary} the SRPM summary +# %{source_description} the SRPM description +# -n declare a package named +# (%package-like behavior) +# -v be verbose +# %1 declare a package named %{source_name}-%{%1} +# (%package-like behavior) +%new_package(n:v) %{lua: +local fedora = require "fedora.common" +local pkg_name = fedora.readflag("n") +local verbose = fedora.hasflag("v") +local name_suffix = fedora.read("1") +local source_name = fedora.read("source_name") +local first = not ( fedora.read("name") or fedora.read("currentname") ) +fedora.new_package(source_name, pkg_name, name_suffix, first, verbose) +} diff --git a/SOURCES/macros.forge b/SOURCES/macros.forge new file mode 100644 index 0000000..efd7327 --- /dev/null +++ b/SOURCES/macros.forge @@ -0,0 +1,70 @@ +# Computes forge-related variables for use in the rest of the spec file +# Control variables, flags and arguments: +# %{forgeurl} the project url on the target forge +# %{tag} the packaged tag, OR +# %{commit} the packaged commit, OR +# %{version} the packaged version +# – %{version}/%{version0} are set via: +# Version: +# – because git is lacking a built-in version +# reference, %{version} will be translated +# into %{tag} using unreliable heuristics; +# set %{tag} directly if those fail +# %{date} the packaged timestamp +# … %forgemeta will compute a huge number of variables: +# — the packager can override it by setting some of +# those before the %forgemeta call +# – use the -i flag to list those variables +# -z only process the zth block of definitions +# "" for the no-suffix block +# -i list the resulting variable values +# -s silently ignore problems in %{forgeurl} +# -v be verbose +# -a process all sources in one go, instead of using +# separate -z calls +%forgemeta(z:isva) %{lua: +local fedora = require "fedora.common" +local forge = require "fedora.srpm.forge" +local verbose = rpm.expand("%{-v}") ~= "" +local informative = rpm.expand("%{-i}") ~= "" +local silent = rpm.expand("%{-s}") ~= "" +local processall = (rpm.expand("%{-a}") ~= "") and (rpm.expand("%{-z}") == "") +if processall then + for _,s in pairs(fedora.getsuffixes("forgeurl")) do + forge.meta(s,verbose,informative,silent) + end +else + forge.meta(rpm.expand("%{-z*}"),verbose,informative,silent) +end +} + +# Unpacks sources computed by %forgemeta +# Control variables, flags and arguments: +# %{forgesource} the source archive that will be processed +# %{forgesetupargs} %setup arguments + +# -z only process the zth block of definitions +# "" for the no-suffix block +# -v be verbose +# -a process all sources in one go, instead of using +# separate -z calls +%forgesetup(z:va) %{lua: +local fedora = require "fedora.common" +if (rpm.expand("%{-z}") == "") and (rpm.expand("%{-a}") ~= "") then + for _,s in pairs(fedora.getsuffixes("forgesetupargs")) do + print(rpm.expand("%setup %{!-v:-q} %{?forgesetupargs" .. s .. "}\\n")) + end +else + print( rpm.expand("%setup %{!-v:-q} %{?forgesetupargs" .. rpm.expand("%{-z*}") .. "}\\n")) +end +} + +# Calls %autosetup using %forgemeta results +# – this will probably be removed since it is unsafe in presence of multiple +# sources +# Control variables, flags and arguments: +# -z process the zth block of definitions +# -v -N -S -p relayed to %autosetup +%forgeautosetup(z:vNS:p:q) %{lua: +print(rpm.expand("%autosetup %{-v} %{-N} %{?-S} %{?-p} %{?forgesetupargs" .. rpm.expand("%{-z*}") .. "}\\n")) +} diff --git a/SOURCES/macros.ldc-srpm b/SOURCES/macros.ldc-srpm new file mode 100644 index 0000000..571d3f1 --- /dev/null +++ b/SOURCES/macros.ldc-srpm @@ -0,0 +1,2 @@ +# arches that ldc builds on +%ldc_arches %{ix86} x86_64 %{arm} aarch64 diff --git a/SOURCES/macros.ldconfig b/SOURCES/macros.ldconfig new file mode 100644 index 0000000..2e491db --- /dev/null +++ b/SOURCES/macros.ldconfig @@ -0,0 +1,9 @@ +#%ldconfig /sbin/ldconfig +%ldconfig_post(n:) %{?ldconfig:%post -p %ldconfig %{?*} %{-n:-n %{-n*}}\ +%end} +%ldconfig_postun(n:) %{?ldconfig:%postun -p %ldconfig %{?*} %{-n:-n %{-n*}}\ +%end} +%ldconfig_scriptlets(n:) %{?ldconfig:\ +%ldconfig_post %{?*} %{-n:-n %{-n*}}\ +%ldconfig_postun %{?*} %{-n:-n %{-n*}}\ +} diff --git a/SOURCES/macros.mono-srpm b/SOURCES/macros.mono-srpm new file mode 100644 index 0000000..c5862c8 --- /dev/null +++ b/SOURCES/macros.mono-srpm @@ -0,0 +1,5 @@ +# arches that mono builds on +%mono_arches %{ix86} x86_64 sparc sparcv9 ia64 %{arm} aarch64 alpha s390x ppc ppc64 ppc64le + +%_monodir %{_prefix}/lib/mono +%_monogacdir %{_monodir}/gac diff --git a/SOURCES/macros.nodejs-srpm b/SOURCES/macros.nodejs-srpm new file mode 100644 index 0000000..faf03a7 --- /dev/null +++ b/SOURCES/macros.nodejs-srpm @@ -0,0 +1,7 @@ +# nodejs_arches lists what arches Node.js and dependent packages run on. +# +# Enabling Node.js on other arches requires porting the V8 JavaScript JIT to +# those arches. Support for POWER and aarch64 arrived in nodejs v4. Support +# for s390x arrived in nodejs v6 + +%nodejs_arches %{ix86} x86_64 %{arm} aarch64 %{power64} s390x diff --git a/SOURCES/macros.valgrind-srpm b/SOURCES/macros.valgrind-srpm new file mode 100644 index 0000000..894afe4 --- /dev/null +++ b/SOURCES/macros.valgrind-srpm @@ -0,0 +1,3 @@ +# valgrind_arches lists what arches Valgrind works on + +%valgrind_arches %{ix86} x86_64 ppc ppc64 ppc64le s390x armv7hl aarch64 diff --git a/SOURCES/macros.vpath b/SOURCES/macros.vpath new file mode 100644 index 0000000..93723a2 --- /dev/null +++ b/SOURCES/macros.vpath @@ -0,0 +1,7 @@ +# ---- VPATH default settings + +# directory where CMakeLists.txt/meson.build/etc. are placed +%_vpath_srcdir . + +# directory (doesn't need to exist) where all generated build files will be placed +%_vpath_builddir %{_vendor}-%{_target_os}-build diff --git a/SOURCES/redhat-annobin-cc1 b/SOURCES/redhat-annobin-cc1 new file mode 100644 index 0000000..edb8245 --- /dev/null +++ b/SOURCES/redhat-annobin-cc1 @@ -0,0 +1,2 @@ +*cc1_options: ++ %{!-fno-use-annobin:%{!iplugindir*:%:find-plugindir()} -fplugin=annobin} diff --git a/SOURCES/redhat-annobin-plugin-select.sh b/SOURCES/redhat-annobin-plugin-select.sh new file mode 100644 index 0000000..cc789b8 --- /dev/null +++ b/SOURCES/redhat-annobin-plugin-select.sh @@ -0,0 +1,199 @@ +#!/usr/bin/sh +# This is a script to select which GCC spec file fragment +# should be the destination of the redhat-annobin-cc1 symlink. + +# Author: Nick Clifton +# Copyright (c) 2021-2022 Red Hat. +# +# This is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published +# by the Free Software Foundation; either version 2, or (at your +# option) any later version. + +# It is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# Usage: +# redhat-annobin-plugin-select [script-dir] +# +# If script-dir is not provided then /usr/lib/rpm/redhat is used +# as the location where all of the annobin plugin selection files +# can be found. + +if test "x$1" = "x" ; +then + rrcdir=/usr/lib/rpm/redhat +else + rrcdir=$1 +fi + +# Set this variable to non-zero to enable the generation of debugging +# messages. +debug=0 + +# Decide which version of the annobin plugin for gcc should be used. +# There are two possible versions, one created by the annobin package and one +# created by the gcc package. The logic selects the gcc version unless both +# have been built by the same version of the compiler. In that case the +# annobin version is selected instead. +# +# The point of all this is that the annobin plugin is very sensitive to +# mismatches with the version of gcc that built it. If the plugin is built +# by version A of gcc, but then run on version B of gcc, it is possible for +# the plugin to misbehave, which then causes problems if gating tests examine +# the plugin's output. (This has happened more than once in RHEL...). +# +# So the plugin is built both by gcc and by the annobin package. This means +# that whenever gcc is updated a fresh plugin is built, and the logic below +# will select that version. But in order to allow annobin development to +# proceed independtently of gcc, the annobin package can also update its +# version of the plugin, and the logic will select this new version. + +# This is where the annobin package stores the information on the version +# of gcc that built the annobin plugin. +aver=`gcc --print-file-name=plugin`/annobin-plugin-version-info + +# This is where the gcc package stores its version information. +gver=`gcc --print-file-name=rpmver` + +aplugin=`gcc --print-file-name=plugin`/annobin.so.0.0.0 +gplugin=`gcc --print-file-name=plugin`/gcc-annobin.so.0.0.0 + +# This is the file that needs to be updated when either of those version +# files changes. +rac1=redhat-annobin-cc1 + +# This is the GCC spec file fragment that selects the gcc-built version of +# the annobin plugin +select_gcc=redhat-annobin-select-gcc-built-plugin + +# This is the GCC spec file fragment that selects the annobin-built version +# of the annobin plugin +select_annobin=redhat-annobin-select-annobin-built-plugin + +install_annobin_version=0 +install_gcc_version=0 + +if [ -f $aplugin ] +then + if [ -f $gplugin ] + then + if [ $debug -eq 1 ] + then + echo " redhat-rpm-config: Both plugins exist, checking version information" + fi + + if [ -f $gver ] + then + if [ -f $aver ] + then + if [ $debug -eq 1 ] + then + echo " redhat-rpm-config: Both plugin version files exist - comparing..." + fi + + # Get the first line from the version info files. This is just in + # vase there are extra lines in the files. + avers=`head --lines=1 $aver` + gvers=`head --lines=1 $gver` + + if [ $debug -eq 1 ] + then + echo " redhat-rpm-config: Annobin plugin built by gcc $avers" + echo " redhat-rpm-config: GCC plugin built by gcc $gvers" + fi + + # If both plugins were built by the same version of gcc then select + # the one from the annobin package (in case it is built from newer + # sources). If the plugin builder versions differ, select the gcc + # built version instead. This assumes that the gcc built version + # always matches the installed gcc, which should be true. + if [ $avers = $gvers ] + then + if [ $debug -eq 1 ] + then + echo " redhat-rpm-config: Both plugins built by the same compiler - using annobin-built plugin" + fi + install_annobin_version=1 + else + if [ $debug -eq 1 ] + then + echo " redhat-rpm-config: Versions differ - using gcc-built plugin" + fi + install_gcc_version=1 + fi + else + if [ $debug -eq 1 ] + then + echo " redhat-rpm-config: Annobin version file does not exist, using gcc-built plugin" + fi + install_gcc_version=1 + fi + else + if [ -f $aver ] + then + # FIXME: This is suspicious. If the installed GCC does not supports plugins + # then enabling the annobin plugin will not work. + if [ $debug -eq 1 ] + then + echo " redhat-rpm-config: GCC plugin version file does not exist, using annobin-built plugin" + fi + install_annobin_version=1 + else + if [ $debug -eq 1 ] + then + echo " redhat-rpm-config: Neither version file exists - playing safe and using gcc-built plugin" + echo " redhat-rpm-config: Note: expected to find $aver and/or $gver" + fi + install_gcc_version=1 + fi + fi + else + if [ $debug -eq 1 ] + then + echo " redhat-rpm-config: Only the annobin plugin exists - using that" + fi + install_annobin_version=1 + fi +else + if [ -f $gplugin ] + then + if [ $debug -eq 1 ] + then + echo " redhat-rpm-config: Only the gcc plugin exists - using that" + fi + else + if [ $debug -eq 1 ] + then + echo " redhat-rpm-config: Neither plugin exists - playing safe and using gcc-built plugin" + echo " redhat-rpm-config: Note: expected to find $aplugin and/or $gplugin" + fi + fi + install_gcc_version=1 +fi + +if [ $install_annobin_version -eq 1 ] +then + if [ $debug -eq 1 ] + then + echo " redhat-rpm-config: Installing annobin version of $rac1" + fi + pushd $rrcdir > /dev/null + rm -f $rac1 + ln -s $select_annobin "$rac1" + popd > /dev/null + +else if [ $install_gcc_version -eq 1 ] + then + if [ $debug -eq 1 ] + then + echo " redhat-rpm-config: Installing gcc version of $rac1" + fi + pushd $rrcdir > /dev/null + rm -f $rac1 + ln -s $select_gcc $rac1 + popd > /dev/null + fi +fi diff --git a/SOURCES/redhat-annobin-select-annobin-built-plugin b/SOURCES/redhat-annobin-select-annobin-built-plugin new file mode 100644 index 0000000..edb8245 --- /dev/null +++ b/SOURCES/redhat-annobin-select-annobin-built-plugin @@ -0,0 +1,2 @@ +*cc1_options: ++ %{!-fno-use-annobin:%{!iplugindir*:%:find-plugindir()} -fplugin=annobin} diff --git a/SOURCES/redhat-annobin-select-gcc-built-plugin b/SOURCES/redhat-annobin-select-gcc-built-plugin new file mode 100644 index 0000000..af5106b --- /dev/null +++ b/SOURCES/redhat-annobin-select-gcc-built-plugin @@ -0,0 +1,2 @@ +*cc1_options: ++ %{!-fno-use-annobin:%{!iplugindir*:%:find-plugindir()} -fplugin=gcc-annobin} diff --git a/SOURCES/redhat-hardened-cc1 b/SOURCES/redhat-hardened-cc1 new file mode 100644 index 0000000..fc54bcb --- /dev/null +++ b/SOURCES/redhat-hardened-cc1 @@ -0,0 +1,2 @@ +*cc1_options: ++ %{!r:%{!fpie:%{!fPIE:%{!fpic:%{!fPIC:%{!fno-pic:-fPIE}}}}}} diff --git a/SOURCES/redhat-hardened-clang.cfg b/SOURCES/redhat-hardened-clang.cfg new file mode 100644 index 0000000..b570eb5 --- /dev/null +++ b/SOURCES/redhat-hardened-clang.cfg @@ -0,0 +1 @@ +-fPIE diff --git a/SOURCES/redhat-hardened-ld b/SOURCES/redhat-hardened-ld new file mode 100644 index 0000000..bd6b907 --- /dev/null +++ b/SOURCES/redhat-hardened-ld @@ -0,0 +1,2 @@ +*self_spec: ++ %{!static:%{!shared:%{!r:-pie}}} diff --git a/SOURCES/rpmrc b/SOURCES/rpmrc new file mode 100644 index 0000000..337a86f --- /dev/null +++ b/SOURCES/rpmrc @@ -0,0 +1,97 @@ +include: /usr/lib/rpm/rpmrc + +optflags: i386 %{__global_compiler_flags} -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection +optflags: i486 %{__global_compiler_flags} -m32 -march=i486 -fasynchronous-unwind-tables -fstack-clash-protection +optflags: i586 %{__global_compiler_flags} -m32 -march=i586 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection +optflags: i686 %{__global_compiler_flags} -m32 -march=i686 -mtune=generic -msse2 -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection +optflags: athlon %{__global_compiler_flags} -m32 -march=athlon -fasynchronous-unwind-tables -fstack-clash-protection +optflags: ia64 %{__global_compiler_flags} +optflags: x86_64 %{__global_compiler_flags} -m64 %{__cflags_arch_x86_64} -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection + +optflags: alpha %{__global_compiler_flags} -mieee +optflags: alphaev5 %{__global_compiler_flags} -mieee -mcpu=ev5 +optflags: alphaev56 %{__global_compiler_flags} -mieee -mcpu=ev56 +optflags: alphapca56 %{__global_compiler_flags} -mieee -mcpu=pca56 +optflags: alphaev6 %{__global_compiler_flags} -mieee -mcpu=ev6 +optflags: alphaev67 %{__global_compiler_flags} -mieee -mcpu=ev67 + +optflags: sparc %{__global_compiler_flags} -m32 -mcpu=v7 -mtune=ultrasparc +optflags: sparcv8 %{__global_compiler_flags} -m32 -mcpu=v8 +optflags: sparcv9 %{__global_compiler_flags} -m32 -mcpu=ultrasparc +optflags: sparcv9v %{__global_compiler_flags} -m32 -mcpu=niagara +optflags: sparc64 %{__global_compiler_flags} -m64 -mcpu=ultrasparc +optflags: sparc64v %{__global_compiler_flags} -m64 -mcpu=niagara + +optflags: m68k %{__global_compiler_flags} + +optflags: ppc %{__global_compiler_flags} -m32 -fasynchronous-unwind-tables +optflags: ppciseries %{__global_compiler_flags} -m32 +optflags: ppcpseries %{__global_compiler_flags} -m32 +optflags: ppc64 %{__global_compiler_flags} -m64 -fasynchronous-unwind-tables -fstack-clash-protection +optflags: ppc64p7 %{__global_compiler_flags} -m64 -O3 -mcpu=power7 -mtune=power7 -fasynchronous-unwind-tables -fstack-clash-protection +optflags: ppc64le %{__global_compiler_flags} -m64 %{__cflags_arch_ppc64le} -fasynchronous-unwind-tables -fstack-clash-protection +optflags: ppc64iseries %{__global_compiler_flags} -m64 +optflags: ppc64pseries %{__global_compiler_flags} -m64 +optflags: ppc8260 %{__global_compiler_flags} -m32 +optflags: ppc8560 %{__global_compiler_flags} -m32 + +optflags: parisc %{__global_compiler_flags} -mpa-risc-1-0 +optflags: hppa1.0 %{__global_compiler_flags} -mpa-risc-1-0 +optflags: hppa1.1 %{__global_compiler_flags} -mpa-risc-1-0 +optflags: hppa1.2 %{__global_compiler_flags} -mpa-risc-1-0 +optflags: hppa2.0 %{__global_compiler_flags} -mpa-risc-1-0 + +optflags: mips %{__global_compiler_flags} -march=mips32r2 -mfpxx +optflags: mipsel %{__global_compiler_flags} -march=mips32r2 -mfpxx +optflags: mips64 %{__global_compiler_flags} -march=mips64r2 -mabi=64 +optflags: mips64el %{__global_compiler_flags} -march=mips64r2 -mabi=64 +optflags: mipsr6 %{__global_compiler_flags} -march=mips32r6 +optflags: mipsr6el %{__global_compiler_flags} -march=mips32r6 +optflags: mips64r6 %{__global_compiler_flags} -march=mips64r6 +optflags: mips64r6el %{__global_compiler_flags} -march=mips64r6 + +optflags: armv3l %{__global_compiler_flags} -fsigned-char -march=armv3 +optflags: armv4b %{__global_compiler_flags} -fsigned-char -march=armv4 +optflags: armv4l %{__global_compiler_flags} -fsigned-char -march=armv4 +optflags: armv4tl %{__global_compiler_flags} -march=armv4t +optflags: armv5tel %{__global_compiler_flags} -march=armv5te -mfloat-abi=soft +optflags: armv5tejl %{__global_compiler_flags} -march=armv5te -mfloat-abi=soft +optflags: armv6l %{__global_compiler_flags} -march=armv6 -mfloat-abi=soft +optflags: armv6hl %{__global_compiler_flags} -march=armv6 -mfpu=vfp -mfloat-abi=hard +optflags: armv6hnl %{__global_compiler_flags} -march=armv6 -mfpu=neon -mfloat-abi=hard +optflags: armv7l %{__global_compiler_flags} -march=armv7-a -mfloat-abi=soft +optflags: armv7hl %{__global_compiler_flags} -march=armv7-a -mfpu=vfpv3-d16 -mtune=generic-armv7-a -mabi=aapcs-linux -mfloat-abi=hard +optflags: armv7hnl %{__global_compiler_flags} -march=armv7-a -mfpu=neon -mfloat-abi=hard + +optflags: atarist %{__global_compiler_flags} +optflags: atariste %{__global_compiler_flags} +optflags: ataritt %{__global_compiler_flags} +optflags: falcon %{__global_compiler_flags} +optflags: atariclone %{__global_compiler_flags} +optflags: milan %{__global_compiler_flags} +optflags: hades %{__global_compiler_flags} + +optflags: s390 %{__global_compiler_flags} -m31 %{__cflags_arch_s390x} -fasynchronous-unwind-tables +optflags: s390x %{__global_compiler_flags} -m64 %{__cflags_arch_s390x} -fasynchronous-unwind-tables -fstack-clash-protection + +optflags: aarch64 %{__global_compiler_flags} -fasynchronous-unwind-tables %[ "%{toolchain}" == "gcc" ? "-fstack-clash-protection" : "" ] + +optflags: riscv64 %{__global_compiler_flags} -fasynchronous-unwind-tables %[ "%{toolchain}" == "gcc" ? "-fstack-clash-protection" : "" ] + +# set build arch to fedora buildarches on hardware capable of running it +# saves having to do rpmbuild --target= +buildarchtranslate: athlon: i686 +buildarchtranslate: geode: i686 +buildarchtranslate: pentium4: i686 +buildarchtranslate: pentium3: i686 +buildarchtranslate: i686: i686 +buildarchtranslate: i586: i586 + +buildarchtranslate: sparcv9: sparcv9 +buildarchtranslate: sparcv9v: sparcv9 + +buildarchtranslate: armv5tejl: armv5tel +buildarchtranslate: armv6l: armv5tel +buildarchtranslate: armv7l: armv5tel +buildarchtranslate: armv7hl: armv7hl +buildarchtranslate: armv7hnl: armv7hl diff --git a/SPECS/redhat-rpm-config.spec b/SPECS/redhat-rpm-config.spec new file mode 100644 index 0000000..17b951d --- /dev/null +++ b/SPECS/redhat-rpm-config.spec @@ -0,0 +1,1354 @@ +# TO WHOM IT MAY CONCERN +# +# 1) Don't add patches, dist-git is the upstream repository for this package. +# 2) When making changes, update version by +1, leave release alone. +# + +Summary: Red Hat specific rpm configuration files +Name: redhat-rpm-config +Version: 194 +Release: 1%{?dist} +# No version specified. +License: GPL+ +URL: https://src.fedoraproject.org/rpms/redhat-rpm-config + +# Core rpm settings +Source0: macros +Source1: rpmrc + +# gcc specs files for hardened builds +Source50: redhat-hardened-cc1 +Source51: redhat-hardened-ld +Source52: redhat-hardened-clang.cfg + +# gcc specs files for annobin builds +Source60: redhat-annobin-cc1 +Source61: redhat-annobin-select-gcc-built-plugin +Source62: redhat-annobin-select-annobin-built-plugin +Source63: redhat-annobin-plugin-select.sh + +# The macros defined by these files are for things that need to be defined +# at srpm creation time when it is not feasible to require the base packages +# that would otherwise be providing the macros. other language/arch specific +# macros should not be defined here but instead in the base packages that can +# be pulled in at rpm build time, this is specific for srpm creation. +Source100: macros.fedora-misc-srpm +Source102: macros.mono-srpm +Source103: macros.nodejs-srpm +Source104: macros.ldc-srpm +Source105: macros.valgrind-srpm + +# Other misc macros +Source150: macros.dwz +Source152: macros.vpath +Source153: macros.forge +Source154: macros.ldconfig +Source155: macros.fedora-misc + +# Build policy scripts +# this comes from https://github.com/rpm-software-management/rpm/pull/344 +# added a python -> python2 conversion for fedora with warning +# and an echo when the mangling happens +Source201: brp-mangle-shebangs + +# this comes from rpm itself +# however, now we can do Fedora changes within +Source202: brp-python-bytecompile + +# for fixing pyc files reproducibility with marshalparser +# https://github.com/fedora-python/marshalparser +Source203: brp-fix-pyc-reproducibility + +# Dependency generator scripts (deprecated) +Source300: find-provides +Source304: find-requires + +# Misc helper scripts +Source400: dist.sh +Source404: gpgverify + +# 2016-10-02 snapshots from http://git.savannah.gnu.org/gitweb/?p=config.git +Source500: config.guess +Source501: config.sub + +# Dependency generators & their rules +Source602: libsymlink.attr + +# BRPs +Source700: brp-ldconfig +Source701: brp-strip-lto + +# Convenience lua functions +Source800: common.lua +Source801: forge.lua + +# Documentation +Source900: buildflags.md + +BuildArch: noarch +BuildRequires: perl-generators +Requires: coreutils + +Requires: efi-srpm-macros +Requires: fonts-srpm-macros +Requires: ghc-srpm-macros +Requires: go-srpm-macros +# ↓ Provides kmod.attr originally shipped by us +Requires: kernel-srpm-macros >= 1.0-6 +Requires: lua-srpm-macros +Requires: ocaml-srpm-macros +Requires: openblas-srpm-macros +Requires: perl-srpm-macros +# ↓ Provides compileall2 Python module +Requires: python-srpm-macros >= 3-46 +Requires: qt5-srpm-macros +Requires: rust-srpm-macros + +%if ! 0%{?rhel} +Requires: fpc-srpm-macros +Requires: gnat-srpm-macros +Requires: nim-srpm-macros +%endif + +Requires: rpm >= 4.11.0 +Requires: dwz >= 0.4 +Requires: zip +Requires: (annobin if (gcc or clang)) +Requires: (gcc-plugin-annobin if gcc) + +# for brp-mangle-shebangs +Requires: %{_bindir}/find +Requires: %{_bindir}/file +Requires: %{_bindir}/grep +Requires: %{_bindir}/sed +Requires: %{_bindir}/xargs + +# -fstack-clash-protection and -fcf-protection require GCC 8. +Conflicts: gcc < 8.0.1-0.22 + +Provides: system-rpm-config = %{version}-%{release} + +%global rrcdir /usr/lib/rpm/redhat + +%description +Red Hat specific rpm configuration files. + +%prep +# Not strictly necessary but allows working on file names instead +# of source numbers in install section +%setup -c -T +cp -p %{sources} . + +%install +mkdir -p %{buildroot}%{rrcdir} +install -p -m 644 -t %{buildroot}%{rrcdir} macros rpmrc +install -p -m 444 -t %{buildroot}%{rrcdir} redhat-hardened-* +install -p -m 444 -t %{buildroot}%{rrcdir} redhat-annobin-* +install -p -m 755 -t %{buildroot}%{rrcdir} config.* +install -p -m 755 -t %{buildroot}%{rrcdir} dist.sh +install -p -m 755 -t %{buildroot}%{rrcdir} gpgverify +install -p -m 755 -t %{buildroot}%{rrcdir} brp-* + +install -p -m 755 -t %{buildroot}%{rrcdir} find-* +mkdir -p %{buildroot}%{rrcdir}/find-provides.d + +install -p -m 755 -t %{buildroot}%{rrcdir} brp-* + +mkdir -p %{buildroot}%{_rpmconfigdir}/macros.d +install -p -m 644 -t %{buildroot}%{_rpmconfigdir}/macros.d macros.* + +mkdir -p %{buildroot}%{_fileattrsdir} +install -p -m 644 -t %{buildroot}%{_fileattrsdir} *.attr + +mkdir -p %{buildroot}%{_rpmluadir}/fedora/{rpm,srpm} +install -p -m 644 -t %{buildroot}%{_rpmluadir}/fedora common.lua +install -p -m 644 -t %{buildroot}%{_rpmluadir}/fedora/srpm forge.lua + +# This trigger is used to decide which version of the annobin plugin for gcc +# should be used. See comments in the script for full details. + +%triggerin -- annobin gcc-plugin-annobin +%{rrcdir}/redhat-annobin-plugin-select.sh +%end + +# We also trigger when annobin is uninstalled. This allows us to switch +# over to the gcc generated version of the plugin. It does not matter if +# gcc is uninstalled, since if that happens the plugin cannot be used. + +%triggerpostun -- annobin +%{rrcdir}/redhat-annobin-plugin-select.sh +%end + +%files +%dir %{rrcdir} +%{rrcdir}/macros +%{rrcdir}/rpmrc +%{rrcdir}/brp-* +%{rrcdir}/dist.sh +%{rrcdir}/gpgverify +%{rrcdir}/redhat-hardened-* +%{rrcdir}/redhat-annobin-* +%{rrcdir}/config.* +%{rrcdir}/find-provides +%{rrcdir}/find-requires +%{rrcdir}/brp-ldconfig +%{_fileattrsdir}/*.attr +%{_rpmconfigdir}/macros.d/macros.*-srpm +%{_rpmconfigdir}/macros.d/macros.dwz +%{_rpmconfigdir}/macros.d/macros.forge +%{_rpmconfigdir}/macros.d/macros.ldconfig +%{_rpmconfigdir}/macros.d/macros.vpath +%{_rpmconfigdir}/macros.d/macros.fedora-misc +%dir %{_rpmluadir}/fedora +%dir %{_rpmluadir}/fedora/srpm +%dir %{_rpmluadir}/fedora/rpm +%{_rpmluadir}/fedora/*.lua +%{_rpmluadir}/fedora/srpm/*lua + +%attr(0755,-,-) %{rrcdir}/redhat-annobin-plugin-select.sh +%verify(owner group mode) %{rrcdir}/redhat-annobin-cc1 +%{rrcdir}/redhat-annobin-select-gcc-built-plugin +%{rrcdir}/redhat-annobin-select-annobin-built-plugin + +%doc buildflags.md + +%changelog +* Thu Feb 17 2022 Nick Clifton - 194-1 +- Use the correct package names for the triggers. +- Resolves: rhbz#2030671 + +* Tue Feb 15 2022 Nick Clifton - 193-1 +- Fix bugs in plugin selection script. +- Resolves: rhbz#2030671 + +* Tue Feb 01 2022 Nick Clifton - 192-1 +- Select between gcc-built and annobin-built versions of the annobin plugin. +- Resolves: rhbz#2030671 + +* Wed Dec 08 2021 Miro Hrončok - 191-1 +- brp-mangle-shebangs: also mangle shebangs of JavaScript executables +- Resolves: rhbz#2030427 + +* Thu Dec 02 2021 Neal Gompa - 190-1 +- Make vpath builddir not include arch-specific info + Resolves: rhbz#1984679 + +* Tue Nov 16 2021 Florian Weimer - 189-1 +- buildflags.md: Documentation updates (#2005080) + +* Tue Aug 24 2021 Florian Weimer - 188-1 +- redhat-rpm-config: Enable x86-64-v2 baseline for Clang/LLVM (#1890170) + +* Tue Aug 10 2021 Mohan Boddu - 187-2 +- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags + Related: rhbz#1991688 + +* Fri Jul 30 2021 Florian Weimer - 187-1 +- Active GCC plugin during LTO linking (#1983727) + +* Thu Jul 22 2021 Florian Weimer - 186-1 +- aarch64: Do not build with -mbranch-protection=standard (#1984652) + +* Tue May 25 2021 Michal Domonkos - 185-3 +- Bump release for a rebuild in a sidetag + +* Wed May 12 2021 Michal Domonkos - 185-1 +- Drop kernel-rpm-macros subpackage & kmod.attr +- Resolves: #1959924 + +* Wed Apr 21 2021 Michal Domonkos - 184-1 +- Drop {fpc,gnat,nim}-srpm-macros dependencies on RHEL + +* Fri Apr 16 2021 Mohan Boddu - 183-2 +- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937 + +* Thu Apr 15 2021 Florian Weimer - 183-1 +- ppc64le: Update ISA baseline to POWER9 (#1876584) +- s390x: Update ISA baseline to z14 (#1876479) + +* Mon Mar 22 2021 Lumír Balhar - 182-1 +- Fix handling of files without newlines in brp-mangle-shebang + +* Wed Mar 10 2021 Kalev Lember - 181-1 +- BRP Python Bytecompile: Avoid hardcoding /usr/bin prefix for python + +* Tue Jan 19 2021 Florian Weimer - 180-1 +- Use -march=x86-64-v2 only for the gcc toolchain + +* Tue Jan 19 2021 Florian Weimer - 179-1 +- x86_64: Enable -march=x86-64-v2 for ELN, following GCC. + +* Sun Nov 29 2020 Miro Hrončok - 178-1 +- BRP Python Bytecompile: Also detect Python files in /app/lib/pythonX.Y + +* Tue Oct 27 2020 Tom Stellard - 177-1 +- Add back -fcf-protection flag for x86_64 + +* Tue Oct 20 2020 Florian Weimer - 176-1 +- s390x: Tune for z14 (as in Red Hat Enterprise Linux 8) + +* Mon Oct 5 2020 Florian Weimer - 175-1 +- s390x: Switch Fedora ELN to z13 baseline + +* Fri Sep 11 2020 Miro Hrončok - 172-1 +- Filter out LTO flags from %%extension flags macros +- Fixes: rhbz#1877652 + +* Wed Sep 2 2020 Michel Alexandre Salim - 171-1 +- Add Requires: lua-srpm-macros + +* Fri Aug 21 2020 Tom Stellard - 170-1 +- Enable -fstack-clash-protection for clang on x86, s390x, and ppc64le + +* Thu Aug 20 2020 Tom Stellard - 169-1 +- Add -flto to ldflags for clang toolchain + +* Thu Aug 20 2020 Neal Gompa - 168-1 +- Fix CC/CXX exports so arguments are included in exported variable +- Allow overrides of CC/CXX like CFLAGS and CXXFLAGS from shell variables + +* Mon Aug 03 2020 Troy Dawson - 167-1 +- Add Requires: kernel-srpm-macros + +* Thu Jul 30 2020 Jeff Law - 166-1 +- Use -flto=auto for GCC to speed up builds + +* Tue Jul 28 2020 Tom Stellard - 165-1 +- Only use supported lto flags for clang toolchain + +* Thu Jul 23 2020 Lumír Balhar - 164-1 +- Disable Python hash seed randomization in brp-python-bytecompile + +* Tue Jul 21 2020 Jeff Law - 163-1 +- Enable LTO by default + +* Thu Jul 16 2020 Lumír Balhar - 162-1 +- New script brp-fix-pyc-reproducibility + +* Tue Jun 16 2020 Lumír Balhar - 161-2 +- Use stdlib compileall for Python >= 3.9 + +* Mon Jun 15 2020 Lumír Balhar - 161-1 +- No more automagic Python bytecompilation (phase 3) + https://fedoraproject.org/wiki/Changes/No_more_automagic_Python_bytecompilation_phase_3 + +* Thu Jun 04 2020 Igor Raits - 160-1 +- Fix broken %%configure + +* Wed Jun 03 2020 Igor Raits - 159-1 +- Fixes for new_package macro + +* Wed Jun 03 2020 Igor Raits - 158-1 +- Add option to choose C/C++ toolchain + +* Sat May 30 2020 Jeff Law - 157-1 +- When LTO is enabled, fix broken configure files. + +* Sat May 30 2020 Nicolas Mailhot - 156-1 +- Add new_package macro and associated lua framework. + +* Sat May 23 2020 Nicolas Mailhot - 155-1 +- forge: add gitea support + +* Thu Apr 09 2020 Panu Matilainen - 154-1 +- Optimize kernel module provides by using a parametric generator + +* Thu Feb 20 2020 Jason L Tibbitts III - 153-1 +- Add dependency on fonts-srpm-macros, as those have now been approved by FPC. + +* Thu Feb 20 2020 Jeff Law - 152-1 +- Use eu-elfclassify to only run strip on ELF relocatables + and archive libraries. + +* Fri Feb 14 2020 Igor Raits - 151-1 +- Fixup parallel algorithm for brp-strip-lto + +* Fri Feb 14 2020 Jeff Law - 150-1 +- Strip LTO sections/symbols from installed .o/.a files + +* Thu Jan 23 2020 Jeff Law - 149-1 +- Allow conditionally adding -fcommon to CFLAGS by defining %%_legacy_common_support + +* Mon Jan 20 2020 Florian Weimer - 148-1 +- Reenable annobin after GCC 10 integration (#1792892) + +* Mon Jan 20 2020 Florian Weimer - 147-1 +- Temporarily disable annobin for GCC 10 (#1792892) + +* Thu Dec 05 2019 Denys Vlasenko - 146-1 +- kmod.prov: fix and speed it up + +* Tue Dec 03 15:48:18 CET 2019 Igor Gnatenko - 145-1 +- %%set_build_flags: define LT_SYS_LIBRARY_PATH + +* Thu Nov 21 2019 Denys Vlasenko - 144-1 +- Speed up brp-mangle-shebangs. + +* Tue Nov 05 2019 Lumír Balhar - 143-1 +- Fix brp-python-bytecompile with the new features from compileall2 +- Resolves: rhbz#1595265 + +* Fri Nov 01 2019 Miro Hrončok - 142-1 +- Fix the simple API of %%gpgverify. + +* Thu Aug 22 2019 Jason L Tibbitts III - 141-2 +- Simplify the API of %%gpgverify. + +* Thu Jul 25 2019 Richard W.M. Jones - 140-2 +- Bump version and rebuild. + +* Sat Jul 20 2019 Igor Gnatenko - 140-1 +- Fixup python-srpm-macros version + +* Wed Jul 17 2019 Lumír Balhar - 139-1 +- Use compileall2 Python module for byte-compilation in brp-python-bytecompile + +* Tue Jul 09 2019 Miro Hrončok - 138-1 +- Move brp-python-bytecompile from rpm, so we can easily adapt it + +* Mon Jul 08 2019 Nicolas Mailhot - 137-1 +- listfiles: make it robust against all kinds of “interesting” inputs +- wordwrap: make list indenting smarter, to produce something with enough + structure that it can be converted into AppStream metadata + +* Mon Jul 08 2019 Robert-André Mauchin - 136-1 +- Revert "Fix expansion in listfiles_exclude/listfiles_include" + +* Mon Jul 08 2019 Nicolas Mailhot - 135-1 +- Fix expansion in listfiles_exclude/listfiles_include + +* Mon Jul 01 2019 Florian Festi - 134-1 +- Switch binary payload compression to Zstandard level 19 + +* Thu Jun 27 2019 Vít Ondruch - 133-2 +- Enable RPM to set SOURCE_DATE_EPOCH environment variable. + +* Tue Jun 25 08:13:50 CEST 2019 Igor Gnatenko - 133-1 +- Expand listfiles_exclude/listfiles_include + +* Tue Jun 11 2019 Jitka Plesnikova - 132-1 +- Remove perl macro refugees + +* Mon Jun 10 2019 Panu Matilainen - 131-1 +- Provide temporary shelter for rpm 4.15 perl macro refugees + +* Tue Jun 04 2019 Igor Gnatenko - 130-1 +- New macro for wrapping text — %%wordwrap +- Smal fix for %%listfiles with no arguments + +* Thu May 30 2019 Björn Persson - 129-1 +- Added gpgverify. + +* Tue Jan 15 2019 Panu Matilainen - 128-1 +- Drop redundant _smp_mflag re-definition, use the one from rpm instead + +* Thu Dec 20 2018 Florian Weimer - 127-1 +- Build flags: Add support for extension builders (#1543394) + +* Mon Dec 17 2018 Panu Matilainen - 126-1 +- Silence the annoying warning from ldconfig brp-script (#1540971) + +* Thu Nov 15 2018 Miro Hrončok - 125-1 +- Make automagic Python bytecompilation optional + https://fedoraproject.org/wiki/Changes/No_more_automagic_Python_bytecompilation_phase_2 + +* Thu Nov 08 2018 Jason L Tibbitts III - 124-1 +- forge: add more distprefix cleaning (bz1646724) + +* Mon Oct 22 2018 Igor Gnatenko - 123-1 +- Add -q option to %%forgesetup + +* Sat Oct 20 2018 Igor Gnatenko - 122-1 +- Allow multiple calls to forge macros + +* Thu Oct 11 2018 Jan Pazdziora - 121-1 +- Add %_swidtagdir for directory for SWID tag files describing the + installation. + +* Mon Sep 10 2018 Miro Hrončok - 120-1 +- Make ambiguous python shebangs error + https://fedoraproject.org/wiki/Changes/Make_ambiguous_python_shebangs_error + +* Mon Aug 20 2018 Kalev Lember - 119-1 +- Add aarch64 to ldc arches + +* Wed Aug 15 2018 Igor Gnatenko - 118-1 +- Enable --as-needed by default + +* Mon Jul 16 2018 Miro Hrončok - 117-1 +- Mangle /bin shebnags to /usr/bin ones (#1581757) + +* Tue Jul 10 2018 Igor Gnatenko - 116-1 +- Add option to add -Wl,--as-needed into LDFLAGS + +* Mon Jul 09 2018 Kalev Lember - 115-1 +- Disable non-functional ppc64 support for ldc packages + +* Tue Jun 26 2018 Panu Matilainen - 114-1 +- Fix kernel ABI related strings (Peter Oros, #26) +- Automatically trim changelog to two years (Zbigniew Jędrzejewski-Szmek, #22) +- Cosmetics cleanups (Zbigniew Jędrzejewski-Szmek, #22) + +* Mon Jun 18 2018 Florian Weimer - 113-1 +- Build flags: Require SSE2 on i686 (#1592212) + +* Mon May 28 2018 Miro Hrončok - 112-1 +- Add a possibility to opt-out form automagic Python bytecompilation + https://fedoraproject.org/wiki/Changes/No_more_automagic_Python_bytecompilation + +* Wed May 02 2018 Peter Jones - 111-1 +- brp-mangle-shebangs: add %%{__brp_mangle_shebangs_exclude_file} and + %%{__brp_mangle_shebangs_exclude_from_file} to allow you to specify files + containing the shebangs to be ignore and files to be ignored regexps, + respectively, so that they can be generated during the package build. + +* Wed May 2 2018 Florian Weimer - 110-1 +- Reflect -fasynchronous-unwind-tables GCC default on POWER (#1550914) + +* Wed May 2 2018 Florian Weimer - 109-1 +- Use plain -fcf-protection compiler flag, without -mcet (#1570823) + +* Tue May 01 2018 Peter Jones - 108-1 +- Add Requires: efi-srpm-macros for %%{efi} + +* Fri Apr 20 2018 Jason L Tibbitts III - 107-1 +- Add %%_metainfodir macro. +- %%forgeautosetup tweak to fix patch application. + +* Mon Mar 05 2018 Jason L Tibbitts III - 106-1 +- Update forge macros. + +* Wed Feb 28 2018 Florian Weimer - 105-1 +- Make -fasynchronous-unwind-tables explicit on aarch64 (#1536431) + +* Wed Feb 28 2018 Florian Weimer - 104-1 +- Use -funwind-tables on POWER (#1536431, #1548847) + +* Sun Feb 25 2018 Igor Gnatenko - 103-1 +- Make %%ldconfig_post/%%ldconfig_postun parameterized + +* Sat Feb 24 2018 Florian Weimer - 102-1 +- Second step of -z now move: removal from GCC specs file (#1548397) + +* Sat Feb 24 2018 Florian Weimer - 101-1 +- First step of moving -z now to the gcc command line (#1548397) + +* Thu Feb 22 2018 Miro Hrončok - 100-1 +- Don't mangle shebangs with whitespace only changes (#1546993) + +* Thu Feb 22 2018 Igor Gnatenko - 99-1 +- Move %%end to %%ldconfig_scriptlets + +* Sat Feb 17 2018 Igor Gnatenko - 98-1 +- Explicitly close scriptlets with %%end (ldconfig) + +* Wed Feb 14 2018 Miro Hrončok - 97-1 +- Allow to opt-out from shebang mangling for specific paths/shebangs + +* Thu Feb 08 2018 Igor Gnatenko - 96-1 +- Simplify/Fix check for shebang starting with "/" + +* Wed Feb 07 2018 Igor Gnatenko - 95-1 +- Fix mangling env shebangs with absolute paths + +* Sun Feb 4 2018 Florian Weimer - 94-1 +- Add RPM macros for compiler/linker flags + +* Sat Feb 03 2018 Igor Gnatenko - 93-1 +- Use newly available /usr/bin/grep + +* Wed Jan 31 2018 Peter Robinson 92-1 +- Use generic tuning for ARMv7 + +* Tue Jan 30 2018 Jason L Tibbitts III - 91-1 +- The grep package only provides /bin/grep, not /usr/bin/grep. + +* Mon Jan 29 2018 Miro Hrončok - 90-1 +- Add brp-mangle-shebangs + +* Mon Jan 29 2018 Igor Gnatenko - 89-1 +- Add macros.ldconfig + +* Mon Jan 29 2018 Igor Gnatenko - 88-1 +- Create DSO symlinks automatically + +* Mon Jan 29 2018 Florian Weimer - 87-1 +- Build flags: Disable -z defs again (#1535422) + +* Mon Jan 29 2018 Florian Weimer - 86-1 +- Build flags: Enable CET on i686, x86_64 (#1538725) + +* Thu Jan 25 2018 Florian Weimer - 85-1 +- Build flags: Switch to generic tuning on i686 (#1538693) + +* Mon Jan 22 2018 Florian Weimer - 84-1 +- Link with -z defs by default (#1535422) + +* Mon Jan 22 2018 Florian Weimer - 83-1 +- Make armhfp flags consistent with GCC defaults + +* Mon Jan 22 2018 Florian Weimer - 82-1 +- Make use of -fasynchronous-unwind-tables more explicit (#1536431) + +* Mon Jan 22 2018 Florian Weimer - 81-1 +- Remove --param=ssp-buffer-size=4 + +* Mon Jan 22 2018 Florian Weimer - 80-1 +- Document build flags + +* Fri Jan 19 2018 Panu Matilainen - 79-1 +- Document how to disable hardened and annotated build (#1211296) + +* Wed Jan 17 2018 Panu Matilainen - 78-1 +- Fix the inevitable embarrassing typo in 77, doh + +* Wed Jan 17 2018 Panu Matilainen - 77-1 +- Macroize build root policies for consistent disable/override ability + +* Wed Jan 17 2018 Florian Weimer - 76-1 +- Add -fstack-clash-protection for supported architectures (#1515865) + +* Wed Jan 17 2018 Florian Weimer - 75-1 +- Add _GLIBCXX_ASSERTIONS to CFLAGS/CXXFLAGS (#1515858) + +* Mon Jan 15 2018 Igor Gnatenko - 74-1 +- Remove Requires: cmake-rpm-macros + +* Thu Jan 11 2018 Jason L Tibbitts III - 73-1 +- Add macros.forge for simplifying packaging of forge-hosted packages. See + https://fedoraproject.org/wiki/Forge-hosted_projects_packaging_automation and + https://bugzilla.redhat.com/show_bug.cgi?id=1523779 + +* Wed Jan 03 2018 Sergey Avseyev - 72-1 +- Add Requires: nim-srpm-macros for %%nim_arches + +* Tue Jan 02 2018 Igor Gnatenko - 71-1 +- Require annobin only if gcc is installed + +* Thu Dec 21 2017 Björn Esser - 70-2 +- Add Requires: cmake-rpm-macros for CMake auto-{provides,requires} (#1498894) + +* Fri Dec 08 2017 Panu Matilainen - 70-1 +- Update URL to current location at src.fedoraproject.org + +* Wed Nov 22 2017 Nick Clifton - 69-1 +- Enable binary annotations in compiler flags + +* Thu Oct 26 2017 Troy Dawson - 68-1 +- Remove Requires: fedora-rpm-macros + +* Mon Jul 31 2017 Igor Gnatenko - 67-1 +- Define _include_gdb_index (RHBZ #1476722) +- Move _debuginfo_subpackages and _debugsource_packages from rpm (RHBZ #1476735) + +* Tue Jul 18 2017 Florian Festi - 66-1 +- Honor %%kmodtool_generate_buildreqs (#1472201) + +* Thu Jul 13 2017 Igor Gnatenko - 65-1 +- Add Requires: rust-srpm-macros for %%rust_arches + +* Wed Mar 15 2017 Orion Poplawski - 64-1 +- Add Requires: openblas-srpm-macros for %%openblas_arches + +* Thu Feb 02 2017 Dan Horák - 63-1 +- set zEC12 as minimum architecture level for s390(x) (#1404991) + +* Thu Dec 15 2016 Jason L Tibbitts III - 62-1 +- Add macros.vpath (https://fedorahosted.org/fpc/attachment/ticket/655) + +* Tue Dec 06 2016 Adam Williamson - 61-1 +- revert changes from 60, they break far too much stuff (#1401231) + +* Wed Nov 30 2016 Panu Matilainen - 60-1 +- Error on implicit function declaration and -return type for C (#1393492) + +* Wed Nov 30 2016 Panu Matilainen - 59-1 +- Move global compiler flags to __global_compiler_flags macro +- Introduce separate __global_fooflags for C, C++ and Fortran + +* Tue Nov 29 2016 Panu Matilainen - 58-1 +- Drop atom optimization on i686 (#1393492) + +* Tue Nov 15 2016 Dan Horák - 57-1 +- set z10 as minimum architecture level for s390(x) + +* Fri Nov 11 2016 Panu Matilainen - 56-1 +- Fix directory name mismatch in kernel_source macro (#648996) + +* Tue Nov 08 2016 Michal Toman - 55-1 +- Add default compiler flags for various MIPS architectures (#1366735) + +* Tue Nov 08 2016 Panu Matilainen - 54-1 +- -pie is incompatible with static linkage (#1343892, #1287743) + +* Mon Nov 07 2016 Panu Matilainen - 53-1 +- Drop brp-java-repack-jars by request (#1235770) +- Drop brp-implant-ident-static, unused for 13 years and counting + +* Mon Nov 07 2016 Lubomir Rintel - 52-1 +- Add valgrind_arches macro for BuildRequires of valgrind + +* Fri Nov 04 2016 Stephen Gallagher - 51-1 +- Add s390x build target for Node.js packages + +* Mon Oct 31 2016 Kalev Lember - 50-1 +- Add ldc_arches macro + +* Mon Oct 17 2016 Jason L Tibbitts III - 49-1 +- Remove hardcoded limit of 16 CPUs for makefile parallelism. +- See https://bugzilla.redhat.com/show_bug.cgi?id=1384938 + +* Thu Oct 13 2016 Richard W.M. Jones 48-1 +- Add support for riscv64. + This also updates config.sub/config.guess to the latest upstream versions. + +* Wed Oct 12 2016 Peter Robinson 47-1 +- Enable aarch64 for mono arches + +* Mon Oct 03 2016 Jason L Tibbitts III - 46-1 +- Allow %%configure to optionally pass --disable-silent-rules. Define + %%_configure_disable_silent_rules (defaulting to 0) to control this. + +* Wed Sep 14 2016 Jason L Tibbitts III - 45-1 +- Add dependency on qt5-srpm-macros. + +* Fri Aug 12 2016 Jason L Tibbitts III - 44-1 +- And somehow I managed to make a typo in that dependency. + +* Fri Aug 12 2016 Jason L Tibbitts III - 43-1 +- Add dependency on fedora-rpm-macros. + +* Tue Apr 12 2016 Jason L Tibbitts III - 42-1 +- Add dependency on fpc-srpm-macros. + +* Mon Apr 11 2016 Jason L Tibbitts III - 41-1 +- Add a file for miscellaneous macros, currently containing just %%rpmmacrodir. + +* Thu Feb 04 2016 Fedora Release Engineering - 40-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Tue Feb 02 2016 Dan Horák 40-1 +- switch to -mcpu=power8 for ppc64le default compiler flags + +* Wed Jan 13 2016 Orion Poplawski 39-1 +- Add Requires: python-srpm-macros + +* Fri Jan 8 2016 Peter Robinson 38-1 +- Add missing ARMv6 optflags + +* Wed Dec 2 2015 Peter Robinson 37-1 +- nodejs 4+ now supports aarch64 and power64 + +* Fri Jul 17 2015 Florian Festi 36-1 +- Add Requires: go-srpm-macros (#1243922) + +* Thu Jul 09 2015 Sandro Mani 35-1 +- Use %%__libsymlink_path instead of %%__libsymlink_exclude_path in libsymlink.attr + +* Wed Jul 08 2015 Adam Jackson 34-1 +- Fix cc1 specs mishandling of incremental linking + +* Thu Jun 18 2015 Fedora Release Engineering - 33-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Fri Jun 05 2015 Dan Horák 33-1 +- Mono 4 adds support for ppc64le + +* Fri May 29 2015 Florian Festi 32-1 +- Support out of source builds for %%_configure_gnuconfig_hack (#1191788) +- Fix typo in %%kernel_module_package (#1159361) + +* Tue May 19 2015 Florian Festi 31-1 +- Add %%py_auto_byte_compile macro controlling Python bytecompilation +(#976651) + +* Wed Apr 29 2015 Florian Festi 30-1 +- Fix libsymlink.attr for new magic pattern for symlinks (#1207945) + +* Wed Apr 08 2015 Adam Jackson 29-1 +- Fix ld specs mishandling of incremental linking + +* Thu Feb 19 2015 Till Maas - 28-1 +- Enable harden flags by default (#1192183) + +* Wed Dec 10 2014 Dan Horák - 27-1 +- Explicitly set -mcpu/-mtune for ppc64p7 and ppc64le to override rpm defaults + +* Mon Sep 22 2014 Panu Matilainen - 26-1 +- Gnat macros are now in a package of their own (#1133632) + +* Fri Sep 19 2014 Dan Horák - 25-1 +- there is still no properly packaged Mono for ppc64le + +* Sun Jun 08 2014 Fedora Release Engineering - 24-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Thu Jun 5 2014 Peter Robinson 24-1 +- ARMv7 has Ada so add it to GNAT_arches + +* Sat May 24 2014 Brent Baude - 23-2 +- Changed ppc64 to power64 macro for mono_archs + +* Tue May 13 2014 Peter Robinson +- aarch64 has Ada so add it to GNAT_arches + +* Mon May 12 2014 Josh Boyer - 22-1 +- Fix kmod.prov to deal with compressed modules (#1096349) + +* Wed Apr 30 2014 Jens Petersen - 21-1 +- macros.ghc-srpm moved to ghc-rpm-macros package (#1089102) +- add requires ghc-srpm-macros + +* Tue Apr 29 2014 Peter Robinson 20-1 +- With gcc 4.9 aarch64 now supports stack-protector + +* Sun Apr 27 2014 Ville Skyttä - 19-1 +- Drop bunch of duplicated-with-rpm macro definitions and brp-* scripts + +* Tue Apr 15 2014 Panu Matilainen - 18-1 +- Temporarily bring back find-requires and -provides scripts to rrc-side + +* Tue Apr 15 2014 Panu Matilainen - 17-1 +- Let OCaml handle its own arch macros (#1087794) + +* Tue Apr 15 2014 Panu Matilainen - 16-1 +- Move kmod and libsymlink dependency generators here from rpm + +* Thu Apr 10 2014 Panu Matilainen - 15-1 +- Drop most of the script-based dependency generation bits + +* Tue Apr 08 2014 Panu Matilainen - 14-1 +- Add Mono path macros (#1070936) +- Allow opting out of config.{guess,sub} replacement hack (#991613) + +* Tue Apr 08 2014 Panu Matilainen - 13-1 +- Move the remaining dependency generator stuff to the kmp macro package +- Stop overriding rpm external dependency generator settings by default + +* Mon Apr 07 2014 Panu Matilainen - 12-1 +- Be more explicit about the package contents +- Split kernel module macros to a separate file +- Split kernel module scripts and macros to a separate package + +* Wed Apr 02 2014 Panu Matilainen - 11-1 +- Stop pretending this package is relocatable, its not +- Require rpm >= 4.11 for /usr/lib/rpm/macros.d support etc +- Move our macros out of from /etc, they're not configuration + +* Wed Apr 02 2014 Panu Matilainen - 10-1 +- Make fedora dist-git the upstream of this package and its sources +- Add maintainer comments to spec wrt versioning and changes + +* Mon Mar 24 2014 Dan Horák - 9.1.0-58 +- enable ppc64le otherwise default rpm cflags will be used + +* Fri Feb 07 2014 Panu Matilainen - 9.1.0-57 +- config.guess/sub don't need to be group-writable (#1061762) + +* Sun Jan 12 2014 Kevin Fenzi 9.1.0-56 +- Update libtool hardening hack and re-enable (#978949) + +* Wed Dec 18 2013 Dhiru Kholia - 9.1.0-55 +- Enable "-Werror=format-security" by default (#1043495) + +* Wed Sep 04 2013 Karsten Hopp 9.1.0-54 +- update config.sub with ppc64p7 support (from Fedora automake) + +* Fri Aug 16 2013 Panu Matilainen - 9.1.0-53 +- updated config.guess/sub from upstream for little-endian ppc archs + +* Mon Jul 29 2013 Petr Pisar - 9.1.0-52 +- Perl 5.18 rebuild + +* Thu Jul 25 2013 Tomas Mraz 9.1.0-51 +- Disable the libtool hack as it is breaking builds + +* Wed Jul 24 2013 Kevin Fenzi 9.1.0-50 +- Make docdirs unversioned on Fedora 20+ (#986871) +- Hack around libtool issue for hardened build for now (#978949) + +* Wed Jul 17 2013 Petr Pisar - 9.1.0-49 +- Perl 5.18 rebuild + +* Fri Jul 05 2013 Panu Matilainen - 9.1.0-48 +- fix brp-java-repack-jars failing on strange permissions (#905573) + +* Thu Jul 04 2013 Panu Matilainen - 9.1.0-47 +- switch from -fstack-protector to -fstack-protector-strong (#978763) + +* Thu Jun 27 2013 Panu Matilainen - - 9.1.0-46 +- make cpu limit for building configurable through _smp_ncpus_max macro + +* Tue May 21 2013 T.C. Hollingsworth - 9.1.0-45 +- add nodejs_arches macro for ExclusiveArch for Node.js packages + +* Mon May 13 2013 Adam Jackson 9.1.0-44 +- redhat-config-*: Use + to append rather than %%rename, to protect against + multiple -specs= ending up in the command line. (#892837) + +* Tue Apr 23 2013 Panu Matilainen - 9.1.0-43 +- Add optflags stack protector override for AArch64 (#909788) +- Also set FCFLAGS from %%configure (#914831) + +* Mon Apr 22 2013 Panu Matilainen - 9.1.0-42 +- Switch back to manual config.guess/sub copies for reproducability +- Replace config.guess/sub from %%configure again (#951442) + +* Mon Apr 22 2013 Panu Matilainen - 9.1.0-41 +- Add -grecord-gcc-switches to global CFLAGS (#951669) + +* Mon Mar 25 2013 Panu Matilainen - 9.1.0-40 +- Add virtual system-rpm-config provide + +* Thu Feb 14 2013 Fedora Release Engineering - 9.1.0-39 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Sat Nov 17 2012 Jens Petersen - 9.1.0-38 +- add ARM to ghc_arches_with_ghci for ghc-7.4.2 ghci support + (NB this change should not be backported before ghc-7.4.2) + +* Fri Nov 9 2012 Toshio Kuratomi - 9.1.0-37 +- Patch to fix spaces in java jar files + https://bugzilla.redhat.com/show_bug.cgi?id=872737 + +* Fri Nov 9 2012 Toshio Kuratomi - 9.1.0-36 +- Patch to fix spaces in files used in filtering macros + https://bugzilla.redhat.com/show_bug.cgi?id=783932 + +* Wed Oct 3 2012 Ville Skyttä - 9.1.0-35 +- Drop (un)setting LANG and DISPLAY in build stages, require rpm >= 4.8.0. + +* Wed Oct 3 2012 Toshio Kuratomi - 9.1.0-34 +- Add patch from https://bugzilla.redhat.com/show_bug.cgi?id=783433 + to fix spaces in files and directories that are fed to the + brp-python-hardlink script +- Require zip since java repack jars requires it + https://bugzilla.redhat.com/show_bug.cgi?id=857479 +- Java jars need the MANIFEST.MF file to be first in the archive + https://bugzilla.redhat.com/show_bug.cgi?id=465664 +- Fix kernel_source macro to match the directory that kernel sources are installed in + https://bugzilla.redhat.com/show_bug.cgi?id=648996 +- Patch _mandir, _infodir, and _defaultocdir to use _prefix + https://bugzilla.redhat.com/show_bug.cgi?id=853216 + +* Sat Jul 21 2012 Fedora Release Engineering - 9.1.0-33 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Wed Jun 27 2012 Panu Matilainen - 9.1.0-32 +- enable minidebuginfo generation (#834073) + +* Mon Jun 25 2012 Panu Matilainen - 9.1.0-31 +- revert back to plain -g, -g3 seems to cancel dwz size improvements + +* Mon Jun 25 2012 Panu Matilainen - 9.1.0-30 +- require dwz, enable dwarf compression for debuginfo packages (#833311) + +* Wed Jun 06 2012 Petr Pisar - 9.1.0-29 +- Pull in dependency with macros specific for building Perl source packages + +* Sat Mar 3 2012 Jens Petersen - 9.1.0-28 +- add s390 and s390x to ghc_arches + +* Wed Feb 22 2012 Panu Matilainen - 9.1.0-27 +- add GNAT arch definitions + +* Sun Jan 15 2012 Dennis Gilmore - 9.1.0-26 +- per ppc team request drop -mminimal-toc on ppc64 + +* Sat Jan 14 2012 Fedora Release Engineering - 9.1.0-25 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Tue Dec 27 2011 Jens Petersen - 9.1.0-24 +- add ghc_arches_with_ghci + +* Wed Nov 09 2011 Dennis Gilmore - 9.1.0-23 +- remove patch that forces --disable-silent-rules to configure +- it breaks anything set to not ignore unknown configure options + +* Tue Oct 18 2011 Jens Petersen - 9.1.0-22 +- add armv5tel to ghc_arches + +* Wed Sep 28 2011 Dennis Gilmore - 9.1.0-21 +- build armv5tel on armv7l since they are the same abi armv7hl is + an incompatible ABI + +* Wed Sep 28 2011 Jens Petersen - 9.1.0-20 +- add armv7hl to ghc_arches + +* Sun Sep 25 2011 Ville Skyttä - 9.1.0-19 +- Fix URL. + +* Thu Sep 22 2011 Adam Jackson 9.1.0-18 +- redhat-hardened-cc1: Inject -fPIE, not -fPIC. + cf. http://lists.fedoraproject.org/pipermail/devel/2011-September/157365.html + +* Fri Sep 16 2011 Adam Jackson 9.1.0-17 +- Expose %%_hardening_{c,ld}flags independently to make it easier for + packages to apply them to selected components + +* Wed Aug 10 2011 Colin Walters - 9.1.0-16 +- Globally disable silent rules + +* Wed Aug 03 2011 Adam Jackson 9.1.0-15 +- redhat-hardened-{cc1,ld}: Move some of the rewrite magic to gcc specs so + we don't end up with both -fPIC and -fPIE on the command line + +* Mon Aug 01 2011 Adam Jackson 9.1.0-14 +- redhat-rpm-config-9.1.0-hardened.patch: Add macro magic for %%_hardened_build + +* Thu Jul 07 2011 Adam Jackson 9.1.0-13 +- redhat-rpm-config-9.1.0-relro.patch: LDFLAGS, not CFLAGS. + +* Sat Jul 02 2011 Jon Masters - 9.1.0-12 +- redhat-rpm-config-9.1.0-arm.patch: Make armv7hl default on all v7 ARM + +* Mon Jun 27 2011 Adam Jackson - 9.1.0-11 +- redhat-rpm-config-9.1.0-relro.patch: Add -Wl,-z,relro to __global_cflags + +* Tue Jun 21 2011 Jens Petersen - 9.1.0-10 +- revert last build since releng prefers exclusivearch here + +* Sat Jun 18 2011 Jens Petersen - 9.1.0-9 +- replace ghc_archs with ghc_excluded_archs + +* Mon Jun 13 2011 Dennis Gilmore - 9.1.0-8 +- add arm hardware float macros, fix up armv7l + +* Mon May 30 2011 Dennis Gilmore - 9.1.0-7 +- add -srpm to the arches files so that the base language macros can + be parallel installable with these + +* Fri May 27 2011 Dennis Gilmore - 9.1.0-6 +- add some specific macros needed at srpm creation time + +* Thu May 27 2010 Panu Matilainen - 9.1.0-5 +- adjust to new pkg-config behavior wrt private dependencies (#596433) + +* Mon Mar 01 2010 Panu Matilainen - 9.1.0-4 +- avoid unnecessarily running brp-strip-comment-note (#568924) + +* Mon Feb 15 2010 Panu Matilainen - 9.1.0-3 +- unbreak find-requires again, doh (#564527) + +* Wed Feb 3 2010 Panu Matilainen - 9.1.0-2 +- python byte-compilation errors abort the build by default + +* Tue Feb 2 2010 Panu Matilainen - 9.1.0-1 +- new version, lose merged patches (fixes #521141, #455279, #496522, #458648) +- require rpm for parent dir, version >= 4.6.0 for sane keyserver behavior +- buildrequire libtool to grab copies of config.guess and config.sub +- add URL to the git repo and upstream changelog as documentation + +* Mon Nov 23 2009 Orion Poplawski - 9.0.3-19 +- Change configure macro to use _configure to allow override (bug #489942) + +* Mon Sep 28 2009 Bill Nottingham +- Drop xz compression level to 2 + +* Thu Sep 03 2009 Adam Jackson +- Delete *.orig in %%install + +* Thu Sep 03 2009 Paul Howarth 9.0.3-17 +- redhat-rpm-config-9.0.3-filtering-macros.patch: Rediff so we don't ship a .orig file +- add (empty) %%build section +- fix unescaped macros in changelog + +* Tue Aug 18 2009 Chris Weyl 9.0.3-16 +- add the filtering framework approved by the FPC/FESCo. (#516240) + +* Thu Aug 13 2009 Adam Jackson 9.0.3-15 +- redhat-rpm-config-9.0.4-brpssa-speedup.patch: When looking for static + archives, only run file(1) on files named *.a. (#517101) + +* Wed Aug 12 2009 Adam Jackson 9.0.3-14 +- redhat-rpm-config-9.0.3-jars-with-spaces.patch: Handle repacking jars + whose filenames contain spaces. (#461854) + +* Sun Jul 26 2009 Fedora Release Engineering - 9.0.3-13 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Wed Jul 22 2009 Bill Nottingham 9.0.3-12 +- use XZ payload compression for binary packages + +* Tue Jul 21 2009 Tom "spot" Callaway - 9.0.3-10 +- always delete %%buildroot as first step of %%install (as long as %%buildroot is not /) + +* Fri Jul 17 2009 Bill Nottingham 9.0.3-10 +- apply fedora 12 default buildflags + +* Wed Jun 03 2009 Adam Jackson 9.0.3-9 +- limit-smp-16-threads.patch: Rediff so we don't ship a .orig file (#500316) + +* Wed Feb 25 2009 Fedora Release Engineering - 9.0.3-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Mon Feb 23 2009 Jon Masters - 9.0.3-7 +- Change default hashing algorithm in file digests to SHA-256 +- Resolves: #485826. + +* Tue Feb 17 2009 Dennis Gilmore - 9.0.3-6 +- add missing armv7l arch +- set the default build arch to match fedora arm build target + +* Mon Feb 16 2009 Dennis Gilmore - 9.0.3-5 +- apply fedora 11 default buildflags +- set 32 bit intel build arch to i586 on compatible hardware +- set 32 bit sparc build arch to sparcv9 on compatible hardware + +* Mon Feb 16 2009 Dennis Gilmore - 9.0.3-4 +- limit _smp_flags to -j16 + +* Wed Sep 3 2008 Tom "spot" Callaway - 9.0.3-3 +- fix license tag +- nuke ancient conflicts + +* Mon Aug 11 2008 Panu Matilainen - 9.0.3-2 +- Unbreak find-requires (#443015) + +* Tue May 06 2008 Jon Masters - 9.0.3-1 +- Ensure Java Jar files have readable files within. +- Remove overwritten config.guess|sub files (testing). +- Fix Fortran flags for building using _fmoddir. +- Pull in objdump fix to upstream find-requires. + +* Thu Apr 03 2008 Jon Masters - 9.0.2-1 +- Remove smp dependencies +- Update config.guess|sub files +- Don't call find-requires.ksyms for kmod packages (kernel kABI scripts). + +* Thu Jul 05 2007 Jesse Keating - 9.0.1-1 +- Remove dist defines, fedora-release does that now +- Enable post-build buildroot checking by default + +* Tue Jun 19 2007 Jeremy Katz - 9.0.0-1 +- use stock find-lang.sh (#213041) +- arm fixes (Lennert Buytenhek, #243523) +- allow jar repacking to be disabled (#219731) +- fix running dist.sh --fc (#223651) +- hardlink identical .pyc and .pyo files to save space (Ville Skyttä) +- fix TMPDIR usage (Matthew Miller, #235614) + +* Tue Jun 19 2007 Jeremy Katz - 8.1.0-1 +- add modalias tags to kmod packages and other kmod changes (jcm) +- recompress jars to avoid multilib conflicts (bkonrath) + +* Fri May 18 2007 Jesse Keating 8.0.45-16 +- Update macros for F8 +- hardcode dist in release string, as we provide it. chicken/egg. + +* Wed Apr 11 2007 Jon Masters 8.0.45-15 +- Add modalias tags to kernel module packages (kmods) for tracking. +- Further information is available at http://www.kerneldrivers.org/. + +* Tue Apr 03 2007 Jon Masters 8.0.45-14 +- Rebased all previous patches (since java fix introduced offset). +- Added Fedora per-release macros to platforms section of macros. + Further debate may see these move elsewhere in the ordering. + +* Tue Mar 13 2007 Ben Konrath 8.0.45-13 +- Update brp-java-repack-jars to fix issue with tomcat. + +* Wed Oct 18 2006 Jon Masters 8.0.45-12 +- Synced kernel_module_package semantics with SuSE. +- Updated kmodtool. + +* Tue Oct 17 2006 Jon Masters 8.0.45-10 +- Updated kernel_module_package. + +* Mon Oct 16 2006 Jon Masters 8.0.45-9 +- Added kernel_module_package macro. Working on unified packaging. + +* Thu Oct 12 2006 Jon Masters 8.0.45-8 +- Added patch for find-requires. Waiting on write access to public CVS. + +* Tue Sep 12 2006 Deepak Bhole 8.0.45-6 +- Fix brp-java-repack-jars to work with builddirs that aren't %%name-%%version + +* Mon Sep 11 2006 Fernando Nasser - 8.0.45-5 +- Fix order of tokens in find command (thanks mikeb@redhat.com) + +* Thu Sep 7 2006 Ben Konrath - 8.0.45-4 +- Fix bug in repack jars script. + +* Wed Sep 6 2006 Jeremy Katz - 8.0.45-3 +- path fix + +* Tue Sep 5 2006 Jeremy Katz - 8.0.45-2 +- Add script from Ben Konrath to repack jars to + avoid multilib conflicts + +* Sun Jul 30 2006 Jon Masters - 8.0.45-1 +- Fix inverted kernel test. + +* Sun Jul 30 2006 Jon Masters - 8.0.44-1 +- Add a better check for a kernel vs. kmod. + +* Thu Jun 15 2006 Jon Masters - 8.0.43-1 +- Workaround bug in find-requires/find-provides for kmods. + +* Thu Jun 15 2006 Jon Masters - 8.0.42-1 +- Fix a typo in KMP find-requires. + +* Tue Jun 13 2006 Jon Masters - 8.0.41-1 +- Add support for KMP Fedora Extras packaging. + +* Fri Feb 3 2006 Jeremy Katz - 8.0.40-1 +- use -mtune=generic for x86 and x86_64 + +* Tue Aug 16 2005 Elliot Lee - 8.0.39-1 +- Fix #165416 + +* Mon Aug 01 2005 Elliot Lee - 8.0.38-1 +- Add -Wall into cflags + +* Mon Aug 01 2005 Elliot Lee - 8.0.37-1 +- Patch from Uli: enable stack protector, fix sparc & ppc cflags + +* Thu Jun 16 2005 Elliot Lee - 8.0.36-1 +- Fix the fix + +* Wed Apr 6 2005 Elliot Lee - 8.0.35-1 +- Fix #129025 (enable python byte compilation) + +* Wed Mar 23 2005 Elliot Lee 8.0.34-1 +- Bug fixes +- Cflags change by drepper + +* Wed Feb 9 2005 Elliot Lee 8.0.33-1 +- Change -D to -Wp,-D to make java happy +- Add -D_FORTIFY_SOURCE=2 to global cflags (as per Jakub & Arjan's request) + +* Fri Oct 1 2004 Bill Nottingham 8.0.32-1 +- allow all symbol versioning in find_requires - matches RPM internal + behavior + +* Mon Jun 28 2004 Elliot Lee 8.0.31-1 +- Add ppc8[25]60 to rpmrc optflags + +* Fri Jun 25 2004 Elliot Lee 8.0.29-1 +- rpmrc patch from jakub to change optflags. + +* Wed Sep 17 2003 Elliot Lee 8.0.28-1 +- Change brp-compress to pass -n flag to gzip (per msw's request) + +* Tue Jul 15 2003 Elliot Lee 8.0.27-1 +- Fix broken configure macro find for config.guess/config.sub +- Put host/target/build back for now + +* Mon Jul 7 2003 Jens Petersen - 8.0.26-1 +- preserve the vendor field when VENDOR not set +- put VENDOR in the final i386-libc line, not the tentative one + +* Mon Jul 7 2003 Jens Petersen - 8.0.25-1 +- update config.{guess,sub} to 2003-06-17 +- define VENDOR to be redhat only when /etc/redhat-release present + [suggested by jbj] +- put VENDOR in vendor field in our config.guess file for + ia64, ppc, ppc64, s390, s390x, x86_64 and elf32-i386 Linux +- drop the --host, --build, --target and --program-prefix configure options + from %%configure, since this causes far too many problems + +* Fri May 2 2003 Jens Petersen - 8.0.24-3 +- make config.{guess,sub} executable + +* Thu May 1 2003 Jens Petersen - 8.0.22-2 +- add config.guess and config.sub (2003-02-22) with s390 patch on config.sub +- make %%configure use them + +* Mon Mar 03 2003 Elliot Lee +- Unset $DISPLAY in macros + +* Mon Feb 24 2003 Elliot Lee 8.0.21-1 +- Just turn on -g unconditionally for now + +* Thu Feb 13 2003 Elliot Lee 8.0.20-1 +- Reorganize rpmrc/macros to set cflags in a nicer manner. + +* Wed Jan 22 2003 Elliot Lee 8.0.19-1 +- Disable brp-implant-ident-static until it works everywhere + +* Thu Jan 16 2003 Nalin Dahyabhai 8.0.18-1 +- add brp-implant-ident-static, which requires mktemp + +* Thu Jan 9 2003 Bill Nottingham 8.0.17-1 +- add brp-strip-static-archive from rpm-4.2-0.54 + +* Tue Dec 17 2002 Bill Nottingham 8.0.16-1 +- make -g in rpmrc conditional on debug_package + +* Mon Dec 16 2002 Elliot Lee 8.0.15-1 +- Rename -debug subpackages to -debuginfo + +* Sat Dec 14 2002 Tim Powers 8.0.14-1 +- tweak debug package stuff so that we are overloading %%install + instead of %%post + +* Sat Dec 14 2002 Tim Powers 8.0.13-1 +- turn on internal rpm dep generation by default + +* Fri Dec 13 2002 Elliot Lee 8.0.12-1 +- New release with debug packages on + +* Tue Dec 3 2002 Bill Nottingham 8.0.8-1 +- turn debug packages off +- override optflags with no -g + +* Fri Nov 22 2002 Elliot Lee 8.0.7-1 +- turn on debug packages + +* Thu Nov 21 2002 Elliot Lee 8.0.6-1 +- Pass __strip and __objdump macros + +* Thu Nov 21 2002 Elliot Lee 8.0.5-1 +- Update macros to specify find-provides/find-requires + +* Thu Oct 31 2002 Elliot Lee 8.0.4-1 +- Remove tracking dependency + +* Wed Oct 16 2002 Phil Knirsch 8.0.3-2 +- Added fix for outdated config.[sub|guess] files in %%configure section + +* Wed Oct 16 2002 Elliot Lee 8.0.3-1 +- New release that blows up on unpackaged files and missing doc files. + +* Thu Oct 3 2002 Jeremy Katz 8.0.2 +- don't redefine everything in macros, just what we need to + +* Mon Sep 16 2002 Alexander Larsson 8.0.1 +- Add debug package support to %%__spec_install_post + +* Tue Sep 3 2002 Bill Nottingham 8.0-1 +- bump version + +* Wed Aug 28 2002 Elliot Lee 7.3.94-1 +- Update macrofiles + +* Wed Jul 31 2002 Elliot Lee 7.3.93-1 +- Add _unpackaged_files_terminate_build and +_missing_doc_files_terminate_build to macros + +* Thu Jul 11 2002 Elliot Lee 7.3.92-6 +- find-lang.sh fix from 67368 +- find-requires fix from 67325 + +* Thu Jul 11 2002 Elliot Lee 7.3.92-5 +- Add /etc/rpm/macros back to make #67951 go away + +* Wed Jun 26 2002 Jens Petersen 7.3.92-4 +- fix %%configure targeting for autoconf-2.5x (#58468) +- include ~/.rpmmacros in macrofiles file path again + +* Fri Jun 21 2002 Tim Powers 7.3.92-3 +- automated rebuild + +* Fri Jun 21 2002 Elliot Lee 7.3.92-2 +- Don't define _arch + +* Thu Jun 20 2002 Elliot Lee 7.3.92-1 +- find-lang error detection from Havoc + +* Wed Jun 12 2002 Elliot Lee 7.3.91-1 +- Update + +* Sun Jun 9 2002 Jeff Johnson +- create.