]> git.ipfire.org Git - ipfire-3.x.git/blobdiff - gcc/gcc.nm
Mass rebuild for incorrectly packaged libtool archive files
[ipfire-3.x.git] / gcc / gcc.nm
index 8fd265ac806760e76a123c8d85a68dfe65e431f9..1e5990da9d021f50d0c4e95891bdbcde5129c8e9 100644 (file)
@@ -3,12 +3,12 @@
 # Copyright (C) - IPFire Development Team <info@ipfire.org>                   #
 ###############################################################################
 
-# Configure build to compile with cloog and ppl.
-build_cloog_ppl = 1
+# Configure build to compile with graphite
+build_graphite = 1
 
 name       = gcc
-version    = 4.6.2
-release    = 3
+version    = 12.3.0
+release    = 1.1
 
 maintainer = Michael Tremer <michael.tremer@ipfire.org>
 groups     = Development/Compilers
@@ -22,75 +22,63 @@ description
 end
 
 # This is the at least required version of binutils.
-required_binutils_version = 2.21.51.0.8-1
+binutils_version = 2.35
 
-source_dl  = http://ftp.gnu.org/gnu/gcc/%{thisapp}/
+source_dl  = https://ftp.gnu.org/gnu/gcc/%{thisapp}/
 sources    = %{thisapp}.tar.gz
 
-patches
-       gcc46-hack.patch0
-       gcc46-c++-builtin-redecl.patch0
-       gcc46-pr33763.patch0
-       gcc46-libgomp-omp_h-multilib.patch0
-       gcc46-libtool-no-rpath.patch0
-       gcc46-cloog-dl.patch0
-       gcc46-pr38757.patch0
-       gcc46-no-add-needed.patch0
-       gcc46-unwind-debughook-sdt.patch0
-       gcc46-ppl-0.10.patch
-       gcc46-Woverlength-string.patch0
-       gcc46-Woverlength-string-asm.patch0
-       gcc-4.6.0-piepatches-20110407.patch
-end
-
 build
        requires
-               autogen
-               binutils>=%{required_binutils_version}
+               binutils >= %{binutils_version}
                dejagnu
                elfutils-devel
                expect
+               filesystem >= 002
                flex
-               glibc-devel
-               gmp-devel
+               glibc-devel >= 2.16
+               gmp-devel >= 4.3.2
+               isl-devel >= 0.15
                libffi-devel
-               mpc-devel
-               mpfr-devel
+               libmpc-devel >= 1.0.1
+               libxcrypt-devel
+               mpfr-devel >= 3.1.0
+               perl
                texinfo
                zlib-devel
+               zstd-devel
        end
 
-       # If cloog support is enabled, we require the devel packages for build.
-       if "%{build_cloog_ppl}" == "1"
-               requires += cloog-ppl-devel ppl-devel
+       # If graphite support is enabled, we require the devel packages for build.
+       if "%{build_graphite}" == "1"
+               requires += isl-devel >= 0.14
        end
 
-       # A couple of configure arguments depending on the architecture and
-       # configuration.
-       configure_options =
+       # Build libquadmath (only on x86).
+       build_libquadmath = 0
 
-       if "%{DISTRO_ARCH}" == "x86_64"
-               configure_options = --disable-multilib
-       end
+       # Build liblsan (only on x86_64).
+       build_liblsan = 0
 
-       if "%{DISTRO_ARCH}" == "i686"
-               configure_options = --with-arch=%{DISTRO_ARCH} --with-tune=generic
-       end
+       # Build libtasn (only on x86_64).
+       build_libtsan = 0
 
-       if "%{DISTRO_ARCH}" == "armv5tel"
-               configure_options += --with-float=soft
-       end
+       # Build libubsan
+       build_libubsan = 0
 
-       if "%{build_cloog_ppl}" == "1"
-               configure_options += --with-cloog --with-ppl
+       DIR_BUILD = %{DIR_SRC}/gcc-build
+
+       if "%{DISTRO_ARCH}" == "x86_64"
+               build_libquadmath = 1
+               build_liblsan = 1
+               build_libtsan = 1
+               build_libubsan = 1
        end
 
