···20202121- The `offrss` package was removed due to lack of upstream maintenance since 2012. It's recommended for users to migrate to another RSS reader
22222323-- GCC 9 has been removed, as it has reached end‐of‐life upstream and is no longer supported.
2323+- GCC 9 and 10 have been removed, as they have reached end‐of‐life upstream and are no longer supported.
24242525- `base16-builder` node package has been removed due to lack of upstream maintenance.
2626- `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.
···4141 )
42424343 ]
4444- ++
4444+ ++ (
4545+ let
4646+ targetPlatformSlash =
4747+ if lib.systems.equals hostPlatform targetPlatform then "" else "${targetPlatform.config}/";
45484646- # nixpkgs did not add the "libgcc" output until gcc11. In theory
4747- # the following condition can be changed to `true`, but that has not
4848- # been tested.
4949- lib.optionals (lib.versionAtLeast version "11.0")
4949+ # If we are building a cross-compiler and the target libc provided
5050+ # to us at build time has a libgcc, use that instead of building a
5151+ # new one. This avoids having two separate (but identical) libgcc
5252+ # outpaths in the closure of most packages, which can be confusing.
5353+ useLibgccFromTargetLibc = libcCross != null && libcCross ? passthru.libgcc;
50545151- (
5252- let
5353- targetPlatformSlash =
5454- if lib.systems.equals hostPlatform targetPlatform then "" else "${targetPlatform.config}/";
5555+ enableLibGccOutput =
5656+ (!stdenv.targetPlatform.isWindows || (lib.systems.equals stdenv.targetPlatform stdenv.hostPlatform))
5757+ && !langJit
5858+ && !stdenv.hostPlatform.isDarwin
5959+ && enableShared
6060+ && !useLibgccFromTargetLibc;
55615656- # If we are building a cross-compiler and the target libc provided
5757- # to us at build time has a libgcc, use that instead of building a
5858- # new one. This avoids having two separate (but identical) libgcc
5959- # outpaths in the closure of most packages, which can be confusing.
6060- useLibgccFromTargetLibc = libcCross != null && libcCross ? passthru.libgcc;
6262+ # For some reason libgcc_s.so has major-version "2" on m68k but
6363+ # "1" everywhere else. Might be worth changing this to "*".
6464+ libgcc_s-version-major = if targetPlatform.isM68k then "2" else "1";
61656262- enableLibGccOutput =
6363- (!stdenv.targetPlatform.isWindows || (lib.systems.equals stdenv.targetPlatform stdenv.hostPlatform))
6464- && !langJit
6565- && !stdenv.hostPlatform.isDarwin
6666- && enableShared
6767- && !useLibgccFromTargetLibc;
6666+ in
6767+ [
68686969- # For some reason libgcc_s.so has major-version "2" on m68k but
7070- # "1" everywhere else. Might be worth changing this to "*".
7171- libgcc_s-version-major = if targetPlatform.isM68k then "2" else "1";
6969+ (
7070+ pkg:
7171+ pkg.overrideAttrs (
7272+ previousAttrs:
7373+ lib.optionalAttrs useLibgccFromTargetLibc {
7474+ passthru = (previousAttrs.passthru or { }) // {
7575+ inherit (libcCross) libgcc;
7676+ };
7777+ }
7878+ )
7979+ )
72807373- in
7474- [
8181+ (
8282+ pkg:
8383+ pkg.overrideAttrs (
8484+ previousAttrs:
8585+ lib.optionalAttrs ((!langC) || langJit || enableLibGccOutput) {
8686+ outputs = previousAttrs.outputs ++ lib.optionals enableLibGccOutput [ "libgcc" ];
8787+ # This is a separate phase because gcc assembles its phase scripts
8888+ # in bash instead of nix (we should fix that).
8989+ preFixupPhases =
9090+ (previousAttrs.preFixupPhases or [ ])
9191+ ++ lib.optionals ((!langC) || enableLibGccOutput) [ "preFixupLibGccPhase" ];
9292+ preFixupLibGccPhase =
9393+ # delete extra/unused builds of libgcc_s in non-langC builds
9494+ # (i.e. libgccjit, gnat, etc) to avoid potential confusion
9595+ lib.optionalString (!langC) ''
9696+ rm -f $out/lib/libgcc_s.so*
9797+ ''
75987676- (
7777- pkg:
7878- pkg.overrideAttrs (
7979- previousAttrs:
8080- lib.optionalAttrs useLibgccFromTargetLibc {
8181- passthru = (previousAttrs.passthru or { }) // {
8282- inherit (libcCross) libgcc;
8383- };
8484- }
8585- )
8686- )
8787-8888- (
8989- pkg:
9090- pkg.overrideAttrs (
9191- previousAttrs:
9292- lib.optionalAttrs ((!langC) || langJit || enableLibGccOutput) {
9393- outputs = previousAttrs.outputs ++ lib.optionals enableLibGccOutput [ "libgcc" ];
9494- # This is a separate phase because gcc assembles its phase scripts
9595- # in bash instead of nix (we should fix that).
9696- preFixupPhases =
9797- (previousAttrs.preFixupPhases or [ ])
9898- ++ lib.optionals ((!langC) || enableLibGccOutput) [ "preFixupLibGccPhase" ];
9999- preFixupLibGccPhase =
100100- # delete extra/unused builds of libgcc_s in non-langC builds
101101- # (i.e. libgccjit, gnat, etc) to avoid potential confusion
102102- lib.optionalString (!langC) ''
103103- rm -f $out/lib/libgcc_s.so*
104104- ''
105105-106106- # move `libgcc_s.so` into its own output, `$libgcc`
107107- # We maintain $libgcc/lib/$target/ structure to make sure target
108108- # strip runs over libgcc_s.so and remove debug references to headers:
109109- # https://github.com/NixOS/nixpkgs/issues/316114
110110- + lib.optionalString enableLibGccOutput (
111111- ''
112112- # move libgcc from lib to its own output (libgcc)
113113- mkdir -p $libgcc/${targetPlatformSlash}lib
114114- mv $lib/${targetPlatformSlash}lib/libgcc_s.so $libgcc/${targetPlatformSlash}lib/
115115- mv $lib/${targetPlatformSlash}lib/libgcc_s.so.${libgcc_s-version-major} $libgcc/${targetPlatformSlash}lib/
116116- ln -s $libgcc/${targetPlatformSlash}lib/libgcc_s.so $lib/${targetPlatformSlash}lib/
117117- ln -s $libgcc/${targetPlatformSlash}lib/libgcc_s.so.${libgcc_s-version-major} $lib/${targetPlatformSlash}lib/
118118- ''
119119- + lib.optionalString (targetPlatformSlash != "") ''
120120- ln -s ${targetPlatformSlash}lib $libgcc/lib
121121- ''
122122- #
123123- # Nixpkgs ordinarily turns dynamic linking into pseudo-static linking:
124124- # libraries are still loaded dynamically, exactly which copy of each
125125- # library is loaded is permanently fixed at compile time (via RUNPATH).
126126- # For libgcc_s we must revert to the "impure dynamic linking" style found
127127- # in imperative software distributions. We must do this because
128128- # `libgcc_s` calls `malloc()` and therefore has a `DT_NEEDED` for `libc`,
129129- # which creates two problems:
130130- #
131131- # 1. A circular package dependency `glibc`<-`libgcc`<-`glibc`
132132- #
133133- # 2. According to the `-Wl,-rpath` flags added by Nixpkgs' `ld-wrapper`,
134134- # the two versions of `glibc` in the cycle above are actually
135135- # different packages. The later one is compiled by this `gcc`, but
136136- # the earlier one was compiled by the compiler *that compiled* this
137137- # `gcc` (usually the bootstrapFiles). In any event, the `glibc`
138138- # dynamic loader won't honor that specificity without namespaced
139139- # manual loads (`dlmopen()`). Once a `libc` is present in the address
140140- # space of a process, that `libc` will be used to satisfy all
141141- # `DT_NEEDED`s for `libc`, regardless of `RUNPATH`s.
142142- #
143143- # So we wipe the RUNPATH using `patchelf --set-rpath ""`. We can't use
144144- # `patchelf --remove-rpath`, because at least as of patchelf 0.15.0 it
145145- # will leave the old RUNPATH string in the file where the reference
146146- # scanner can still find it:
147147- #
148148- # https://github.com/NixOS/patchelf/issues/453
149149- #
150150- # Note: we might be using the bootstrapFiles' copy of patchelf, so we have
151151- # to keep doing it this way until both the issue is fixed *and* all the
152152- # bootstrapFiles are regenerated, on every platform.
153153- #
154154- # This patchelfing is *not* effectively equivalent to copying
155155- # `libgcc_s` into `glibc`'s outpath. There is one minor and one
156156- # major difference:
157157- #
158158- # 1. (Minor): multiple builds of `glibc` (say, with different
159159- # overrides or parameters) will all reference a single store
160160- # path:
161161- #
162162- # /nix/store/xxx...xxx-gcc-libgcc/lib/libgcc_s.so.1
163163- #
164164- # This many-to-one referrer relationship will be visible in the store's
165165- # dependency graph, and will be available to `nix-store -q` queries.
166166- # Copying `libgcc_s` into each of its referrers would lose that
167167- # information.
168168- #
169169- # 2. (Major): by referencing `libgcc_s.so.1`, rather than copying it, we
170170- # are still able to run `nix-store -qd` on it to find out how it got
171171- # built! Most importantly, we can see from that deriver which compiler
172172- # was used to build it (or if it is part of the unpacked
173173- # bootstrap-files). Copying `libgcc_s.so.1` from one outpath to
174174- # another eliminates the ability to make these queries.
175175- #
176176- + ''
177177- patchelf --set-rpath "" $libgcc/lib/libgcc_s.so.${libgcc_s-version-major}
178178- ''
179179- );
180180- }
181181- )
182182- )
183183- ]
9999+ # move `libgcc_s.so` into its own output, `$libgcc`
100100+ # We maintain $libgcc/lib/$target/ structure to make sure target
101101+ # strip runs over libgcc_s.so and remove debug references to headers:
102102+ # https://github.com/NixOS/nixpkgs/issues/316114
103103+ + lib.optionalString enableLibGccOutput (
104104+ ''
105105+ # move libgcc from lib to its own output (libgcc)
106106+ mkdir -p $libgcc/${targetPlatformSlash}lib
107107+ mv $lib/${targetPlatformSlash}lib/libgcc_s.so $libgcc/${targetPlatformSlash}lib/
108108+ mv $lib/${targetPlatformSlash}lib/libgcc_s.so.${libgcc_s-version-major} $libgcc/${targetPlatformSlash}lib/
109109+ ln -s $libgcc/${targetPlatformSlash}lib/libgcc_s.so $lib/${targetPlatformSlash}lib/
110110+ ln -s $libgcc/${targetPlatformSlash}lib/libgcc_s.so.${libgcc_s-version-major} $lib/${targetPlatformSlash}lib/
111111+ ''
112112+ + lib.optionalString (targetPlatformSlash != "") ''
113113+ ln -s ${targetPlatformSlash}lib $libgcc/lib
114114+ ''
115115+ #
116116+ # Nixpkgs ordinarily turns dynamic linking into pseudo-static linking:
117117+ # libraries are still loaded dynamically, exactly which copy of each
118118+ # library is loaded is permanently fixed at compile time (via RUNPATH).
119119+ # For libgcc_s we must revert to the "impure dynamic linking" style found
120120+ # in imperative software distributions. We must do this because
121121+ # `libgcc_s` calls `malloc()` and therefore has a `DT_NEEDED` for `libc`,
122122+ # which creates two problems:
123123+ #
124124+ # 1. A circular package dependency `glibc`<-`libgcc`<-`glibc`
125125+ #
126126+ # 2. According to the `-Wl,-rpath` flags added by Nixpkgs' `ld-wrapper`,
127127+ # the two versions of `glibc` in the cycle above are actually
128128+ # different packages. The later one is compiled by this `gcc`, but
129129+ # the earlier one was compiled by the compiler *that compiled* this
130130+ # `gcc` (usually the bootstrapFiles). In any event, the `glibc`
131131+ # dynamic loader won't honor that specificity without namespaced
132132+ # manual loads (`dlmopen()`). Once a `libc` is present in the address
133133+ # space of a process, that `libc` will be used to satisfy all
134134+ # `DT_NEEDED`s for `libc`, regardless of `RUNPATH`s.
135135+ #
136136+ # So we wipe the RUNPATH using `patchelf --set-rpath ""`. We can't use
137137+ # `patchelf --remove-rpath`, because at least as of patchelf 0.15.0 it
138138+ # will leave the old RUNPATH string in the file where the reference
139139+ # scanner can still find it:
140140+ #
141141+ # https://github.com/NixOS/patchelf/issues/453
142142+ #
143143+ # Note: we might be using the bootstrapFiles' copy of patchelf, so we have
144144+ # to keep doing it this way until both the issue is fixed *and* all the
145145+ # bootstrapFiles are regenerated, on every platform.
146146+ #
147147+ # This patchelfing is *not* effectively equivalent to copying
148148+ # `libgcc_s` into `glibc`'s outpath. There is one minor and one
149149+ # major difference:
150150+ #
151151+ # 1. (Minor): multiple builds of `glibc` (say, with different
152152+ # overrides or parameters) will all reference a single store
153153+ # path:
154154+ #
155155+ # /nix/store/xxx...xxx-gcc-libgcc/lib/libgcc_s.so.1
156156+ #
157157+ # This many-to-one referrer relationship will be visible in the store's
158158+ # dependency graph, and will be available to `nix-store -q` queries.
159159+ # Copying `libgcc_s` into each of its referrers would lose that
160160+ # information.
161161+ #
162162+ # 2. (Major): by referencing `libgcc_s.so.1`, rather than copying it, we
163163+ # are still able to run `nix-store -qd` on it to find out how it got
164164+ # built! Most importantly, we can see from that deriver which compiler
165165+ # was used to build it (or if it is part of the unpacked
166166+ # bootstrap-files). Copying `libgcc_s.so.1` from one outpath to
167167+ # another eliminates the ability to make these queries.
168168+ #
169169+ + ''
170170+ patchelf --set-rpath "" $libgcc/lib/libgcc_s.so.${libgcc_s-version-major}
171171+ ''
172172+ );
173173+ }
174174+ )
184175 )
176176+ ]
177177+ )
185178 )
···11-diff --git a/gcc/ada/gcc-interface/Makefile.in b/gcc/ada/gcc-interface/Makefile.in
22-index 4e74252bd74..0d848b5b4e3 100644
33---- a/gcc/ada/gcc-interface/Makefile.in
44-+++ b/gcc/ada/gcc-interface/Makefile.in
55-@@ -111,7 +111,7 @@ NO_OMIT_ADAFLAGS = -fno-omit-frame-pointer
66- NO_SIBLING_ADAFLAGS = -fno-optimize-sibling-calls
77- NO_REORDER_ADAFLAGS = -fno-toplevel-reorder
88- GNATLIBFLAGS = -W -Wall -gnatpg -nostdinc
99--GNATLIBCFLAGS = -g -O2
1010-+GNATLIBCFLAGS = -g -O2 $(CFLAGS_FOR_TARGET)
1111- # Pretend that _Unwind_GetIPInfo is available for the target by default. This
1212- # should be autodetected during the configuration of libada and passed down to
1313- # here, but we need something for --disable-libada and hope for the best.
1414-@@ -198,7 +198,7 @@ RTSDIR = rts$(subst /,_,$(MULTISUBDIR))
1515- # Link flags used to build gnat tools. By default we prefer to statically
1616- # link with libgcc to avoid a dependency on shared libgcc (which is tricky
1717- # to deal with as it may conflict with the libgcc provided by the system).
1818--GCC_LINK_FLAGS=-static-libstdc++ -static-libgcc
1919-+GCC_LINK_FLAGS=-static-libstdc++ -static-libgcc $(CFLAGS_FOR_TARGET)
2020-2121- # End of variables for you to override.
2222-2323-diff --git a/libada/Makefile.in b/libada/Makefile.in
2424-index 522b9207326..ca866c74471 100644
2525---- a/libada/Makefile.in
2626-+++ b/libada/Makefile.in
2727-@@ -59,7 +59,7 @@ LDFLAGS=
2828- CFLAGS=-g
2929- PICFLAG = @PICFLAG@
3030- GNATLIBFLAGS= -W -Wall -gnatpg -nostdinc
3131--GNATLIBCFLAGS= -g -O2
3232-+GNATLIBCFLAGS= -g -O2 $(CFLAGS)
3333- GNATLIBCFLAGS_FOR_C = -W -Wall $(GNATLIBCFLAGS) $(CFLAGS_FOR_TARGET) \
3434- -fexceptions -DIN_RTS @have_getipinfo@ @have_capability@
3535-
···950950 gcc8Stdenv = throw "gcc8Stdenv has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2024-11-20
951951 gcc9 = throw "gcc9 has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2025-08-08
952952 gcc9Stdenv = throw "gcc9Stdenv has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2025-08-08
953953- gcc10StdenvCompat =
954954- if stdenv.cc.isGNU && lib.versionAtLeast stdenv.cc.version "11" then gcc10Stdenv else stdenv; # Added 2024-03-21
953953+ gcc10 = throw "gcc10 has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2025-08-08
954954+ gcc10Stdenv = throw "gcc10Stdenv has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2025-08-08
955955+ gcc10StdenvCompat = throw "gcc10StdenvCompat has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2025-08-08
955956 gcc-arm-embedded-6 = throw "gcc-arm-embedded-6 has been removed from Nixpkgs as it is unmaintained and obsolete"; # Added 2025-04-12
956957 gcc-arm-embedded-7 = throw "gcc-arm-embedded-7 has been removed from Nixpkgs as it is unmaintained and obsolete"; # Added 2025-04-12
957958 gcc-arm-embedded-8 = throw "gcc-arm-embedded-8 has been removed from Nixpkgs as it is unmaintained and obsolete"; # Added 2025-04-12
···971972 gfortran7 = throw "gfortran7 has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2024-11-20
972973 gfortran8 = throw "gfortran8 has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2024-11-20
973974 gfortran9 = throw "gfortran9 has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2025-08-08
975975+ gfortran10 = throw "gfortran10 has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2025-08-08
974976 gg = go-graft; # Added 2025-03-07
975977 ggobi = throw "'ggobi' has been removed from Nixpkgs, as it is unmaintained and broken"; # Added 2025-05-18
976978 ghostwriter = makePlasma5Throw "ghostwriter"; # Added 2023-03-18