commit 61f9e098e6df173dd3d7c56efb929c4e388815cd Author: MSVSphere Packaging Team Date: Tue Nov 26 19:09:57 2024 +0300 import redhat-rpm-config-285-1.el10 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-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-llvm-compile-lto-elf b/SOURCES/brp-llvm-compile-lto-elf new file mode 100755 index 0000000..1756651 --- /dev/null +++ b/SOURCES/brp-llvm-compile-lto-elf @@ -0,0 +1,54 @@ +#!/usr/bin/bash -eu + + +if [ -z "$RPM_BUILD_ROOT" ] || [ "$RPM_BUILD_ROOT" = "/" ]; then + exit 0 +fi + +CLANG_FLAGS=$@ +NCPUS=${RPM_BUILD_NCPUS:-1} + +check_convert_bitcode () { + local file_name=$(realpath ${1}) + local file_type=$(file ${file_name}) + + shift + CLANG_FLAGS="$@" + + if [[ "${file_type}" == *"LLVM IR bitcode"* ]]; then + # Check the output of llvm-strings for the command line, which is in the LLVM bitcode because + # we pass -frecord-gcc-switches. + # Check for a line that has "-flto" after (or without) "-fno-lto". + llvm-strings ${file_name} | while read line ; do + flto=$(echo $line | grep -o -b -e -flto | tail -n 1 | cut -d : -f 1) + fnolto=$(echo $line | grep -o -b -e -fno-lto | tail -n 1 | cut -d : -f 1) + + if test -n "$flto" && { test -z "$fnolto" || test "$flto" -gt "$fnolto"; } ; then + echo "Compiling LLVM bitcode file ${file_name}." + clang ${CLANG_FLAGS} -fno-lto -Wno-unused-command-line-argument \ + -x ir ${file_name} -c -o ${file_name} + break + fi + done + elif [[ "${file_type}" == *"current ar archive"* ]]; then + echo "Unpacking ar archive ${file_name} to check for LLVM bitcode components." + # create archive stage for objects + local archive_stage=$(mktemp -d) + local archive=${file_name} + pushd ${archive_stage} + ar x ${archive} + for archived_file in $(find -not -type d); do + check_convert_bitcode ${archived_file} ${CLANG_FLAGS} + echo "Repacking ${archived_file} into ${archive}." + ar r ${archive} ${archived_file} + done + popd + fi +} + +echo "Checking for LLVM bitcode artifacts" +export -f check_convert_bitcode +# Deduplicate by device:inode to avoid processing hardlinks in parallel. +find "$RPM_BUILD_ROOT" -type f -name "*.[ao]" -printf "%D:%i %p\n" | \ + awk '!seen[$1]++' | cut -d" " -f2- | \ + xargs -d"\n" -r -n1 -P$NCPUS sh -c "check_convert_bitcode \$@ $CLANG_FLAGS" ARG0 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-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..e817020 --- /dev/null +++ b/SOURCES/buildflags.md @@ -0,0 +1,743 @@ +This document contains documentation of the individual compiler flags +and how to use them. + +[TOC] + +# Using RPM build flags + +The %set_build_flags macro sets the environment variables `CFLAGS`, +`CXXFLAGS`, `FFLAGS`, `FCFLAGS`, `VALAFLAGS`, `LDFLAGS` and `LT_SYS_LIBRARY_PATH` to +the value of their corresponding rpm macros. `%set_build_flags` is automatically +called prior to the `%build`, `%check`, and `%install` phases so these flags can be +used by makefiles and other build tools. + +You can opt out of this behavior by doing: + + %undefine _auto_set_build_flags + +If you do opt out of this behavior, you can still manually use `%set_build_flags` +by adding it to the `%build` section of your spec file or by using one of the +build system helper macros like `%configure`, `%cmake`, and `%meson`. + +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 `./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. + +Individual build flags are also available through RPM macros: + +* `%{build_cc}` for the command name of the C compiler. +* `%{build_cxx}` for the command name of the C++ compiler. +* `%{build_cpp}` for the command name of the C-compatible preprocessor. +* `%{build_cflags}` for the C compiler flags (also known as the + `CFLAGS` variable). +* `%{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_valaflags}` for `VALAFLAGS` (the Vala compiler flags) +* `%{build_ldflags}` for the linker (`ld`) flags, usually known as + `LDFLAGS`. Note that the contents quote 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 C and C++ compiler flags are historically available as the +`%{optflags}` macro. These flags may not contain flags that work with +certain languagues or compiler front ends, so the language-specific +`%build_*` are more precise. At the start of the `%build` section, +the environment variable `RPM_OPT_FLAGS` is set to the `%{optflags}` +value; similar limitations apply. + +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 + +### Controlling Type Safety + +The macro `%build_type_safety_c` can be set to change the C type +safety level. The default level is 3, see below. It can be set to 0 +to get historic levels of type safety. Changing the type safety level +may depend on correct `CFLAGS` propagation during the build. The +`%build_type_safety_c` macro needs to be set before `CFLAGS`-related +macros are expanded by RPM (that is, earlier in the file works +better). + +Packages can set `%build_type_safety_c` to higher values to adopt +future distribution-wide type-safety increases early. When changing +the `%build_type_safety_c` level to increase it, spec file should use +a construct like this to avoid *lowering* a future default: + +``` +%if %build_type_safety_c < 4 +%global build_type_safety_c 4 +%endif +``` + +At level 0, all C constructs that GCC accepts for backwards +compatibility with obsolete language standards are accepted during +package builds. This is achieved by passing `-fpermissive` to GCC. + +At level 1, the following additional error categories are enabled: + +* `-Werror=implicit-int`: Reject declarations and definitions that + omit a type name where one is required. Examples are: + `extern int_variable;`, `extern int_returning_function (void);`, + and missing separate parameter type declarations in old-style + function definitions. +* `-Werror=implicit-function-declaration`: Reject calls to functions + to undeclared functions such as `function_not_defined_anywhere ()`. + Previously, such expressions where we compiled as if a declaration + `extern int function_not_defined_anywhere ();` (a prototype-less + function declaration) were in scope. +* `-Werror=return-mismatch`: Reject `return` statements with missing + or extra expressions, based on the declared return type of the + function. +* `-Wdeclaration-missing-parameter-type`: Reject function declarations + that contain unknown type names (which used to be treated as ignored + identifier names). + +At level 2, the following error category is enabled in addition: + +* `-Werror=int-conversion`: Reject the use of integer expressions + where a pointer type expected, and pointer expressions where an + integer type is expected. Without this option, GCC may produce an + executable, but often, there are failures at run time because not + the full 64 bits of pointers are preserved. + +The additional level 3 error category is: + +* `-Werror=incompatible-pointer-types`: An expression of one pointer + type is used where different pointer type is expected. (This does + not cover signed/unsigned mismatches in the pointer target type.) + +Clang errors out on more obsolete and invalid C constructs than C, so +the type safety is higher by default than with the GCC toolchain. + +### 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. + +### Other autotools compatibility settings + +During `%configure`, `--runstatedir` is automatically passed to the +`configure` script if support for this option is detected. This +detection can fail if the package has multiple `configure` scripts +that invoke each other, and only some of them support `--runstatedir`. +To disable passing `--runstatedir`, use: + + %undefine _configure_use_runstatedir + +### 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: + + %global _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. + +### Source Fortification + +By default, the build flags include `-Wp,-D_FORTIFY_SOURCE=3`: 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, on rare occasions, break valid programs. The source +fortification level can be overridden by adding this in the RPM spec file: + + %define _fortify_level 2 + +to reduce source fortification level to 2 or: + + %undefine _fortify_level + +to disable fortification altogether. + +### 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. + +### Switching to legacy relative relocations + +By default, ELF objects use the architecture-independent `DT_RELR` +mechanism for relative relocations. To switch to the older, +architecture-specific relocation scheme, add this to the RPM spec file: + + %undefine _ld_pack_relocs + +This adds `-Wl,-z,pack-relative-relocs` to the linker flags (`LDFLAGS`). + +### Specifying the build-id algorithm + +If you want to specify a different build-id algorithm for your builds, you +can use the `%_build_id_flags` macro: + + %_build_id_flags -Wl,--build-id=sha1 + +### 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: + + %global _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`. + + %global _legacy_common_support 1 + +Properly fixing the failure is always preferred! + +### Package note on ELF objects + +A note that describes the package name, version, and architecture is +inserted via a linker script (`%_package_note_file`). The script is +generated when `%set_build_flags` is called. The linker option that +injects the linker script is added to `%{build_ldflags}` via the +`%{_package_note_flags}` macro. + +To opt out of the use of this feature completely, the best way is to +undefine the first macro. Include this in the spec file: + + %undefine _package_note_file + +The other macros can be undefined too to replace parts of the functionality. +If `%_generate_package_note_file` is undefined, the linker script will not +be generated, but the link flags may still refer to it. This may be useful +if the default generation method is insufficient and a different mechanism +will be used to generate `%_package_note_file`. If `%_package_note_flags` +is undefined, the linker argument that injects the script will not be added +to `%build_ldfags`, but the linker script would still be generated. + +### Frame pointers + +Frame pointers will be included by default via the `%_include_frame_pointers` +macro. To opt out, the best way is to undefine the macro. Include this in the +spec file: + + %undefine _include_frame_pointers + +Note that opting out might still result in frame pointers being included on +architectures where they are part of the ABI (e.g. aarch64) depending on +compiler defaults. + +### 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). +* `__brp_remove_la_files`: This step removes libtool-generated `.la` + files from the installed files. + +# 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). +* `-Wno-complain-wrong-lang`: Do not warn about front end mismatches + (e.g, using `-Werror=format-security` with Fortran). Only included + in `%optflags`, and not the front-end-specific `%build_*` macros. +* `-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 that case, + the best option is to rewrite the source code so that only constant + format strings (string literals) are used. +* Other `-Werror=` options. See **Controlling C Type Safety**. +* `-U_FORTIFY_SOURCE, -Wp,-U_FORTIFY_SOURCE -Wp,-D_FORTIFY_SOURCE=3`: + See the Source Fortification section above and the `%_fortify_level` + override. +* `-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. (Not enabled on armhfp + due to architectural differences in stack management.) +* `-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 armhfp (both `gcc` and `clang` + toolchains) and 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 on armhpf, and with the `clang` +toolchain. + +If frame pointers are enabled by default (via `%_include_frame_pointers`), +the `-fno-omit-frame-pointer` will be added on all architectures except i686 +and s390x. Additional flags will be added on specific architectures: + +* `-mno-omit-leaf-frame-pointer` on x86_64 and aarch64 + +### 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 exploitation techniques. Used on x86_64. +* `-mbranch-protection=standard`: Instrument binaries to guard against + ROP/JOP exploitation techniques. Used on aarch64. +* `-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: + +* **armhfp**: `-march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=hard` + selects an Arm subarchitecture based on the ARMv7-A architecture + with 16 64-bit floating point registers. `-mtune=cortex-8a` selects + tuning for the Cortex-A8 implementation (while preserving + compatibility with other ARMv7-A implementations). + `-mabi=aapcs-linux` switches to the AAPCS ABI for GNU/Linux. +* **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=power8 -mtune=power8` selects a minimum + supported CPU level of POWER8 (the first CPU with ppc64le support) + and tunes for POWER8. +* **s390x**: `-march=zEC12 -mtune=z13` specifies a minimum supported + CPU level of zEC12, while optimizing for a subsequent CPU generation + (z13). +* **x86_64**: `-mtune=generic` selects tuning which is expected to + beneficial for a broad range of current CPUs. Distribution-specific + defaults for `-march=x86-64-v2` or `-march=x86-64-v3` may be + applied. The default can be overriden (for any distribution) + by specifying `--target x86_64_v2`, `--target x86_64_v3`, + `--target x86_64_v4` in the `rpmbuild` invocation. + With the GCC toolchain, TLS descriptors are enabled using + `-mtls-dialect=gnu2`. +* **aarch64** does not have any architecture-specific tuning. + +### Vala-specific compiler flags + + * `-g`: causes valac to emit `#line` directives in the generated C + source code. This improves backtrace generation by causing gdb to + point to Vala source file and line number instead of the generated C + source when possible. + +# 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 pack-relative-relocs`: Use the portable `DT_RELR` scheme for + relative relocations, resulting in reduced startup time compared to + legacy architecture-specific relocations. (`-z pack-relative-relocs` + is currently disabled on aarch64 and s390x due to toolchain limitations.) +* `-z defs`: Refuse to link shared objects (DSOs) with undefined symbols + (optional, see above). + +For hardened builds, some more linker options are added to the +compiler driver command line. These can be disabled by undefining the +`%_hardened_build` macro - see above. + +* `-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. + Note: this option is added via adding a spec file to the compiler + driver command line (`-specs=/usr/lib/rpm/redhat/redhat-hardened-ld`) + rather than using the `-Wl` mechanism mentioned above. As a result + this option is only enabled if the compiler driver is gcc. +* `-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. + +In addition hardened builds default to converting a couple of linker +warning messages into errors, because they represent potential +missed hardening opportunities, and warnings in the linker's output are +often ignored. This behaviour can be turned off by undefining the +`%_hardened_build` macro as mentioned above, or by undefining the +`%_hardened_linker_errors` macro. The linker options enabled by this +feature are: + +* `--error-rwx-segments`: Generates an error if an output binary would + contain a loadable memory segment with read, write and execute + permissions. It will also generate an error if a thread local + storage (TLS) segment is created with execute permission. The + error can be disabled on an individual basis by adding the + `--no-warn-rwx-segments` option to the linker command line. +* `--error-execstack`: Generates an error if an output binary would + contain a stack that is held in memory with execute permission. + If a binary is being intentionally created with an executable stack + then the linker command line option `-z execstack` can be used to + indicate this. + +Note: these options are added via a spec file on the compiler driver +command line (`-specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors`) +rather than using the `-Wl` mechanism mentioned above. As a result +these options are only enabled if the compiler driver is gcc. In +addition the spec file only adds the options if the `-fuse-ld=...` +option has not been enabled. This prevents the options from being +used when the gold or lld linkers are enabled. + +# 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. + +Currently the -fexceptions and -fcf-protection flags are preserved +for binary compatibility with the languages the extensions are +built against. + +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..354a8cc --- /dev/null +++ b/SOURCES/config.guess @@ -0,0 +1,1774 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright 1992-2023 Free Software Foundation, Inc. + +# shellcheck disable=SC2006,SC2268 # see below for rationale + +timestamp='2023-06-23' + +# 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: +# https://git.savannah.gnu.org/cgit/config.git/plain/config.guess +# +# Please send patches to . + + +# The "shellcheck disable" line above the timestamp inhibits complaints +# about features and limitations of the classic Bourne shell that were +# superseded or lifted in POSIX. However, this script identifies a wide +# variety of pre-POSIX systems that do not have POSIX shells at all, and +# even some reasonably current systems (Solaris 10 as case-in-point) still +# have a pre-POSIX /bin/sh. + + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system '$me' is run on. + +Options: + -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-2023 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 + +# Just in case it came from the environment. +GUESS= + +# 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. + +tmp= +# shellcheck disable=SC2172 +trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 + +set_cc_for_build() { + # prevent multiple calls if $tmp is already set + test "$tmp" && return 0 + : "${TMPDIR=/tmp}" + # shellcheck disable=SC2039,SC3028 + { 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" 2>/dev/null) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } + dummy=$tmp/dummy + case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in + ,,) echo "int x;" > "$dummy.c" + for driver in cc gcc c89 c99 ; do + if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then + CC_FOR_BUILD=$driver + 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 +} + +# 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 ; 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/*) + LIBC=unknown + + set_cc_for_build + cat <<-EOF > "$dummy.c" + #include + #if defined(__UCLIBC__) + LIBC=uclibc + #elif defined(__dietlibc__) + LIBC=dietlibc + #elif defined(__GLIBC__) + LIBC=gnu + #else + #include + /* First heuristic to detect musl libc. */ + #ifdef __DEFINED_va_list + LIBC=musl + #endif + #endif + EOF + cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` + eval "$cc_set_libc" + + # Second heuristic to detect musl libc. + if [ "$LIBC" = unknown ] && + command -v ldd >/dev/null && + ldd --version 2>&1 | grep -q ^musl; then + LIBC=musl + fi + + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + if [ "$LIBC" = unknown ]; then + LIBC=gnu + fi + ;; +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". + UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ + /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ + /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ + echo unknown)` + case $UNAME_MACHINE_ARCH in + aarch64eb) machine=aarch64_be-unknown ;; + 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) + 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. + GUESS=$machine-${os}${release}${abi-} + ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE + ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE + ;; + *:SecBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'` + GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE + ;; + *:LibertyBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` + GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE + ;; + *:MidnightBSD:*:*) + GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE + ;; + *:ekkoBSD:*:*) + GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE + ;; + *:SolidBSD:*:*) + GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE + ;; + *:OS108:*:*) + GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE + ;; + macppc:MirBSD:*:*) + GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE + ;; + *:MirBSD:*:*) + GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE + ;; + *:Sortix:*:*) + GUESS=$UNAME_MACHINE-unknown-sortix + ;; + *:Twizzler:*:*) + GUESS=$UNAME_MACHINE-unknown-twizzler + ;; + *:Redox:*:*) + GUESS=$UNAME_MACHINE-unknown-redox + ;; + mips:OSF1:*.*) + GUESS=mips-dec-osf1 + ;; + alpha:OSF1:*:*) + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + trap '' 0 + 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. + OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + GUESS=$UNAME_MACHINE-dec-osf$OSF_REL + ;; + Amiga*:UNIX_System_V:4.0:*) + GUESS=m68k-unknown-sysv4 + ;; + *:[Aa]miga[Oo][Ss]:*:*) + GUESS=$UNAME_MACHINE-unknown-amigaos + ;; + *:[Mm]orph[Oo][Ss]:*:*) + GUESS=$UNAME_MACHINE-unknown-morphos + ;; + *:OS/390:*:*) + GUESS=i370-ibm-openedition + ;; + *:z/VM:*:*) + GUESS=s390-ibm-zvmoe + ;; + *:OS400:*:*) + GUESS=powerpc-ibm-os400 + ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + GUESS=arm-acorn-riscix$UNAME_RELEASE + ;; + arm*:riscos:*:*|arm*:RISCOS:*:*) + GUESS=arm-unknown-riscos + ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + GUESS=hppa1.1-hitachi-hiuxmpp + ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + case `(/bin/universe) 2>/dev/null` in + att) GUESS=pyramid-pyramid-sysv3 ;; + *) GUESS=pyramid-pyramid-bsd ;; + esac + ;; + NILE*:*:*:dcosx) + GUESS=pyramid-pyramid-svr4 + ;; + DRS?6000:unix:4.0:6*) + GUESS=sparc-icl-nx6 + ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) GUESS=sparc-icl-nx7 ;; + esac + ;; + s390x:SunOS:*:*) + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL + ;; + sun4H:SunOS:5.*:*) + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=sparc-hal-solaris2$SUN_REL + ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=sparc-sun-solaris2$SUN_REL + ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + GUESS=i386-pc-auroraux$UNAME_RELEASE + ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + 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 test "$CC_FOR_BUILD" != no_compiler_found; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH=x86_64 + fi + fi + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=$SUN_ARCH-pc-solaris2$SUN_REL + ;; + 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. + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=sparc-sun-solaris3$SUN_REL + ;; + 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'. + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` + GUESS=sparc-sun-sunos$SUN_REL + ;; + sun3*:SunOS:*:*) + GUESS=m68k-sun-sunos$UNAME_RELEASE + ;; + 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) + GUESS=m68k-sun-sunos$UNAME_RELEASE + ;; + sun4) + GUESS=sparc-sun-sunos$UNAME_RELEASE + ;; + esac + ;; + aushp:SunOS:*:*) + GUESS=sparc-auspex-sunos$UNAME_RELEASE + ;; + # 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:*:*) + GUESS=m68k-atari-mint$UNAME_RELEASE + ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + GUESS=m68k-atari-mint$UNAME_RELEASE + ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + GUESS=m68k-atari-mint$UNAME_RELEASE + ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + GUESS=m68k-milan-mint$UNAME_RELEASE + ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + GUESS=m68k-hades-mint$UNAME_RELEASE + ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + GUESS=m68k-unknown-mint$UNAME_RELEASE + ;; + m68k:machten:*:*) + GUESS=m68k-apple-machten$UNAME_RELEASE + ;; + powerpc:machten:*:*) + GUESS=powerpc-apple-machten$UNAME_RELEASE + ;; + RISC*:Mach:*:*) + GUESS=mips-dec-mach_bsd4.3 + ;; + RISC*:ULTRIX:*:*) + GUESS=mips-dec-ultrix$UNAME_RELEASE + ;; + VAX*:ULTRIX*:*:*) + GUESS=vax-dec-ultrix$UNAME_RELEASE + ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + GUESS=clipper-intergraph-clix$UNAME_RELEASE + ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + 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; } + GUESS=mips-mips-riscos$UNAME_RELEASE + ;; + Motorola:PowerMAX_OS:*:*) + GUESS=powerpc-motorola-powermax + ;; + Motorola:*:4.3:PL8-*) + GUESS=powerpc-harris-powermax + ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + GUESS=powerpc-harris-powermax + ;; + Night_Hawk:Power_UNIX:*:*) + GUESS=powerpc-harris-powerunix + ;; + m88k:CX/UX:7*:*) + GUESS=m88k-harris-cxux7 + ;; + m88k:*:4*:R4*) + GUESS=m88k-motorola-sysv4 + ;; + m88k:*:3*:R3*) + GUESS=m88k-motorola-sysv3 + ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 + then + if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ + test "$TARGET_BINARY_INTERFACE"x = x + then + GUESS=m88k-dg-dgux$UNAME_RELEASE + else + GUESS=m88k-dg-dguxbcs$UNAME_RELEASE + fi + else + GUESS=i586-dg-dgux$UNAME_RELEASE + fi + ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + GUESS=m88k-dolphin-sysv3 + ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + GUESS=m88k-motorola-sysv3 + ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + GUESS=m88k-tektronix-sysv3 + ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + GUESS=m68k-tektronix-bsd + ;; + *:IRIX*:*:*) + IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'` + GUESS=mips-sgi-irix$IRIX_REL + ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id + ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + GUESS=i386-ibm-aix + ;; + ia64:AIX:*:*) + if test -x /usr/bin/oslevel ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=$UNAME_VERSION.$UNAME_RELEASE + fi + GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV + ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + 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 + GUESS=$SYSTEM_NAME + else + GUESS=rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + GUESS=rs6000-ibm-aix3.2.4 + else + GUESS=rs6000-ibm-aix3.2 + fi + ;; + *: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 test -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 + GUESS=$IBM_ARCH-ibm-aix$IBM_REV + ;; + *:AIX:*:*) + GUESS=rs6000-ibm-aix + ;; + ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) + GUESS=romp-ibm-bsd4.4 + ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to + ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + GUESS=rs6000-bull-bosx + ;; + DPX/2?00:B.O.S.:*:*) + GUESS=m68k-bull-sysv3 + ;; + 9000/[34]??:4.3bsd:1.*:*) + GUESS=m68k-hp-bsd + ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + GUESS=m68k-hp-bsd4.4 + ;; + 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 test -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 test "$HP_ARCH" = ""; then + 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 test "$HP_ARCH" = hppa2.0w + then + 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 + GUESS=$HP_ARCH-hp-hpux$HPUX_REV + ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` + GUESS=ia64-hp-hpux$HPUX_REV + ;; + 3050*:HI-UX:*:*) + 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; } + GUESS=unknown-hitachi-hiuxwe2 + ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) + GUESS=hppa1.1-hp-bsd + ;; + 9000/8??:4.3bsd:*:*) + GUESS=hppa1.0-hp-bsd + ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + GUESS=hppa1.0-hp-mpeix + ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) + GUESS=hppa1.1-hp-osf + ;; + hp8??:OSF1:*:*) + GUESS=hppa1.0-hp-osf + ;; + i*86:OSF1:*:*) + if test -x /usr/sbin/sysversion ; then + GUESS=$UNAME_MACHINE-unknown-osf1mk + else + GUESS=$UNAME_MACHINE-unknown-osf1 + fi + ;; + parisc*:Lites*:*:*) + GUESS=hppa1.1-hp-lites + ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + GUESS=c1-convex-bsd + ;; + 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*:*) + GUESS=c34-convex-bsd + ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + GUESS=c38-convex-bsd + ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + GUESS=c4-convex-bsd + ;; + CRAY*Y-MP:*:*:*) + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=ymp-cray-unicos$CRAY_REL + ;; + 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:*:*:*) + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=t90-cray-unicos$CRAY_REL + ;; + CRAY*T3E:*:*:*) + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=alphaev5-cray-unicosmk$CRAY_REL + ;; + CRAY*SV1:*:*:*) + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=sv1-cray-unicos$CRAY_REL + ;; + *:UNICOS/mp:*:*) + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=craynv-cray-unicosmp$CRAY_REL + ;; + 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/ /_/'` + GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} + ;; + 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/ /_/'` + GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} + ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE + ;; + sparc*:BSD/OS:*:*) + GUESS=sparc-unknown-bsdi$UNAME_RELEASE + ;; + *:BSD/OS:*:*) + GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE + ;; + arm:FreeBSD:*:*) + UNAME_PROCESSOR=`uname -p` + set_cc_for_build + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` + GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi + else + FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` + GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf + fi + ;; + *:FreeBSD:*:*) + UNAME_PROCESSOR=`/usr/bin/uname -p` + case $UNAME_PROCESSOR in + amd64) + UNAME_PROCESSOR=x86_64 ;; + i386) + UNAME_PROCESSOR=i586 ;; + esac + FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` + GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL + ;; + i*:CYGWIN*:*) + GUESS=$UNAME_MACHINE-pc-cygwin + ;; + *:MINGW64*:*) + GUESS=$UNAME_MACHINE-pc-mingw64 + ;; + *:MINGW*:*) + GUESS=$UNAME_MACHINE-pc-mingw32 + ;; + *:MSYS*:*) + GUESS=$UNAME_MACHINE-pc-msys + ;; + i*:PW*:*) + GUESS=$UNAME_MACHINE-pc-pw32 + ;; + *:SerenityOS:*:*) + GUESS=$UNAME_MACHINE-pc-serenity + ;; + *:Interix*:*) + case $UNAME_MACHINE in + x86) + GUESS=i586-pc-interix$UNAME_RELEASE + ;; + authenticamd | genuineintel | EM64T) + GUESS=x86_64-unknown-interix$UNAME_RELEASE + ;; + IA64) + GUESS=ia64-unknown-interix$UNAME_RELEASE + ;; + esac ;; + i*:UWIN*:*) + GUESS=$UNAME_MACHINE-pc-uwin + ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + GUESS=x86_64-pc-cygwin + ;; + prep*:SunOS:5.*:*) + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=powerpcle-unknown-solaris2$SUN_REL + ;; + *:GNU:*:*) + # the GNU system + GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'` + GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'` + GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL + ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"` + GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` + GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC + ;; + x86_64:[Mm]anagarm:*:*|i?86:[Mm]anagarm:*:*) + GUESS="$UNAME_MACHINE-pc-managarm-mlibc" + ;; + *:[Mm]anagarm:*:*) + GUESS="$UNAME_MACHINE-unknown-managarm-mlibc" + ;; + *:Minix:*:*) + GUESS=$UNAME_MACHINE-unknown-minix + ;; + aarch64:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` 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 + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + arm*:Linux:*:*) + set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi + else + GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf + fi + fi + ;; + avr32*:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + cris:Linux:*:*) + GUESS=$UNAME_MACHINE-axis-linux-$LIBC + ;; + crisv32:Linux:*:*) + GUESS=$UNAME_MACHINE-axis-linux-$LIBC + ;; + e2k:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + frv:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + hexagon:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + i*86:Linux:*:*) + GUESS=$UNAME_MACHINE-pc-linux-$LIBC + ;; + ia64:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + k1om:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + loongarch32:Linux:*:* | loongarch64:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + m32r*:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + m68*:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + mips:Linux:*:* | mips64:Linux:*:*) + set_cc_for_build + IS_GLIBC=0 + test x"${LIBC}" = xgnu && IS_GLIBC=1 + sed 's/^ //' << EOF > "$dummy.c" + #undef CPU + #undef mips + #undef mipsel + #undef mips64 + #undef mips64el + #if ${IS_GLIBC} && defined(_ABI64) + LIBCABI=gnuabi64 + #else + #if ${IS_GLIBC} && defined(_ABIN32) + LIBCABI=gnuabin32 + #else + LIBCABI=${LIBC} + #endif + #endif + + #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 + CPU=mipsisa64r6 + #else + #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 + CPU=mipsisa32r6 + #else + #if defined(__mips64) + CPU=mips64 + #else + CPU=mips + #endif + #endif + #endif + + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + MIPS_ENDIAN=el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + MIPS_ENDIAN= + #else + MIPS_ENDIAN= + #endif + #endif +EOF + cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'` + eval "$cc_set_vars" + test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } + ;; + mips64el:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + openrisc*:Linux:*:*) + GUESS=or1k-unknown-linux-$LIBC + ;; + or32:Linux:*:* | or1k*:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + padre:Linux:*:*) + GUESS=sparc-unknown-linux-$LIBC + ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + GUESS=hppa64-unknown-linux-$LIBC + ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;; + PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;; + *) GUESS=hppa-unknown-linux-$LIBC ;; + esac + ;; + ppc64:Linux:*:*) + GUESS=powerpc64-unknown-linux-$LIBC + ;; + ppc:Linux:*:*) + GUESS=powerpc-unknown-linux-$LIBC + ;; + ppc64le:Linux:*:*) + GUESS=powerpc64le-unknown-linux-$LIBC + ;; + ppcle:Linux:*:*) + GUESS=powerpcle-unknown-linux-$LIBC + ;; + riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + s390:Linux:*:* | s390x:Linux:*:*) + GUESS=$UNAME_MACHINE-ibm-linux-$LIBC + ;; + sh64*:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + sh*:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + tile*:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + vax:Linux:*:*) + GUESS=$UNAME_MACHINE-dec-linux-$LIBC + ;; + x86_64:Linux:*:*) + set_cc_for_build + CPU=$UNAME_MACHINE + LIBCABI=$LIBC + if test "$CC_FOR_BUILD" != no_compiler_found; then + ABI=64 + sed 's/^ //' << EOF > "$dummy.c" + #ifdef __i386__ + ABI=x86 + #else + #ifdef __ILP32__ + ABI=x32 + #endif + #endif +EOF + cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'` + eval "$cc_set_abi" + case $ABI in + x86) CPU=i686 ;; + x32) LIBCABI=${LIBC}x32 ;; + esac + fi + GUESS=$CPU-pc-linux-$LIBCABI + ;; + xtensa*:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + 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. + GUESS=i386-sequent-sysv4 + ;; + 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. + GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION + ;; + i*86:OS/2:*:*) + # If we were able to find 'uname', then EMX Unix compatibility + # is probably installed. + GUESS=$UNAME_MACHINE-pc-os2-emx + ;; + i*86:XTS-300:*:STOP) + GUESS=$UNAME_MACHINE-unknown-stop + ;; + i*86:atheos:*:*) + GUESS=$UNAME_MACHINE-unknown-atheos + ;; + i*86:syllable:*:*) + GUESS=$UNAME_MACHINE-pc-syllable + ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + GUESS=i386-unknown-lynxos$UNAME_RELEASE + ;; + i*86:*DOS:*:*) + GUESS=$UNAME_MACHINE-pc-msdosdjgpp + ;; + i*86:*:4.*:*) + UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL + else + GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL + fi + ;; + 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 + GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + ;; + 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 + GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL + else + GUESS=$UNAME_MACHINE-pc-sysv32 + fi + ;; + 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. + GUESS=i586-pc-msdosdjgpp + ;; + Intel:Mach:3*:*) + GUESS=i386-pc-mach3 + ;; + paragon:*:*:*) + GUESS=i860-intel-osf1 + ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4 + fi + ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + GUESS=m68010-convergent-sysv + ;; + mc68k:UNIX:SYSTEM5:3.51m) + GUESS=m68k-convergent-sysv + ;; + M680?0:D-NIX:5.3:*) + GUESS=m68k-diab-dnix + ;; + 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*:*) + GUESS=m68k-unknown-lynxos$UNAME_RELEASE + ;; + mc68030:UNIX_System_V:4.*:*) + GUESS=m68k-atari-sysv4 + ;; + TSUNAMI:LynxOS:2.*:*) + GUESS=sparc-unknown-lynxos$UNAME_RELEASE + ;; + rs6000:LynxOS:2.*:*) + GUESS=rs6000-unknown-lynxos$UNAME_RELEASE + ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + GUESS=powerpc-unknown-lynxos$UNAME_RELEASE + ;; + SM[BE]S:UNIX_SV:*:*) + GUESS=mips-dde-sysv$UNAME_RELEASE + ;; + RM*:ReliantUNIX-*:*:*) + GUESS=mips-sni-sysv4 + ;; + RM*:SINIX-*:*:*) + GUESS=mips-sni-sysv4 + ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + GUESS=$UNAME_MACHINE-sni-sysv4 + else + GUESS=ns32k-sni-sysv + fi + ;; + PENTIUM:*:4.0*:*) # Unisys 'ClearPath HMP IX 4000' SVR4/MP effort + # says + GUESS=i586-unisys-sysv4 + ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + GUESS=hppa1.1-stratus-sysv4 + ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + GUESS=i860-stratus-sysv4 + ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + GUESS=$UNAME_MACHINE-stratus-vos + ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + GUESS=hppa1.1-stratus-vos + ;; + mc68*:A/UX:*:*) + GUESS=m68k-apple-aux$UNAME_RELEASE + ;; + news*:NEWS-OS:6*:*) + GUESS=mips-sony-newsos6 + ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if test -d /usr/nec; then + GUESS=mips-nec-sysv$UNAME_RELEASE + else + GUESS=mips-unknown-sysv$UNAME_RELEASE + fi + ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + GUESS=powerpc-be-beos + ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + GUESS=powerpc-apple-beos + ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + GUESS=i586-pc-beos + ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + GUESS=i586-pc-haiku + ;; + ppc:Haiku:*:*) # Haiku running on Apple PowerPC + GUESS=powerpc-apple-haiku + ;; + *:Haiku:*:*) # Haiku modern gcc (not bound by BeOS compat) + GUESS=$UNAME_MACHINE-unknown-haiku + ;; + SX-4:SUPER-UX:*:*) + GUESS=sx4-nec-superux$UNAME_RELEASE + ;; + SX-5:SUPER-UX:*:*) + GUESS=sx5-nec-superux$UNAME_RELEASE + ;; + SX-6:SUPER-UX:*:*) + GUESS=sx6-nec-superux$UNAME_RELEASE + ;; + SX-7:SUPER-UX:*:*) + GUESS=sx7-nec-superux$UNAME_RELEASE + ;; + SX-8:SUPER-UX:*:*) + GUESS=sx8-nec-superux$UNAME_RELEASE + ;; + SX-8R:SUPER-UX:*:*) + GUESS=sx8r-nec-superux$UNAME_RELEASE + ;; + SX-ACE:SUPER-UX:*:*) + GUESS=sxace-nec-superux$UNAME_RELEASE + ;; + Power*:Rhapsody:*:*) + GUESS=powerpc-apple-rhapsody$UNAME_RELEASE + ;; + *:Rhapsody:*:*) + GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE + ;; + arm64:Darwin:*:*) + GUESS=aarch64-apple-darwin$UNAME_RELEASE + ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + if command -v xcode-select > /dev/null 2> /dev/null && \ + ! xcode-select --print-path > /dev/null 2> /dev/null ; then + # Avoid executing cc if there is no toolchain installed as + # cc will be a stub that puts up a graphical alert + # prompting the user to install developer tools. + CC_FOR_BUILD=no_compiler_found + else + set_cc_for_build + fi + if test "$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 + # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc + if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_PPC >/dev/null + then + UNAME_PROCESSOR=powerpc + fi + elif test "$UNAME_PROCESSOR" = i386 ; then + # uname -m returns i386 or x86_64 + UNAME_PROCESSOR=$UNAME_MACHINE + fi + GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE + ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = x86; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE + ;; + *:QNX:*:4*) + GUESS=i386-pc-qnx + ;; + NEO-*:NONSTOP_KERNEL:*:*) + GUESS=neo-tandem-nsk$UNAME_RELEASE + ;; + NSE-*:NONSTOP_KERNEL:*:*) + GUESS=nse-tandem-nsk$UNAME_RELEASE + ;; + NSR-*:NONSTOP_KERNEL:*:*) + GUESS=nsr-tandem-nsk$UNAME_RELEASE + ;; + NSV-*:NONSTOP_KERNEL:*:*) + GUESS=nsv-tandem-nsk$UNAME_RELEASE + ;; + NSX-*:NONSTOP_KERNEL:*:*) + GUESS=nsx-tandem-nsk$UNAME_RELEASE + ;; + *:NonStop-UX:*:*) + GUESS=mips-compaq-nonstopux + ;; + BS2000:POSIX*:*:*) + GUESS=bs2000-siemens-sysv + ;; + DS/*:UNIX_System_V:*:*) + GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE + ;; + *: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 + elif test "x${cputype-}" != x; then + UNAME_MACHINE=$cputype + fi + GUESS=$UNAME_MACHINE-unknown-plan9 + ;; + *:TOPS-10:*:*) + GUESS=pdp10-unknown-tops10 + ;; + *:TENEX:*:*) + GUESS=pdp10-unknown-tenex + ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + GUESS=pdp10-dec-tops20 + ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + GUESS=pdp10-xkl-tops20 + ;; + *:TOPS-20:*:*) + GUESS=pdp10-unknown-tops20 + ;; + *:ITS:*:*) + GUESS=pdp10-unknown-its + ;; + SEI:*:*:SEIUX) + GUESS=mips-sei-seiux$UNAME_RELEASE + ;; + *:DragonFly:*:*) + DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` + GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL + ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case $UNAME_MACHINE in + A*) GUESS=alpha-dec-vms ;; + I*) GUESS=ia64-dec-vms ;; + V*) GUESS=vax-dec-vms ;; + esac ;; + *:XENIX:*:SysV) + GUESS=i386-pc-xenix + ;; + i*86:skyos:*:*) + SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'` + GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL + ;; + i*86:rdos:*:*) + GUESS=$UNAME_MACHINE-pc-rdos + ;; + i*86:Fiwix:*:*) + GUESS=$UNAME_MACHINE-pc-fiwix + ;; + *:AROS:*:*) + GUESS=$UNAME_MACHINE-unknown-aros + ;; + x86_64:VMkernel:*:*) + GUESS=$UNAME_MACHINE-unknown-esx + ;; + amd64:Isilon\ OneFS:*:*) + GUESS=x86_64-unknown-onefs + ;; + *:Unleashed:*:*) + GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE + ;; +esac + +# Do we have a guess based on uname results? +if test "x$GUESS" != x; then + echo "$GUESS" + exit +fi + +# No uname command or uname output not recognized. +set_cc_for_build +cat > "$dummy.c" < +#include +#endif +#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) +#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) +#include +#if defined(_SIZE_T_) || defined(SIGLOST) +#include +#endif +#endif +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); +#endif + +#if defined (vax) +#if !defined (ultrix) +#include +#if defined (BSD) +#if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +#else +#if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +#else + printf ("vax-dec-bsd\n"); exit (0); +#endif +#endif +#else + printf ("vax-dec-bsd\n"); exit (0); +#endif +#else +#if defined(_SIZE_T_) || defined(SIGLOST) + struct utsname un; + uname (&un); + printf ("vax-dec-ultrix%s\n", un.release); exit (0); +#else + printf ("vax-dec-ultrix\n"); exit (0); +#endif +#endif +#endif +#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) +#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) +#if defined(_SIZE_T_) || defined(SIGLOST) + struct utsname *un; + uname (&un); + printf ("mips-dec-ultrix%s\n", un.release); exit (0); +#else + printf ("mips-dec-ultrix\n"); exit (0); +#endif +#endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. +test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } + +echo "$0: unable to guess system type" >&2 + +case $UNAME_MACHINE:$UNAME_SYSTEM in + mips:Linux | mips64:Linux) + # If we got here on MIPS GNU/Linux, output extra information. + cat >&2 <&2 <&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 +fi + +exit 1 + +# Local variables: +# eval: (add-hook 'before-save-hook '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..f6ede1d --- /dev/null +++ b/SOURCES/config.sub @@ -0,0 +1,1907 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright 1992-2023 Free Software Foundation, Inc. + +# shellcheck disable=SC2006,SC2268 # see below for rationale + +timestamp='2023-06-23' + +# 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: +# https://git.savannah.gnu.org/cgit/config.git/plain/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. + +# The "shellcheck disable" line above the timestamp inhibits complaints +# about features and limitations of the classic Bourne shell that were +# superseded or lifted in POSIX. However, this script identifies a wide +# variety of pre-POSIX systems that do not have POSIX shells at all, and +# even some reasonably current systems (Solaris 10 as case-in-point) still +# have a pre-POSIX /bin/sh. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS + +Canonicalize a configuration name. + +Options: + -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-2023 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 ;; + + *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 + +# Split fields of configuration type +# shellcheck disable=SC2162 +saved_IFS=$IFS +IFS="-" read field1 field2 field3 field4 <&2 + exit 1 + ;; + *-*-*-*) + basic_machine=$field1-$field2 + basic_os=$field3-$field4 + ;; + *-*-*) + # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two + # parts + maybe_os=$field2-$field3 + case $maybe_os in + nto-qnx* | linux-* | uclinux-uclibc* \ + | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ + | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ + | storm-chaos* | os2-emx* | rtmk-nova* | managarm-*) + basic_machine=$field1 + basic_os=$maybe_os + ;; + android-linux) + basic_machine=$field1-unknown + basic_os=linux-android + ;; + *) + basic_machine=$field1-$field2 + basic_os=$field3 + ;; + esac + ;; + *-*) + # A lone config we happen to match not fitting any pattern + case $field1-$field2 in + decstation-3100) + basic_machine=mips-dec + basic_os= + ;; + *-*) + # Second component is usually, but not always the OS + case $field2 in + # Prevent following clause from handling this valid os + sun*os*) + basic_machine=$field1 + basic_os=$field2 + ;; + zephyr*) + basic_machine=$field1-unknown + basic_os=$field2 + ;; + # Manufacturers + dec* | mips* | sequent* | encore* | pc533* | 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* | sim | cisco \ + | oki | wec | wrs | winbond) + basic_machine=$field1-$field2 + basic_os= + ;; + *) + basic_machine=$field1 + basic_os=$field2 + ;; + esac + ;; + esac + ;; + *) + # Convert single-component short-hands not valid as part of + # multi-component configurations. + case $field1 in + 386bsd) + basic_machine=i386-pc + basic_os=bsd + ;; + a29khif) + basic_machine=a29k-amd + basic_os=udi + ;; + adobe68k) + basic_machine=m68010-adobe + basic_os=scout + ;; + alliant) + basic_machine=fx80-alliant + basic_os= + ;; + altos | altos3068) + basic_machine=m68k-altos + basic_os= + ;; + am29k) + basic_machine=a29k-none + basic_os=bsd + ;; + amdahl) + basic_machine=580-amdahl + basic_os=sysv + ;; + amiga) + basic_machine=m68k-unknown + basic_os= + ;; + amigaos | amigados) + basic_machine=m68k-unknown + basic_os=amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + basic_os=sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + basic_os=sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + basic_os=bsd + ;; + aros) + basic_machine=i386-pc + basic_os=aros + ;; + aux) + basic_machine=m68k-apple + basic_os=aux + ;; + balance) + basic_machine=ns32k-sequent + basic_os=dynix + ;; + blackfin) + basic_machine=bfin-unknown + basic_os=linux + ;; + cegcc) + basic_machine=arm-unknown + basic_os=cegcc + ;; + convex-c1) + basic_machine=c1-convex + basic_os=bsd + ;; + convex-c2) + basic_machine=c2-convex + basic_os=bsd + ;; + convex-c32) + basic_machine=c32-convex + basic_os=bsd + ;; + convex-c34) + basic_machine=c34-convex + basic_os=bsd + ;; + convex-c38) + basic_machine=c38-convex + basic_os=bsd + ;; + cray) + basic_machine=j90-cray + basic_os=unicos + ;; + crds | unos) + basic_machine=m68k-crds + basic_os= + ;; + da30) + basic_machine=m68k-da30 + basic_os= + ;; + decstation | pmax | pmin | dec3100 | decstatn) + basic_machine=mips-dec + basic_os= + ;; + delta88) + basic_machine=m88k-motorola + basic_os=sysv3 + ;; + dicos) + basic_machine=i686-pc + basic_os=dicos + ;; + djgpp) + basic_machine=i586-pc + basic_os=msdosdjgpp + ;; + ebmon29k) + basic_machine=a29k-amd + basic_os=ebmon + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + basic_os=ose + ;; + gmicro) + basic_machine=tron-gmicro + basic_os=sysv + ;; + go32) + basic_machine=i386-pc + basic_os=go32 + ;; + h8300hms) + basic_machine=h8300-hitachi + basic_os=hms + ;; + h8300xray) + basic_machine=h8300-hitachi + basic_os=xray + ;; + h8500hms) + basic_machine=h8500-hitachi + basic_os=hms + ;; + harris) + basic_machine=m88k-harris + basic_os=sysv3 + ;; + hp300 | hp300hpux) + basic_machine=m68k-hp + basic_os=hpux + ;; + hp300bsd) + basic_machine=m68k-hp + basic_os=bsd + ;; + hppaosf) + basic_machine=hppa1.1-hp + basic_os=osf + ;; + hppro) + basic_machine=hppa1.1-hp + basic_os=proelf + ;; + i386mach) + basic_machine=i386-mach + basic_os=mach + ;; + isi68 | isi) + basic_machine=m68k-isi + basic_os=sysv + ;; + m68knommu) + basic_machine=m68k-unknown + basic_os=linux + ;; + magnum | m3230) + basic_machine=mips-mips + basic_os=sysv + ;; + merlin) + basic_machine=ns32k-utek + basic_os=sysv + ;; + mingw64) + basic_machine=x86_64-pc + basic_os=mingw64 + ;; + mingw32) + basic_machine=i686-pc + basic_os=mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + basic_os=mingw32ce + ;; + monitor) + basic_machine=m68k-rom68k + basic_os=coff + ;; + morphos) + basic_machine=powerpc-unknown + basic_os=morphos + ;; + moxiebox) + basic_machine=moxie-unknown + basic_os=moxiebox + ;; + msdos) + basic_machine=i386-pc + basic_os=msdos + ;; + msys) + basic_machine=i686-pc + basic_os=msys + ;; + mvs) + basic_machine=i370-ibm + basic_os=mvs + ;; + nacl) + basic_machine=le32-unknown + basic_os=nacl + ;; + ncr3000) + basic_machine=i486-ncr + basic_os=sysv4 + ;; + netbsd386) + basic_machine=i386-pc + basic_os=netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + basic_os=linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + basic_os=newsos + ;; + news1000) + basic_machine=m68030-sony + basic_os=newsos + ;; + necv70) + basic_machine=v70-nec + basic_os=sysv + ;; + nh3000) + basic_machine=m68k-harris + basic_os=cxux + ;; + nh[45]000) + basic_machine=m88k-harris + basic_os=cxux + ;; + nindy960) + basic_machine=i960-intel + basic_os=nindy + ;; + mon960) + basic_machine=i960-intel + basic_os=mon960 + ;; + nonstopux) + basic_machine=mips-compaq + basic_os=nonstopux + ;; + os400) + basic_machine=powerpc-ibm + basic_os=os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + basic_os=ose + ;; + os68k) + basic_machine=m68k-none + basic_os=os68k + ;; + paragon) + basic_machine=i860-intel + basic_os=osf + ;; + parisc) + basic_machine=hppa-unknown + basic_os=linux + ;; + psp) + basic_machine=mipsallegrexel-sony + basic_os=psp + ;; + pw32) + basic_machine=i586-unknown + basic_os=pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + basic_os=rdos + ;; + rdos32) + basic_machine=i386-pc + basic_os=rdos + ;; + rom68k) + basic_machine=m68k-rom68k + basic_os=coff + ;; + sa29200) + basic_machine=a29k-amd + basic_os=udi + ;; + sei) + basic_machine=mips-sei + basic_os=seiux + ;; + sequent) + basic_machine=i386-sequent + basic_os= + ;; + sps7) + basic_machine=m68k-bull + basic_os=sysv2 + ;; + st2000) + basic_machine=m68k-tandem + basic_os= + ;; + stratus) + basic_machine=i860-stratus + basic_os=sysv4 + ;; + sun2) + basic_machine=m68000-sun + basic_os= + ;; + sun2os3) + basic_machine=m68000-sun + basic_os=sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + basic_os=sunos4 + ;; + sun3) + basic_machine=m68k-sun + basic_os= + ;; + sun3os3) + basic_machine=m68k-sun + basic_os=sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + basic_os=sunos4 + ;; + sun4) + basic_machine=sparc-sun + basic_os= + ;; + sun4os3) + basic_machine=sparc-sun + basic_os=sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + basic_os=sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + basic_os=solaris2 + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + basic_os= + ;; + sv1) + basic_machine=sv1-cray + basic_os=unicos + ;; + symmetry) + basic_machine=i386-sequent + basic_os=dynix + ;; + t3e) + basic_machine=alphaev5-cray + basic_os=unicos + ;; + t90) + basic_machine=t90-cray + basic_os=unicos + ;; + toad1) + basic_machine=pdp10-xkl + basic_os=tops20 + ;; + tpf) + basic_machine=s390x-ibm + basic_os=tpf + ;; + udi29k) + basic_machine=a29k-amd + basic_os=udi + ;; + ultra3) + basic_machine=a29k-nyu + basic_os=sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + basic_os=none + ;; + vaxv) + basic_machine=vax-dec + basic_os=sysv + ;; + vms) + basic_machine=vax-dec + basic_os=vms + ;; + vsta) + basic_machine=i386-pc + basic_os=vsta + ;; + vxworks960) + basic_machine=i960-wrs + basic_os=vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + basic_os=vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + basic_os=vxworks + ;; + xbox) + basic_machine=i686-pc + basic_os=mingw32 + ;; + ymp) + basic_machine=ymp-cray + basic_os=unicos + ;; + *) + basic_machine=$1 + basic_os= + ;; + esac + ;; +esac + +# Decode 1-component or ad-hoc basic machines +case $basic_machine in + # 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) + cpu=hppa1.1 + vendor=winbond + ;; + op50n) + cpu=hppa1.1 + vendor=oki + ;; + op60c) + cpu=hppa1.1 + vendor=oki + ;; + ibm*) + cpu=i370 + vendor=ibm + ;; + orion105) + cpu=clipper + vendor=highlevel + ;; + mac | mpw | mac-mpw) + cpu=m68k + vendor=apple + ;; + pmac | pmac-mpw) + cpu=powerpc + vendor=apple + ;; + + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + cpu=m68000 + vendor=att + ;; + 3b*) + cpu=we32k + vendor=att + ;; + bluegene*) + cpu=powerpc + vendor=ibm + basic_os=cnk + ;; + decsystem10* | dec10*) + cpu=pdp10 + vendor=dec + basic_os=tops10 + ;; + decsystem20* | dec20*) + cpu=pdp10 + vendor=dec + basic_os=tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + cpu=m68k + vendor=motorola + ;; + dpx2*) + cpu=m68k + vendor=bull + basic_os=sysv3 + ;; + encore | umax | mmax) + cpu=ns32k + vendor=encore + ;; + elxsi) + cpu=elxsi + vendor=elxsi + basic_os=${basic_os:-bsd} + ;; + fx2800) + cpu=i860 + vendor=alliant + ;; + genix) + cpu=ns32k + vendor=ns + ;; + h3050r* | hiux*) + cpu=hppa1.1 + vendor=hitachi + basic_os=hiuxwe2 + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + cpu=hppa1.0 + vendor=hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + cpu=m68000 + vendor=hp + ;; + hp9k3[2-9][0-9]) + cpu=m68k + vendor=hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + cpu=hppa1.0 + vendor=hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + cpu=hppa1.1 + vendor=hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + cpu=hppa1.1 + vendor=hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + cpu=hppa1.1 + vendor=hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + cpu=hppa1.1 + vendor=hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + cpu=hppa1.0 + vendor=hp + ;; + i*86v32) + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=sysv32 + ;; + i*86v4*) + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=sysv4 + ;; + i*86v) + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=sysv + ;; + i*86sol2) + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=solaris2 + ;; + j90 | j90-cray) + cpu=j90 + vendor=cray + basic_os=${basic_os:-unicos} + ;; + iris | iris4d) + cpu=mips + vendor=sgi + case $basic_os in + irix*) + ;; + *) + basic_os=irix4 + ;; + esac + ;; + miniframe) + cpu=m68000 + vendor=convergent + ;; + *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) + cpu=m68k + vendor=atari + basic_os=mint + ;; + news-3600 | risc-news) + cpu=mips + vendor=sony + basic_os=newsos + ;; + next | m*-next) + cpu=m68k + vendor=next + case $basic_os in + openstep*) + ;; + nextstep*) + ;; + ns2*) + basic_os=nextstep2 + ;; + *) + basic_os=nextstep3 + ;; + esac + ;; + np1) + cpu=np1 + vendor=gould + ;; + op50n-* | op60c-*) + cpu=hppa1.1 + vendor=oki + basic_os=proelf + ;; + pa-hitachi) + cpu=hppa1.1 + vendor=hitachi + basic_os=hiuxwe2 + ;; + pbd) + cpu=sparc + vendor=tti + ;; + pbb) + cpu=m68k + vendor=tti + ;; + pc532) + cpu=ns32k + vendor=pc532 + ;; + pn) + cpu=pn + vendor=gould + ;; + power) + cpu=power + vendor=ibm + ;; + ps2) + cpu=i386 + vendor=ibm + ;; + rm[46]00) + cpu=mips + vendor=siemens + ;; + rtpc | rtpc-*) + cpu=romp + vendor=ibm + ;; + sde) + cpu=mipsisa32 + vendor=sde + basic_os=${basic_os:-elf} + ;; + simso-wrs) + cpu=sparclite + vendor=wrs + basic_os=vxworks + ;; + tower | tower-32) + cpu=m68k + vendor=ncr + ;; + vpp*|vx|vx-*) + cpu=f301 + vendor=fujitsu + ;; + w65) + cpu=w65 + vendor=wdc + ;; + w89k-*) + cpu=hppa1.1 + vendor=winbond + basic_os=proelf + ;; + none) + cpu=none + vendor=none + ;; + leon|leon[3-9]) + cpu=sparc + vendor=$basic_machine + ;; + leon-*|leon[3-9]-*) + cpu=sparc + vendor=`echo "$basic_machine" | sed 's/-.*//'` + ;; + + *-*) + # shellcheck disable=SC2162 + saved_IFS=$IFS + IFS="-" read cpu vendor <&2 + exit 1 + ;; + esac + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $vendor in + digital*) + vendor=dec + ;; + commodore*) + vendor=cbm + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if test x$basic_os != x +then + +# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just +# set os. +case $basic_os in + gnu/linux*) + kernel=linux + os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` + ;; + os2-emx) + kernel=os2 + os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` + ;; + nto-qnx*) + kernel=nto + os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` + ;; + *-*) + # shellcheck disable=SC2162 + saved_IFS=$IFS + IFS="-" read kernel os <&2 + exit 1 + ;; +esac + +# As a final step for OS-related things, validate the OS-kernel combination +# (given a valid OS), if there is a kernel. +case $kernel-$os in + linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \ + | linux-musl* | linux-relibc* | linux-uclibc* | linux-mlibc* ) + ;; + uclinux-uclibc* ) + ;; + managarm-mlibc* | managarm-kernel* ) + ;; + -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* | -mlibc* ) + # These are just libc implementations, not actual OSes, and thus + # require a kernel. + echo "Invalid configuration '$1': libc '$os' needs explicit kernel." 1>&2 + exit 1 + ;; + -kernel* ) + echo "Invalid configuration '$1': '$os' needs explicit kernel." 1>&2 + exit 1 + ;; + *-kernel* ) + echo "Invalid configuration '$1': '$kernel' does not support '$os'." 1>&2 + exit 1 + ;; + kfreebsd*-gnu* | kopensolaris*-gnu*) + ;; + vxworks-simlinux | vxworks-simwindows | vxworks-spe) + ;; + nto-qnx*) + ;; + os2-emx) + ;; + *-eabi* | *-gnueabi*) + ;; + -*) + # Blank kernel with real OS is always fine. + ;; + *-*) + echo "Invalid configuration '$1': Kernel '$kernel' not known to work with OS '$os'." 1>&2 + exit 1 + ;; +esac + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +case $vendor in + unknown) + case $cpu-$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 + ;; + *-clix*) + vendor=intergraph + ;; + *-mvs* | *-opened*) + vendor=ibm + ;; + *-os400*) + vendor=ibm + ;; + s390-* | s390x-*) + 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 + ;; +esac + +echo "$cpu-$vendor-${kernel:+$kernel-}$os" +exit + +# Local variables: +# eval: (add-hook 'before-save-hook '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..cc0d3ea --- /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 { + grep -Eq "(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/gpgverify b/SOURCES/gpgverify new file mode 100755 index 0000000..93a60d1 --- /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 program +# 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..e96b4e8 --- /dev/null +++ b/SOURCES/macros @@ -0,0 +1,479 @@ +# 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 +%_runstatedir /run + +%_pkgdocdir %{_docdir}/%{name} +%_docdir_fmt %%{NAME} + +%_fmoddir %{_libdir}/gfortran/modules + +%source_date_epoch_from_changelog 1 +%clamp_mtime_to_source_date_epoch %source_date_epoch_from_changelog + +%_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 macros to use for invoking compilers in spec files for packages that +# want to use the default compiler and don't care which compiler that is. +%build_cc %{__cc} +%build_cxx %{__cxx} +%build_cpp %{__cpp} + +#============================================================================== +# ---- 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 %{__build_flags_lang_c} %{?_distro_extra_cflags} + +# C++ compiler flags. This is traditionally called CXXFLAGS in makefiles. +%build_cxxflags %{__build_flags_lang_cxx} %{?_distro_extra_cxxflags} + +# Fortran compiler flags. Makefiles use both FFLAGS and FCFLAGS as +# the corresponding variable names. +%build_fflags %{__build_flags_common} -I%{_fmoddir} %{?_distro_extra_fflags} + +# Vala compiler flags. This is used to set VALAFLAGS. +%build_valaflags -g + +# 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. +%_clang_extra_ldflags %{?_lto_cflags} + +# Link editor flags. This is usually called LDFLAGS in makefiles. +# (Some makefiles use LFLAGS instead.) The default value assumes that +# the flags, while intended for ld, are still passed through the gcc +# compiler driver. At the beginning of %%build, the environment +# variable RPM_LD_FLAGS to this value. +%build_ldflags -Wl,-z,relro %{_ld_as_needed_flags} %{_ld_symbols_flags} %{_ld_pack_relocs_flags} %{_hardened_ldflags} %{_annotation_ldflags} %[ "%{toolchain}" == "clang" ? "%{?_clang_extra_ldflags}" : "" ] %{_build_id_flags} %{?_package_note_flags} %{?_distro_extra_ldflags} + +# Expands to shell code to set the compiler/linker environment +# variables CFLAGS, CXXFLAGS, FFLAGS, FCFLAGS, VALAFLAGS, 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. +# RUSTFLAGS is only set when %%{build_rustflags} is available. +%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 ; \ + VALAFLAGS="${VALAFLAGS:-%{build_valaflags}}" ; export VALAFLAGS ;%{?build_rustflags: + RUSTFLAGS="${RUSTFLAGS:-%{build_rustflags}}" ; export RUSTFLAGS ;} \ + 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 + +# Automatically use set_build_flags macro for build, check, and +# install phases. +# Use "%undefine _auto_set_build_flags" to disable" +%_auto_set_build_flags 1 +%__spec_build_pre %{___build_pre} \ + %{?_auto_set_build_flags:%{set_build_flags}} \ + %{?_generate_package_note_file} + +%__spec_check_pre %{___build_pre} \ + %{?_auto_set_build_flags:%{set_build_flags}} \ + %{?_generate_package_note_file} + +# Internal-only. Do not use. Expand a variable and strip the flags +# not suitable to extension builders. +%__extension_strip_flags() %{lua: +--the only argument to this macro is the "name" of the flags we strip (e.g. cflags, ldflags, etc.) +local name = rpm.expand("%{1}") +--store all the individual flags in a variable as a continuous string +local flags = rpm.expand("%{build_" .. name .. "}") +--create an empty table for the minimal set of flags we wanna preserve +local stripped_flags = { } +--iterate over the individual flags and store the ones we want in the table as unique keys +for flag in flags:gmatch("%S+") do + if flag:find("^%-fexceptions") or flag:find("^%-fcf%-protection") then + stripped_flags[flag] = true end + end +--print out the finalized set of flags for use by the extension builders +for k,_ in pairs(stripped_flags) do print(k .. " ") end +} + +# 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_level %[0%{?rhel} == 9 ? "-v2" : ""]%[0%{?rhel} > 9 ? "-v3" : ""] +%__cflags_arch_x86_64 -march=x86-64%{?__cflags_arch_x86_64_level:%{__cflags_arch_x86_64_level}} + +# -mtls-dialect=gnu2 is currently specific to GCC (#2263181). +%__cflags_arch_x86_64_common -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection %[ "%{toolchain}" == "gcc" ? "-mtls-dialect=gnu2 " : "" ]%{_frame_pointers_cflags} %{_frame_pointers_cflags_x86_64} + +# Also used for s390. +%__cflags_arch_s390x %[0%{?rhel} >= 9 ? "-march=z14 -mtune=z15" : "-march=z13 -mtune=z14"] + +%__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 + +# Pass --runstatedir to configure. +%_configure_use_runstatedir 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} \\\ + %{?_configure_use_runstatedir:$(grep -q "runstatedir=DIR" %{_configure} && echo '--runstatedir=%{_runstatedir}')} \\\ + --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"\ + %{?_auto_set_build_flags:%{set_build_flags}}\ +%{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_check_rpaths /usr/lib/rpm/check-rpaths +# __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}"} + +%__brp_llvm_compile_lto_elf /usr/lib/rpm/redhat/brp-llvm-compile-lto-elf %{build_cflags} %{build_ldflags} + +# note: %%__os_install_post_python is defined in python-srpm-macros and contains several policies +# redhat-rpm-config maintainers, don't remove it from %%__os_install_post unless coordinating the change with Python maintainers +# packagers, don't undefine the entire macro, see the individual macros in /usr/lib/rpm/macros.d/macros.python-srpm + +%__os_install_post \ + %{?__brp_ldconfig} \ + %{?__brp_compress} \ + %{!?__debug_package:\ + %{?__brp_strip} \ + %{?__brp_strip_comment_note} \ + } \ + %{?__brp_strip_lto} \ + %{?__brp_strip_static_archive} \ + %{?__brp_check_rpaths} \ + %{?__brp_mangle_shebangs} \ + %{?__brp_remove_la_files} \ + %{__os_install_post_python} \ +%{nil} + +%__spec_install_post\ + %[ "%{toolchain}" == "clang" ? "%{?__brp_llvm_compile_lto_elf}" : "%{nil}" ] \ + %{?__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 + +# 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 + +#============================================================================== +# --- Compiler flags control. +# +# Please consult buildflags.md for parts that can be configured +# from RPM spec files. + +%_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 + +# Have the linker generate errors instead of warnings for binaries that +# contain memory regions with both write and execute permissions. +# https://fedoraproject.org/wiki/Changes/Linker_Error_On_Security_Issues +%_hardening_linker_errors %[ "%{toolchain}" == "gcc" ? "-specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors" : "" ] +%_hardened_linker_errors 1 + +# we don't escape symbols '~', '"', etc. so be careful when changing this +%_hardening_gcc_ldflags -specs=/usr/lib/rpm/redhat/redhat-hardened-ld +%_hardening_clang_ldflags --config=/usr/lib/rpm/redhat/redhat-hardened-clang-ld.cfg +%_hardening_ldflags -Wl,-z,now %{expand:%%{_hardening_%{toolchain}_ldflags}} + +# 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) +# ...except on armv7hl, which has an issue whose root-cause isn't +# clear yet: https://bugzilla.redhat.com/show_bug.cgi?id=1951492 +# 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_plugin %{?_annotated_build:%{expand:%%{_annobin_%{toolchain}_plugin}}} +%_annotation_cflags %[ "%{_target_cpu}" == "armv7hl" ? "" : "%{_annotation_plugin}" ] +%_annotation_ldflags %{?_lto_cflags:%{_annotation_cflags}} +# Use the remove-section option to force the find-debuginfo script +# to move the annobin notes into the separate debuginfo file. +%_find_debuginfo_extra_opts %{?_annotated_build:--remove-section .gnu.build.attributes} + +# Include frame pointer information by default, except on RHEL 10 and earlier +# On RHEL 11, we are enabling it for now, with the possibility of revoking it +# at a later date. +# https://fedoraproject.org/wiki/Changes/fno-omit-frame-pointer +# Use "%undefine _include_frame_pointers" to disable. +%_include_frame_pointers %{undefined rhel} || 0%{?rhel} >= 11 +%_frame_pointers_cflags %{expr:0%{?_include_frame_pointers} ? "-fno-omit-frame-pointer" : ""} +%_frame_pointers_cflags_x86_64 %{expr:0%{?_include_frame_pointers} ? "-mno-omit-leaf-frame-pointer" : ""} +%_frame_pointers_cflags_aarch64 %{expr:0%{?_include_frame_pointers} ? "-mno-omit-leaf-frame-pointer" : ""} +%_frame_pointers_cflags_s390x %{expr:0%{?_include_frame_pointers} ? "-mbackchain" : ""} + +# 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} + +# aarch64 and s390x currently do not support packed relocations. +%_ld_pack_relocs %[ "%{_arch}" == "x86_64" || "%{_arch}" == "i386" || "%{_arch}" == "ppc64le" || "%{_arch}" == "aarch64" ] +%_ld_pack_relocs_flags %[0%{?_ld_pack_relocs} ? "-Wl,-z,pack-relative-relocs" : ""] + +# 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=thin +%_lto_cflags %{expand:%%{_%{toolchain}_lto_cflags}} + +# Default fortification level. +# "%define _fortify_level 2" to downgrade and +# "%define _fortify_level 0" or "%undefine _fortify_level" to disable +# +# We use a single -Wp here to enforce order so that ccache does not ever +# reorder them. +%_fortify_level 3 +%_fortify_level_flags %[ 0%{?_fortify_level} > 0 ? "-Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=%{_fortify_level}" : "" ] + +# This can be set to a positive integer to obtain increasing type +# safety levels for C. See buildflags.md. +%build_type_safety_c 3 + +# Some linkers default to a build-id algorithm that is not supported by rpmbuild, +# so we need to specify the right algorithm to use. +%_build_id_flags -Wl,--build-id=sha1 + +%_general_options -O2 %{?_lto_cflags} -fexceptions -g -grecord-gcc-switches -pipe +%_warning_options -Wall%[%__build_for_lang_any && "%toolchain" == "gcc" ? " -Wno-complain-wrong-lang" : ""]%[%__build_for_lang_c + %__build_for_lang_cxx ? " -Werror=format-security" : ""]%[%__build_for_lang_c && (%build_type_safety_c == 0) ? " -fpermissive" : ""]%[%__build_for_lang_c && (%build_type_safety_c == 1) ? " -Wno-error=int-conversion" : ""]%[%__build_for_lang_c && (%build_type_safety_c > 0 && %build_type_safety_c < 3) ? " -Wno-error=incompatible-pointer-types" : ""] +%_preprocessor_defines %{_fortify_level_flags} -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} + +# Internal macros. Do not use directly. These variables can be rebound +# to suppress certain frontend-specific compiler flags (or in the case +# of __build_for_lang_any, frontend-agnostic flags). Dynamic scoping +# and shadowing redefinitions are used for the __build_for_* variables +# to remain largely compatible with existing spec files that have +# hard-coded assumptions which macros assume which other macros. +# The __build_flags_no_macro_warning construct suppresses a warning +# about unused RPM macros. +%__build_for_lang_c 1 +%__build_for_lang_cxx 1 +%__build_for_lang_any 1 +%__build_flags_no_macro_warning %[%__build_for_lang_c + %__build_for_lang_cxx + %__build_for_lang_any ? "" : ""] +%__build_flags_common() %{expand:%define __build_for_lang_c 0}%{expand:%define __build_for_lang_cxx 0}%{expand:%define __build_for_lang_any 0}%{__build_flags_no_macro_warning}%{optflags} +%__build_flags_lang_c() %{expand:%define __build_for_lang_cxx 0}%{expand:%define __build_for_lang_any 0}%{__build_flags_no_macro_warning}%{optflags} +%__build_flags_lang_cxx() %{expand:%define __build_for_lang_c 0}%{expand:%define __build_for_lang_any 0}%{__build_flags_no_macro_warning}%{optflags} + +# Automatically trim changelog entries after 2 years +%_changelog_trimage %{expr:2*365*24*60*60} + +#============================================================================== +# ---- 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.build-constraints b/SOURCES/macros.build-constraints new file mode 100644 index 0000000..00835da --- /dev/null +++ b/SOURCES/macros.build-constraints @@ -0,0 +1,103 @@ +# Macros to constrain resource use during the build process + +# Changes _smp_build_ncpus depending on various factors +# +# -c cpus constrains the CPU count to "cpus" +# -m mem constrains the CPU count to the total amount of memory in the system +# (in megabytes) divided by "mem", rounded down +# +# If no options are passed, sets _smp_build_ncpus to 1. +# _smp_build_ncpus will never be raised, only lowered. +%constrain_build(c:m:) %{lua: + + -- Check a value and clamp it to at least 1 + local function check_and_clamp(v, string) + if v == nil then return nil end + + i = math.tointeger(v) + if i == nil then + macros.error({"%%%0: invalid "..string.." value "..v}) + return nil + end + + local clamp = math.max(1, math.floor(i)) + if i ~= clamp then + macros.error({"%%%0: invalid "..string.." value "..v}) + return nil + end + return clamp + end + + -- Parse meminfo to find the total amount of memory in the system + local function getmem() + local mem = 0 + for l in io.lines('/proc/meminfo') do + if l:sub(1, 9) == "MemTotal:" then + mem = math.tointeger(string.match(l, "MemTotal:%s+(%d+)")) + break + end + end + return mem + end + + local mem_limit = check_and_clamp(opt.m, "mem limit") + local cpu_limit = check_and_clamp(opt.c, "cpu limit") + local current_cpus = math.tointeger(macros._smp_build_ncpus) + local constrained_cpus = current_cpus + + if (not cpu_limit and not mem_limit) then + cpu_limit = 1 + end + + if cpu_limit ~= nil then + constrained_cpus = math.min(cpu_limit, constrained_cpus) + end + if mem_limit ~= nil then + local mem_total = getmem(verbose) + local limit = math.max(1, mem_total // (mem_limit * 1024)) + constrained_cpus = math.min(constrained_cpus, limit) + end + + macros._smp_build_ncpus = constrained_cpus +} + +# outputs build flag overrides to be used in conjunction with +# %%make_build, %%cmake_build etc. +# +# if no override is needed, this macro outputs nothing +# +# - m memory limit in MBs per core; default is 1024 +# +# Usage: +# e.g. %make_build %{limit_build -m 2048} +# => /usr/bin/make -O -j16 V=1 VERBOSE=1 +# %make_build %{limit_build -m 40960} +# => /usr/bin/make -O -j16 V=1 VERBOSE=1 -j1 +# +%limit_build(m:) %{lua: + local mem_per_process=rpm.expand("%{-m*}") + if mem_per_process == "" then + mem_per_process = 1024 + else + mem_per_process = tonumber(mem_per_process) + end + local mem_total = 0 + for line in io.lines('/proc/meminfo') do + if line:sub(1, 9) == "MemTotal:" then + local tokens = {} + for token in line:gmatch("%w+") do + tokens[#tokens + 1] = token + end + mem_total = tonumber(tokens[2]) + break + end + end + local max_jobs = mem_total // (mem_per_process * 1024) + if max_jobs < 1 then + max_jobs = 1 + end + cur_max_jobs=tonumber(rpm.expand("%{_smp_build_ncpus}")) + if cur_max_jobs > max_jobs then + print("-j" .. max_jobs) + end +} 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.gap-srpm b/SOURCES/macros.gap-srpm new file mode 100644 index 0000000..2221073 --- /dev/null +++ b/SOURCES/macros.gap-srpm @@ -0,0 +1,2 @@ +# Arches that GAP runs on +%gap_arches aarch64 ppc64le s390x x86_64 diff --git a/SOURCES/macros.java-srpm b/SOURCES/macros.java-srpm new file mode 100644 index 0000000..a32a7fd --- /dev/null +++ b/SOURCES/macros.java-srpm @@ -0,0 +1,2 @@ +# Arches that OpenJDK and dependent packages run on +%java_arches aarch64 ppc64le s390x x86_64 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.rpmautospec b/SOURCES/macros.rpmautospec new file mode 100644 index 0000000..170e480 --- /dev/null +++ b/SOURCES/macros.rpmautospec @@ -0,0 +1,16 @@ +%autorelease(e:s:pb:n) %{?-p:0.}%{lua: + release_number = tonumber(rpm.expand("%{?_rpmautospec_release_number}%{!?_rpmautospec_release_number:1}")); + base_release_number = tonumber(rpm.expand("%{?-b*}%{!?-b:1}")); + print(release_number + base_release_number - 1); +}%{?-e:.%{-e*}}%{?-s:.%{-s*}}%{!?-n:%{?dist}} +%autochangelog %{lua: + locale = os.setlocale(nil) + os.setlocale("C.utf8") + date = os.date("%a %b %d %Y") + os.setlocale(locale) + packager = rpm.expand("%{?packager}%{!?packager:John Doe }") + evr = rpm.expand("%{?epoch:%{epoch}:}%{version}-%{release}") + print("* " .. date .. " " .. packager .. " - " .. evr .. "\\n") + print("- local build") +} + diff --git a/SOURCES/macros.shell-completions b/SOURCES/macros.shell-completions new file mode 100644 index 0000000..8e505d7 --- /dev/null +++ b/SOURCES/macros.shell-completions @@ -0,0 +1,3 @@ +%bash_completions_dir %{_datadir}/bash-completion/completions +%zsh_completions_dir %{_datadir}/zsh/site-functions +%fish_completions_dir %{_datadir}/fish/vendor_completions.d 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..8854558 --- /dev/null +++ b/SOURCES/redhat-annobin-cc1 @@ -0,0 +1,3 @@ +*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..7fb574d --- /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 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..8854558 --- /dev/null +++ b/SOURCES/redhat-annobin-select-annobin-built-plugin @@ -0,0 +1,3 @@ +*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..1842c0e --- /dev/null +++ b/SOURCES/redhat-annobin-select-gcc-built-plugin @@ -0,0 +1,3 @@ +*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..a369517 --- /dev/null +++ b/SOURCES/redhat-hardened-cc1 @@ -0,0 +1,5 @@ +*cc1_options: ++ %{!r:%{!fpie:%{!fPIE:%{!fpic:%{!fPIC:%{!fno-pic:-fPIE}}}}}} + +*cpp_options: ++ %{!r:%{!fpie:%{!fPIE:%{!fpic:%{!fPIC:%{!fno-pic:-fPIE}}}}}} diff --git a/SOURCES/redhat-hardened-clang-ld.cfg b/SOURCES/redhat-hardened-clang-ld.cfg new file mode 100644 index 0000000..f31f324 --- /dev/null +++ b/SOURCES/redhat-hardened-clang-ld.cfg @@ -0,0 +1 @@ +-pie 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/redhat-hardened-ld-errors b/SOURCES/redhat-hardened-ld-errors new file mode 100644 index 0000000..1a8ca26 --- /dev/null +++ b/SOURCES/redhat-hardened-ld-errors @@ -0,0 +1,2 @@ +*self_spec: ++ %{!fuse-ld*:%{!r:-Wl,--error-rwx-segments -Wl,--error-execstack}} diff --git a/SOURCES/rpmrc b/SOURCES/rpmrc new file mode 100644 index 0000000..cd37043 --- /dev/null +++ b/SOURCES/rpmrc @@ -0,0 +1,31 @@ +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 +optflags: athlon %{__global_compiler_flags} -m32 -march=athlon -fasynchronous-unwind-tables -fstack-clash-protection +optflags: x86_64 %{__global_compiler_flags} -m64 %{__cflags_arch_x86_64} %__cflags_arch_x86_64_common +optflags: x86_64_v2 %{__global_compiler_flags} -m64 -march=x86-64-v2 %__cflags_arch_x86_64_common +optflags: x86_64_v3 %{__global_compiler_flags} -m64 -march=x86-64-v3 %__cflags_arch_x86_64_common +optflags: x86_64_v4 %{__global_compiler_flags} -m64 -march=x86-64-v4 %__cflags_arch_x86_64_common + +optflags: ppc64le %{__global_compiler_flags} -m64 %{__cflags_arch_ppc64le} -fasynchronous-unwind-tables -fstack-clash-protection + +optflags: s390x %{__global_compiler_flags} -m64 %{__cflags_arch_s390x} -fasynchronous-unwind-tables -fstack-clash-protection + +optflags: aarch64 %{__global_compiler_flags} -mbranch-protection=standard -fasynchronous-unwind-tables %[ "%{toolchain}" == "gcc" ? "-fstack-clash-protection" : "" ] %{_frame_pointers_cflags} %{_frame_pointers_cflags_aarch64} + +optflags: riscv64 %{__global_compiler_flags} -fasynchronous-unwind-tables %{_frame_pointers_cflags} + +# 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: 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..d757c6c --- /dev/null +++ b/SPECS/redhat-rpm-config.spec @@ -0,0 +1,1700 @@ +# TO WHOM IT MAY CONCERN +# +# 1) Don't add patches, dist-git is the upstream repository for this package. +# 2) When making changes, increment the version (in baserelease) by 1. +# rpmdev-bumpspec and other tools update the macro below, which is used +# in Version: to get the desired effect. +%global baserelease 285 + +Summary: Red Hat specific rpm configuration files +Name: redhat-rpm-config +Version: %{baserelease} +Release: 1%{?dist} +# config.guess, config.sub are GPL-3.0-or-later WITH Autoconf-exception-generic +License: GPL-1.0-or-later AND GPL-2.0-or-later AND GPL-3.0-or-later WITH Autoconf-exception-generic AND Boehm-GC +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-ld-errors +# clang config spec files +Source53: redhat-hardened-clang.cfg +Source54: redhat-hardened-clang-ld.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 +Source106: macros.java-srpm +Source107: macros.gap-srpm + +# Other misc macros +Source150: macros.build-constraints +Source151: macros.dwz +Source152: macros.fedora-misc +Source155: macros.ldconfig +Source156: macros.vpath +Source157: macros.shell-completions +Source158: macros.rpmautospec + +# 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 + +# for converting llvm LTO bitcode objects into ELF +Source204: brp-llvm-compile-lto-elf + +# Dependency generator scripts (deprecated) +Source300: find-provides +Source304: find-requires + +# Misc helper scripts +Source400: dist.sh +Source404: gpgverify + +# Snapshots from http://git.savannah.gnu.org/gitweb/?p=config.git +Source500: https://git.savannah.gnu.org/cgit/config.git/plain/config.guess +Source501: https://git.savannah.gnu.org/cgit/config.git/plain/config.sub + +# Dependency generators & their rules +Source602: libsymlink.attr + +# BRPs +Source700: brp-ldconfig +Source701: brp-strip-lto + +# Convenience lua functions +Source800: common.lua + +# Documentation +Source900: buildflags.md + +BuildArch: noarch +BuildRequires: perl-generators +Requires: coreutils + +Requires: efi-srpm-macros +Requires: fonts-srpm-macros +# ↓ Provides macros.forge and forge.lua originally shipped by us +Requires: forge-srpm-macros +Requires: go-srpm-macros +# ↓ Provides kmod.attr originally shipped by us +Requires: kernel-srpm-macros >= 1.0-12 +Requires: lua-srpm-macros +Requires: ocaml-srpm-macros +Requires: openblas-srpm-macros +Requires: perl-srpm-macros +# ↓ Has Python BRPs originaly present in redhat-rpm-config +Requires: python-srpm-macros >= 3.11-7 +Requires: qt6-srpm-macros +Requires: rust-srpm-macros +Requires: package-notes-srpm-macros +Requires: pyproject-srpm-macros + +%if ! 0%{?rhel} +Requires: ansible-srpm-macros +Requires: fpc-srpm-macros +Requires: ghc-srpm-macros +Requires: gnat-srpm-macros +Requires: qt5-srpm-macros +Requires: zig-srpm-macros +%endif + +Requires: rpm >= 4.11.0 +Requires: dwz >= 0.4 +Requires: zip +Requires: (annobin-plugin-gcc if gcc) +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 + +# for brp-llvm-compile-lto-elf +Requires: (llvm if clang) +Requires: (gawk if clang) + +# -fstack-clash-protection and -fcf-protection require GCC 8. +Conflicts: gcc < 8.0.1-0.22 + +# Replaced by macros.rpmautospec shipped by us +Obsoletes: rpmautospec-rpm-macros < 0.6.3-2 + +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 + +# 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. +# +# Note - whilst "gcc-plugin-annobin" requires "gcc" and hence in theory we +# do not need to trigger on "gcc", the redhat-annobin-plugin-select.sh +# script invokes gcc to determine the version of the gcc plugin, and this +# can be significant. +# +# For example, suppose that version N of gcc is installed and that annobin +# version A (built by gcc version N) is also installed. Then a new version +# of gcc is released. If the rpms are updated in this order: +# gcc-plugin-annobin +# gcc +# then when the trigger for gcc-plugin-annobin is run, the script will see +# (the not yet updated) gcc is currently version N, which matches the current +# annobin plugin A, so no changes are necessary. Then gcc is updated and, +# if the trigger below did not include "gcc", the script would not run again +# and so now you would have an out of date version of the annobin plugin. +# +# Alternatively imagine installing gcc and annobin for the first time. +# If the installation order is: +# gcc +# annobin-plugin-gcc +# gcc-plugin-annobin +# then the installation of gcc will not cause the gcc-plugin-annobin to be +# selected, since it does not exist yet. Then annobin-plugin-gcc is installed +# and since it is the only plugin, it will be selected. Then +# gcc-plugin-annobin is installed, and if the trigger below was not set to +# run on gcc-plugin-annobin, it would pass unnoticed. +# +# Hence it is necessary to trigger on both gcc and gcc-plugin-annobin. + +%triggerin -- annobin-plugin-gcc gcc-plugin-annobin gcc +%{rrcdir}/redhat-annobin-plugin-select.sh +%end + +# We also trigger when an annobin plugin is uninstalled. This allows us to +# switch over to the other version of the plugin. Note - we do not bother +# triggering on the uninstallation of "gcc", since if that is removed, the +# plugins are rendered useless. + +%triggerpostun -- annobin-plugin-gcc gcc-plugin-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.build-constraints +%{_rpmconfigdir}/macros.d/macros.dwz +%{_rpmconfigdir}/macros.d/macros.fedora-misc +%{_rpmconfigdir}/macros.d/macros.ldconfig +%{_rpmconfigdir}/macros.d/macros.rpmautospec +%{_rpmconfigdir}/macros.d/macros.shell-completions +%{_rpmconfigdir}/macros.d/macros.vpath +%dir %{_rpmluadir}/fedora +%dir %{_rpmluadir}/fedora/srpm +%dir %{_rpmluadir}/fedora/rpm +%{_rpmluadir}/fedora/*.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 +* Tue Nov 26 2024 MSVSphere Packaging Team - 285-1 +- Rebuilt for MSVSphere 10 + +* Mon Jun 24 2024 Troy Dawson - 285-1 +- Bump release for June 2024 mass rebuild + +* Tue Jun 18 2024 Tulio Magno Quites Machado Filho - 284-1 +- Use --config=xxx for clang configs instead of two separate arguments to work + around a bug in meson +- Add clang link config file + +* Mon Jun 17 2024 Florian Weimer - 283-1 +- Switch back to traditional Version: management (RHEL-42436) + +* Fri Jun 7 2024 Florian Weimer - 282-4 +- Enable DT_RELR on aarch64 (RHEL-40379) + +* Wed May 22 2024 Florian Weimer - 282-3 +- Drop ghc-srpm-macros dependency + +* Fri May 10 2024 Florian Weimer - 282-2 +- Enable GNU2 TLS descriptors on x86-64 (GCC only) (RHEL-25031) + +* Tue Feb 06 2024 Yaakov Selkowitz - 282-1 +- Loosen rust-srpm-macros requirement + +* Mon Feb 05 2024 Jonathan Wright - 281-1 +- simplify microarch macros for x86_64 + +* Tue Jan 16 2024 Florian Weimer - 280-1 +- Drop -fcf-protection for i686 because there won't be kernel support + +* Tue Jan 16 2024 Nils Philippsen - 279-1 +- Obsolete rpmautospec-rpm-macros without version + +* Mon Jan 15 2024 Nick Clifton - 278-1 +- Add hardening feature to convert linker warning messages into errors. +- https://fedoraproject.org/wiki/Changes/Linker_Error_On_Security_Issues + +* Mon Jan 15 2024 Florian Weimer - 277-1 +- Switch C type safety level to 3 (GCC 14 default), and adjust for GCC 14 + +* Thu Jan 11 2024 Jan Grulich - 276-1 +- Drop qt5-srpm-macros from RHEL 10 + +* Fri Jan 05 2024 Yaakov Selkowitz - 275-1 +- Define RUSTFLAGS only when rust macros are installed + +* Wed Jan 3 2024 Florian Weimer - 274-1 +- Missing packed relative relocation support on aarch64, s390x (#2256645) + +* Tue Jan 2 2024 Florian Weimer - 273-1 +- Pack relative ELF relocations by default + +* Tue Dec 26 2023 Jan Drögehoff - 272-1 +- Add zig-srpm-macros + +* Fri Nov 03 2023 Stephen Gallagher - 271-1 +- ELN: Enable frame pointers for RHEL 11+ (for now) + +* Thu Oct 5 2023 Florian Weimer - 270-1 +- Disable -fstack-clash-protection on riscv64 (#2242327) + +* Thu Oct 5 2023 Nikita Popov - 269-1 +- Use correct format specifier in brp-llvm-compile-lto-elf + +* Fri Sep 29 2023 Nikita Popov - 268-1 +- Fix brp-llvm-compile-lto-elf parallelism with hardlinks (#2234024) + +* Tue Sep 26 2023 Florian Weimer - 267-1 +- Switch %%build_type_safety_c to 1 (#2142177) + +* Thu Sep 07 2023 Maxwell G - 266-1 +- Split out forge macros to forge-srpm-macros package + +* Tue Aug 29 2023 Florian Weimer - 265-1 +- Add support for x86_64_v2, x86_64_v3, x86_64_v4 (#2233093) + +* Tue Aug 22 2023 Yaakov Selkowitz - 264-1 +- Add macros.rpmautospec + +* Mon Aug 21 2023 Miroslav Suchy - 263-1 +- Migrate to SPDX + +* Wed Aug 02 2023 Charalampos Stratakis - 262-1 +- Strip all extension builder flags except -fexceptions and -fcf-protection +- https://fedoraproject.org/wiki/Changes/Python_Extension_Flags_Reduction + +* Fri Jul 7 2023 Florian Weimer - 261-1 +- Fix warnings that appear during the build of the llvm package + +* Wed Jul 5 2023 Florian Weimer - 260-1 +- Implement the %%build_type_safety_c macro (#2218019) + +* Wed Jul 5 2023 Florian Weimer - 259-1 +- Filter out C, C++ build flags from Fortran build flags (#2177253) + +* Wed Jul 5 2023 Florian Weimer - 258-1 +- Enable PIC mode for assembler files (#2167430) + +* Wed Jul 05 2023 Frederic Berat - 257-1 +- update config.{guess,sub} to gnuconfig git HEAD + +* Sat Jun 17 2023 Tom Stellard - 256-1 +- Remove -fno-openmp-implicit-rpath from clang ldflags + +* Fri Jun 16 2023 Lumír Balhar - 255-1 +- Add qt6-srpm-macros + +* Thu Mar 9 2023 Florian Weimer - 254-1 +- Switch ELN to x86-64-v3 + +* Tue Feb 28 2023 Maxwell G - 253-1 +- Include RUSTFLAGS in %%set_build_flags +- Fixes: rhbz#2167183 + +* Tue Feb 28 2023 Tom Stellard - 252-1 +- Rename _pkg_extra_* macros to _distro_extra_* + +* Thu Feb 23 2023 Miro Hrončok - 251-1 +- Drop the requirement of orphaned nim-srpm-macros +- No Fedora package uses the %%nim_arches macro + +* Tue Feb 14 2023 Frederic Berat - 250-1 +- update config.{guess,sub} to gnuconfig git HEAD + +* Thu Feb 09 2023 Jerry James - 249-1 +- Add macros.gap-srpm + +* Tue Feb 07 2023 Tom Stellard - 248-1 +- Add %%pkg_extra_* macros + +* Mon Feb 06 2023 Nick Clifton - 247-1 +- Fix triggers for the installation and removal of gcc-plugin-annobin. + Fixes: rhbz#2124562 + +* Tue Jan 17 2023 Miro Hrončok - 246-1 +- Add pyproject-srpm-macros to the default buildroot + +* Tue Jan 17 2023 Davide Cavalca - 245-1 +- Do not include frame pointers on ppc64le for now + Fixes: rhbz#2161595 + +* Mon Jan 16 2023 Tom Stellard - 244-1 +- Make -flto=thin the default lto flag for clang + +* Mon Jan 16 2023 Siddhesh Poyarekar - 243-1 +- Consolidate the _FORTIFY_SOURCE switches. + +* Fri Jan 13 2023 Miro Hrončok - 242-1 +- Don't use %%[ ] expressions with %%{undefined} +- Fixes: rhbz#2160716 + +* Thu Jan 12 2023 Stephen Gallagher - 241-1 +- Do not include frame pointers on RHEL + +* Tue Jan 10 2023 Davide Cavalca - 240-1 +- Do not include frame pointers on i686 and s390x for now + +* Wed Jan 4 2023 Davide Cavalca - 239-1 +- Enable frame pointers by default +- Set arch specific flags for frame pointers support + +* Tue Jan 3 2023 Miro Hrončok - 238-1 +- Set %%source_date_epoch_from_changelog to 1 +- https://fedoraproject.org/wiki/Changes/ReproducibleBuildsClampMtimes + +* Tue Jan 3 2023 Siddhesh Poyarekar - 237-1 +- Make _FORTIFY_SOURCE configurable and bump default to 3. + +* Wed Dec 28 2022 Davide Cavalca - 236-1 +- Add conditional support for always including frame pointers + +* Sat Dec 10 2022 Florian Weimer - 235-1 +- Add %%_configure_use_runstatedir to disable --runstatedir configure option + +* Fri Nov 4 2022 Tom Stellard - 234-1 +- Remove unsupported arches from rpmrc + +* Fri Nov 4 2022 Florian Weimer - 233-1 +- Set -g when building Vala applications + +* Fri Sep 23 2022 Timm Bäder - 232-1 +- Fix brp-compile-lto-elf to not rely on a backtracking regex + +* Thu Sep 08 2022 Maxwell G - 231-1 +- forge macros: Support Sourcehut. Fixes rhbz#2035935. + +* Tue Aug 30 2022 Frederic Berat - 230-1 +- Add support for runstatedir in %%configure + +* Fri Aug 26 2022 Dan Horák - 229-1 +- Move the baseline s390x arch to z13 for F-38+ + +* Mon Aug 8 2022 Maxwell G - 228-1 +- Add macros.shell-completions + +* Fri Aug 05 2022 Nikita Popov - 227-1 +- brp-llvm-compile-lto-elf: Pass -r to xargs + +* Wed Jun 22 2022 Timm Bäder - 226-1 +- Move llvm_compile_lto_to_elf before __debug_install_post + +* Fri Jun 17 2022 Nick Clifton - 225-1 +- Add definition of _find_debuginfo_extra_opts which will +- move annobin data into a separate debuginfo file. + +* Tue Jun 14 2022 Tom Stellard - 224-1 +- Fix passing of CFLAGS to brp-llvm-compile-lto-elf + +* Fri May 27 2022 Tom Stellard - 223-1 +- Move -fno-openmp-implicit-rpath option from CFLAGS to LDFLAGS + +* Fri May 27 2022 Florian Weimer - 222-1 +- Use %%baserelease to store the version number + +* Fri May 27 2022 Frederic Berat - 221-1 +- update config.{guess,sub} to gnuconfig git HEAD + +* Tue May 17 2022 Maxwell G - 220-1 +- Add `Requires: ansible-srpm-macros` + +* Tue May 17 2022 Miro Hrončok - 219-2 +- Remove a tab character from the definition of %%__global_compiler_flags +- Fixes: rhbz#2083296 + +* Tue May 10 2022 Mikolaj Izdebski - 219-1 +- Add java_arches macro + +* Wed Apr 20 2022 Timm Bäder - 218-1 +- Parallelize bpr-llvm-compile-lto-elf + +* Tue Apr 19 2022 Tom Stellard - 217-1 +- Add -fno-openmp-implicit-rpath when building with clang + +* Wed Apr 13 2022 Nick Clifton - 216-1 +- Add support for comparing gcc-built and annobin-built plugins. + +* Mon Feb 21 2022 Timm Bäder - 215-1 +- Add %%__brp_remove_la_files to %%__os_install_post + +* Thu Feb 10 2022 Florian Weimer - 214-1 +- ppc64le: Switch baseline to POWER9 on ELN (ELN issue 78) + +* Thu Feb 10 2022 Florian Weimer - 213-1 +- s390x: Switch baseline to z14 on ELN (ELN issue 79) + +* Sun Jan 23 2022 Robert-André Mauchin - 212-1 +- Add package note generation to %%check preamble +- Fix: rhbz#2043977 + +* Fri Jan 21 2022 Zbigniew Jędrzejewski-Szmek - 211-1 +- Move package note generation to build preamble +- Do ELF package notes also on ELN + +* Thu Jan 20 2022 Miro Hrončok - 210-1 +- Remove package ELF note from the extension LDFLAGS +- Related: rhbz#2043092 +- Fix %%set_build_flags when %%_generate_package_note_file is not defined +- Fixes: rhbz#2043166 + +* Thu Jan 13 2022 Zbigniew Jędrzejewski-Szmek - 209-1 +- Add package ELF note to the default LDFLAGS + +* Tue Jan 04 2022 Tom Stellard - 208-1 +- Call %%set_build_flags before %%build, %%check, and %%install stages + +* Tue Dec 14 2021 Tom Stellard - 207-1 +- Add -Wl,--build-id=sha1 to the default LDFLAGS + +* Tue Dec 07 2021 Miro Hrončok - 206-1 +- brp-mangle-shebangs: also mangle shebangs of JavaScript executables +- Fixes: rhbz#1998924 + +* Thu Nov 18 2021 Michal Domonkos - 205-1 +- Drop kernel-rpm-macros subpackage & kmod.attr (new home: kernel-srpm-macros) + +* Tue Nov 16 2021 Miro Hrončok - 204-1 +- Don't pull in Python to all buildroots +- Remove llvm-lto-elf-check script + +* Tue Nov 09 2021 Michal Domonkos - 203-1 +- Drop {fpc,gnat,nim}-srpm-macros dependencies on RHEL + +* Wed Nov 03 2021 David Benoit - 202-1 +- Add llvm-lto-elf-check script +- Resolves: rhbz#2017193 + +* Mon Nov 01 2021 Jason L Tibbitts III - 201-1 +- Better error handling for %%constrain_build. + +* Mon Oct 18 2021 Jason L Tibbitts III - 200-1 +- Add %%constrain_build macro. + +* Tue Sep 21 2021 Tom Stellard - 199-1 +- Drop annobin-plugin-clang dependency + +* Mon Aug 30 2021 Florian Weimer - 198-1 +- ELN: Enable -march=x86-64-v2 for Clang as well + +* Tue Aug 17 2021 Tom Stellard - 197-1 +- Add build_ preifix to cc, cxx, and cpp macros + +* Mon Aug 16 2021 Tom Stellard - 196-1 +- Add cc, cxx, and cpp macros + +* Sun Aug 15 2021 Michel Alexandre Salim - 195-1 +- Fix macros.build-constraints' %%limit_build + - number of CPUs will never be set to less than 1 + - this now outputs build flag overrides to be used with %%make_build etc. + - add documentation + +* Mon Aug 2 2021 Florian Weimer - 194-1 +- Active GCC plugin during LTO linking + +* Sat Jul 24 2021 Michel Alexandre Salim - 193-1 +- Add macros.build-constraints +- Keep the misc macros in alphabetical order + +* Sat Jul 10 2021 Neal Gompa - 192-1 +- Make vpath builddir not include arch-specific info + +* Thu Jul 01 2021 Miro Hrončok - 191-1 +- Require python-srpm-macros with Python related BuildRoot Policy scripts + +* Wed Jun 30 2021 Miro Hrončok - 190-1 +- Move Python related BuildRoot Policy scripts from redhat-rpm-config to python-srpm-macros + +* Mon Jun 28 2021 Ben Burton - 189-1 +- Adapt macros and BRP scripts for %%topdir with spaces +- Fixes rhbz#1947416 + +* Tue Jun 22 2021 Panu Matilainen - 188-1 +- Drop reference to now extinct brp-python-hardlink script + +* Tue Jun 8 2021 Stephen Coady - 187-1 +- Add Requires: rpmautospec-rpm-macros + +* Mon May 31 2021 Charalampos Stratakis - 186-1 +- Enable RPATH check after %%install +- Part of https://fedoraproject.org/wiki/Changes/Broken_RPATH_will_fail_rpmbuild +- Resolves: rhbz#1964548 + +* Wed May 26 2021 Arjun Shankar - 185-1 +- Disable annobin on armv7hl + +* Mon Apr 12 2021 David Benoit - 184-1 +- Change 'Requires: annobin' to 'Requires: annobin-plugin-gcc'. + +* Tue Apr 6 2021 David Benoit - 183-1 +- BRP: LLVM Compile LTO Bitcode to ELF +- Add Requires: (llvm if clang) + +* 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.