-       # CFLAGS for hardening.
-       HARD_CFLAGS = -DEFAULT_PIE_SSP -DEFAULT_RELRO -DEFAULT_BIND_NOW
+       if "%{DISTRO_ARCH}" == "aarch64"
+               build_libubsan = 1
+       end
 
        prepare_cmds
-               mkdir -v %{DIR_SRC}/gcc-build
-
                # Remove unneeded features that will save some compile time
                rm -rf lib{gfortran,java,objc} gcc/{fortran,java,objc,objcp}
 
@@ -102,104 +90,142 @@ build
                # Branding gcc
                echo "%{DISTRO_NAME} %{version}-%{release}" > gcc/DEV-PHASE
 
-               # Libgomp uses -Werror regardless of --disable-werror, and this will cause a
-               # build failure when -D_FORTIFY_SOURCE=2 causes build time warnings:
-               sed -e "s/-Werror//" -i libgomp/configure
-
                # The fixincludes script is known to occasionally erroneously attempt to
                # "fix" the system headers installed so far. As the headers up to this point
                # are known to not require fixing, issue the following command to prevent
                # the fixincludes script from running:
                sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in
+       end
 
-               sed -i gcc/Makefile.in \
-                       -e "s/-fno-exceptions/& -fno-asynchronous-unwind-tables/"
-
-               # we want to be able to control the pie patch logic via something other
-               # than ALL_CFLAGS...
-               sed -i gcc/Makefile.in \
-                       -e '/^ALL_CFLAGS/iHARD_CFLAGS = ' \
-                       -e 's|^ALL_CFLAGS = |ALL_CFLAGS = $(HARD_CFLAGS) |'
-
-               # Enable the GCC hardening by default.
-               sed -i gcc/Makefile.in \
-                       -e "s|^HARD_CFLAGS = |HARD_CFLAGS = %{HARD_CFLAGS} |"
-
-               # Compile the compiler with -fPIC as well.
-               sed -i gcc/Makefile.in \
-                       -e "s|^ESP_NOPIE_CFLAGS = .*|ESP_NOPIE_CFLAGS =|"
-
-               ./contrib/gcc_update --touch
+       # Disable LTO
+       LTO_CFLAGS =
+
+       # Disable any string format security checks
+       STRING_FORMAT_SECURITY_CFLAGS =
+
+       configure_options = \
+               CFLAGS="%{CFLAGS}" \
+               CXXFLAGS="%{CXXFLAGS}" \
+               XCFLAGS="%{CFLAGS}" \
+               TCFLAGS="%{CFLAGS}" \
+               --build=%{DISTRO_BUILDTARGET} \
+               --prefix=%{prefix} \
+               --libdir=%{libdir} \
+               --libexecdir=%{libdir} \
+               --mandir=%{mandir} \
+               --disable-static \
+               --enable-shared \
+               --enable-threads=posix \
+               --enable-__cxa_atexit \
+               --enable-languages=c,c++,lto \
+               --enable-bootstrap \
+               --with-build-config=bootstrap-lto \
+               --enable-link-serialization=1 \
+               --enable-checking=release \
+               --enable-default-pie \
+               --enable-default-ssp \
+               --disable-werror \
+               --disable-libssp \
+               --with-system-zlib \
+               --with-bugurl=https://bugzilla.ipfire.org/ \
+               --enable-libstdcxx-backtrace \
+               --disable-libstdcxx-pch \
+               --with-libstdcxx-zoneinfo=%{datadir}/zoneinfo \
+               --disable-libunwind-exceptions \
+               --enable-gnu-unique-object \
+               --enable-linker-build-id \
+               --with-linker-hash-style=gnu \
+               --enable-decimal-float \
+               --enable-plugin \
+               --enable-initfini-array \
+               --disable-libgcj \
+               --enable-gnu-indirect-function
+
+       if "%{build_graphite}" == "1"
+               configure_options += \
+                       --with-isl
        end
 
