···2021- The `offrss` package was removed due to lack of upstream maintenance since 2012. It's recommended for users to migrate to another RSS reader
2223-- GCC 9 has been removed, as it has reached end‐of‐life upstream and is no longer supported.
2425- `base16-builder` node package has been removed due to lack of upstream maintenance.
26- `gentium` package now provides `Gentium-*.ttf` files, and not `GentiumPlus-*.ttf` files like before. The font identifiers `Gentium Plus*` are available in the `gentium-plus` package, and if you want to use the more recently updated package `gentium` [by sil](https://software.sil.org/gentium/), you should update your configuration files to use the `Gentium` font identifier.
···2021- The `offrss` package was removed due to lack of upstream maintenance since 2012. It's recommended for users to migrate to another RSS reader
2223+- GCC 9 and 10 have been removed, as they have reached end‐of‐life upstream and are no longer supported.
2425- `base16-builder` node package has been removed due to lack of upstream maintenance.
26- `gentium` package now provides `Gentium-*.ttf` files, and not `GentiumPlus-*.ttf` files like before. The font identifiers `Gentium Plus*` are available in the `gentium-plus` package, and if you want to use the more recently updated package `gentium` [by sil](https://software.sil.org/gentium/), you should update your configuration files to use the `Gentium` font identifier.
···41 )
4243 ]
44- ++
0004546- # nixpkgs did not add the "libgcc" output until gcc11. In theory
47- # the following condition can be changed to `true`, but that has not
48- # been tested.
49- lib.optionals (lib.versionAtLeast version "11.0")
05051- (
52- let
53- targetPlatformSlash =
54- if lib.systems.equals hostPlatform targetPlatform then "" else "${targetPlatform.config}/";
005556- # If we are building a cross-compiler and the target libc provided
57- # to us at build time has a libgcc, use that instead of building a
58- # new one. This avoids having two separate (but identical) libgcc
59- # outpaths in the closure of most packages, which can be confusing.
60- useLibgccFromTargetLibc = libcCross != null && libcCross ? passthru.libgcc;
6162- enableLibGccOutput =
63- (!stdenv.targetPlatform.isWindows || (lib.systems.equals stdenv.targetPlatform stdenv.hostPlatform))
64- && !langJit
65- && !stdenv.hostPlatform.isDarwin
66- && enableShared
67- && !useLibgccFromTargetLibc;
6869- # For some reason libgcc_s.so has major-version "2" on m68k but
70- # "1" everywhere else. Might be worth changing this to "*".
71- libgcc_s-version-major = if targetPlatform.isM68k then "2" else "1";
000000007273- in
74- [
0000000000000007576- (
77- pkg:
78- pkg.overrideAttrs (
79- previousAttrs:
80- lib.optionalAttrs useLibgccFromTargetLibc {
81- passthru = (previousAttrs.passthru or { }) // {
82- inherit (libcCross) libgcc;
83- };
84- }
85- )
86- )
87-88- (
89- pkg:
90- pkg.overrideAttrs (
91- previousAttrs:
92- lib.optionalAttrs ((!langC) || langJit || enableLibGccOutput) {
93- outputs = previousAttrs.outputs ++ lib.optionals enableLibGccOutput [ "libgcc" ];
94- # This is a separate phase because gcc assembles its phase scripts
95- # in bash instead of nix (we should fix that).
96- preFixupPhases =
97- (previousAttrs.preFixupPhases or [ ])
98- ++ lib.optionals ((!langC) || enableLibGccOutput) [ "preFixupLibGccPhase" ];
99- preFixupLibGccPhase =
100- # delete extra/unused builds of libgcc_s in non-langC builds
101- # (i.e. libgccjit, gnat, etc) to avoid potential confusion
102- lib.optionalString (!langC) ''
103- rm -f $out/lib/libgcc_s.so*
104- ''
105-106- # move `libgcc_s.so` into its own output, `$libgcc`
107- # We maintain $libgcc/lib/$target/ structure to make sure target
108- # strip runs over libgcc_s.so and remove debug references to headers:
109- # https://github.com/NixOS/nixpkgs/issues/316114
110- + lib.optionalString enableLibGccOutput (
111- ''
112- # move libgcc from lib to its own output (libgcc)
113- mkdir -p $libgcc/${targetPlatformSlash}lib
114- mv $lib/${targetPlatformSlash}lib/libgcc_s.so $libgcc/${targetPlatformSlash}lib/
115- mv $lib/${targetPlatformSlash}lib/libgcc_s.so.${libgcc_s-version-major} $libgcc/${targetPlatformSlash}lib/
116- ln -s $libgcc/${targetPlatformSlash}lib/libgcc_s.so $lib/${targetPlatformSlash}lib/
117- ln -s $libgcc/${targetPlatformSlash}lib/libgcc_s.so.${libgcc_s-version-major} $lib/${targetPlatformSlash}lib/
118- ''
119- + lib.optionalString (targetPlatformSlash != "") ''
120- ln -s ${targetPlatformSlash}lib $libgcc/lib
121- ''
122- #
123- # Nixpkgs ordinarily turns dynamic linking into pseudo-static linking:
124- # libraries are still loaded dynamically, exactly which copy of each
125- # library is loaded is permanently fixed at compile time (via RUNPATH).
126- # For libgcc_s we must revert to the "impure dynamic linking" style found
127- # in imperative software distributions. We must do this because
128- # `libgcc_s` calls `malloc()` and therefore has a `DT_NEEDED` for `libc`,
129- # which creates two problems:
130- #
131- # 1. A circular package dependency `glibc`<-`libgcc`<-`glibc`
132- #
133- # 2. According to the `-Wl,-rpath` flags added by Nixpkgs' `ld-wrapper`,
134- # the two versions of `glibc` in the cycle above are actually
135- # different packages. The later one is compiled by this `gcc`, but
136- # the earlier one was compiled by the compiler *that compiled* this
137- # `gcc` (usually the bootstrapFiles). In any event, the `glibc`
138- # dynamic loader won't honor that specificity without namespaced
139- # manual loads (`dlmopen()`). Once a `libc` is present in the address
140- # space of a process, that `libc` will be used to satisfy all
141- # `DT_NEEDED`s for `libc`, regardless of `RUNPATH`s.
142- #
143- # So we wipe the RUNPATH using `patchelf --set-rpath ""`. We can't use
144- # `patchelf --remove-rpath`, because at least as of patchelf 0.15.0 it
145- # will leave the old RUNPATH string in the file where the reference
146- # scanner can still find it:
147- #
148- # https://github.com/NixOS/patchelf/issues/453
149- #
150- # Note: we might be using the bootstrapFiles' copy of patchelf, so we have
151- # to keep doing it this way until both the issue is fixed *and* all the
152- # bootstrapFiles are regenerated, on every platform.
153- #
154- # This patchelfing is *not* effectively equivalent to copying
155- # `libgcc_s` into `glibc`'s outpath. There is one minor and one
156- # major difference:
157- #
158- # 1. (Minor): multiple builds of `glibc` (say, with different
159- # overrides or parameters) will all reference a single store
160- # path:
161- #
162- # /nix/store/xxx...xxx-gcc-libgcc/lib/libgcc_s.so.1
163- #
164- # This many-to-one referrer relationship will be visible in the store's
165- # dependency graph, and will be available to `nix-store -q` queries.
166- # Copying `libgcc_s` into each of its referrers would lose that
167- # information.
168- #
169- # 2. (Major): by referencing `libgcc_s.so.1`, rather than copying it, we
170- # are still able to run `nix-store -qd` on it to find out how it got
171- # built! Most importantly, we can see from that deriver which compiler
172- # was used to build it (or if it is part of the unpacked
173- # bootstrap-files). Copying `libgcc_s.so.1` from one outpath to
174- # another eliminates the ability to make these queries.
175- #
176- + ''
177- patchelf --set-rpath "" $libgcc/lib/libgcc_s.so.${libgcc_s-version-major}
178- ''
179- );
180- }
181- )
182- )
183- ]
184 )
00185 )
···41 )
4243 ]
44+ ++ (
45+ let
46+ targetPlatformSlash =
47+ if lib.systems.equals hostPlatform targetPlatform then "" else "${targetPlatform.config}/";
4849+ # If we are building a cross-compiler and the target libc provided
50+ # to us at build time has a libgcc, use that instead of building a
51+ # new one. This avoids having two separate (but identical) libgcc
52+ # outpaths in the closure of most packages, which can be confusing.
53+ useLibgccFromTargetLibc = libcCross != null && libcCross ? passthru.libgcc;
5455+ enableLibGccOutput =
56+ (!stdenv.targetPlatform.isWindows || (lib.systems.equals stdenv.targetPlatform stdenv.hostPlatform))
57+ && !langJit
58+ && !stdenv.hostPlatform.isDarwin
59+ && enableShared
60+ && !useLibgccFromTargetLibc;
6162+ # For some reason libgcc_s.so has major-version "2" on m68k but
63+ # "1" everywhere else. Might be worth changing this to "*".
64+ libgcc_s-version-major = if targetPlatform.isM68k then "2" else "1";
006566+ in
67+ [
00006869+ (
70+ pkg:
71+ pkg.overrideAttrs (
72+ previousAttrs:
73+ lib.optionalAttrs useLibgccFromTargetLibc {
74+ passthru = (previousAttrs.passthru or { }) // {
75+ inherit (libcCross) libgcc;
76+ };
77+ }
78+ )
79+ )
8081+ (
82+ pkg:
83+ pkg.overrideAttrs (
84+ previousAttrs:
85+ lib.optionalAttrs ((!langC) || langJit || enableLibGccOutput) {
86+ outputs = previousAttrs.outputs ++ lib.optionals enableLibGccOutput [ "libgcc" ];
87+ # This is a separate phase because gcc assembles its phase scripts
88+ # in bash instead of nix (we should fix that).
89+ preFixupPhases =
90+ (previousAttrs.preFixupPhases or [ ])
91+ ++ lib.optionals ((!langC) || enableLibGccOutput) [ "preFixupLibGccPhase" ];
92+ preFixupLibGccPhase =
93+ # delete extra/unused builds of libgcc_s in non-langC builds
94+ # (i.e. libgccjit, gnat, etc) to avoid potential confusion
95+ lib.optionalString (!langC) ''
96+ rm -f $out/lib/libgcc_s.so*
97+ ''
9899+ # move `libgcc_s.so` into its own output, `$libgcc`
100+ # We maintain $libgcc/lib/$target/ structure to make sure target
101+ # strip runs over libgcc_s.so and remove debug references to headers:
102+ # https://github.com/NixOS/nixpkgs/issues/316114
103+ + lib.optionalString enableLibGccOutput (
104+ ''
105+ # move libgcc from lib to its own output (libgcc)
106+ mkdir -p $libgcc/${targetPlatformSlash}lib
107+ mv $lib/${targetPlatformSlash}lib/libgcc_s.so $libgcc/${targetPlatformSlash}lib/
108+ mv $lib/${targetPlatformSlash}lib/libgcc_s.so.${libgcc_s-version-major} $libgcc/${targetPlatformSlash}lib/
109+ ln -s $libgcc/${targetPlatformSlash}lib/libgcc_s.so $lib/${targetPlatformSlash}lib/
110+ ln -s $libgcc/${targetPlatformSlash}lib/libgcc_s.so.${libgcc_s-version-major} $lib/${targetPlatformSlash}lib/
111+ ''
112+ + lib.optionalString (targetPlatformSlash != "") ''
113+ ln -s ${targetPlatformSlash}lib $libgcc/lib
114+ ''
115+ #
116+ # Nixpkgs ordinarily turns dynamic linking into pseudo-static linking:
117+ # libraries are still loaded dynamically, exactly which copy of each
118+ # library is loaded is permanently fixed at compile time (via RUNPATH).
119+ # For libgcc_s we must revert to the "impure dynamic linking" style found
120+ # in imperative software distributions. We must do this because
121+ # `libgcc_s` calls `malloc()` and therefore has a `DT_NEEDED` for `libc`,
122+ # which creates two problems:
123+ #
124+ # 1. A circular package dependency `glibc`<-`libgcc`<-`glibc`
125+ #
126+ # 2. According to the `-Wl,-rpath` flags added by Nixpkgs' `ld-wrapper`,
127+ # the two versions of `glibc` in the cycle above are actually
128+ # different packages. The later one is compiled by this `gcc`, but
129+ # the earlier one was compiled by the compiler *that compiled* this
130+ # `gcc` (usually the bootstrapFiles). In any event, the `glibc`
131+ # dynamic loader won't honor that specificity without namespaced
132+ # manual loads (`dlmopen()`). Once a `libc` is present in the address
133+ # space of a process, that `libc` will be used to satisfy all
134+ # `DT_NEEDED`s for `libc`, regardless of `RUNPATH`s.
135+ #
136+ # So we wipe the RUNPATH using `patchelf --set-rpath ""`. We can't use
137+ # `patchelf --remove-rpath`, because at least as of patchelf 0.15.0 it
138+ # will leave the old RUNPATH string in the file where the reference
139+ # scanner can still find it:
140+ #
141+ # https://github.com/NixOS/patchelf/issues/453
142+ #
143+ # Note: we might be using the bootstrapFiles' copy of patchelf, so we have
144+ # to keep doing it this way until both the issue is fixed *and* all the
145+ # bootstrapFiles are regenerated, on every platform.
146+ #
147+ # This patchelfing is *not* effectively equivalent to copying
148+ # `libgcc_s` into `glibc`'s outpath. There is one minor and one
149+ # major difference:
150+ #
151+ # 1. (Minor): multiple builds of `glibc` (say, with different
152+ # overrides or parameters) will all reference a single store
153+ # path:
154+ #
155+ # /nix/store/xxx...xxx-gcc-libgcc/lib/libgcc_s.so.1
156+ #
157+ # This many-to-one referrer relationship will be visible in the store's
158+ # dependency graph, and will be available to `nix-store -q` queries.
159+ # Copying `libgcc_s` into each of its referrers would lose that
160+ # information.
161+ #
162+ # 2. (Major): by referencing `libgcc_s.so.1`, rather than copying it, we
163+ # are still able to run `nix-store -qd` on it to find out how it got
164+ # built! Most importantly, we can see from that deriver which compiler
165+ # was used to build it (or if it is part of the unpacked
166+ # bootstrap-files). Copying `libgcc_s.so.1` from one outpath to
167+ # another eliminates the ability to make these queries.
168+ #
169+ + ''
170+ patchelf --set-rpath "" $libgcc/lib/libgcc_s.so.${libgcc_s-version-major}
171+ ''
172+ );
173+ }
174+ )
00000000000000000000000000000000175 )
176+ ]
177+ )
178 )
···1-diff --git a/gcc/ada/gcc-interface/Makefile.in b/gcc/ada/gcc-interface/Makefile.in
2-index 4e74252bd74..0d848b5b4e3 100644
3---- a/gcc/ada/gcc-interface/Makefile.in
4-+++ b/gcc/ada/gcc-interface/Makefile.in
5-@@ -111,7 +111,7 @@ NO_OMIT_ADAFLAGS = -fno-omit-frame-pointer
6- NO_SIBLING_ADAFLAGS = -fno-optimize-sibling-calls
7- NO_REORDER_ADAFLAGS = -fno-toplevel-reorder
8- GNATLIBFLAGS = -W -Wall -gnatpg -nostdinc
9--GNATLIBCFLAGS = -g -O2
10-+GNATLIBCFLAGS = -g -O2 $(CFLAGS_FOR_TARGET)
11- # Pretend that _Unwind_GetIPInfo is available for the target by default. This
12- # should be autodetected during the configuration of libada and passed down to
13- # here, but we need something for --disable-libada and hope for the best.
14-@@ -198,7 +198,7 @@ RTSDIR = rts$(subst /,_,$(MULTISUBDIR))
15- # Link flags used to build gnat tools. By default we prefer to statically
16- # link with libgcc to avoid a dependency on shared libgcc (which is tricky
17- # to deal with as it may conflict with the libgcc provided by the system).
18--GCC_LINK_FLAGS=-static-libstdc++ -static-libgcc
19-+GCC_LINK_FLAGS=-static-libstdc++ -static-libgcc $(CFLAGS_FOR_TARGET)
20-21- # End of variables for you to override.
22-23-diff --git a/libada/Makefile.in b/libada/Makefile.in
24-index 522b9207326..ca866c74471 100644
25---- a/libada/Makefile.in
26-+++ b/libada/Makefile.in
27-@@ -59,7 +59,7 @@ LDFLAGS=
28- CFLAGS=-g
29- PICFLAG = @PICFLAG@
30- GNATLIBFLAGS= -W -Wall -gnatpg -nostdinc
31--GNATLIBCFLAGS= -g -O2
32-+GNATLIBCFLAGS= -g -O2 $(CFLAGS)
33- GNATLIBCFLAGS_FOR_C = -W -Wall $(GNATLIBCFLAGS) $(CFLAGS_FOR_TARGET) \
34- -fexceptions -DIN_RTS @have_getipinfo@ @have_capability@
35-
···950 gcc8Stdenv = throw "gcc8Stdenv has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2024-11-20
951 gcc9 = throw "gcc9 has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2025-08-08
952 gcc9Stdenv = throw "gcc9Stdenv has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2025-08-08
953- gcc10StdenvCompat =
954- if stdenv.cc.isGNU && lib.versionAtLeast stdenv.cc.version "11" then gcc10Stdenv else stdenv; # Added 2024-03-21
0955 gcc-arm-embedded-6 = throw "gcc-arm-embedded-6 has been removed from Nixpkgs as it is unmaintained and obsolete"; # Added 2025-04-12
956 gcc-arm-embedded-7 = throw "gcc-arm-embedded-7 has been removed from Nixpkgs as it is unmaintained and obsolete"; # Added 2025-04-12
957 gcc-arm-embedded-8 = throw "gcc-arm-embedded-8 has been removed from Nixpkgs as it is unmaintained and obsolete"; # Added 2025-04-12
···971 gfortran7 = throw "gfortran7 has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2024-11-20
972 gfortran8 = throw "gfortran8 has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2024-11-20
973 gfortran9 = throw "gfortran9 has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2025-08-08
0974 gg = go-graft; # Added 2025-03-07
975 ggobi = throw "'ggobi' has been removed from Nixpkgs, as it is unmaintained and broken"; # Added 2025-05-18
976 ghostwriter = makePlasma5Throw "ghostwriter"; # Added 2023-03-18
···950 gcc8Stdenv = throw "gcc8Stdenv has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2024-11-20
951 gcc9 = throw "gcc9 has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2025-08-08
952 gcc9Stdenv = throw "gcc9Stdenv has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2025-08-08
953+ gcc10 = throw "gcc10 has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2025-08-08
954+ gcc10Stdenv = throw "gcc10Stdenv has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2025-08-08
955+ gcc10StdenvCompat = throw "gcc10StdenvCompat has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2025-08-08
956 gcc-arm-embedded-6 = throw "gcc-arm-embedded-6 has been removed from Nixpkgs as it is unmaintained and obsolete"; # Added 2025-04-12
957 gcc-arm-embedded-7 = throw "gcc-arm-embedded-7 has been removed from Nixpkgs as it is unmaintained and obsolete"; # Added 2025-04-12
958 gcc-arm-embedded-8 = throw "gcc-arm-embedded-8 has been removed from Nixpkgs as it is unmaintained and obsolete"; # Added 2025-04-12
···972 gfortran7 = throw "gfortran7 has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2024-11-20
973 gfortran8 = throw "gfortran8 has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2024-11-20
974 gfortran9 = throw "gfortran9 has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2025-08-08
975+ gfortran10 = throw "gfortran10 has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2025-08-08
976 gg = go-graft; # Added 2025-03-07
977 ggobi = throw "'ggobi' has been removed from Nixpkgs, as it is unmaintained and broken"; # Added 2025-05-18
978 ghostwriter = makePlasma5Throw "ghostwriter"; # Added 2023-03-18