-       build
-               cd %{DIR_SRC}/gcc-build
-
-               # Modify CFLAGS
-               OPT_FLAGS="%{CFLAGS}"
-               CFLAGS="%{CFLAGS}"
-               CFLAGS=$(echo ${CFLAGS} | sed -e 's/\(-Wp,\)\?-D_FORTIFY_SOURCE=[12]//g')
-               CFLAGS=$(echo ${CFLAGS} | sed -e 's/-m64//g;s/-m32//g;s/-m31//g')
-               CFLAGS=$(echo  ${CFLAGS} | sed -e 's/-march=i.86//g')
-               #CFLAGS=$(echo ${CFLAGS} | sed -e 's/ -pipe / /g')
-               CFLAGS=$(echo "${CFLAGS}" | sed -e 's/[[:blank:]]\+/ /g')
-               CXXFLAGS=$(echo  ${CFLAGS} | sed -e 's/ -Wall//g')
-
-               CFLAGS="${CFLAGS}" \
-               CXXFLAGS="${CXXFLAGS}" \
-               XCFLAGS="${CFLAGS}" \
-               TCFLAGS="${CFLAGS}" \
-               ../%{thisapp}/configure \
-                       --build=%{DISTRO_BUILDTARGET} \
-                       --prefix=/usr \
-                       --libexecdir=/usr/lib \
-                       --mandir=/usr/share/man \
-                       --enable-esp \
-                       --enable-shared \
-                       --enable-threads=posix \
-                       --enable-__cxa_atexit \
-                       --enable-clocale=gnu \
-                       --enable-languages=c,c++,lto \
-                       --enable-bootstrap \
-                       --enable-checking=release \
-                       --disable-werror \
-                       --disable-libssp \
-                       --disable-static \
-                       --with-system-zlib \
-                       --with-bugurl=http://bugtracker.ipfire.org \
-                       --disable-libunwind-exceptions \
-                       --enable-gnu-unique-object \
-                       --enable-linker-build-id \
-                       %{configure_options}
-
-               # GCC does not support a parallel build.
-               make profiledbootstrap BOOT_CFLAGS="${OPT_FLAGS}" #%{PARALLELISMFLAGS}
+       if "%{DISTRO_ARCH}" == "x86_64"
+               configure_options += \
+                       --disable-multilib \
+                       --with-arch_64=x86-64-v2 \
+                       --enable-cet \
+                       --with-tune=generic
        end
 
+       make_build_targets += \
+               profiledbootstrap \
+               BOOT_CFLAGS="%{CFLAGS}" \
+               BOOT_LDFLAGS="%{LDFLAGS}" \
+               LDFLAGS_FOR_TARGET="%{LDFLAGS}"
+
        #test
-       #       cd %{DIR_SRC}/gcc-build && make check
+       #       cd %{DIR_SRC}/gcc-build && make -k check || true
        #       cd %{DIR_APP} && ./contrib/test_summary
        #end
 
        install
-               cd %{DIR_SRC}/gcc-build
                make install DESTDIR=%{BUILDROOT}
 
-               mkdir -pv %{BUILDROOT}/lib
-               ln -sfv ../usr/bin/cpp %{BUILDROOT}/lib/cpp
+               # Check if the installation path exists.
+               FULLPATH="%{BUILDROOT}%{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}"
+               [ -d "${FULLPATH}" ] || exit 1
+
+               mkdir -pv %{BUILDROOT}%{prefix}/lib
+               ln -sfv ../bin/cpp %{BUILDROOT}%{prefix}/lib/cpp
                ln -sfv gcc %{BUILDROOT}/usr/bin/cc
 
-               # Move libgcc_s to /lib
-               mv -vf %{BUILDROOT}/usr/lib/libgcc_s.so.1 %{BUILDROOT}/lib/
-               ln -svf ../../lib/libgcc_s.so.1 %{BUILDROOT}/usr/lib/libgcc_s.so
+               # Fix libgcc_s symlinks.
+               rm -f ${FULLPATH}/libgcc_s.so %{BUILDROOT}%{libdir}/libgcc_s.so
+               echo '/* GNU ld script
+                       Use the shared library, but some functions are only in
+                       the static library, so try that secondarily.  */
 
-               # Remove some GNU debugger stuff.
-               rm -vf %{BUILDROOT}/usr/lib/lib*.py
-       end
+               OUTPUT_FORMAT('`gcc -Wl,--print-output-format -nostdlib -r -o /dev/null`')
+               GROUP ( /%{libdir}/libgcc_s.so.1 libgcc.a )' > ${FULLPATH}/libgcc_s.so
+               chmod -v 755 ${FULLPATH}/libgcc_s.so
+               chmod -v 755 %{BUILDROOT}%{libdir}/libgcc_s.so.1
 
-       keep_libraries
-               /usr/lib/gcc/%{DISTRO_BUILDTARGET}/%{version}/libgcc.a
-               /usr/lib/gcc/%{DISTRO_BUILDTARGET}/%{version}/libgcc_eh.a
+               # Remove some GNU debugger stuff.
+               rm -vf %{BUILDROOT}%{libdir}/lib*.py
+
+               # libgomp
+               mv -vf %{BUILDROOT}%{libdir}/libgomp.spec ${FULLPATH}/
+               ln -svf ../../../libgomp.so.1.0.0 ${FULLPATH}/libgomp.so
+               chmod -v 755 %{BUILDROOT}%{libdir}/libgomp.so.1.*
+
+               # libstdc++
+               ln -svf ../../../libstdc++.so.6.0.30 ${FULLPATH}/libstdc++.so
+
+               # libquadmath
+               if [ "%{build_libquadmath}" = "1" ]; then
+                       ln -svf ../../../libquadmath.so.0.0.0 ${FULLPATH}/libquadmath.so
+                       chmod -v 755 %{BUILDROOT}%{libdir}/libquadmath.so.0.*
+               fi
+
+               # libitm
+               mv -vf %{BUILDROOT}%{libdir}/libitm.spec ${FULLPATH}/
+               ln -svf ../../../libitm.so.1.0.0 ${FULLPATH}/libitm.so
+               chmod -v 755 %{BUILDROOT}%{libdir}/libitm.so.1.*
+
+               # liblsan
+               if [ "%{build_liblsan}" = "1" ]; then
+                       ln -svf ../../../liblsan.so.0.0.0 ${FULLPATH}/liblsan.so
+                       chmod -v 755 %{BUILDROOT}%{libdir}/liblsan.so.*
+               fi
+
+               # libtsan
+               if [ "%{build_libtsan}" = "1" ]; then
+                       ln -svf ../../../libtsan.so.2.0.0 ${FULLPATH}/libtsan.so
+                       chmod -v 755 %{BUILDROOT}%{libdir}/libtsan.so.*
+               fi
+
+               # libubsan
+               if [ "%{build_libubsan}" = "1" ]; then
+                       ln -svf ../../../libubsan.so.1.0.0 ${FULLPATH}/libubsan.so
+                       chmod -v 755 %{BUILDROOT}%{libdir}/libubsan.so.*
+               fi
        end
 end
 
@@ -208,90 +234,302 @@ packages
                groups += Build
 
                requires
-                       binutils>=%{required_binutils_version}
+                       binutils >= %{binutils_version}
+                       filesystem >= 002
+                       glibc >= 2.16
                        glibc-devel
                        gmp-devel
-                       libgcc-devel
+                       cpp = %{thisver}
+                       libgcc = %{thisver}
+                       libgomp = %{thisver}
                end
 
-               if "%{build_cloog_ppl}" == "1"
-                       requires += cloog-ppl>=0.15
-               end
+               # We do not ship libgcc-devel anymore.
+               provides += libgcc-devel = %{thisver}
+               obsoletes += libgcc-devel < %{thisver}
        end
 
-       # XXX add package descriptions
-
        package %{name}-c++
-               requires = gcc=%{thisver} libstdc++-devel
+               summary = C++ support for GCC.
+               description
+                       This package adds C++ support to the GNU Compiler Collection.
+                       It includes support for most of the current C++ specification,
+                       including templates and exception handling.
+               end
+
+               requires
+                       gcc = %{thisver}
+                       libstdc++ = %{thisver}
+                       libstdc++-devel = %{thisver}
+               end
 
                files
                        /usr/bin/*++
-                       /usr/lib/gcc/*/*/cc1plus
+                       %{libdir}/gcc/*/*/cc1plus
                        /usr/share/man/man*/*++*
                end
        end
 
-       package libgcc
+       package cpp
+               summary = The C Preprocessor.
+               description
+                       Cpp is the GNU C-Compatible Compiler Preprocessor.
+                       Cpp is a macro processor which is used automatically
+                       by the C compiler to transform your program before actual
+                       compilation. It is called a macro processor because it allows
+                       you to define macros, abbreviations for longer
+                       constructs.
+
+                       The C preprocessor provides four separate functionalities: the
+                       inclusion of header files (files of declarations that can be
+                       substituted into your program); macro expansion (you can define macros,
+                       and the C preprocessor will replace the macros with their definitions
+                       throughout the program); conditional compilation (using special
+                       preprocessing directives, you can include or exclude parts of the
+                       program according to various conditions); and line control (if you use
+                       a program to combine or rearrange source files into an intermediate
+                       file which is then compiled, you can use line control to inform the
+                       compiler about where each source line originated).
+
+                       You should install this package if you are a C programmer and you use
+                       macros.
+               end
+               group = Development/Languages
+
                files
-                       /lib/libgcc*.so.*
+                       %{prefix}/lib/cpp
+                       %{bindir}/cpp
+                       %{mandir}/man1/cpp.1*
+                       %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/cc1
                end
+
+               provides = /lib/cpp
+               requires = gcc-c++ = %{thisver}
        end
 
-       package libgcc-devel
-               requires = libgcc=%{thisver}
+       package libgcc
+               summary = GCC shared support library.
+               description
+                       This package contains GCC shared support library which is needed
+                       e.g. for exception handling support.
+               end
 
                files
-                       /usr/lib/libgcc*.so
+                       %{libdir}/libgcc*.so.*
+               end
+
+               obsoletes
+                       libmudflap
+                       libmudflap-devel
                end
        end
 
        package libstdc++
+               summary = GNU Standard C++ Library.
+               description
+                       The libstdc++ package contains a rewritten standard compliant GCC Standard
+                       C++ Library.
+               end
+
                files
-                       /usr/lib/libstdc++*.so.*
+                       %{libdir}/libstdc++*.so.*
                end
        end
 
        package libstdc++-devel
+               summary = Header files and libraries for C++ development.
+               description
+                       This is the GNU implementation of the standard C++ libraries. This
+                       package includes the header files and libraries needed for C++
+                       development. This includes rewritten implementation of STL.
+               end
+
+               requires
+                       libstdc++ = %{thisver}
+               end
+
                files
-                       /usr/include/c++
-                       /usr/lib/libstdc++*.so
+                       %{includedir}/c++
+                       %{libdir}/libstdc++*.so
                end
        end
 
-       package libgomp
+       package libstdc++-static
+               summary = Static libraries for the GNU standard C++ library
+               description = %{summary}
+
+               requires
+                       libstdc++-devel = %{thisver}
+               end
+
                files
-                       /usr/lib/libgomp*.so.*
+                       %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libstdc++.a
+                       %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libsupc++.a
                end
        end
 
        package libgomp
+               summary = GCC OpenMP v3.0 shared support library.
+               description
+                       This package contains GCC shared support library which is needed
+                       for OpenMP v3.0 support.
+               end
+
                files
-                       /usr/lib/libgomp*.so
-                       /usr/lib/libgomp.spec
+                       %{libdir}/libgomp*.so.*
                end
        end
 
-       package libmudflap
+       if "%{build_libquadmath}" == "1"
+               package libquadmath
+                       summary = GCC __float128 shared support library.
+                       description
+                               This package contains GCC shared support library which is needed
+                               for __float128 math support and for Fortran REAL*16 support.
+                       end
+
+                       files
+                               %{libdir}/libquadmath*.so.*
+                       end
+               end
+
+               package libquadmath-devel
+                       summary = Development files for GCC __float128 support.
+                       description
+                               This package contains headers for building Fortran programs using
+                               REAL*16 and programs using __float128 math.
+                       end
+
+                       requires
+                               gcc = %{thisver}
+                               libquadmath = %{thisver}
+                       end
+
+                       files
+                               %{libdir}/libquadmath.so
+                               %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/quadmath.h
+                               %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/quadmath_weak.h
+                               %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libquadmath.so
+                       end
+               end
+       end
+
+       package libitm
+               summary = The GNU Transactional Memory library.
+               description
+                       This package contains the GNU Transactional Memory library
+                       which is a GCC transactional memory support runtime library.
+               end
+
+               files
+                       %{libdir}/libitm.so.*
+               end
+       end
+
+       package libitm-devel
+               summary = The GNU Transactional Memory support.
+               description
+                       This package contains headers and support files for the
+                       GNU Transactional Memory library.
+               end
+
+               requires
+                       gcc = %{thisver}
+                       libitm = %{thisver}
+               end
+
                files
-                       /usr/lib/libmudflap*.so.*
+                       %{libdir}/libitm.so
+                       %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/itm.h
+                       %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/itm_weak.h
+                       %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libitm.so
                end
        end
 
-       package libmudflap-devel
+       package libatomic
+               summary = The GNU Atomic library
+               description
+                       This package contains the GNU Atomic library which is a
+                       GCC support runtime library for atomisc operations not
+                       supported by hardware.
+               end
+
                files
-                       /usr/lib/libmudflap*.so
+                       %{libdir}/libatomic.so.*
                end
        end
 
-       package libquadmath
+       package libasan
+               summary = The Address Sanitizer runtime library
+               description
+                       This package contains the Address Sanitizer library
+                       which is used for -fsanitize=address instrumented programs.
+               end
+
                files
-                       /usr/lib/libquadmath*.so.*
+                       %{libdir}/libasan.so.*
                end
        end
 
-       package libquadmath-devel
+       if "%{build_libtsan}" == "1"
+               package libtsan
+                       summary = The Thread Sanitizer runtime library
+                       description
+                               This package contains the Thread Sanitizer library
+                               which is used for -fsanitize=thread instrumented programs.
+                       end
+
+                       files
+                               %{libdir}/libtsan.so.*
+                       end
+               end
+       end
+
+       if "%{build_libubsan}" == "1"
+               package libubsan
+                       summary = The Undefined Behavior Sanitizer runtime library
+                       description
+                               This package contains the Undefined Behavior Sanitizer library
+                               which is used for -fsanitize=undefined instrumented programs.
+                       end
+
+                       files
+                               %{libdir}/libubsan.so.*
+                       end
+               end
+       end
+
+       if "%{build_liblsan}" == "1"
+               package liblsan
+                       summary = The Leak Sanitizer runtime library
+                       description
+                               This package contains the Leak Sanitizer library
+                               which is used for -fsanitize=leak instrumented programs.
+                       end
+
+                       files
+                               %{libdir}/liblsan.so.*
+                       end
+               end
+       end
+
+       package gcc-plugin-devel
+               summary = Support for compiling GCC plugins.
+               description
+                       This package contains header files and other support files
+                       for compiling GCC plugins.  The GCC plugin ABI is currently
+                       not stable, so plugins must be rebuilt any time GCC is updated.
+               end
+
+               requires
+                       gcc = %{thisver}
+                       gmp-devel >= 4.1.2-8
+                       mpfr-devel >= 2.2.1
+                       libmpc-devel >= 0.8.1
+               end
+
                files
-                       /usr/lib/libquadmath*.so
+                       %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/plugin
                end
        end