diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2012-02-17 22:02:37 +0000 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2012-02-17 22:02:37 +0000 |
commit | 0811db080e8ee73d1df01bef19fb6fb1613afe8b (patch) | |
tree | 544ddde63fff139ecd8350d7be097ee1328ceeb2 /pkgs/development/libraries/glibc | |
parent | 6c2de318ad40dc832c37b4b866a22b046151bc34 (diff) | |
download | nixlib-0811db080e8ee73d1df01bef19fb6fb1613afe8b.tar nixlib-0811db080e8ee73d1df01bef19fb6fb1613afe8b.tar.gz nixlib-0811db080e8ee73d1df01bef19fb6fb1613afe8b.tar.bz2 nixlib-0811db080e8ee73d1df01bef19fb6fb1613afe8b.tar.lz nixlib-0811db080e8ee73d1df01bef19fb6fb1613afe8b.tar.xz nixlib-0811db080e8ee73d1df01bef19fb6fb1613afe8b.tar.zst nixlib-0811db080e8ee73d1df01bef19fb6fb1613afe8b.zip |
* Move all glibc versions to development/libraries/glibc.
svn path=/nixpkgs/branches/stdenv-updates/; revision=32373
Diffstat (limited to 'pkgs/development/libraries/glibc')
43 files changed, 4383 insertions, 0 deletions
diff --git a/pkgs/development/libraries/glibc/2.13/builder.sh b/pkgs/development/libraries/glibc/2.13/builder.sh new file mode 100644 index 000000000000..9a1c1490019a --- /dev/null +++ b/pkgs/development/libraries/glibc/2.13/builder.sh @@ -0,0 +1,55 @@ +# Glibc cannot have itself in its RPATH. +export NIX_NO_SELF_RPATH=1 + +source $stdenv/setup + +postConfigure() { + # Hack: get rid of the `-static' flag set by the bootstrap stdenv. + # This has to be done *after* `configure' because it builds some + # test binaries. + export NIX_CFLAGS_LINK= + export NIX_LDFLAGS_BEFORE= + + export NIX_DONT_SET_RPATH=1 + unset CFLAGS +} + + +postInstall() { + if test -n "$installLocales"; then + make -j${NIX_BUILD_CORES:-1} -l${NIX_BUILD_CORES:-1} localedata/install-locales + fi + + test -f $out/etc/ld.so.cache && rm $out/etc/ld.so.cache + + # FIXME: Use `test -n $linuxHeaders' when `kernelHeaders' has been + # renamed. + if test -z "$hurdHeaders"; then + # Include the Linux kernel headers in Glibc, except the `scsi' + # subdirectory, which Glibc provides itself. + (cd $out/include && \ + ln -sv $(ls -d $kernelHeaders/include/* | grep -v 'scsi$') .) + fi + + if test -f "$out/lib/libhurduser.so"; then + # libc.so, libhurduser.so, and libmachuser.so depend on each + # other, so add them to libc.so (a RUNPATH on libc.so.0.3 + # would be ignored by the cross-linker.) + echo "adding \`libhurduser.so' and \`libmachuser.so' to the \`libc.so' linker script..." + sed -i "$out/lib/libc.so" \ + -e"s|\(libc\.so\.[^ ]\+\>\)|\1 $out/lib/libhurduser.so $out/lib/libmachuser.so|g" + fi + + # Fix for NIXOS-54 (ldd not working on x86_64). Make a symlink + # "lib64" to "lib". + if test -n "$is64bit"; then + ln -s lib $out/lib64 + fi + + # This file, that should not remain in the glibc derivation, + # may have not been created during the preInstall + rm -f $out/lib/libgcc_s.so.1 +} + + +genericBuild diff --git a/pkgs/development/libraries/glibc/2.13/common.nix b/pkgs/development/libraries/glibc/2.13/common.nix new file mode 100644 index 000000000000..d63e7e99e480 --- /dev/null +++ b/pkgs/development/libraries/glibc/2.13/common.nix @@ -0,0 +1,213 @@ +/* Build configuration used to build glibc, Info files, and locale + information. */ + +cross : + +{ name, fetchurl, stdenv, installLocales ? false +, gccCross ? null, kernelHeaders ? null +, machHeaders ? null, hurdHeaders ? null, mig ? null, fetchgit ? null +, profilingLibraries ? false, meta +, preConfigure ? "", ... }@args : + +let + # For GNU/Hurd, see below. + version = if hurdHeaders != null then "20100512" else "2.13"; + + needsPortsNative = stdenv.isMips || stdenv.isArm; + needsPortsCross = cross.arch == "mips" || cross.arch == "arm"; + needsPorts = if (stdenv ? cross) && stdenv.cross != null then true + else if cross == null then needsPortsNative + else needsPortsCross; + + srcPorts = fetchurl { + url = "mirror://gnu/glibc/glibc-ports-2.13.tar.bz2"; + sha256 = "0npffql62m1xba15l1wkaqf2p0l2bvb33720gx28764jmq0la75i"; + }; + +in + +assert (cross != null) -> (gccCross != null); + +assert (mig != null) -> (machHeaders != null); +assert (machHeaders != null) -> (hurdHeaders != null); +assert (hurdHeaders != null) -> (fetchgit != null); + +stdenv.mkDerivation ({ + inherit kernelHeaders installLocales; + + # The host/target system. + crossConfig = if (cross != null) then cross.config else null; + + inherit (stdenv) is64bit; + + enableParallelBuilding = true; + + patches = + stdenv.lib.optional (fetchgit == null) + /* Fix for NIXPKGS-79: when doing host name lookups, when + nsswitch.conf contains a line like + + hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 + + don't return an error when mdns4_minimal can't be found. This + is a bug in Glibc: when a service can't be found, NSS should + continue to the next service unless "UNAVAIL=return" is set. + ("NOTFOUND=return" refers to the service returning a NOTFOUND + error, not the service itself not being found.) The reason is + that the "status" variable (while initialised to UNAVAIL) is + outside of the loop that iterates over the services, the + "files" service sets status to NOTFOUND. So when the call to + find "mdns4_minimal" fails, "status" will still be NOTFOUND, + and it will return instead of continuing to "dns". Thus, the + line + + hosts: mdns4_minimal [NOTFOUND=return] dns mdns4 + + does work because "status" will contain UNAVAIL after the + failure to find mdns4_minimal. */ + ./nss-skip-unavail.patch + ++ [ + /* Have rpcgen(1) look for cpp(1) in $PATH. */ + ./rpcgen-path.patch + + /* Allow nixos and nix handle the locale-archive. */ + ./nix-locale-archive.patch + + /* Without this patch many KDE binaries crash. */ + ./glibc-elf-localscope.patch + ]; + + postPatch = '' + # Needed for glibc to build with the gnumake 3.82 + # http://comments.gmane.org/gmane.linux.lfs.support/31227 + sed -i 's/ot \$/ot:\n\ttouch $@\n$/' manual/Makefile + + # nscd needs libgcc, and we don't want it dynamically linked + # because we don't want it to depend on bootstrap-tools libs. + echo "LDFLAGS-nscd += -static-libgcc" >> nscd/Makefile + ''; + + configureFlags = [ + "-C" + "--enable-add-ons" + "--sysconfdir=/etc" + "--localedir=/var/run/current-system/sw/lib/locale" + (if kernelHeaders != null + then "--with-headers=${kernelHeaders}/include" + else "--without-headers") + (if profilingLibraries + then "--enable-profile" + else "--disable-profile") + ] ++ stdenv.lib.optionals (cross != null) [ + (if cross.withTLS then "--with-tls" else "--without-tls") + (if cross.float == "soft" then "--without-fp" else "--with-fp") + "--enable-kernel=2.6.0" + "--with-__thread" + ] ++ stdenv.lib.optionals (stdenv.system == "armv5tel-linux") [ + "--host=arm-linux-gnueabi" + "--build=arm-linux-gnueabi" + "--without-fp" + + # To avoid linking with -lgcc_s (dynamic link) + # so the glibc does not depend on its compiler store path + "libc_cv_as_needed=no" + ]; + + installFlags = [ "sysconfdir=$(out)/etc" ]; + + buildInputs = stdenv.lib.optionals (cross != null) [ gccCross ] + ++ stdenv.lib.optional (mig != null) mig; + + # Needed to install share/zoneinfo/zone.tab. Set to impure /bin/sh to + # prevent a retained dependency on the bootstrap tools in the stdenv-linux + # bootstrap. + BASH_SHELL = "/bin/sh"; + + # Workaround for this bug: + # http://sourceware.org/bugzilla/show_bug.cgi?id=411 + # I.e. when gcc is compiled with --with-arch=i686, then the + # preprocessor symbol `__i686' will be defined to `1'. This causes + # the symbol __i686.get_pc_thunk.dx to be mangled. + NIX_CFLAGS_COMPILE = stdenv.lib.optionalString (stdenv.system == "i686-linux") "-U__i686"; +} + +# Remove the `gccCross' attribute so that the *native* glibc store path +# doesn't depend on whether `gccCross' is null or not. +// (removeAttrs args [ "gccCross" ]) // + +{ + name = name + "-${version}" + + stdenv.lib.optionalString (cross != null) "-${cross.config}"; + + src = + if hurdHeaders != null + then fetchgit { + # Shamefully the "official" glibc won't build on GNU, so use the one + # maintained by the Hurd folks, `tschwinge/Roger_Whittaker' branch. + # See <http://www.gnu.org/software/hurd/source_repositories/glibc.html>. + url = "git://git.sv.gnu.org/hurd/glibc.git"; + sha256 = "f3590a54a9d897d121f91113949edbaaf3e30cdeacbb8d0a44de7b6564f6643e"; + rev = "df4c3faf0ccc848b5a8086c222bdb42679a9798f"; + } + else fetchurl { + url = "mirror://gnu/glibc/glibc-${version}.tar.bz2"; + sha256 = "1cnv319ysc8nkwpqw6f6ymb6b8hbl0nyvyx48sddkrj50lmcjwq1"; + }; + + # `fetchurl' is a function and thus should not be passed to the + # `derivation' primitive. + fetchurl = null; + + # Remove absolute paths from `configure' & co.; build out-of-tree. + preConfigure = '' + export PWD_P=$(type -tP pwd) + for i in configure io/ftwtest-sh; do + # Can't use substituteInPlace here because replace hasn't been + # built yet in the bootstrap. + sed -i "$i" -e "s^/bin/pwd^$PWD_P^g" + done + + ${if needsPorts then "tar xvf ${srcPorts}" else ""} + + mkdir ../build + cd ../build + + configureScript="`pwd`/../$sourceRoot/configure" + + ${preConfigure} + ''; + + meta = { + homepage = http://www.gnu.org/software/libc/; + description = "The GNU C Library"; + + longDescription = + '' Any Unix-like operating system needs a C library: the library which + defines the "system calls" and other basic facilities such as + open, malloc, printf, exit... + + The GNU C library is used as the C library in the GNU system and + most systems with the Linux kernel. + ''; + + license = "LGPLv2+"; + + maintainers = [ stdenv.lib.maintainers.ludo ]; + platforms = stdenv.lib.platforms.linux; + } // meta; +} + +// + +(if hurdHeaders != null + then { + # Work around the fact that the configure snippet that looks for + # <hurd/version.h> does not honor `--with-headers=$sysheaders' and that + # glibc expects both Mach and Hurd headers to be in the same place. + CPATH = "${hurdHeaders}/include:${machHeaders}/include"; + + # `fetchgit' is a function and thus should not be passed to the + # `derivation' primitive. + fetchgit = null; + } + else { })) diff --git a/pkgs/development/libraries/glibc/2.13/default.nix b/pkgs/development/libraries/glibc/2.13/default.nix new file mode 100644 index 000000000000..95778b50b70b --- /dev/null +++ b/pkgs/development/libraries/glibc/2.13/default.nix @@ -0,0 +1,83 @@ +{ stdenv, fetchurl, kernelHeaders +, machHeaders ? null, hurdHeaders ? null, mig ? null, fetchgit ? null +, installLocales ? true +, profilingLibraries ? false +, gccCross ? null +}: + +assert stdenv.gcc.gcc != null; + +let + build = import ./common.nix; + cross = if gccCross != null then gccCross.target else null; +in + build cross ({ + name = "glibc"; + + inherit fetchurl stdenv kernelHeaders installLocales profilingLibraries + gccCross; + + builder = ./builder.sh; + + # When building glibc from bootstrap-tools, we need libgcc_s at RPATH for + # any program we run, because the gcc will have been placed at a new + # store path than that determined when built (as a source for the + # bootstrap-tools tarball) + # Building from a proper gcc staying in the path where it was installed, + # libgcc_s will not be at {gcc}/lib, and gcc's libgcc will be found without + # any special hack. + preInstall = '' + if [ -f ${stdenv.gcc.gcc}/lib/libgcc_s.so.1 ]; then + mkdir -p $out/lib + ln -s ${stdenv.gcc.gcc}/lib/libgcc_s.so.1 $out/lib/libgcc_s.so.1 + fi + ''; + + meta.description = "The GNU C Library"; + } + + // + + (if hurdHeaders != null + then rec { + inherit machHeaders hurdHeaders mig fetchgit; + + propagatedBuildInputs = [ machHeaders hurdHeaders ]; + + passthru = { + # When building GCC itself `propagatedBuildInputs' above is not + # honored, so we pass it here so that the GCC builder can do the right + # thing. + inherit propagatedBuildInputs; + }; + } + else { }) + + // + + (if cross != null + then { + preConfigure = '' + sed -i s/-lgcc_eh//g "../$sourceRoot/Makeconfig" + + cat > config.cache << "EOF" + libc_cv_forced_unwind=yes + libc_cv_c_cleanup=yes + libc_cv_gnu89_inline=yes + # Only due to a problem in gcc configure scripts: + libc_cv_sparc64_tls=${if cross.withTLS then "yes" else "no"} + EOF + export BUILD_CC=gcc + export CC="$crossConfig-gcc" + export AR="$crossConfig-ar" + export RANLIB="$crossConfig-ranlib" + + dontStrip=1 + ''; + + # To avoid a dependency on the build system 'bash'. + preFixup = '' + rm $out/bin/{ldd,tzselect,catchsegv,xtrace} + ''; + } + else {})) diff --git a/pkgs/development/libraries/glibc/2.13/glibc-elf-localscope.patch b/pkgs/development/libraries/glibc/2.13/glibc-elf-localscope.patch new file mode 100644 index 000000000000..98f7f81087bb --- /dev/null +++ b/pkgs/development/libraries/glibc/2.13/glibc-elf-localscope.patch @@ -0,0 +1,82 @@ +diff -ru a/elf/dl-close.c b/elf/dl-close.c +--- a/elf/dl-close.c 2011-02-04 00:35:03.000000000 +0100 ++++ b/elf/dl-close.c 2011-02-22 02:16:12.367883000 +0100 +@@ -180,24 +186,28 @@ + /* Signal the object is still needed. */ + l->l_idx = IDX_STILL_USED; + ++#define mark_used(dmap) \ ++ do { \ ++ if ((dmap)->l_idx != IDX_STILL_USED) \ ++ { \ ++ assert ((dmap)->l_idx >= 0 && (dmap)->l_idx < nloaded); \ ++ \ ++ if (!used[(dmap)->l_idx]) \ ++ { \ ++ used[(dmap)->l_idx] = 1; \ ++ if ((dmap)->l_idx - 1 < done_index) \ ++ done_index = (dmap)->l_idx - 1; \ ++ } \ ++ } \ ++ } while (0) ++ + /* Mark all dependencies as used. */ + if (l->l_initfini != NULL) + { + struct link_map **lp = &l->l_initfini[1]; + while (*lp != NULL) + { +- if ((*lp)->l_idx != IDX_STILL_USED) +- { +- assert ((*lp)->l_idx >= 0 && (*lp)->l_idx < nloaded); +- +- if (!used[(*lp)->l_idx]) +- { +- used[(*lp)->l_idx] = 1; +- if ((*lp)->l_idx - 1 < done_index) +- done_index = (*lp)->l_idx - 1; +- } +- } +- ++ mark_used(*lp); + ++lp; + } + } +@@ -206,19 +216,25 @@ + for (unsigned int j = 0; j < l->l_reldeps->act; ++j) + { + struct link_map *jmap = l->l_reldeps->list[j]; +- +- if (jmap->l_idx != IDX_STILL_USED) +- { +- assert (jmap->l_idx >= 0 && jmap->l_idx < nloaded); +- +- if (!used[jmap->l_idx]) +- { +- used[jmap->l_idx] = 1; +- if (jmap->l_idx - 1 < done_index) +- done_index = jmap->l_idx - 1; +- } +- } ++ mark_used(jmap); + } ++ /* And the same for owners of our scopes; normally, our last ++ scope provider would render us unused, but this can be ++ prevented by the NODELETE flag. */ ++ if (__builtin_expect(l->l_type == lt_loaded ++ && (l->l_flags_1 & DF_1_NODELETE), 0)) ++ for (size_t cnt = 0; l->l_scope[cnt] != NULL; ++cnt) ++ /* This relies on l_scope[] entries being always set either ++ to its own l_symbolic_searchlist address, or some map's ++ l_searchlist address. */ ++ if (l->l_scope[cnt] != &l->l_symbolic_searchlist) ++ { ++ struct link_map *ls = (struct link_map *) ++ ((char *) l->l_scope[cnt] ++ - offsetof (struct link_map, l_searchlist)); ++ assert (ls->l_ns == nsid); ++ mark_used(ls); ++ } + } + + /* Sort the entries. */ diff --git a/pkgs/development/libraries/glibc/2.13/info.nix b/pkgs/development/libraries/glibc/2.13/info.nix new file mode 100644 index 000000000000..75bd996d9bc5 --- /dev/null +++ b/pkgs/development/libraries/glibc/2.13/info.nix @@ -0,0 +1,26 @@ +{ stdenv, fetchurl, texinfo, perl }: + +let build = import ./common.nix; +in + /* null cross builder */ + build null { + name = "glibc-info"; + + inherit fetchurl stdenv; + + configureFlags = [ "--enable-add-ons" ]; + + buildInputs = [ texinfo perl ]; + + buildPhase = "make info"; + + # I don't know why the info is not generated in 'build' + # Somehow building the info still does not work, because the final + # libc.info hasn't a Top node. + installPhase = '' + mkdir -p "$out/share/info" + cp -v "../$sourceRoot/manual/"*.info* "$out/share/info" + ''; + + meta.description = "GNU Info manual of the GNU C Library"; + } diff --git a/pkgs/development/libraries/glibc/2.13/locales-builder.sh b/pkgs/development/libraries/glibc/2.13/locales-builder.sh new file mode 100644 index 000000000000..d732e208fa22 --- /dev/null +++ b/pkgs/development/libraries/glibc/2.13/locales-builder.sh @@ -0,0 +1,17 @@ +# Glibc cannot have itself in its RPATH. +export NIX_NO_SELF_RPATH=1 + +source $stdenv/setup + +postConfigure() { + # Hack: get rid of the `-static' flag set by the bootstrap stdenv. + # This has to be done *after* `configure' because it builds some + # test binaries. + export NIX_CFLAGS_LINK= + export NIX_LDFLAGS_BEFORE= + + export NIX_DONT_SET_RPATH=1 + unset CFLAGS +} + +genericBuild diff --git a/pkgs/development/libraries/glibc/2.13/locales.nix b/pkgs/development/libraries/glibc/2.13/locales.nix new file mode 100644 index 000000000000..b7eae50ca385 --- /dev/null +++ b/pkgs/development/libraries/glibc/2.13/locales.nix @@ -0,0 +1,47 @@ +/* This function builds just the `lib/locale/locale-archive' file from + Glibc and nothing else. If `allLocales' is true, all supported + locales are included; otherwise, just the locales listed in + `locales'. See localedata/SUPPORTED in the Glibc source tree for + the list of all supported locales: + http://sourceware.org/cgi-bin/cvsweb.cgi/libc/localedata/SUPPORTED?cvsroot=glibc +*/ + +{ stdenv, fetchurl, allLocales ? true, locales ? ["en_US.UTF-8/UTF-8"] }: + +let build = import ./common.nix; +in + build null { + name = "glibc-locales"; + + inherit fetchurl stdenv; + installLocales = true; + + builder = ./locales-builder.sh; + + # Awful hack: `localedef' doesn't allow the path to `locale-archive' + # to be overriden, but you *can* specify a prefix, i.e. it will use + # <prefix>/<path-to-glibc>/lib/locale/locale-archive. So we use + # $TMPDIR as a prefix, meaning that the locale-archive is placed in + # $TMPDIR/nix/store/...-glibc-.../lib/locale/locale-archive. + buildPhase = + '' + mkdir -p $TMPDIR/"$(dirname $(readlink -f $(type -p localedef)))/../lib/locale" + + # Hack to allow building of the locales (needed since glibc-2.12) + sed -i -e "s,^LOCALEDEF=.*,LOCALEDEF=localedef --prefix=$TMPDIR," -e \ + /library-path/d ../glibc-2*/localedata/Makefile + ${if allLocales then "" else + "echo SUPPORTED-LOCALES=\"${toString locales}\" > ../glibc-2*/localedata/SUPPORTED"} + + make localedata/install-locales \ + localedir=$out/lib/locale \ + ''; + + installPhase = + '' + mkdir -p "$out/lib/locale" + cp -v "$TMPDIR/nix/store/"*"/lib/locale/locale-archive" "$out/lib/locale" + ''; + + meta.description = "Locale information for the GNU C Library"; + } diff --git a/pkgs/development/libraries/glibc/2.13/nix-locale-archive.patch b/pkgs/development/libraries/glibc/2.13/nix-locale-archive.patch new file mode 100644 index 000000000000..aca904f7ff44 --- /dev/null +++ b/pkgs/development/libraries/glibc/2.13/nix-locale-archive.patch @@ -0,0 +1,116 @@ +diff --git a/locale/loadarchive.c b/locale/loadarchive.c +index d545f17..0d8638a 100644 +--- a/locale/loadarchive.c ++++ b/locale/loadarchive.c +@@ -124,6 +124,25 @@ calculate_head_size (const struct locarhead *h) + } + + ++static int ++open_locale_archive () ++{ ++ int fd = -1; ++ char *path = getenv ("LOCALE_ARCHIVE_2_11"); ++ char *path2 = getenv ("LOCALE_ARCHIVE"); ++ const char *usualpath = "/usr/lib/locale/locale-archive"; ++ if (path) ++ fd = open_not_cancel_2 (path, O_RDONLY|O_LARGEFILE); ++ if (path2 && fd < 0) ++ fd = open_not_cancel_2 (path2, O_RDONLY|O_LARGEFILE); ++ if (fd < 0) ++ fd = open_not_cancel_2 (archfname, O_RDONLY|O_LARGEFILE); ++ if (fd < 0) ++ fd = open_not_cancel_2 (usualpath, O_RDONLY|O_LARGEFILE); ++ return fd; ++} ++ ++ + /* Find the locale *NAMEP in the locale archive, and return the + internalized data structure for its CATEGORY data. If this locale has + already been loaded from the archive, just returns the existing data +@@ -203,7 +222,7 @@ _nl_load_locale_from_archive (int category, const char **namep) + archmapped = &headmap; + + /* The archive has never been opened. */ +- fd = open_not_cancel_2 (archfname, O_RDONLY|O_LARGEFILE); ++ fd = open_locale_archive (); + if (fd < 0) + /* Cannot open the archive, for whatever reason. */ + return NULL; +@@ -394,7 +413,7 @@ _nl_load_locale_from_archive (int category, const char **namep) + if (fd == -1) + { + struct stat64 st; +- fd = open_not_cancel_2 (archfname, O_RDONLY|O_LARGEFILE); ++ fd = open_locale_archive (); + if (fd == -1) + /* Cannot open the archive, for whatever reason. */ + return NULL; +diff --git a/locale/programs/locale.c b/locale/programs/locale.c +index 77262b7..fddc00d 100644 +--- a/locale/programs/locale.c ++++ b/locale/programs/locale.c +@@ -628,6 +628,20 @@ nameentcmp (const void *a, const void *b) + ((const struct nameent *) b)->name); + } + ++static int ++open_nix_locale_archive (const char * fname, int access) ++{ ++ int fd = -1; ++ char *path = getenv ("LOCALE_ARCHIVE_2_11"); ++ char *path2 = getenv ("LOCALE_ARCHIVE"); ++ if (path) ++ fd = open64 (path, access); ++ if (path2 && fd < 0) ++ fd = open64 (path2, access); ++ if (fd < 0) ++ fd = open64 (fname, access); ++ return fd; ++} + + static int + write_archive_locales (void **all_datap, char *linebuf) +@@ -641,7 +658,7 @@ write_archive_locales (void **all_datap, char *linebuf) + int fd, ret = 0; + uint32_t cnt; + +- fd = open64 (ARCHIVE_NAME, O_RDONLY); ++ fd = open_nix_locale_archive (ARCHIVE_NAME, O_RDONLY); + if (fd < 0) + return 0; + +diff --git a/locale/programs/locarchive.c b/locale/programs/locarchive.c +index 85ba77d..3ad2af8 100644 +--- a/locale/programs/locarchive.c ++++ b/locale/programs/locarchive.c +@@ -512,6 +512,20 @@ enlarge_archive (struct locarhandle *ah, const struct locarhead *head) + *ah = new_ah; + } + ++static int ++open_nix_locale_archive (const char * fname, int access) ++{ ++ int fd = -1; ++ char *path = getenv ("LOCALE_ARCHIVE_2_11"); ++ char *path2 = getenv ("LOCALE_ARCHIVE"); ++ if (path) ++ fd = open64 (path, access); ++ if (path2 && fd < 0) ++ fd = open64 (path2, access); ++ if (fd < 0) ++ fd = open64 (fname, access); ++ return fd; ++} + + void + open_archive (struct locarhandle *ah, bool readonly) +@@ -531,7 +548,7 @@ open_archive (struct locarhandle *ah, bool readonly) + while (1) + { + /* Open the archive. We must have exclusive write access. */ +- fd = open64 (archivefname, readonly ? O_RDONLY : O_RDWR); ++ fd = open_nix_locale_archive (archivefname, readonly ? O_RDONLY : O_RDWR); + if (fd == -1) + { + /* Maybe the file does not yet exist. */ diff --git a/pkgs/development/libraries/glibc/2.13/nss-skip-unavail.patch b/pkgs/development/libraries/glibc/2.13/nss-skip-unavail.patch new file mode 100644 index 000000000000..e48dc2bc0a6e --- /dev/null +++ b/pkgs/development/libraries/glibc/2.13/nss-skip-unavail.patch @@ -0,0 +1,21 @@ +diff -ru glibc-2.11.2-orig/sysdeps/posix/getaddrinfo.c glibc-2.11.2/sysdeps/posix/getaddrinfo.c +--- glibc-2.11.2-orig/sysdeps/posix/getaddrinfo.c 2010-05-19 22:38:20.000000000 +0200 ++++ glibc-2.11.2/sysdeps/posix/getaddrinfo.c 2010-08-05 18:39:54.259556327 +0200 +@@ -505,8 +505,6 @@ + int no_data = 0; + int no_inet6_data = 0; + service_user *nip = NULL; +- enum nss_status inet6_status = NSS_STATUS_UNAVAIL; +- enum nss_status status = NSS_STATUS_UNAVAIL; + int no_more; + int old_res_options; + +@@ -702,6 +700,8 @@ + + while (!no_more) + { ++ enum nss_status inet6_status = NSS_STATUS_UNAVAIL; ++ enum nss_status status = NSS_STATUS_UNAVAIL; + no_data = 0; + nss_gethostbyname4_r fct4 + = __nss_lookup_function (nip, "gethostbyname4_r"); diff --git a/pkgs/development/libraries/glibc/2.13/rpcgen-path.patch b/pkgs/development/libraries/glibc/2.13/rpcgen-path.patch new file mode 100644 index 000000000000..fbb03dd5fade --- /dev/null +++ b/pkgs/development/libraries/glibc/2.13/rpcgen-path.patch @@ -0,0 +1,72 @@ +By default, rpcgen(1) looks for cpp(1) from a list of fixed absolute paths +(`/lib/cpp', etc.), which may only be overrided with the `-Y' option. This +patch makes it run any `cpp' command found in $PATH. + +--- glibc-2.7/sunrpc/rpc_main.c 2006-11-10 21:54:46.000000000 +0100 ++++ glibc-2.7/sunrpc/rpc_main.c 2009-04-22 14:32:10.000000000 +0200 +@@ -79,7 +79,7 @@ static const char *cmdname; + + static const char *svcclosetime = "120"; + static int cppDefined; /* explicit path for C preprocessor */ +-static const char *CPP = SUNOS_CPP; ++static const char *CPP = "cpp"; + static const char CPPFLAGS[] = "-C"; + static char *pathbuf; + static int cpp_pid; +@@ -108,7 +108,6 @@ static char *extendfile (const char *fil + static void open_output (const char *infile, const char *outfile); + static void add_warning (void); + static void clear_args (void); +-static void find_cpp (void); + static void open_input (const char *infile, const char *define); + static int check_nettype (const char *name, const char *list_to_check[]); + static void c_output (const char *infile, const char *define, +@@ -327,31 +326,6 @@ clear_args (void) + argcount = FIXEDARGS; + } + +-/* make sure that a CPP exists */ +-static void +-find_cpp (void) +-{ +- struct stat buf; +- +- if (stat (CPP, &buf) < 0) +- { /* /lib/cpp or explicit cpp does not exist */ +- if (cppDefined) +- { +- fprintf (stderr, _ ("cannot find C preprocessor: %s \n"), CPP); +- crash (); +- } +- else +- { /* try the other one */ +- CPP = SVR4_CPP; +- if (stat (CPP, &buf) < 0) +- { /* can't find any cpp */ +- fputs (_ ("cannot find any C preprocessor (cpp)\n"), stdout); +- crash (); +- } +- } +- } +-} +- + /* + * Open input file with given define for C-preprocessor + */ +@@ -370,7 +344,6 @@ open_input (const char *infile, const ch + switch (cpp_pid) + { + case 0: +- find_cpp (); + putarg (0, CPP); + putarg (1, CPPFLAGS); + addarg (define); +@@ -380,7 +353,7 @@ open_input (const char *infile, const ch + close (1); + dup2 (pd[1], 1); + close (pd[0]); +- execv (arglist[0], (char **) arglist); ++ execvp (arglist[0], (char **) arglist); + perror ("execv"); + exit (1); + case -1: diff --git a/pkgs/development/libraries/glibc/2.14/builder.sh b/pkgs/development/libraries/glibc/2.14/builder.sh new file mode 100644 index 000000000000..9a1c1490019a --- /dev/null +++ b/pkgs/development/libraries/glibc/2.14/builder.sh @@ -0,0 +1,55 @@ +# Glibc cannot have itself in its RPATH. +export NIX_NO_SELF_RPATH=1 + +source $stdenv/setup + +postConfigure() { + # Hack: get rid of the `-static' flag set by the bootstrap stdenv. + # This has to be done *after* `configure' because it builds some + # test binaries. + export NIX_CFLAGS_LINK= + export NIX_LDFLAGS_BEFORE= + + export NIX_DONT_SET_RPATH=1 + unset CFLAGS +} + + +postInstall() { + if test -n "$installLocales"; then + make -j${NIX_BUILD_CORES:-1} -l${NIX_BUILD_CORES:-1} localedata/install-locales + fi + + test -f $out/etc/ld.so.cache && rm $out/etc/ld.so.cache + + # FIXME: Use `test -n $linuxHeaders' when `kernelHeaders' has been + # renamed. + if test -z "$hurdHeaders"; then + # Include the Linux kernel headers in Glibc, except the `scsi' + # subdirectory, which Glibc provides itself. + (cd $out/include && \ + ln -sv $(ls -d $kernelHeaders/include/* | grep -v 'scsi$') .) + fi + + if test -f "$out/lib/libhurduser.so"; then + # libc.so, libhurduser.so, and libmachuser.so depend on each + # other, so add them to libc.so (a RUNPATH on libc.so.0.3 + # would be ignored by the cross-linker.) + echo "adding \`libhurduser.so' and \`libmachuser.so' to the \`libc.so' linker script..." + sed -i "$out/lib/libc.so" \ + -e"s|\(libc\.so\.[^ ]\+\>\)|\1 $out/lib/libhurduser.so $out/lib/libmachuser.so|g" + fi + + # Fix for NIXOS-54 (ldd not working on x86_64). Make a symlink + # "lib64" to "lib". + if test -n "$is64bit"; then + ln -s lib $out/lib64 + fi + + # This file, that should not remain in the glibc derivation, + # may have not been created during the preInstall + rm -f $out/lib/libgcc_s.so.1 +} + + +genericBuild diff --git a/pkgs/development/libraries/glibc/2.14/common.nix b/pkgs/development/libraries/glibc/2.14/common.nix new file mode 100644 index 000000000000..e24089fd1920 --- /dev/null +++ b/pkgs/development/libraries/glibc/2.14/common.nix @@ -0,0 +1,213 @@ +/* Build configuration used to build glibc, Info files, and locale + information. */ + +cross : + +{ name, fetchurl, stdenv, installLocales ? false +, gccCross ? null, kernelHeaders ? null +, machHeaders ? null, hurdHeaders ? null, mig ? null, fetchgit ? null +, profilingLibraries ? false, meta +, preConfigure ? "", ... }@args : + +let + # For GNU/Hurd, see below. + version = if hurdHeaders != null then "20100512" else "2.14.1"; + + needsPortsNative = stdenv.isMips || stdenv.isArm; + needsPortsCross = cross.arch == "mips" || cross.arch == "arm"; + needsPorts = if (stdenv ? cross) && stdenv.cross != null then true + else if cross == null then needsPortsNative + else needsPortsCross; + + srcPorts = fetchurl { + url = "mirror://gnu/glibc/glibc-ports-2.14.1.tar.bz2"; + sha256 = "1acs4sd5mjzmssmd0md6dfqwnziph2am7v09mbnnd8aadpxhm0qw"; + }; + +in + +assert (cross != null) -> (gccCross != null); + +assert (mig != null) -> (machHeaders != null); +assert (machHeaders != null) -> (hurdHeaders != null); +assert (hurdHeaders != null) -> (fetchgit != null); + +stdenv.mkDerivation ({ + inherit kernelHeaders installLocales; + + # The host/target system. + crossConfig = if (cross != null) then cross.config else null; + + inherit (stdenv) is64bit; + + enableParallelBuilding = true; + + patches = + stdenv.lib.optional (fetchgit == null) + /* Fix for NIXPKGS-79: when doing host name lookups, when + nsswitch.conf contains a line like + + hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 + + don't return an error when mdns4_minimal can't be found. This + is a bug in Glibc: when a service can't be found, NSS should + continue to the next service unless "UNAVAIL=return" is set. + ("NOTFOUND=return" refers to the service returning a NOTFOUND + error, not the service itself not being found.) The reason is + that the "status" variable (while initialised to UNAVAIL) is + outside of the loop that iterates over the services, the + "files" service sets status to NOTFOUND. So when the call to + find "mdns4_minimal" fails, "status" will still be NOTFOUND, + and it will return instead of continuing to "dns". Thus, the + line + + hosts: mdns4_minimal [NOTFOUND=return] dns mdns4 + + does work because "status" will contain UNAVAIL after the + failure to find mdns4_minimal. */ + ./nss-skip-unavail.patch + ++ [ + /* Have rpcgen(1) look for cpp(1) in $PATH. */ + ./rpcgen-path.patch + + /* Allow nixos and nix handle the locale-archive. */ + ./nix-locale-archive.patch + + /* Without this patch many KDE binaries crash. */ + ./glibc-elf-localscope.patch + ]; + + postPatch = '' + # Needed for glibc to build with the gnumake 3.82 + # http://comments.gmane.org/gmane.linux.lfs.support/31227 + sed -i 's/ot \$/ot:\n\ttouch $@\n$/' manual/Makefile + + # nscd needs libgcc, and we don't want it dynamically linked + # because we don't want it to depend on bootstrap-tools libs. + echo "LDFLAGS-nscd += -static-libgcc" >> nscd/Makefile + ''; + + configureFlags = [ + "-C" + "--enable-add-ons" + "--sysconfdir=/etc" + "--localedir=/var/run/current-system/sw/lib/locale" + (if kernelHeaders != null + then "--with-headers=${kernelHeaders}/include" + else "--without-headers") + (if profilingLibraries + then "--enable-profile" + else "--disable-profile") + ] ++ stdenv.lib.optionals (cross != null) [ + (if cross.withTLS then "--with-tls" else "--without-tls") + (if cross.float == "soft" then "--without-fp" else "--with-fp") + "--enable-kernel=2.6.0" + "--with-__thread" + ] ++ stdenv.lib.optionals (stdenv.system == "armv5tel-linux") [ + "--host=arm-linux-gnueabi" + "--build=arm-linux-gnueabi" + "--without-fp" + + # To avoid linking with -lgcc_s (dynamic link) + # so the glibc does not depend on its compiler store path + "libc_cv_as_needed=no" + ]; + + installFlags = [ "sysconfdir=$(out)/etc" ]; + + buildInputs = stdenv.lib.optionals (cross != null) [ gccCross ] + ++ stdenv.lib.optional (mig != null) mig; + + # Needed to install share/zoneinfo/zone.tab. Set to impure /bin/sh to + # prevent a retained dependency on the bootstrap tools in the stdenv-linux + # bootstrap. + BASH_SHELL = "/bin/sh"; + + # Workaround for this bug: + # http://sourceware.org/bugzilla/show_bug.cgi?id=411 + # I.e. when gcc is compiled with --with-arch=i686, then the + # preprocessor symbol `__i686' will be defined to `1'. This causes + # the symbol __i686.get_pc_thunk.dx to be mangled. + NIX_CFLAGS_COMPILE = stdenv.lib.optionalString (stdenv.system == "i686-linux") "-U__i686"; +} + +# Remove the `gccCross' attribute so that the *native* glibc store path +# doesn't depend on whether `gccCross' is null or not. +// (removeAttrs args [ "gccCross" ]) // + +{ + name = name + "-${version}" + + stdenv.lib.optionalString (cross != null) "-${cross.config}"; + + src = + if hurdHeaders != null + then fetchgit { + # Shamefully the "official" glibc won't build on GNU, so use the one + # maintained by the Hurd folks, `tschwinge/Roger_Whittaker' branch. + # See <http://www.gnu.org/software/hurd/source_repositories/glibc.html>. + url = "git://git.sv.gnu.org/hurd/glibc.git"; + sha256 = "f3590a54a9d897d121f91113949edbaaf3e30cdeacbb8d0a44de7b6564f6643e"; + rev = "df4c3faf0ccc848b5a8086c222bdb42679a9798f"; + } + else fetchurl { + url = "mirror://gnu/glibc/glibc-${version}.tar.bz2"; + sha256 = "0fsvf5d6sib483rp7asdy8hs0dysxqkrvw316c82hsxy7vxa51bf"; + }; + + # `fetchurl' is a function and thus should not be passed to the + # `derivation' primitive. + fetchurl = null; + + # Remove absolute paths from `configure' & co.; build out-of-tree. + preConfigure = '' + export PWD_P=$(type -tP pwd) + for i in configure io/ftwtest-sh; do + # Can't use substituteInPlace here because replace hasn't been + # built yet in the bootstrap. + sed -i "$i" -e "s^/bin/pwd^$PWD_P^g" + done + + ${if needsPorts then "tar xvf ${srcPorts}" else ""} + + mkdir ../build + cd ../build + + configureScript="`pwd`/../$sourceRoot/configure" + + ${preConfigure} + ''; + + meta = { + homepage = http://www.gnu.org/software/libc/; + description = "The GNU C Library"; + + longDescription = + '' Any Unix-like operating system needs a C library: the library which + defines the "system calls" and other basic facilities such as + open, malloc, printf, exit... + + The GNU C library is used as the C library in the GNU system and + most systems with the Linux kernel. + ''; + + license = "LGPLv2+"; + + maintainers = [ stdenv.lib.maintainers.ludo ]; + platforms = stdenv.lib.platforms.linux; + } // meta; +} + +// + +(if hurdHeaders != null + then { + # Work around the fact that the configure snippet that looks for + # <hurd/version.h> does not honor `--with-headers=$sysheaders' and that + # glibc expects both Mach and Hurd headers to be in the same place. + CPATH = "${hurdHeaders}/include:${machHeaders}/include"; + + # `fetchgit' is a function and thus should not be passed to the + # `derivation' primitive. + fetchgit = null; + } + else { })) diff --git a/pkgs/development/libraries/glibc/2.14/default.nix b/pkgs/development/libraries/glibc/2.14/default.nix new file mode 100644 index 000000000000..95778b50b70b --- /dev/null +++ b/pkgs/development/libraries/glibc/2.14/default.nix @@ -0,0 +1,83 @@ +{ stdenv, fetchurl, kernelHeaders +, machHeaders ? null, hurdHeaders ? null, mig ? null, fetchgit ? null +, installLocales ? true +, profilingLibraries ? false +, gccCross ? null +}: + +assert stdenv.gcc.gcc != null; + +let + build = import ./common.nix; + cross = if gccCross != null then gccCross.target else null; +in + build cross ({ + name = "glibc"; + + inherit fetchurl stdenv kernelHeaders installLocales profilingLibraries + gccCross; + + builder = ./builder.sh; + + # When building glibc from bootstrap-tools, we need libgcc_s at RPATH for + # any program we run, because the gcc will have been placed at a new + # store path than that determined when built (as a source for the + # bootstrap-tools tarball) + # Building from a proper gcc staying in the path where it was installed, + # libgcc_s will not be at {gcc}/lib, and gcc's libgcc will be found without + # any special hack. + preInstall = '' + if [ -f ${stdenv.gcc.gcc}/lib/libgcc_s.so.1 ]; then + mkdir -p $out/lib + ln -s ${stdenv.gcc.gcc}/lib/libgcc_s.so.1 $out/lib/libgcc_s.so.1 + fi + ''; + + meta.description = "The GNU C Library"; + } + + // + + (if hurdHeaders != null + then rec { + inherit machHeaders hurdHeaders mig fetchgit; + + propagatedBuildInputs = [ machHeaders hurdHeaders ]; + + passthru = { + # When building GCC itself `propagatedBuildInputs' above is not + # honored, so we pass it here so that the GCC builder can do the right + # thing. + inherit propagatedBuildInputs; + }; + } + else { }) + + // + + (if cross != null + then { + preConfigure = '' + sed -i s/-lgcc_eh//g "../$sourceRoot/Makeconfig" + + cat > config.cache << "EOF" + libc_cv_forced_unwind=yes + libc_cv_c_cleanup=yes + libc_cv_gnu89_inline=yes + # Only due to a problem in gcc configure scripts: + libc_cv_sparc64_tls=${if cross.withTLS then "yes" else "no"} + EOF + export BUILD_CC=gcc + export CC="$crossConfig-gcc" + export AR="$crossConfig-ar" + export RANLIB="$crossConfig-ranlib" + + dontStrip=1 + ''; + + # To avoid a dependency on the build system 'bash'. + preFixup = '' + rm $out/bin/{ldd,tzselect,catchsegv,xtrace} + ''; + } + else {})) diff --git a/pkgs/development/libraries/glibc/2.14/glibc-elf-localscope.patch b/pkgs/development/libraries/glibc/2.14/glibc-elf-localscope.patch new file mode 100644 index 000000000000..98f7f81087bb --- /dev/null +++ b/pkgs/development/libraries/glibc/2.14/glibc-elf-localscope.patch @@ -0,0 +1,82 @@ +diff -ru a/elf/dl-close.c b/elf/dl-close.c +--- a/elf/dl-close.c 2011-02-04 00:35:03.000000000 +0100 ++++ b/elf/dl-close.c 2011-02-22 02:16:12.367883000 +0100 +@@ -180,24 +186,28 @@ + /* Signal the object is still needed. */ + l->l_idx = IDX_STILL_USED; + ++#define mark_used(dmap) \ ++ do { \ ++ if ((dmap)->l_idx != IDX_STILL_USED) \ ++ { \ ++ assert ((dmap)->l_idx >= 0 && (dmap)->l_idx < nloaded); \ ++ \ ++ if (!used[(dmap)->l_idx]) \ ++ { \ ++ used[(dmap)->l_idx] = 1; \ ++ if ((dmap)->l_idx - 1 < done_index) \ ++ done_index = (dmap)->l_idx - 1; \ ++ } \ ++ } \ ++ } while (0) ++ + /* Mark all dependencies as used. */ + if (l->l_initfini != NULL) + { + struct link_map **lp = &l->l_initfini[1]; + while (*lp != NULL) + { +- if ((*lp)->l_idx != IDX_STILL_USED) +- { +- assert ((*lp)->l_idx >= 0 && (*lp)->l_idx < nloaded); +- +- if (!used[(*lp)->l_idx]) +- { +- used[(*lp)->l_idx] = 1; +- if ((*lp)->l_idx - 1 < done_index) +- done_index = (*lp)->l_idx - 1; +- } +- } +- ++ mark_used(*lp); + ++lp; + } + } +@@ -206,19 +216,25 @@ + for (unsigned int j = 0; j < l->l_reldeps->act; ++j) + { + struct link_map *jmap = l->l_reldeps->list[j]; +- +- if (jmap->l_idx != IDX_STILL_USED) +- { +- assert (jmap->l_idx >= 0 && jmap->l_idx < nloaded); +- +- if (!used[jmap->l_idx]) +- { +- used[jmap->l_idx] = 1; +- if (jmap->l_idx - 1 < done_index) +- done_index = jmap->l_idx - 1; +- } +- } ++ mark_used(jmap); + } ++ /* And the same for owners of our scopes; normally, our last ++ scope provider would render us unused, but this can be ++ prevented by the NODELETE flag. */ ++ if (__builtin_expect(l->l_type == lt_loaded ++ && (l->l_flags_1 & DF_1_NODELETE), 0)) ++ for (size_t cnt = 0; l->l_scope[cnt] != NULL; ++cnt) ++ /* This relies on l_scope[] entries being always set either ++ to its own l_symbolic_searchlist address, or some map's ++ l_searchlist address. */ ++ if (l->l_scope[cnt] != &l->l_symbolic_searchlist) ++ { ++ struct link_map *ls = (struct link_map *) ++ ((char *) l->l_scope[cnt] ++ - offsetof (struct link_map, l_searchlist)); ++ assert (ls->l_ns == nsid); ++ mark_used(ls); ++ } + } + + /* Sort the entries. */ diff --git a/pkgs/development/libraries/glibc/2.14/info.nix b/pkgs/development/libraries/glibc/2.14/info.nix new file mode 100644 index 000000000000..75bd996d9bc5 --- /dev/null +++ b/pkgs/development/libraries/glibc/2.14/info.nix @@ -0,0 +1,26 @@ +{ stdenv, fetchurl, texinfo, perl }: + +let build = import ./common.nix; +in + /* null cross builder */ + build null { + name = "glibc-info"; + + inherit fetchurl stdenv; + + configureFlags = [ "--enable-add-ons" ]; + + buildInputs = [ texinfo perl ]; + + buildPhase = "make info"; + + # I don't know why the info is not generated in 'build' + # Somehow building the info still does not work, because the final + # libc.info hasn't a Top node. + installPhase = '' + mkdir -p "$out/share/info" + cp -v "../$sourceRoot/manual/"*.info* "$out/share/info" + ''; + + meta.description = "GNU Info manual of the GNU C Library"; + } diff --git a/pkgs/development/libraries/glibc/2.14/locales-builder.sh b/pkgs/development/libraries/glibc/2.14/locales-builder.sh new file mode 100644 index 000000000000..d732e208fa22 --- /dev/null +++ b/pkgs/development/libraries/glibc/2.14/locales-builder.sh @@ -0,0 +1,17 @@ +# Glibc cannot have itself in its RPATH. +export NIX_NO_SELF_RPATH=1 + +source $stdenv/setup + +postConfigure() { + # Hack: get rid of the `-static' flag set by the bootstrap stdenv. + # This has to be done *after* `configure' because it builds some + # test binaries. + export NIX_CFLAGS_LINK= + export NIX_LDFLAGS_BEFORE= + + export NIX_DONT_SET_RPATH=1 + unset CFLAGS +} + +genericBuild diff --git a/pkgs/development/libraries/glibc/2.14/locales.nix b/pkgs/development/libraries/glibc/2.14/locales.nix new file mode 100644 index 000000000000..b7eae50ca385 --- /dev/null +++ b/pkgs/development/libraries/glibc/2.14/locales.nix @@ -0,0 +1,47 @@ +/* This function builds just the `lib/locale/locale-archive' file from + Glibc and nothing else. If `allLocales' is true, all supported + locales are included; otherwise, just the locales listed in + `locales'. See localedata/SUPPORTED in the Glibc source tree for + the list of all supported locales: + http://sourceware.org/cgi-bin/cvsweb.cgi/libc/localedata/SUPPORTED?cvsroot=glibc +*/ + +{ stdenv, fetchurl, allLocales ? true, locales ? ["en_US.UTF-8/UTF-8"] }: + +let build = import ./common.nix; +in + build null { + name = "glibc-locales"; + + inherit fetchurl stdenv; + installLocales = true; + + builder = ./locales-builder.sh; + + # Awful hack: `localedef' doesn't allow the path to `locale-archive' + # to be overriden, but you *can* specify a prefix, i.e. it will use + # <prefix>/<path-to-glibc>/lib/locale/locale-archive. So we use + # $TMPDIR as a prefix, meaning that the locale-archive is placed in + # $TMPDIR/nix/store/...-glibc-.../lib/locale/locale-archive. + buildPhase = + '' + mkdir -p $TMPDIR/"$(dirname $(readlink -f $(type -p localedef)))/../lib/locale" + + # Hack to allow building of the locales (needed since glibc-2.12) + sed -i -e "s,^LOCALEDEF=.*,LOCALEDEF=localedef --prefix=$TMPDIR," -e \ + /library-path/d ../glibc-2*/localedata/Makefile + ${if allLocales then "" else + "echo SUPPORTED-LOCALES=\"${toString locales}\" > ../glibc-2*/localedata/SUPPORTED"} + + make localedata/install-locales \ + localedir=$out/lib/locale \ + ''; + + installPhase = + '' + mkdir -p "$out/lib/locale" + cp -v "$TMPDIR/nix/store/"*"/lib/locale/locale-archive" "$out/lib/locale" + ''; + + meta.description = "Locale information for the GNU C Library"; + } diff --git a/pkgs/development/libraries/glibc/2.14/nix-locale-archive.patch b/pkgs/development/libraries/glibc/2.14/nix-locale-archive.patch new file mode 100644 index 000000000000..aca904f7ff44 --- /dev/null +++ b/pkgs/development/libraries/glibc/2.14/nix-locale-archive.patch @@ -0,0 +1,116 @@ +diff --git a/locale/loadarchive.c b/locale/loadarchive.c +index d545f17..0d8638a 100644 +--- a/locale/loadarchive.c ++++ b/locale/loadarchive.c +@@ -124,6 +124,25 @@ calculate_head_size (const struct locarhead *h) + } + + ++static int ++open_locale_archive () ++{ ++ int fd = -1; ++ char *path = getenv ("LOCALE_ARCHIVE_2_11"); ++ char *path2 = getenv ("LOCALE_ARCHIVE"); ++ const char *usualpath = "/usr/lib/locale/locale-archive"; ++ if (path) ++ fd = open_not_cancel_2 (path, O_RDONLY|O_LARGEFILE); ++ if (path2 && fd < 0) ++ fd = open_not_cancel_2 (path2, O_RDONLY|O_LARGEFILE); ++ if (fd < 0) ++ fd = open_not_cancel_2 (archfname, O_RDONLY|O_LARGEFILE); ++ if (fd < 0) ++ fd = open_not_cancel_2 (usualpath, O_RDONLY|O_LARGEFILE); ++ return fd; ++} ++ ++ + /* Find the locale *NAMEP in the locale archive, and return the + internalized data structure for its CATEGORY data. If this locale has + already been loaded from the archive, just returns the existing data +@@ -203,7 +222,7 @@ _nl_load_locale_from_archive (int category, const char **namep) + archmapped = &headmap; + + /* The archive has never been opened. */ +- fd = open_not_cancel_2 (archfname, O_RDONLY|O_LARGEFILE); ++ fd = open_locale_archive (); + if (fd < 0) + /* Cannot open the archive, for whatever reason. */ + return NULL; +@@ -394,7 +413,7 @@ _nl_load_locale_from_archive (int category, const char **namep) + if (fd == -1) + { + struct stat64 st; +- fd = open_not_cancel_2 (archfname, O_RDONLY|O_LARGEFILE); ++ fd = open_locale_archive (); + if (fd == -1) + /* Cannot open the archive, for whatever reason. */ + return NULL; +diff --git a/locale/programs/locale.c b/locale/programs/locale.c +index 77262b7..fddc00d 100644 +--- a/locale/programs/locale.c ++++ b/locale/programs/locale.c +@@ -628,6 +628,20 @@ nameentcmp (const void *a, const void *b) + ((const struct nameent *) b)->name); + } + ++static int ++open_nix_locale_archive (const char * fname, int access) ++{ ++ int fd = -1; ++ char *path = getenv ("LOCALE_ARCHIVE_2_11"); ++ char *path2 = getenv ("LOCALE_ARCHIVE"); ++ if (path) ++ fd = open64 (path, access); ++ if (path2 && fd < 0) ++ fd = open64 (path2, access); ++ if (fd < 0) ++ fd = open64 (fname, access); ++ return fd; ++} + + static int + write_archive_locales (void **all_datap, char *linebuf) +@@ -641,7 +658,7 @@ write_archive_locales (void **all_datap, char *linebuf) + int fd, ret = 0; + uint32_t cnt; + +- fd = open64 (ARCHIVE_NAME, O_RDONLY); ++ fd = open_nix_locale_archive (ARCHIVE_NAME, O_RDONLY); + if (fd < 0) + return 0; + +diff --git a/locale/programs/locarchive.c b/locale/programs/locarchive.c +index 85ba77d..3ad2af8 100644 +--- a/locale/programs/locarchive.c ++++ b/locale/programs/locarchive.c +@@ -512,6 +512,20 @@ enlarge_archive (struct locarhandle *ah, const struct locarhead *head) + *ah = new_ah; + } + ++static int ++open_nix_locale_archive (const char * fname, int access) ++{ ++ int fd = -1; ++ char *path = getenv ("LOCALE_ARCHIVE_2_11"); ++ char *path2 = getenv ("LOCALE_ARCHIVE"); ++ if (path) ++ fd = open64 (path, access); ++ if (path2 && fd < 0) ++ fd = open64 (path2, access); ++ if (fd < 0) ++ fd = open64 (fname, access); ++ return fd; ++} + + void + open_archive (struct locarhandle *ah, bool readonly) +@@ -531,7 +548,7 @@ open_archive (struct locarhandle *ah, bool readonly) + while (1) + { + /* Open the archive. We must have exclusive write access. */ +- fd = open64 (archivefname, readonly ? O_RDONLY : O_RDWR); ++ fd = open_nix_locale_archive (archivefname, readonly ? O_RDONLY : O_RDWR); + if (fd == -1) + { + /* Maybe the file does not yet exist. */ diff --git a/pkgs/development/libraries/glibc/2.14/nss-skip-unavail.patch b/pkgs/development/libraries/glibc/2.14/nss-skip-unavail.patch new file mode 100644 index 000000000000..e48dc2bc0a6e --- /dev/null +++ b/pkgs/development/libraries/glibc/2.14/nss-skip-unavail.patch @@ -0,0 +1,21 @@ +diff -ru glibc-2.11.2-orig/sysdeps/posix/getaddrinfo.c glibc-2.11.2/sysdeps/posix/getaddrinfo.c +--- glibc-2.11.2-orig/sysdeps/posix/getaddrinfo.c 2010-05-19 22:38:20.000000000 +0200 ++++ glibc-2.11.2/sysdeps/posix/getaddrinfo.c 2010-08-05 18:39:54.259556327 +0200 +@@ -505,8 +505,6 @@ + int no_data = 0; + int no_inet6_data = 0; + service_user *nip = NULL; +- enum nss_status inet6_status = NSS_STATUS_UNAVAIL; +- enum nss_status status = NSS_STATUS_UNAVAIL; + int no_more; + int old_res_options; + +@@ -702,6 +700,8 @@ + + while (!no_more) + { ++ enum nss_status inet6_status = NSS_STATUS_UNAVAIL; ++ enum nss_status status = NSS_STATUS_UNAVAIL; + no_data = 0; + nss_gethostbyname4_r fct4 + = __nss_lookup_function (nip, "gethostbyname4_r"); diff --git a/pkgs/development/libraries/glibc/2.14/rpcgen-path.patch b/pkgs/development/libraries/glibc/2.14/rpcgen-path.patch new file mode 100644 index 000000000000..fbb03dd5fade --- /dev/null +++ b/pkgs/development/libraries/glibc/2.14/rpcgen-path.patch @@ -0,0 +1,72 @@ +By default, rpcgen(1) looks for cpp(1) from a list of fixed absolute paths +(`/lib/cpp', etc.), which may only be overrided with the `-Y' option. This +patch makes it run any `cpp' command found in $PATH. + +--- glibc-2.7/sunrpc/rpc_main.c 2006-11-10 21:54:46.000000000 +0100 ++++ glibc-2.7/sunrpc/rpc_main.c 2009-04-22 14:32:10.000000000 +0200 +@@ -79,7 +79,7 @@ static const char *cmdname; + + static const char *svcclosetime = "120"; + static int cppDefined; /* explicit path for C preprocessor */ +-static const char *CPP = SUNOS_CPP; ++static const char *CPP = "cpp"; + static const char CPPFLAGS[] = "-C"; + static char *pathbuf; + static int cpp_pid; +@@ -108,7 +108,6 @@ static char *extendfile (const char *fil + static void open_output (const char *infile, const char *outfile); + static void add_warning (void); + static void clear_args (void); +-static void find_cpp (void); + static void open_input (const char *infile, const char *define); + static int check_nettype (const char *name, const char *list_to_check[]); + static void c_output (const char *infile, const char *define, +@@ -327,31 +326,6 @@ clear_args (void) + argcount = FIXEDARGS; + } + +-/* make sure that a CPP exists */ +-static void +-find_cpp (void) +-{ +- struct stat buf; +- +- if (stat (CPP, &buf) < 0) +- { /* /lib/cpp or explicit cpp does not exist */ +- if (cppDefined) +- { +- fprintf (stderr, _ ("cannot find C preprocessor: %s \n"), CPP); +- crash (); +- } +- else +- { /* try the other one */ +- CPP = SVR4_CPP; +- if (stat (CPP, &buf) < 0) +- { /* can't find any cpp */ +- fputs (_ ("cannot find any C preprocessor (cpp)\n"), stdout); +- crash (); +- } +- } +- } +-} +- + /* + * Open input file with given define for C-preprocessor + */ +@@ -370,7 +344,6 @@ open_input (const char *infile, const ch + switch (cpp_pid) + { + case 0: +- find_cpp (); + putarg (0, CPP); + putarg (1, CPPFLAGS); + addarg (define); +@@ -380,7 +353,7 @@ open_input (const char *infile, const ch + close (1); + dup2 (pd[1], 1); + close (pd[0]); +- execv (arglist[0], (char **) arglist); ++ execvp (arglist[0], (char **) arglist); + perror ("execv"); + exit (1); + case -1: diff --git a/pkgs/development/libraries/glibc/2.5/binutils-ld.patch b/pkgs/development/libraries/glibc/2.5/binutils-ld.patch new file mode 100644 index 000000000000..4cd7ab3cec34 --- /dev/null +++ b/pkgs/development/libraries/glibc/2.5/binutils-ld.patch @@ -0,0 +1,27 @@ +From 7c8a67320e26b8c11108bf0a3410d3aef9cf3486 Mon Sep 17 00:00:00 2001 +From: Ulrich Drepper <drepper@redhat.com> +Date: Sat, 31 Jan 2009 00:21:15 +0000 +Subject: [PATCH] * elf/Makefile (ld.so): Adjust the sed script to insert _begin in to + + newer linker scripts. +--- + ChangeLog | 5 +++++ + elf/Makefile | 4 ++-- + 2 files changed, 7 insertions(+), 2 deletions(-) + +diff --git a/elf/Makefile b/elf/Makefile +index 8079fe9..e44ff1d 100644 +--- a/elf/Makefile ++++ b/elf/Makefile +@@ -304,7 +304,7 @@ $(objpfx)ld.so: $(objpfx)librtld.os $(ld-map) + $(LDFLAGS-rtld) -Wl,-z,defs -Wl,--verbose 2>&1 | \ + LC_ALL=C \ + sed -e '/^=========/,/^=========/!d;/^=========/d' \ +- -e 's/\. = 0 + SIZEOF_HEADERS;/& _begin = . - SIZEOF_HEADERS;/' \ ++ -e 's/\. = .* + SIZEOF_HEADERS;/& _begin = . - SIZEOF_HEADERS;/' \ + > $@.lds + $(LINK.o) -nostdlib -nostartfiles -shared -o $@ \ + $(LDFLAGS-rtld) -Wl,-z,defs $(z-now-$(bind-now)) \ +-- +1.6.4 + diff --git a/pkgs/development/libraries/glibc/2.5/builder.sh b/pkgs/development/libraries/glibc/2.5/builder.sh new file mode 100644 index 000000000000..bc80af83b926 --- /dev/null +++ b/pkgs/development/libraries/glibc/2.5/builder.sh @@ -0,0 +1,57 @@ +# glibc cannot have itself in its rpath. +export NIX_NO_SELF_RPATH=1 + +source $stdenv/setup + +# Explicitly tell glibc to use our pwd, not /bin/pwd. +export PWD_P=$(type -tP pwd) + + +postUnpack() { + cd $sourceRoot/.. +} + + +preConfigure() { + + for i in configure io/ftwtest-sh; do + substituteInPlace "$i" \ + --replace "@PWD@" "pwd" + done + + # Fix shell code that tries to determine whether GNU ld is recent enough. + substituteInPlace configure --replace '2.1[3-9]*)' '2.1[3-9]*|2.[2-9][0-9]*)' + + mkdir ../build + cd ../build + + configureScript=../$sourceRoot/configure +} + + +postConfigure() { + # Hack: get rid of the `-static' flag set by the bootstrap stdenv. + # This has to be done *after* `configure' because it builds some + # test binaries. + export NIX_CFLAGS_LINK= + export NIX_LDFLAGS_BEFORE= + export NIX_DONT_SET_RPATH=1 +} + + +postInstall() { + if test -n "$installLocales"; then + make -j${NIX_BUILD_CORES:-1} -l${NIX_BUILD_CORES:-1} localedata/install-locales + fi + rm $out/etc/ld.so.cache + (cd $out/include && ln -s $kernelHeaders/include/* .) || exit 1 + + # Fix for NIXOS-54 (ldd not working on x86_64). Make a symlink + # "lib64" to "lib". + if test -n "$is64bit"; then + ln -s lib $out/lib64 + fi +} + + +genericBuild diff --git a/pkgs/development/libraries/glibc/2.5/default.nix b/pkgs/development/libraries/glibc/2.5/default.nix new file mode 100644 index 000000000000..8b8c204a4803 --- /dev/null +++ b/pkgs/development/libraries/glibc/2.5/default.nix @@ -0,0 +1,40 @@ +{ stdenv, fetchurl, kernelHeaders +, installLocales ? true +, profilingLibraries ? false +}: + +stdenv.mkDerivation { + name = "glibc-2.5"; + builder = ./builder.sh; + + src = fetchurl { + url = http://ftp.gnu.org/gnu/glibc/glibc-2.5.tar.bz2; + md5 = "1fb29764a6a650a4d5b409dda227ac9f"; + }; + + patches = [ ./glibc-pwd.patch ./glibc-getcwd-param-MAX.patch ./glibc-inline.patch + ./x86-fnstsw.patch ./binutils-ld.patch ./make-3-82-fix.patch ]; + + inherit kernelHeaders installLocales; + + inherit (stdenv) is64bit; + + configureFlags="--enable-add-ons + --with-headers=${kernelHeaders}/include + --disable-sanity-checks + ${if profilingLibraries then "--enable-profile" else "--disable-profile"}"; + + # Workaround for this bug: + # http://sourceware.org/bugzilla/show_bug.cgi?id=411 + # I.e. when gcc is compiled with --with-arch=i686, then the + # preprocessor symbol `__i686' will be defined to `1'. This causes + # the symbol __i686.get_pc_thunk.dx to be mangled. + NIX_CFLAGS_COMPILE = "-U__i686"; + + enableParallelBuilding = true; + + meta = { + homepage = http://www.gnu.org/software/libc/; + description = "The GNU C Library"; + }; +} diff --git a/pkgs/development/libraries/glibc/2.5/glibc-getcwd-param-MAX.patch b/pkgs/development/libraries/glibc/2.5/glibc-getcwd-param-MAX.patch new file mode 100644 index 000000000000..8543dbbf1d76 --- /dev/null +++ b/pkgs/development/libraries/glibc/2.5/glibc-getcwd-param-MAX.patch @@ -0,0 +1,14 @@ +2006-06-18 Mike Frysinger <vapier@gentoo.org> + + * sysdeps/unix/sysv/linux/getcwd.c: Include sys/param.h. + +--- glibc-old/sysdeps/unix/sysv/linux/getcwd.c ++++ glibc-new/sysdeps/unix/sysv/linux/getcwd.c +@@ -24,6 +24,7 @@ + #include <limits.h> + #include <stdlib.h> + #include <unistd.h> ++#include <sys/param.h> + + #include <sysdep.h> + #include <sys/syscall.h> diff --git a/pkgs/development/libraries/glibc/2.5/glibc-inline.patch b/pkgs/development/libraries/glibc/2.5/glibc-inline.patch new file mode 100644 index 000000000000..19e400e0d50f --- /dev/null +++ b/pkgs/development/libraries/glibc/2.5/glibc-inline.patch @@ -0,0 +1,1822 @@ +--- libc/mach/mach/mig_support.h.jj 2001-07-06 06:55:35.000000000 +0200 ++++ libc/mach/mach/mig_support.h 2006-11-07 11:18:32.000000000 +0100 +@@ -1,4 +1,4 @@ +-/* Copyright (C) 1993,94,97,99,2001 Free Software Foundation, Inc. ++/* Copyright (C) 1993,94,97,99,2001,2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -67,12 +67,12 @@ extern void mig_reply_setup (const mach_ + /* Idiocy support function. */ + extern vm_size_t mig_strncpy (char *__dst, const char *__src, vm_size_t __len); + extern vm_size_t __mig_strncpy (char *__dst, const char *__src, vm_size_t); +-extern __inline vm_size_t ++__extern_inline vm_size_t + __mig_strncpy (char *__dst, const char *__src, vm_size_t __len) + { + return __stpncpy (__dst, __src, __len) - __dst; + } +-extern __inline vm_size_t ++__extern_inline vm_size_t + mig_strncpy (char *__dst, const char *__src, vm_size_t __len) + { + return __mig_strncpy (__dst, __src, __len); +--- libc/mach/lock-intern.h.jj 2001-07-06 06:55:34.000000000 +0200 ++++ libc/mach/lock-intern.h 2006-11-06 21:05:34.000000000 +0100 +@@ -1,4 +1,4 @@ +-/* Copyright (C) 1994, 1996 Free Software Foundation, Inc. ++/* Copyright (C) 1994, 1996, 2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -22,7 +22,7 @@ + #include <machine-lock.h> + + #ifndef _EXTERN_INLINE +-#define _EXTERN_INLINE extern __inline ++#define _EXTERN_INLINE __extern_inline + #endif + + +--- libc/include/stdlib.h.jj 2006-01-14 13:08:56.000000000 +0100 ++++ libc/include/stdlib.h 2006-11-06 21:08:02.000000000 +0100 +@@ -139,43 +139,43 @@ libc_hidden_proto (____strtoll_l_interna + libc_hidden_proto (____strtoul_l_internal) + libc_hidden_proto (____strtoull_l_internal) + +-extern __inline double ++__extern_inline double + __NTH (__strtod_l (__const char *__restrict __nptr, char **__restrict __endptr, + __locale_t __loc)) + { + return ____strtod_l_internal (__nptr, __endptr, 0, __loc); + } +-extern __inline long int ++__extern_inline long int + __NTH (__strtol_l (__const char *__restrict __nptr, char **__restrict __endptr, + int __base, __locale_t __loc)) + { + return ____strtol_l_internal (__nptr, __endptr, __base, 0, __loc); + } +-extern __inline unsigned long int ++__extern_inline unsigned long int + __NTH (__strtoul_l (__const char *__restrict __nptr, + char **__restrict __endptr, int __base, __locale_t __loc)) + { + return ____strtoul_l_internal (__nptr, __endptr, __base, 0, __loc); + } +-extern __inline float ++__extern_inline float + __NTH (__strtof_l (__const char *__restrict __nptr, char **__restrict __endptr, + __locale_t __loc)) + { + return ____strtof_l_internal (__nptr, __endptr, 0, __loc); + } +-extern __inline long double ++__extern_inline long double + __NTH (__strtold_l (__const char *__restrict __nptr, + char **__restrict __endptr, __locale_t __loc)) + { + return ____strtold_l_internal (__nptr, __endptr, 0, __loc); + } +-__extension__ extern __inline long long int ++__extension__ __extern_inline long long int + __NTH (__strtoll_l (__const char *__restrict __nptr, + char **__restrict __endptr, int __base, __locale_t __loc)) + { + return ____strtoll_l_internal (__nptr, __endptr, __base, 0, __loc); + } +-__extension__ extern __inline unsigned long long int ++__extension__ __extern_inline unsigned long long int + __NTH (__strtoull_l (__const char * __restrict __nptr, + char **__restrict __endptr, int __base, __locale_t __loc)) + { +--- libc/include/ctype.h.jj 2004-03-16 11:09:04.000000000 +0100 ++++ libc/include/ctype.h 2006-11-06 21:06:24.000000000 +0100 +@@ -15,7 +15,7 @@ extern int __isctype (int __c, int __mas + # include <bits/libc-tsd.h> + + # ifndef CTYPE_EXTERN_INLINE /* Used by ctype/ctype-info.c, which see. */ +-# define CTYPE_EXTERN_INLINE extern inline ++# define CTYPE_EXTERN_INLINE __extern_inline + # endif + + __libc_tsd_define (extern, CTYPE_B) +--- libc/include/sys/stat.h.jj 2006-02-12 22:29:08.000000000 +0100 ++++ libc/include/sys/stat.h 2006-11-06 21:07:01.000000000 +0100 +@@ -19,13 +19,13 @@ hidden_proto (__lxstat64) + hidden_proto (__xstat) + hidden_proto (__xstat64) + #endif +-extern __inline__ int __stat (__const char *__path, struct stat *__statbuf) ++__extern_inline int __stat (__const char *__path, struct stat *__statbuf) + { + return __xstat (_STAT_VER, __path, __statbuf); + } + libc_hidden_proto (__xmknod) +-extern __inline__ int __mknod (__const char *__path, __mode_t __mode, +- __dev_t __dev) ++__extern_inline int __mknod (__const char *__path, __mode_t __mode, ++ __dev_t __dev) + { + return __xmknod (_MKNOD_VER, __path, __mode, &__dev); + } +--- libc/stdlib/stdlib.h.jj 2006-10-31 23:05:34.000000000 +0100 ++++ libc/stdlib/stdlib.h 2006-11-06 21:16:09.000000000 +0100 +@@ -324,18 +324,18 @@ extern unsigned long long int __strtoull + /* Define inline functions which call the internal entry points. */ + + __BEGIN_NAMESPACE_STD +-extern __inline double ++__extern_inline double + __NTH (strtod (__const char *__restrict __nptr, char **__restrict __endptr)) + { + return __strtod_internal (__nptr, __endptr, 0); + } +-extern __inline long int ++__extern_inline long int + __NTH (strtol (__const char *__restrict __nptr, char **__restrict __endptr, + int __base)) + { + return __strtol_internal (__nptr, __endptr, __base, 0); + } +-extern __inline unsigned long int ++__extern_inline unsigned long int + __NTH (strtoul (__const char *__restrict __nptr, char **__restrict __endptr, + int __base)) + { +@@ -345,13 +345,13 @@ __END_NAMESPACE_STD + + # ifdef __USE_ISOC99 + __BEGIN_NAMESPACE_C99 +-extern __inline float ++__extern_inline float + __NTH (strtof (__const char *__restrict __nptr, char **__restrict __endptr)) + { + return __strtof_internal (__nptr, __endptr, 0); + } + # ifndef __LDBL_COMPAT +-extern __inline long double ++__extern_inline long double + __NTH (strtold (__const char *__restrict __nptr, char **__restrict __endptr)) + { + return __strtold_internal (__nptr, __endptr, 0); +@@ -361,13 +361,13 @@ __END_NAMESPACE_C99 + # endif + + # ifdef __USE_BSD +-__extension__ extern __inline long long int ++__extension__ __extern_inline long long int + __NTH (strtoq (__const char *__restrict __nptr, char **__restrict __endptr, + int __base)) + { + return __strtoll_internal (__nptr, __endptr, __base, 0); + } +-__extension__ extern __inline unsigned long long int ++__extension__ __extern_inline unsigned long long int + __NTH (strtouq (__const char *__restrict __nptr, char **__restrict __endptr, + int __base)) + { +@@ -377,13 +377,13 @@ __NTH (strtouq (__const char *__restrict + + # if defined __USE_MISC || defined __USE_ISOC99 + __BEGIN_NAMESPACE_C99 +-__extension__ extern __inline long long int ++__extension__ __extern_inline long long int + __NTH (strtoll (__const char *__restrict __nptr, char **__restrict __endptr, + int __base)) + { + return __strtoll_internal (__nptr, __endptr, __base, 0); + } +-__extension__ extern __inline unsigned long long int ++__extension__ __extern_inline unsigned long long int + __NTH (strtoull (__const char * __restrict __nptr, char **__restrict __endptr, + int __base)) + { +@@ -393,17 +393,17 @@ __END_NAMESPACE_C99 + # endif + + __BEGIN_NAMESPACE_STD +-extern __inline double ++__extern_inline double + __NTH (atof (__const char *__nptr)) + { + return strtod (__nptr, (char **) NULL); + } +-extern __inline int ++__extern_inline int + __NTH (atoi (__const char *__nptr)) + { + return (int) strtol (__nptr, (char **) NULL, 10); + } +-extern __inline long int ++__extern_inline long int + __NTH (atol (__const char *__nptr)) + { + return strtol (__nptr, (char **) NULL, 10); +@@ -412,7 +412,7 @@ __END_NAMESPACE_STD + + # if defined __USE_MISC || defined __USE_ISOC99 + __BEGIN_NAMESPACE_C99 +-__extension__ extern __inline long long int ++__extension__ __extern_inline long long int + __NTH (atoll (__const char *__nptr)) + { + return strtoll (__nptr, (char **) NULL, 10); +--- libc/stdlib/bits/stdlib.h.jj 2005-08-22 17:06:07.000000000 +0200 ++++ libc/stdlib/bits/stdlib.h 2006-11-07 11:18:39.000000000 +0100 +@@ -1,5 +1,5 @@ + /* Checking macros for stdlib functions. +- Copyright (C) 2005 Free Software Foundation, Inc. ++ Copyright (C) 2005, 2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -28,7 +28,7 @@ extern char *__REDIRECT_NTH (__realpath_ + (__const char *__restrict __name, + char *__restrict __resolved), realpath) __wur; + +-extern __always_inline __wur char * ++__extern_always_inline __wur char * + __NTH (realpath (__const char *__restrict __name, char *__restrict __resolved)) + { + if (__bos (__resolved) != (size_t) -1) +@@ -44,7 +44,7 @@ extern int __REDIRECT_NTH (__ptsname_r_a + size_t __buflen), ptsname_r) + __nonnull ((2)); + +-extern __always_inline int ++__extern_always_inline int + __NTH (ptsname_r (int __fd, char *__buf, size_t __buflen)) + { + if (__bos (__buf) != (size_t) -1 +@@ -59,7 +59,7 @@ extern int __wctomb_chk (char *__s, wcha + extern int __REDIRECT_NTH (__wctomb_alias, (char *__s, wchar_t __wchar), + wctomb) __wur; + +-extern __always_inline __wur int ++__extern_always_inline __wur int + __NTH (wctomb (char *__s, wchar_t __wchar)) + { + /* We would have to include <limits.h> to get a definition of MB_LEN_MAX. +@@ -83,7 +83,7 @@ extern size_t __REDIRECT_NTH (__mbstowcs + __const char *__restrict __src, + size_t __len), mbstowcs); + +-extern __always_inline size_t ++__extern_always_inline size_t + __NTH (mbstowcs (wchar_t *__restrict __dst, __const char *__restrict __src, + size_t __len)) + { +@@ -104,7 +104,7 @@ extern size_t __REDIRECT_NTH (__wcstombs + __const wchar_t *__restrict __src, + size_t __len), wcstombs); + +-extern __always_inline size_t ++__extern_always_inline size_t + __NTH (wcstombs (char *__restrict __dst, __const wchar_t *__restrict __src, + size_t __len)) + { + --- libc/stdlib/gmp.h.jj 2002-08-27 00:39:44.000000000 +0200 ++++ libc/stdlib/gmp.h 2006-11-07 15:02:06.000000000 +0100 +@@ -1,6 +1,6 @@ + /* gmp.h -- Definitions for GNU multiple precision functions. + +-Copyright (C) 1991, 1993, 1994, 1995, 1996 Free Software Foundation, Inc. ++Copyright (C) 1991, 1993, 1994, 1995, 1996, 2006 Free Software Foundation, Inc. + + This file is part of the GNU MP Library. + +@@ -21,6 +21,8 @@ MA 02111-1307, USA. */ + + #ifndef __GMP_H__ + ++#include <features.h> ++ + #ifndef __GNU_MP__ + #define __GNU_MP__ 2 + #define __need_size_t +@@ -41,7 +43,7 @@ MA 02111-1307, USA. */ + + #ifndef _EXTERN_INLINE + #ifdef __GNUC__ +-#define _EXTERN_INLINE extern __inline__ ++#define _EXTERN_INLINE __extern_inline + #else + #define _EXTERN_INLINE static + #endif +--- libc/ctype/ctype.h.jj 2004-09-08 00:23:45.000000000 +0200 ++++ libc/ctype/ctype.h 2006-11-07 11:18:56.000000000 +0100 +@@ -1,4 +1,4 @@ +-/* Copyright (C) 1991,92,93,95,96,97,98,99,2001,2002,2004 ++/* Copyright (C) 1991,92,93,95,96,97,98,99,2001,2002,2004,2006 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + +@@ -187,13 +187,13 @@ __exctype (_tolower); + # endif + + # ifdef __USE_EXTERN_INLINES +-extern __inline int ++__extern_inline int + __NTH (tolower (int __c)) + { + return __c >= -128 && __c < 256 ? (*__ctype_tolower_loc ())[__c] : __c; + } + +-extern __inline int ++__extern_inline int + __NTH (toupper (int __c)) + { + return __c >= -128 && __c < 256 ? (*__ctype_toupper_loc ())[__c] : __c; +--- libc/nptl/sysdeps/pthread/bits/libc-lock.h.jj 2006-10-24 10:14:03.000000000 +0200 ++++ libc/nptl/sysdeps/pthread/bits/libc-lock.h 2006-11-07 10:45:52.000000000 +0100 +@@ -1,5 +1,6 @@ + /* libc-internal interface for mutex locks. NPTL version. +- Copyright (C) 1996-2001, 2002, 2003, 2005 Free Software Foundation, Inc. ++ Copyright (C) 1996-2001, 2002, 2003, 2005, 2006 ++ Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -408,7 +409,7 @@ extern void _pthread_cleanup_pop_restore + + + /* Normal cleanup handling, based on C cleanup attribute. */ +-extern __inline void ++__extern_inline void + __libc_cleanup_routine (struct __pthread_cleanup_frame *f) + { + if (f->__do_it) +--- libc/nptl/sysdeps/pthread/pthread.h.jj 2006-06-05 01:59:07.000000000 +0200 ++++ libc/nptl/sysdeps/pthread/pthread.h 2006-11-07 10:49:27.000000000 +0100 +@@ -572,7 +572,7 @@ class __pthread_cleanup_class + function the compiler is free to decide inlining the change when + needed or fall back on the copy which must exist somewhere + else. */ +-extern __inline void ++__extern_inline void + __pthread_cleanup_routine (struct __pthread_cleanup_frame *__frame) + { + if (__frame->__do_it) +@@ -1103,7 +1103,7 @@ extern int pthread_atfork (void (*__prep + + #ifdef __USE_EXTERN_INLINES + /* Optimizations. */ +-extern __inline int ++__extern_inline int + __NTH (pthread_equal (pthread_t __thread1, pthread_t __thread2)) + { + return __thread1 == __thread2; +--- libc/nptl/sysdeps/pthread/allocalim.h.jj 2006-05-02 08:16:07.000000000 +0200 ++++ libc/nptl/sysdeps/pthread/allocalim.h 2006-11-07 10:46:28.000000000 +0100 +@@ -21,8 +21,7 @@ + #include <limits.h> + + +-extern int +-__always_inline ++__extern_always_inline int + __libc_use_alloca (size_t size) + { + return (__builtin_expect (size <= PTHREAD_STACK_MIN / 4, 1) +--- libc/nptl/sysdeps/pthread/gai_misc.h.jj 2006-09-05 17:23:12.000000000 +0200 ++++ libc/nptl/sysdeps/pthread/gai_misc.h 2006-11-06 21:17:39.000000000 +0100 +@@ -76,7 +76,7 @@ + #define gai_start_notify_thread __gai_start_notify_thread + #define gai_create_helper_thread __gai_create_helper_thread + +-extern inline void ++__extern_inline void + __gai_start_notify_thread (void) + { + sigset_t ss; +@@ -85,7 +85,7 @@ __gai_start_notify_thread (void) + INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_SETMASK, &ss, NULL, _NSIG / 8); + } + +-extern inline int ++__extern_inline int + __gai_create_helper_thread (pthread_t *threadp, void *(*tf) (void *), + void *arg) + { +--- libc/nptl/sysdeps/unix/sysv/linux/aio_misc.h.jj 2006-03-02 18:32:45.000000000 +0100 ++++ libc/nptl/sysdeps/unix/sysv/linux/aio_misc.h 2006-11-06 21:18:34.000000000 +0100 +@@ -27,7 +27,7 @@ + # define aio_start_notify_thread __aio_start_notify_thread + # define aio_create_helper_thread __aio_create_helper_thread + +-extern inline void ++__extern_inline void + __aio_start_notify_thread (void) + { + sigset_t ss; +@@ -36,7 +36,7 @@ __aio_start_notify_thread (void) + INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_SETMASK, &ss, NULL, _NSIG / 8); + } + +-extern inline int ++__extern_inline int + __aio_create_helper_thread (pthread_t *threadp, void *(*tf) (void *), + void *arg) + { +--- libc/resolv/gai_misc.c.jj 2006-08-03 10:01:53.000000000 +0200 ++++ libc/resolv/gai_misc.c 2006-11-07 10:49:55.000000000 +0100 +@@ -30,7 +30,7 @@ + #ifndef gai_create_helper_thread + # define gai_create_helper_thread __gai_create_helper_thread + +-extern inline int ++__extern_inline int + __gai_create_helper_thread (pthread_t *threadp, void *(*tf) (void *), + void *arg) + { +--- libc/bits/mathinline.h.jj 1997-10-13 05:53:18.000000000 +0200 ++++ libc/bits/mathinline.h 2006-11-07 10:51:05.000000000 +0100 +@@ -1,6 +1,6 @@ + /* This file should provide inline versions of math functions. + +- Surround GCC-specific parts with #ifdef __GNUC__, and use `extern __inline'. ++ Surround GCC-specific parts with #ifdef __GNUC__, and use `__extern_inline'. + + This file should define __MATH_INLINES if functions are actually defined as + inlines. */ +--- libc/bits/string.h.jj 1997-10-13 05:53:19.000000000 +0200 ++++ libc/bits/string.h 2006-11-07 10:50:54.000000000 +0100 +@@ -1,6 +1,6 @@ + /* This file should provide inline versions of string functions. + +- Surround GCC-specific parts with #ifdef __GNUC__, and use `extern __inline'. ++ Surround GCC-specific parts with #ifdef __GNUC__, and use `__extern_inline'. + + This file should define __STRING_INLINES if functions are actually defined + as inlines. */ +--- libc/bits/sigset.h.jj 2001-07-06 06:55:50.000000000 +0200 ++++ libc/bits/sigset.h 2006-11-07 11:19:08.000000000 +0100 +@@ -1,5 +1,6 @@ + /* __sig_atomic_t, __sigset_t, and related definitions. Generic/BSD version. +- Copyright (C) 1991, 1992, 1994, 1996, 1997 Free Software Foundation, Inc. ++ Copyright (C) 1991, 1992, 1994, 1996, 1997, 2006 ++ Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -38,7 +39,7 @@ typedef unsigned long int __sigset_t; + #define _SIGSET_H_fns 1 + + #ifndef _EXTERN_INLINE +-# define _EXTERN_INLINE extern __inline ++# define _EXTERN_INLINE __extern_inline + #endif + + /* Return a mask that includes SIG only. The cast to `sigset_t' avoids +--- libc/misc/sys/cdefs.h.jj 2006-01-14 21:14:36.000000000 +0100 ++++ libc/misc/sys/cdefs.h 2006-11-06 21:00:45.000000000 +0100 +@@ -279,6 +279,18 @@ + # define __always_inline __inline + #endif + ++/* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 ++ inline semantics. */ ++#if __GNUC_PREREQ (4,3) && defined (__STDC_VERSION__) \ ++ && __STDC_VERSION__ >= 199901L ++# define __extern_inline extern __inline __attribute__ ((__gnu_inline__)) ++# define __extern_always_inline \ ++ extern __always_inline __inline __attribute__ ((__gnu_inline__)) ++#else ++# define __extern_inline extern __inline ++# define __extern_always_inline extern __always_inline ++#endif ++ + /* It is possible to compile containing GCC extensions even if GCC is + run in pedantic mode if the uses are carefully marked using the + `__extension__' keyword. But this is not generally available before +--- libc/libio/bits/stdio.h.jj 2004-09-08 00:23:44.000000000 +0200 ++++ libc/libio/bits/stdio.h 2006-11-06 21:23:07.000000000 +0100 +@@ -1,5 +1,5 @@ + /* Optimizing macros and inline functions for stdio functions. +- Copyright (C) 1998, 2000, 2001, 2004 Free Software Foundation, Inc. ++ Copyright (C) 1998, 2000, 2001, 2004, 2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -24,7 +24,7 @@ + #ifdef __cplusplus + # define __STDIO_INLINE inline + #else +-# define __STDIO_INLINE extern __inline ++# define __STDIO_INLINE __extern_inline + #endif + + +--- libc/libio/bits/stdio2.h.jj 2005-03-19 01:14:58.000000000 +0100 ++++ libc/libio/bits/stdio2.h 2006-11-06 21:22:33.000000000 +0100 +@@ -1,5 +1,5 @@ + /* Checking macros for stdio functions. +- Copyright (C) 2004, 2005 Free Software Foundation, Inc. ++ Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -75,7 +75,7 @@ extern int __vprintf_chk (int __flag, __ + extern char *__gets_chk (char *__str, size_t) __wur; + extern char *__REDIRECT (__gets_alias, (char *__str), gets) __wur; + +-extern __always_inline __wur char * ++__extern_always_inline __wur char * + gets (char *__str) + { + if (__bos (__str) != (size_t) -1) +@@ -89,7 +89,7 @@ extern char *__REDIRECT (__fgets_alias, + (char *__restrict __s, int __n, + FILE *__restrict __stream), fgets) __wur; + +-extern __always_inline __wur char * ++__extern_always_inline __wur char * + fgets (char *__restrict __s, int __n, FILE *__restrict __stream) + { + if (__bos (__s) != (size_t) -1 +@@ -105,7 +105,7 @@ extern char *__REDIRECT (__fgets_unlocke + (char *__restrict __s, int __n, + FILE *__restrict __stream), fgets_unlocked) __wur; + +-extern __always_inline __wur char * ++__extern_always_inline __wur char * + fgets_unlocked (char *__restrict __s, int __n, FILE *__restrict __stream) + { + if (__bos (__s) != (size_t) -1 +--- libc/argp/argp.h.jj 2006-04-22 17:08:26.000000000 +0200 ++++ libc/argp/argp.h 2006-11-06 21:24:08.000000000 +0100 +@@ -558,7 +558,7 @@ extern void *__argp_input (__const struc + # endif + + # ifndef ARGP_EI +-# define ARGP_EI extern __inline__ ++# define ARGP_EI __extern_inline + # endif + + ARGP_EI void +--- libc/argp/argp-fmtstream.h.jj 2005-09-27 23:45:41.000000000 +0200 ++++ libc/argp/argp-fmtstream.h 2006-11-07 11:19:12.000000000 +0100 +@@ -1,5 +1,5 @@ + /* Word-wrapping and line-truncating streams. +- Copyright (C) 1997 Free Software Foundation, Inc. ++ Copyright (C) 1997, 2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Written by Miles Bader <miles@gnu.ai.mit.edu>. + +@@ -203,7 +203,7 @@ extern int __argp_fmtstream_ensure (argp + #endif + + #ifndef ARGP_FS_EI +-#define ARGP_FS_EI extern inline ++#define ARGP_FS_EI __extern_inline + #endif + + ARGP_FS_EI size_t +--- libc/locale/programs/locfile.c.jj 2006-05-10 04:12:39.000000000 +0200 ++++ libc/locale/programs/locfile.c 2006-11-07 15:13:20.000000000 +0100 +@@ -33,6 +33,11 @@ + #include "locfile.h" + #include "simple-hash.h" + ++/* This prototype is needed to export locfile_hash from this object ++ when using ISO C99 inline semantics. */ ++struct keyword_t; ++const struct keyword_t *locfile_hash (const char *str, unsigned int len); ++ + #include "locfile-kw.h" + + +--- libc/locale/programs/charmap.c.jj 2006-08-19 19:50:52.000000000 +0200 ++++ libc/locale/programs/charmap.c 2006-11-07 15:11:05.000000000 +0100 +@@ -35,6 +35,10 @@ + + #include <assert.h> + ++/* This prototype is needed to export charmap_hash from this object ++ when using ISO C99 inline semantics. */ ++struct keyword_t; ++const struct keyword_t *charmap_hash (const char *str, unsigned int len); + + /* Define the lookup function. */ + #include "charmap-kw.h" +--- libc/io/sys/stat.h.jj 2006-01-06 13:14:05.000000000 +0100 ++++ libc/io/sys/stat.h 2006-11-06 21:27:03.000000000 +0100 +@@ -430,28 +430,28 @@ extern int __xmknodat (int __ver, int __ + #if defined __GNUC__ && __GNUC__ >= 2 + /* Inlined versions of the real stat and mknod functions. */ + +-extern __inline__ int ++__extern_inline int + __NTH (stat (__const char *__path, struct stat *__statbuf)) + { + return __xstat (_STAT_VER, __path, __statbuf); + } + + # if defined __USE_BSD || defined __USE_XOPEN_EXTENDED +-extern __inline__ int ++__extern_inline int + __NTH (lstat (__const char *__path, struct stat *__statbuf)) + { + return __lxstat (_STAT_VER, __path, __statbuf); + } + # endif + +-extern __inline__ int ++__extern_inline int + __NTH (fstat (int __fd, struct stat *__statbuf)) + { + return __fxstat (_STAT_VER, __fd, __statbuf); + } + + # ifdef __USE_ATFILE +-extern __inline__ int ++__extern_inline int + __NTH (fstatat (int __fd, __const char *__filename, struct stat *__statbuf, + int __flag)) + { +@@ -460,7 +460,7 @@ __NTH (fstatat (int __fd, __const char * + # endif + + # if defined __USE_MISC || defined __USE_BSD +-extern __inline__ int ++__extern_inline int + __NTH (mknod (__const char *__path, __mode_t __mode, __dev_t __dev)) + { + return __xmknod (_MKNOD_VER, __path, __mode, &__dev); +@@ -468,7 +468,7 @@ __NTH (mknod (__const char *__path, __mo + # endif + + # ifdef __USE_ATFILE +-extern __inline__ int ++__extern_inline int + __NTH (mknodat (int __fd, __const char *__path, __mode_t __mode, + __dev_t __dev)) + { +@@ -479,28 +479,28 @@ __NTH (mknodat (int __fd, __const char * + # if defined __USE_LARGEFILE64 \ + && (! defined __USE_FILE_OFFSET64 \ + || (defined __REDIRECT_NTH && defined __OPTIMIZE__)) +-extern __inline__ int ++__extern_inline int + __NTH (stat64 (__const char *__path, struct stat64 *__statbuf)) + { + return __xstat64 (_STAT_VER, __path, __statbuf); + } + + # if defined __USE_BSD || defined __USE_XOPEN_EXTENDED +-extern __inline__ int ++__extern_inline int + __NTH (lstat64 (__const char *__path, struct stat64 *__statbuf)) + { + return __lxstat64 (_STAT_VER, __path, __statbuf); + } + # endif + +-extern __inline__ int ++__extern_inline int + __NTH (fstat64 (int __fd, struct stat64 *__statbuf)) + { + return __fxstat64 (_STAT_VER, __fd, __statbuf); + } + + # ifdef __USE_GNU +-extern __inline__ int ++__extern_inline int + __NTH (fstatat64 (int __fd, __const char *__filename, struct stat64 *__statbuf, + int __flag)) + { +--- libc/wcsmbs/wchar.h.jj 2006-09-27 17:56:30.000000000 +0200 ++++ libc/wcsmbs/wchar.h 2006-11-06 21:28:28.000000000 +0100 +@@ -326,19 +326,19 @@ __END_NAMESPACE_C99 + locales must use ASCII encoding for the values in the ASCII range + and because the wchar_t encoding is always ISO 10646. */ + extern wint_t __btowc_alias (int __c) __asm ("btowc"); +-extern __inline wint_t ++__extern_inline wint_t + __NTH (btowc (int __c)) + { return (__builtin_constant_p (__c) && __c >= '\0' && __c <= '\x7f' + ? (wint_t) __c : __btowc_alias (__c)); } + + extern int __wctob_alias (wint_t __c) __asm ("wctob"); +-extern __inline int ++__extern_inline int + __NTH (wctob (wint_t __wc)) + { return (__builtin_constant_p (__wc) && __wc >= L'\0' && __wc <= L'\x7f' + ? (int) __wc : __wctob_alias (__wc)); } + # endif + +-extern __inline size_t ++__extern_inline size_t + __NTH (mbrlen (__const char *__restrict __s, size_t __n, + mbstate_t *__restrict __ps)) + { return (__ps != NULL +@@ -548,38 +548,38 @@ extern unsigned long long int __wcstoull + /* Define inline functions which call the internal entry points. */ + __BEGIN_NAMESPACE_C99 + +-extern __inline double ++__extern_inline double + __NTH (wcstod (__const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr)) + { return __wcstod_internal (__nptr, __endptr, 0); } +-extern __inline long int ++__extern_inline long int + __NTH (wcstol (__const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, int __base)) + { return __wcstol_internal (__nptr, __endptr, __base, 0); } +-extern __inline unsigned long int ++__extern_inline unsigned long int + __NTH (wcstoul (__const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, int __base)) + { return __wcstoul_internal (__nptr, __endptr, __base, 0); } + __END_NAMESPACE_C99 + + # ifdef __USE_GNU +-extern __inline float ++__extern_inline float + __NTH (wcstof (__const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr)) + { return __wcstof_internal (__nptr, __endptr, 0); } + # ifndef __LDBL_COMPAT +-extern __inline long double ++__extern_inline long double + __NTH (wcstold (__const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr)) + { return __wcstold_internal (__nptr, __endptr, 0); } + # endif + __extension__ +-extern __inline long long int ++__extern_inline long long int + __NTH (wcstoq (__const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, int __base)) + { return __wcstoll_internal (__nptr, __endptr, __base, 0); } + __extension__ +-extern __inline unsigned long long int ++__extern_inline unsigned long long int + __NTH (wcstouq (__const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, int __base)) + { return __wcstoull_internal (__nptr, __endptr, __base, 0); } +--- libc/wcsmbs/bits/wchar2.h.jj 2006-01-14 13:09:47.000000000 +0100 ++++ libc/wcsmbs/bits/wchar2.h 2006-11-06 21:29:19.000000000 +0100 +@@ -30,7 +30,7 @@ extern wchar_t *__REDIRECT_NTH (__wmemcp + __const wchar_t *__restrict __s2, size_t __n), + wmemcpy); + +-extern __always_inline wchar_t * ++__extern_always_inline wchar_t * + __NTH (wmemcpy (wchar_t *__restrict __s1, __const wchar_t *__restrict __s2, + size_t __n)) + { +@@ -46,7 +46,7 @@ extern wchar_t *__REDIRECT_NTH (__wmemmo + __const wchar_t *__s2, + size_t __n), wmemmove); + +-extern __always_inline wchar_t * ++__extern_always_inline wchar_t * + __NTH (wmemmove (wchar_t *__restrict __s1, __const wchar_t *__restrict __s2, + size_t __n)) + { +@@ -65,7 +65,7 @@ extern wchar_t *__REDIRECT_NTH (__wmempc + __const wchar_t *__restrict __s2, + size_t __n), wmempcpy); + +-extern __always_inline wchar_t * ++__extern_always_inline wchar_t * + __NTH (wmempcpy (wchar_t *__restrict __s1, __const wchar_t *__restrict __s2, + size_t __n)) + { +@@ -81,7 +81,7 @@ extern wchar_t *__wmemset_chk (wchar_t * + extern wchar_t *__REDIRECT_NTH (__wmemset_alias, (wchar_t *__s, wchar_t __c, + size_t __n), wmemset); + +-extern __always_inline wchar_t * ++__extern_always_inline wchar_t * + __NTH (wmemset (wchar_t *__restrict __s, wchar_t __c, size_t __n)) + { + if (__bos0 (__s) != (size_t) -1) +@@ -97,7 +97,7 @@ extern wchar_t *__REDIRECT_NTH (__wcscpy + (wchar_t *__restrict __dest, + __const wchar_t *__restrict __src), wcscpy); + +-extern __always_inline wchar_t * ++__extern_always_inline wchar_t * + __NTH (wcscpy (wchar_t *__dest, __const wchar_t *__src)) + { + if (__bos (__dest) != (size_t) -1) +@@ -112,7 +112,7 @@ extern wchar_t *__REDIRECT_NTH (__wcpcpy + __const wchar_t *__src), + wcpcpy); + +-extern __always_inline wchar_t * ++__extern_always_inline wchar_t * + __NTH (wcpcpy (wchar_t *__dest, __const wchar_t *__src)) + { + if (__bos (__dest) != (size_t) -1) +@@ -129,7 +129,7 @@ extern wchar_t *__REDIRECT_NTH (__wcsncp + __const wchar_t *__restrict __src, + size_t __n), wcsncpy); + +-extern __always_inline wchar_t * ++__extern_always_inline wchar_t * + __NTH (wcsncpy (wchar_t *__dest, __const wchar_t *__src, size_t __n)) + { + if (__bos (__dest) != (size_t) -1 +@@ -148,7 +148,7 @@ extern wchar_t *__REDIRECT_NTH (__wcpncp + __const wchar_t *__restrict __src, + size_t __n), wcpncpy); + +-extern __always_inline wchar_t * ++__extern_always_inline wchar_t * + __NTH (wcpncpy (wchar_t *__dest, __const wchar_t *__src, size_t __n)) + { + if (__bos (__dest) != (size_t) -1 +@@ -166,7 +166,7 @@ extern wchar_t *__REDIRECT_NTH (__wcscat + (wchar_t *__restrict __dest, + __const wchar_t *__restrict __src), wcscat); + +-extern __always_inline wchar_t * ++__extern_always_inline wchar_t * + __NTH (wcscat (wchar_t *__dest, __const wchar_t *__src)) + { + if (__bos (__dest) != (size_t) -1) +@@ -183,7 +183,7 @@ extern wchar_t *__REDIRECT_NTH (__wcsnca + __const wchar_t *__restrict __src, + size_t __n), wcsncat); + +-extern __always_inline wchar_t * ++__extern_always_inline wchar_t * + __NTH (wcsncat (wchar_t *__dest, __const wchar_t *__src, size_t __n)) + { + if (__bos (__dest) != (size_t) -1) +@@ -246,7 +246,7 @@ extern wchar_t *__REDIRECT (__fgetws_ali + (wchar_t *__restrict __s, int __n, + __FILE *__restrict __stream), fgetws) __wur; + +-extern __always_inline __wur wchar_t * ++__extern_always_inline __wur wchar_t * + fgetws (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream) + { + if (__bos (__s) != (size_t) -1 +@@ -264,7 +264,7 @@ extern wchar_t *__REDIRECT (__fgetws_unl + __FILE *__restrict __stream), fgetws_unlocked) + __wur; + +-extern __always_inline __wur wchar_t * ++__extern_always_inline __wur wchar_t * + fgetws_unlocked (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream) + { + if (__bos (__s) != (size_t) -1 +@@ -281,7 +281,7 @@ extern size_t __REDIRECT_NTH (__wcrtomb_ + (char *__restrict __s, wchar_t __wchar, + mbstate_t *__restrict __ps), wcrtomb) __wur; + +-extern __always_inline __wur size_t ++__extern_always_inline __wur size_t + __NTH (wcrtomb (char *__s, wchar_t __wchar, mbstate_t *__ps)) + { + /* We would have to include <limits.h> to get a definition of MB_LEN_MAX. +@@ -307,7 +307,7 @@ extern size_t __REDIRECT_NTH (__mbsrtowc + size_t __len, mbstate_t *__restrict __ps), + mbsrtowcs); + +-extern __always_inline size_t ++__extern_always_inline size_t + __NTH (mbsrtowcs (wchar_t *__restrict __dst, __const char **__restrict __src, + size_t __len, mbstate_t *__restrict __ps)) + { +@@ -330,7 +330,7 @@ extern size_t __REDIRECT_NTH (__wcsrtomb + size_t __len, mbstate_t *__restrict __ps), + wcsrtombs); + +-extern __always_inline size_t ++__extern_always_inline size_t + __NTH (wcsrtombs (char *__restrict __dst, __const wchar_t **__restrict __src, + size_t __len, mbstate_t *__restrict __ps)) + { +@@ -352,7 +352,7 @@ extern size_t __REDIRECT_NTH (__mbsnrtow + size_t __len, mbstate_t *__restrict __ps), + mbsnrtowcs); + +-extern __always_inline size_t ++__extern_always_inline size_t + __NTH (mbsnrtowcs (wchar_t *__restrict __dst, __const char **__restrict __src, + size_t __nmc, size_t __len, mbstate_t *__restrict __ps)) + { +@@ -376,7 +376,7 @@ extern size_t __REDIRECT_NTH (__wcsnrtom + size_t __nwc, size_t __len, + mbstate_t *__restrict __ps), wcsnrtombs); + +-extern __always_inline size_t ++__extern_always_inline size_t + __NTH (wcsnrtombs (char *__restrict __dst, __const wchar_t **__restrict __src, + size_t __nwc, size_t __len, mbstate_t *__restrict __ps)) + { +--- libc/socket/bits/socket2.h.jj 2005-08-08 21:00:53.000000000 +0200 ++++ libc/socket/bits/socket2.h 2006-11-06 21:29:59.000000000 +0100 +@@ -1,5 +1,5 @@ + /* Checking macros for socket functions. +- Copyright (C) 2005 Free Software Foundation, Inc. ++ Copyright (C) 2005, 2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -26,7 +26,7 @@ extern ssize_t __recv_chk (int __fd, voi + extern ssize_t __REDIRECT (__recv_alias, (int __fd, void *__buf, size_t __n, + int __flags), recv); + +-extern __always_inline ssize_t ++__extern_always_inline ssize_t + recv (int __fd, void *__buf, size_t __n, int __flags) + { + if (__bos0 (__buf) != (size_t) -1 +@@ -44,7 +44,7 @@ extern ssize_t __REDIRECT (__recvfrom_al + int __flags, __SOCKADDR_ARG __addr, + socklen_t *__restrict __addr_len), recvfrom); + +-extern __always_inline ssize_t ++__extern_always_inline ssize_t + recvfrom (int __fd, void *__restrict __buf, size_t __n, int __flags, + __SOCKADDR_ARG __addr, socklen_t *__restrict __addr_len) + { +--- libc/posix/bits/unistd.h.jj 2006-08-24 08:47:31.000000000 +0200 ++++ libc/posix/bits/unistd.h 2006-11-06 21:30:39.000000000 +0100 +@@ -26,7 +26,7 @@ extern ssize_t __read_chk (int __fd, voi + extern ssize_t __REDIRECT (__read_alias, (int __fd, void *__buf, + size_t __nbytes), read) __wur; + +-extern __always_inline __wur ssize_t ++__extern_always_inline __wur ssize_t + read (int __fd, void *__buf, size_t __nbytes) + { + if (__bos0 (__buf) != (size_t) -1 +@@ -48,7 +48,7 @@ extern ssize_t __REDIRECT (__pread64_ali + __off64_t __offset), pread64) __wur; + + # ifndef __USE_FILE_OFFSET64 +-extern __always_inline __wur ssize_t ++__extern_always_inline __wur ssize_t + pread (int __fd, void *__buf, size_t __nbytes, __off_t __offset) + { + if (__bos0 (__buf) != (size_t) -1 +@@ -57,7 +57,7 @@ pread (int __fd, void *__buf, size_t __n + return __pread_alias (__fd, __buf, __nbytes, __offset); + } + # else +-extern __always_inline __wur ssize_t ++__extern_always_inline __wur ssize_t + pread (int __fd, void *__buf, size_t __nbytes, __off64_t __offset) + { + if (__bos0 (__buf) != (size_t) -1 +@@ -68,7 +68,7 @@ pread (int __fd, void *__buf, size_t __n + # endif + + # ifdef __USE_LARGEFILE64 +-extern __always_inline __wur ssize_t ++__extern_always_inline __wur ssize_t + pread64 (int __fd, void *__buf, size_t __nbytes, __off64_t __offset) + { + if (__bos0 (__buf) != (size_t) -1 +@@ -89,7 +89,7 @@ extern ssize_t __REDIRECT_NTH (__readlin + char *__restrict __buf, size_t __len), readlink) + __nonnull ((1, 2)) __wur; + +-extern __always_inline __nonnull ((1, 2)) __wur ssize_t ++__extern_always_inline __nonnull ((1, 2)) __wur ssize_t + __NTH (readlink (__const char *__restrict __path, char *__restrict __buf, + size_t __len)) + { +@@ -111,7 +111,7 @@ extern ssize_t __REDIRECT_NTH (__readlin + readlinkat) + __nonnull ((2, 3)) __wur; + +-extern __always_inline __nonnull ((2, 3)) __wur ssize_t ++__extern_always_inline __nonnull ((2, 3)) __wur ssize_t + __NTH (readlinkat (int __fd, __const char *__restrict __path, + char *__restrict __buf, size_t __len)) + { +@@ -127,7 +127,7 @@ extern char *__getcwd_chk (char *__buf, + extern char *__REDIRECT_NTH (__getcwd_alias, + (char *__buf, size_t __size), getcwd) __wur; + +-extern __always_inline __wur char * ++__extern_always_inline __wur char * + __NTH (getcwd (char *__buf, size_t __size)) + { + if (__bos (__buf) != (size_t) -1 +@@ -142,7 +142,7 @@ extern char *__getwd_chk (char *__buf, s + extern char *__REDIRECT_NTH (__getwd_alias, (char *__buf), getwd) + __nonnull ((1)) __wur; + +-extern __always_inline __nonnull ((1)) __attribute_deprecated__ __wur char * ++__extern_always_inline __nonnull ((1)) __attribute_deprecated__ __wur char * + __NTH (getwd (char *__buf)) + { + if (__bos (__buf) != (size_t) -1) +@@ -156,7 +156,7 @@ extern size_t __confstr_chk (int __name, + extern size_t __REDIRECT_NTH (__confstr_alias, (int __name, char *__buf, + size_t __len), confstr); + +-extern __always_inline size_t ++__extern_always_inline size_t + __NTH (confstr (int __name, char *__buf, size_t __len)) + { + if (__bos (__buf) != (size_t) -1 +@@ -171,7 +171,7 @@ extern int __getgroups_chk (int __size, + extern int __REDIRECT_NTH (__getgroups_alias, (int __size, __gid_t __list[]), + getgroups) __wur; + +-extern __always_inline int ++__extern_always_inline int + __NTH (getgroups (int __size, __gid_t __list[])) + { + if (__bos (__list) != (size_t) -1 +@@ -188,7 +188,7 @@ extern int __REDIRECT_NTH (__ttyname_r_a + size_t __buflen), ttyname_r) + __nonnull ((2)); + +-extern __always_inline int ++__extern_always_inline int + __NTH (ttyname_r (int __fd, char *__buf, size_t __buflen)) + { + if (__bos (__buf) != (size_t) -1 +@@ -204,7 +204,7 @@ extern int __getlogin_r_chk (char *__buf + extern int __REDIRECT (__getlogin_r_alias, (char *__buf, size_t __buflen), + getlogin_r) __nonnull ((1)); + +-extern __always_inline int ++__extern_always_inline int + getlogin_r (char *__buf, size_t __buflen) + { + if (__bos (__buf) != (size_t) -1 +@@ -221,7 +221,7 @@ extern int __gethostname_chk (char *__bu + extern int __REDIRECT_NTH (__gethostname_alias, (char *__buf, size_t __buflen), + gethostname) __nonnull ((1)); + +-extern __always_inline int ++__extern_always_inline int + __NTH (gethostname (char *__buf, size_t __buflen)) + { + if (__bos (__buf) != (size_t) -1 +@@ -239,7 +239,7 @@ extern int __REDIRECT_NTH (__getdomainna + size_t __buflen), + getdomainname) __nonnull ((1)) __wur; + +-extern __always_inline int ++__extern_always_inline int + __NTH (getdomainname (char *__buf, size_t __buflen)) + { + if (__bos (__buf) != (size_t) -1 +--- libc/string/bits/string3.h.jj 2005-08-08 21:02:31.000000000 +0200 ++++ libc/string/bits/string3.h 2006-11-07 11:19:17.000000000 +0100 +@@ -1,4 +1,4 @@ +-/* Copyright (C) 2004, 2005 Free Software Foundation, Inc. ++/* Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -151,7 +151,7 @@ extern char *__REDIRECT_NTH (__stpncpy_a + __const char *__src, + size_t __n), stpncpy); + +-extern __always_inline char * ++__extern_always_inline char * + __NTH (stpncpy (char *__dest, __const char *__src, size_t __n)) + { + if (__bos (__dest) != (size_t) -1 +--- libc/string/bits/string2.h.jj 2004-05-28 08:39:13.000000000 +0200 ++++ libc/string/bits/string2.h 2006-11-07 11:19:24.000000000 +0100 +@@ -0,0 +1,18 @@ ++/* DO NOT EDIT THIS FILE. ++ ++ It has been auto-edited by fixincludes from: ++ ++ "fixinc/tests/inc/bits/string2.h" ++ ++ This had to be done to correct non-standard usages in the ++ original, manufacturer supplied header file. */ ++ ++ ++ ++#if defined( GLIBC_C99_INLINE_3_CHECK ) ++# if defined(__cplusplus) || __STDC_VERSION__ >= 19901L ++# define __STRING_INLINE inline ++# else ++# define __STRING_INLINE extern __inline ++# endif ++#endif /* GLIBC_C99_INLINE_3_CHECK */ +@@ -1,5 +1,5 @@ + /* Machine-independant string function optimizations. +- Copyright (C) 1997-2003, 2004 Free Software Foundation, Inc. ++ Copyright (C) 1997-2003, 2004, 2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + +@@ -43,7 +43,7 @@ + # ifdef __cplusplus + # define __STRING_INLINE inline + # else +-# define __STRING_INLINE extern __inline ++# define __STRING_INLINE __extern_inline + # endif + #endif + +--- libc/string/argz.h.jj 2004-09-08 00:23:43.000000000 +0200 ++++ libc/string/argz.h 2006-11-07 11:19:33.000000000 +0100 +@@ -1,5 +1,5 @@ + /* Routines for dealing with '\0' separated arg vectors. +- Copyright (C) 1995,96,97,98,99,2000,2004 Free Software Foundation, Inc. ++ Copyright (C) 1995,96,97,98,99,2000,2004,2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -160,7 +160,7 @@ extern char *argz_next (__const char *__ + __const char *__restrict __entry) __THROW; + + #ifdef __USE_EXTERN_INLINES +-extern inline char * ++__extern_inline char * + __NTH (__argz_next (__const char *__argz, size_t __argz_len, + __const char *__entry)) + { +@@ -174,7 +174,7 @@ __NTH (__argz_next (__const char *__argz + else + return __argz_len > 0 ? (char *) __argz : 0; + } +-extern inline char * ++__extern_inline char * + __NTH (argz_next (__const char *__argz, size_t __argz_len, + __const char *__entry)) + { +--- libc/math/bits/cmathcalls.h.jj 2001-07-06 06:55:35.000000000 +0200 ++++ libc/math/bits/cmathcalls.h 2006-11-07 11:19:39.000000000 +0100 +@@ -1,6 +1,6 @@ + /* Prototype declarations for complex math functions; + helper file for <complex.h>. +- Copyright (C) 1997, 1998, 2001 Free Software Foundation, Inc. ++ Copyright (C) 1997, 1998, 2001, 2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -135,21 +135,21 @@ __MATHDECL (_Mdouble_,creal, (_Mdouble_c + #if defined __GNUC__ && !__GNUC_PREREQ (2, 97) && defined __OPTIMIZE__ + + /* Imaginary part of Z. */ +-extern __inline _Mdouble_ ++__extern_inline _Mdouble_ + __MATH_PRECNAME(cimag) (_Mdouble_complex_ __z) __THROW + { + return __imag__ __z; + } + + /* Real part of Z. */ +-extern __inline _Mdouble_ ++__extern_inline _Mdouble_ + __MATH_PRECNAME(creal) (_Mdouble_complex_ __z) __THROW + { + return __real__ __z; + } + + /* Complex conjugate of Z. */ +-extern __inline _Mdouble_complex_ ++__extern_inline _Mdouble_complex_ + __MATH_PRECNAME(conj) (_Mdouble_complex_ __z) __THROW + { + return __extension__ ~__z; +--- libc/math/math_private.h.jj 2005-11-21 16:43:03.000000000 +0100 ++++ libc/math/math_private.h 2006-11-06 21:33:45.000000000 +0100 +@@ -192,7 +192,7 @@ extern int __kernel_rem_pio2 (double* + extern double __copysign (double x, double __y); + + #if __GNUC_PREREQ (4, 0) +-extern inline double __copysign (double x, double y) ++__extern_inline double __copysign (double x, double y) + { return __builtin_copysign (x, y); } + #endif + +@@ -239,7 +239,7 @@ extern int __kernel_rem_pio2f (float*, + extern float __copysignf (float x, float __y); + + #if __GNUC_PREREQ (4, 0) +-extern inline float __copysignf (float x, float y) ++__extern_inline float __copysignf (float x, float y) + { return __builtin_copysignf (x, y); } + #endif + +@@ -307,7 +307,7 @@ extern long double __logbl (long double + extern long double __significandl (long double x); + + #if __GNUC_PREREQ (4, 0) +-extern inline long double __copysignl (long double x, long double y) ++__extern_inline long double __copysignl (long double x, long double y) + { return __builtin_copysignl (x, y); } + #endif + +--- libc/hurd/hurd.h.jj 2002-01-02 10:52:20.000000000 +0100 ++++ libc/hurd/hurd.h 2006-11-07 11:19:51.000000000 +0100 +@@ -1,4 +1,5 @@ +-/* Copyright (C) 1993,94,95,96,97,98,99,2001,02 Free Software Foundation, Inc. ++/* Copyright (C) 1993,94,95,96,97,98,99,2001,2002,2006 ++ Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -44,7 +45,7 @@ + #include <errno.h> + + #ifndef _HURD_H_EXTERN_INLINE +-#define _HURD_H_EXTERN_INLINE extern __inline ++#define _HURD_H_EXTERN_INLINE __extern_inline + #endif + + _HURD_H_EXTERN_INLINE int +--- libc/hurd/hurd/port.h.jj 2001-07-06 06:54:47.000000000 +0200 ++++ libc/hurd/hurd/port.h 2006-11-07 11:19:58.000000000 +0100 +@@ -1,5 +1,6 @@ + /* Lightweight user references for ports. +- Copyright (C) 1993, 1994, 1995, 1997, 1999 Free Software Foundation, Inc. ++ Copyright (C) 1993, 1994, 1995, 1997, 1999, 2006 ++ Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -55,7 +56,7 @@ struct hurd_port + + + #ifndef _HURD_PORT_H_EXTERN_INLINE +-#define _HURD_PORT_H_EXTERN_INLINE extern __inline ++#define _HURD_PORT_H_EXTERN_INLINE __extern_inline + #endif + + +--- libc/hurd/hurd/threadvar.h.jj 2002-09-02 09:08:53.000000000 +0200 ++++ libc/hurd/hurd/threadvar.h 2006-11-07 10:54:40.000000000 +0100 +@@ -1,5 +1,5 @@ + /* Internal per-thread variables for the Hurd. +- Copyright (C) 1994,95,97,98,99,2001,02 Free Software Foundation, Inc. ++ Copyright (C) 1994,95,97,98,99,2001,02,06 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -74,7 +74,7 @@ enum __hurd_threadvar_index + + + #ifndef _HURD_THREADVAR_H_EXTERN_INLINE +-#define _HURD_THREADVAR_H_EXTERN_INLINE extern __inline ++#define _HURD_THREADVAR_H_EXTERN_INLINE __extern_inline + #endif + + /* Return the location of the value for the per-thread variable with index +--- libc/hurd/hurd/fd.h.jj 2006-03-06 08:59:07.000000000 +0100 ++++ libc/hurd/hurd/fd.h 2006-11-07 10:53:18.000000000 +0100 +@@ -52,7 +52,7 @@ extern struct mutex _hurd_dtable_lock; / + #include <hurd/signal.h> + + #ifndef _HURD_FD_H_EXTERN_INLINE +-#define _HURD_FD_H_EXTERN_INLINE extern __inline ++#define _HURD_FD_H_EXTERN_INLINE __extern_inline + #endif + + /* Returns the descriptor cell for FD. If FD is invalid or unused, return +--- libc/hurd/hurd/signal.h.jj 2002-02-18 21:57:11.000000000 +0100 ++++ libc/hurd/hurd/signal.h 2006-11-07 10:54:13.000000000 +0100 +@@ -1,5 +1,5 @@ + /* Implementing POSIX.1 signals under the Hurd. +- Copyright (C) 1993,94,95,96,98,99,2002 Free Software Foundation, Inc. ++ Copyright (C) 1993,94,95,96,98,99,2002,2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -126,7 +126,7 @@ extern struct hurd_sigstate *_hurd_self_ + __attribute__ ((__const__)); + + #ifndef _HURD_SIGNAL_H_EXTERN_INLINE +-#define _HURD_SIGNAL_H_EXTERN_INLINE extern __inline ++#define _HURD_SIGNAL_H_EXTERN_INLINE __extern_inline + #endif + + _HURD_SIGNAL_H_EXTERN_INLINE struct hurd_sigstate * +--- libc/hurd/hurd/userlink.h.jj 2001-07-06 06:54:47.000000000 +0200 ++++ libc/hurd/hurd/userlink.h 2006-11-07 10:53:37.000000000 +0100 +@@ -1,5 +1,5 @@ + /* Support for chains recording users of a resource; `struct hurd_userlink'. +- Copyright (C) 1994, 1995, 1997, 1999 Free Software Foundation, Inc. ++ Copyright (C) 1994, 1995, 1997, 1999, 2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -71,7 +71,7 @@ struct hurd_userlink + + + #ifndef _HURD_USERLINK_H_EXTERN_INLINE +-#define _HURD_USERLINK_H_EXTERN_INLINE extern __inline ++#define _HURD_USERLINK_H_EXTERN_INLINE __extern_inline + #endif + + +--- libc/sysdeps/mach/alpha/machine-sp.h.jj 2001-07-06 06:55:56.000000000 +0200 ++++ libc/sysdeps/mach/alpha/machine-sp.h 2006-11-07 10:55:42.000000000 +0100 +@@ -1,5 +1,5 @@ + /* Machine-specific function to return the stack pointer. Alpha version. +- Copyright (C) 1994, 1997 Free Software Foundation, Inc. ++ Copyright (C) 1994, 1997, 2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -23,7 +23,7 @@ + /* Return the current stack pointer. */ + + #ifndef _EXTERN_INLINE +-#define _EXTERN_INLINE extern __inline ++#define _EXTERN_INLINE __extern_inline + #endif + + _EXTERN_INLINE void * +--- libc/sysdeps/mach/alpha/machine-lock.h.jj 2003-02-26 01:01:15.000000000 +0100 ++++ libc/sysdeps/mach/alpha/machine-lock.h 2006-11-07 11:20:04.000000000 +0100 +@@ -1,5 +1,5 @@ + /* Machine-specific definition for spin locks. Alpha version. +- Copyright (C) 1994, 1997 Free Software Foundation, Inc. ++ Copyright (C) 1994, 1997, 2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -30,7 +30,7 @@ typedef __volatile long int __spin_lock_ + + + #ifndef _EXTERN_INLINE +-#define _EXTERN_INLINE extern __inline ++#define _EXTERN_INLINE __extern_inline + #endif + + /* Unlock LOCK. */ +--- libc/sysdeps/mach/i386/machine-lock.h.jj 2001-07-06 06:56:00.000000000 +0200 ++++ libc/sysdeps/mach/i386/machine-lock.h 2006-11-07 10:56:10.000000000 +0100 +@@ -1,5 +1,5 @@ + /* Machine-specific definition for spin locks. i386 version. +- Copyright (C) 1994, 1997 Free Software Foundation, Inc. ++ Copyright (C) 1994, 1997, 2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -30,7 +30,7 @@ typedef __volatile int __spin_lock_t; + + + #ifndef _EXTERN_INLINE +-#define _EXTERN_INLINE extern __inline ++#define _EXTERN_INLINE __extern_inline + #endif + + /* Unlock LOCK. */ +--- libc/sysdeps/mach/powerpc/machine-sp.h.jj 2002-08-27 00:39:44.000000000 +0200 ++++ libc/sysdeps/mach/powerpc/machine-sp.h 2006-11-07 10:56:59.000000000 +0100 +@@ -1,5 +1,5 @@ + /* Machine-specific function to return the stack pointer. PowerPC version. +- Copyright (C) 2001 Free Software Foundation, Inc. ++ Copyright (C) 2001, 2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -27,7 +27,7 @@ + # ifdef _HURD_THREADVAR_H_EXTERN_INLINE + # define _EXTERN_INLINE _HURD_THREADVAR_H_EXTERN_INLINE + # else +-# define _EXTERN_INLINE extern __inline ++# define _EXTERN_INLINE __extern_inline + # endif + #endif + +--- libc/sysdeps/mach/powerpc/machine-lock.h.jj 2002-02-17 08:13:25.000000000 +0100 ++++ libc/sysdeps/mach/powerpc/machine-lock.h 2006-11-07 10:56:40.000000000 +0100 +@@ -1,5 +1,5 @@ + /* Machine-specific definition for spin locks. PowerPC version. +- Copyright (C) 1994,97,2002 Free Software Foundation, Inc. ++ Copyright (C) 1994,97,2002,2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -30,7 +30,7 @@ typedef __volatile long int __spin_lock_ + + + #ifndef _EXTERN_INLINE +-#define _EXTERN_INLINE extern __inline ++#define _EXTERN_INLINE __extern_inline + #endif + + /* Unlock LOCK. */ +--- libc/sysdeps/alpha/fpu/bits/mathinline.h.jj 2005-02-08 05:37:48.000000000 +0100 ++++ libc/sysdeps/alpha/fpu/bits/mathinline.h 2006-11-07 10:59:08.000000000 +0100 +@@ -1,5 +1,6 @@ + /* Inline math functions for Alpha. +- Copyright (C) 1996, 1997, 1999-2001, 2004 Free Software Foundation, Inc. ++ Copyright (C) 1996, 1997, 1999-2001, 2004, 2006 ++ Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by David Mosberger-Tang. + +@@ -25,7 +26,7 @@ + #ifdef __cplusplus + # define __MATH_INLINE __inline + #else +-# define __MATH_INLINE extern __inline ++# define __MATH_INLINE __extern_inline + #endif + + #if defined __USE_ISOC99 && defined __GNUC__ && !__GNUC_PREREQ(3,0) +--- libc/sysdeps/ia64/fpu/bits/mathinline.h.jj 2004-09-08 23:44:02.000000000 +0200 ++++ libc/sysdeps/ia64/fpu/bits/mathinline.h 2006-11-07 10:59:49.000000000 +0100 +@@ -1,5 +1,5 @@ + /* Inline math functions for ia64. +- Copyright (C) 2004 Free Software Foundation, Inc. ++ Copyright (C) 2004, 2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -24,7 +24,7 @@ + #ifdef __cplusplus + # define __MATH_INLINE __inline + #else +-# define __MATH_INLINE extern __inline ++# define __MATH_INLINE __extern_inline + #endif + + #if defined __USE_ISOC99 && defined __GNUC__ && __GNUC__ >= 2 +--- libc/sysdeps/i386/fpu/bits/mathinline.h.jj 2004-09-08 00:23:42.000000000 +0200 ++++ libc/sysdeps/i386/fpu/bits/mathinline.h 2006-11-07 11:00:56.000000000 +0100 +@@ -1,5 +1,5 @@ + /* Inline math functions for i387. +- Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004 ++ Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2006 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by John C. Bowman <bowman@math.ualberta.ca>, 1995. +@@ -26,7 +26,7 @@ + #ifdef __cplusplus + # define __MATH_INLINE __inline + #else +-# define __MATH_INLINE extern __inline ++# define __MATH_INLINE __extern_inline + #endif + + +--- libc/sysdeps/i386/i486/bits/string.h.jj 2004-12-15 21:30:16.000000000 +0100 ++++ libc/sysdeps/i386/i486/bits/string.h 2006-11-07 11:01:34.000000000 +0100 +@@ -1,5 +1,5 @@ + /* Optimized, inlined string functions. i486 version. +- Copyright (C) 1997,1998,1999,2000,2001,2002,2003,2004 ++ Copyright (C) 1997,1998,1999,2000,2001,2002,2003,2004,2006 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + +@@ -35,7 +35,7 @@ + # ifdef __cplusplus + # define __STRING_INLINE inline + # else +-# define __STRING_INLINE extern __inline ++# define __STRING_INLINE __extern_inline + # endif + #endif + +--- libc/sysdeps/generic/inttypes.h.jj 2004-09-08 00:23:42.000000000 +0200 ++++ libc/sysdeps/generic/inttypes.h 2006-11-07 11:02:59.000000000 +0100 +@@ -1,4 +1,4 @@ +-/* Copyright (C) 1997-2001, 2004 Free Software Foundation, Inc. ++/* Copyright (C) 1997-2001, 2004, 2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -330,7 +330,7 @@ extern long int __strtol_internal (__con + int __base, int __group) __THROW; + # define __strtol_internal_defined 1 + # endif +-extern __inline intmax_t ++__extern_inline intmax_t + __NTH (strtoimax (__const char *__restrict nptr, char **__restrict endptr, + int base)) + { +@@ -345,7 +345,7 @@ extern unsigned long int __strtoul_inter + int __base, int __group) __THROW; + # define __strtoul_internal_defined 1 + # endif +-extern __inline uintmax_t ++__extern_inline uintmax_t + __NTH (strtoumax (__const char *__restrict nptr, char **__restrict endptr, + int base)) + { +@@ -359,7 +359,7 @@ extern long int __wcstol_internal (__con + int __base, int __group) __THROW; + # define __wcstol_internal_defined 1 + # endif +-extern __inline intmax_t ++__extern_inline intmax_t + __NTH (wcstoimax (__const __gwchar_t *__restrict nptr, + __gwchar_t **__restrict endptr, int base)) + { +@@ -376,7 +376,7 @@ extern unsigned long int __wcstoul_inter + int __base, int __group) __THROW; + # define __wcstoul_internal_defined 1 + # endif +-extern __inline uintmax_t ++__extern_inline uintmax_t + __NTH (wcstoumax (__const __gwchar_t *__restrict nptr, + __gwchar_t **__restrict endptr, int base)) + { +@@ -393,7 +393,7 @@ extern long long int __strtoll_internal + int __base, int __group) __THROW; + # define __strtoll_internal_defined 1 + # endif +-extern __inline intmax_t ++__extern_inline intmax_t + __NTH (strtoimax (__const char *__restrict nptr, char **__restrict endptr, + int base)) + { +@@ -411,7 +411,7 @@ extern unsigned long long int __strtoull + int __group) __THROW; + # define __strtoull_internal_defined 1 + # endif +-extern __inline uintmax_t ++__extern_inline uintmax_t + __NTH (strtoumax (__const char *__restrict nptr, char **__restrict endptr, + int base)) + { +@@ -427,7 +427,7 @@ extern long long int __wcstoll_internal + int __base, int __group) __THROW; + # define __wcstoll_internal_defined 1 + # endif +-extern __inline intmax_t ++__extern_inline intmax_t + __NTH (wcstoimax (__const __gwchar_t *__restrict nptr, + __gwchar_t **__restrict endptr, int base)) + { +@@ -446,7 +446,7 @@ extern unsigned long long int __wcstoull + int __group) __THROW; + # define __wcstoull_internal_defined 1 + # endif +-extern __inline uintmax_t ++__extern_inline uintmax_t + __NTH (wcstoumax (__const __gwchar_t *__restrict nptr, + __gwchar_t **__restrict endptr, int base)) + { +--- libc/sysdeps/generic/machine-sp.h.jj 2001-07-06 06:55:49.000000000 +0200 ++++ libc/sysdeps/generic/machine-sp.h 2006-11-07 11:06:02.000000000 +0100 +@@ -1,5 +1,5 @@ + /* Machine-specific function to return the stack pointer. Stub version. +- Copyright (C) 1994, 1997 Free Software Foundation, Inc. ++ Copyright (C) 1994, 1997, 2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -23,7 +23,7 @@ + /* Return the current stack pointer. */ + + #ifndef _EXTERN_INLINE +-#define _EXTERN_INLINE extern __inline ++#define _EXTERN_INLINE __extern_inline + #endif + + _EXTERN_INLINE void * +--- libc/sysdeps/generic/machine-lock.h.jj 2001-07-06 06:55:49.000000000 +0200 ++++ libc/sysdeps/generic/machine-lock.h 2006-11-07 11:02:08.000000000 +0100 +@@ -1,5 +1,5 @@ + /* Machine-specific definition for spin locks. Stub version. +- Copyright (C) 1994, 1997 Free Software Foundation, Inc. ++ Copyright (C) 1994, 1997, 2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -30,7 +30,7 @@ typedef volatile int __spin_lock_t; + + + #ifndef _EXTERN_INLINE +-#define _EXTERN_INLINE extern __inline ++#define _EXTERN_INLINE __extern_inline + #endif + + /* Unlock LOCK. */ +--- libc/sysdeps/generic/allocalim.h.jj 2002-10-09 11:19:59.000000000 +0200 ++++ libc/sysdeps/generic/allocalim.h 2006-11-07 11:03:22.000000000 +0100 +@@ -1,4 +1,4 @@ +-extern inline int __libc_use_alloca (size_t size) ++__extern_inline int __libc_use_alloca (size_t size) + { + return size <= __MAX_ALLOCA_CUTOFF; + } +--- libc/sysdeps/pthread/aio_misc.c.jj 2006-01-04 00:12:54.000000000 +0100 ++++ libc/sysdeps/pthread/aio_misc.c 2006-11-07 11:06:31.000000000 +0100 +@@ -33,7 +33,7 @@ + #ifndef aio_create_helper_thread + # define aio_create_helper_thread __aio_create_helper_thread + +-extern inline int ++__extern_inline int + __aio_create_helper_thread (pthread_t *threadp, void *(*tf) (void *), void *arg) + { + pthread_attr_t attr; +--- libc/sysdeps/s390/bits/string.h.jj 2005-01-28 22:44:42.000000000 +0100 ++++ libc/sysdeps/s390/bits/string.h 2006-11-07 11:07:05.000000000 +0100 +@@ -1,5 +1,5 @@ + /* Optimized, inlined string functions. S/390 version. +- Copyright (C) 2000, 2001 Free Software Foundation, Inc. ++ Copyright (C) 2000, 2001, 2006 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + This file is part of the GNU C Library. + +@@ -34,7 +34,7 @@ + # ifdef __cplusplus + # define __STRING_INLINE inline + # else +-# define __STRING_INLINE extern __inline ++# define __STRING_INLINE __extern_inline + # endif + #endif + +--- libc/sysdeps/s390/fpu/bits/mathinline.h.jj 2006-02-01 04:00:20.000000000 +0100 ++++ libc/sysdeps/s390/fpu/bits/mathinline.h 2006-11-07 11:07:37.000000000 +0100 +@@ -1,5 +1,5 @@ + /* Inline math functions for s390. +- Copyright (C) 2004 Free Software Foundation, Inc. ++ Copyright (C) 2004, 2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -24,7 +24,7 @@ + #ifdef __cplusplus + # define __MATH_INLINE __inline + #else +-# define __MATH_INLINE extern __inline ++# define __MATH_INLINE __extern_inline + #endif + + #if (!defined __NO_MATH_INLINES || defined __LIBC_INTERNAL_MATH_INLINES) \ +--- libc/sysdeps/powerpc/fpu/bits/mathinline.h.jj 2006-11-06 20:53:15.000000000 +0100 ++++ libc/sysdeps/powerpc/fpu/bits/mathinline.h 2006-11-07 11:08:04.000000000 +0100 +@@ -25,7 +25,7 @@ + #ifdef __cplusplus + # define __MATH_INLINE __inline + #else +-# define __MATH_INLINE extern __inline ++# define __MATH_INLINE __extern_inline + #endif /* __cplusplus */ + + #if defined __GNUC__ && !defined _SOFT_FLOAT +--- libc/sysdeps/x86_64/fpu/bits/mathinline.h.jj 2004-09-08 00:18:59.000000000 +0200 ++++ libc/sysdeps/x86_64/fpu/bits/mathinline.h 2006-11-07 11:10:33.000000000 +0100 +@@ -1,5 +1,5 @@ + /* Inline math functions for x86-64. +- Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. ++ Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Andreas Jaeger <aj@suse.de>, 2002. + +@@ -25,7 +25,7 @@ + #ifdef __cplusplus + # define __MATH_INLINE __inline + #else +-# define __MATH_INLINE extern __inline ++# define __MATH_INLINE __extern_inline + #endif + + +--- libc/sysdeps/sparc/fpu/bits/mathinline.h.jj 2006-01-14 13:09:02.000000000 +0100 ++++ libc/sysdeps/sparc/fpu/bits/mathinline.h 2006-11-07 11:10:57.000000000 +0100 +@@ -131,7 +131,7 @@ + # ifdef __cplusplus + # define __MATH_INLINE __inline + # else +-# define __MATH_INLINE extern __inline ++# define __MATH_INLINE __extern_inline + # endif /* __cplusplus */ + + /* The gcc, version 2.7 or below, has problems with all this inlining +--- libc/sysdeps/unix/bsd/bsd4.4/bits/socket.h.jj 2004-09-11 18:28:10.000000000 +0200 ++++ libc/sysdeps/unix/bsd/bsd4.4/bits/socket.h 2006-11-07 11:12:07.000000000 +0100 +@@ -1,5 +1,5 @@ + /* System-specific socket constants and types. 4.4 BSD version. +- Copyright (C) 1991,92,1994-2002,2004 Free Software Foundation, Inc. ++ Copyright (C) 1991,92,1994-2002,2004,2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -227,7 +227,7 @@ extern struct cmsghdr *__cmsg_nxthdr (st + struct cmsghdr *__cmsg) __THROW; + #ifdef __USE_EXTERN_INLINES + # ifndef _EXTERN_INLINE +-# define _EXTERN_INLINE extern __inline ++# define _EXTERN_INLINE __extern_inline + # endif + _EXTERN_INLINE struct cmsghdr * + __NTH (__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg)) +--- libc/sysdeps/unix/sysv/linux/ia64/ioperm.c.jj 2004-03-18 00:17:58.000000000 +0100 ++++ libc/sysdeps/unix/sysv/linux/ia64/ioperm.c 2006-11-07 11:13:23.000000000 +0100 +@@ -1,4 +1,4 @@ +-/* Copyright (C) 1999, 2000, 2001, 2004 Free Software Foundation, Inc. ++/* Copyright (C) 1999, 2000, 2001, 2004, 2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by David Mosberger-Tang <davidm@hpl.hp.com>. + +@@ -51,7 +51,7 @@ static struct + } + io; + +-__inline__ unsigned long int ++static __always_inline unsigned long int + io_offset (unsigned long int port) + { + return ((port >> 2) << 12) | (port & 0xfff); +--- libc/sysdeps/unix/sysv/linux/bits/socket.h.jj 2006-04-02 19:25:37.000000000 +0200 ++++ libc/sysdeps/unix/sysv/linux/bits/socket.h 2006-11-07 11:15:04.000000000 +0100 +@@ -264,7 +264,7 @@ extern struct cmsghdr *__cmsg_nxthdr (st + struct cmsghdr *__cmsg) __THROW; + #ifdef __USE_EXTERN_INLINES + # ifndef _EXTERN_INLINE +-# define _EXTERN_INLINE extern __inline ++# define _EXTERN_INLINE __extern_inline + # endif + _EXTERN_INLINE struct cmsghdr * + __NTH (__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg)) +--- libc/sysdeps/unix/sysv/linux/bits/sigset.h.jj 2001-07-06 06:56:14.000000000 +0200 ++++ libc/sysdeps/unix/sysv/linux/bits/sigset.h 2006-11-07 11:14:48.000000000 +0100 +@@ -1,5 +1,6 @@ + /* __sig_atomic_t, __sigset_t, and related definitions. Linux version. +- Copyright (C) 1991, 1992, 1994, 1996, 1997 Free Software Foundation, Inc. ++ Copyright (C) 1991, 1992, 1994, 1996, 1997, 2006 ++ Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -43,7 +44,7 @@ typedef struct + # define _SIGSET_H_fns 1 + + # ifndef _EXTERN_INLINE +-# define _EXTERN_INLINE extern __inline ++# define _EXTERN_INLINE __extern_inline + # endif + + /* Return a mask that includes the bit for SIG only. */ +--- libc/sysdeps/unix/sysv/linux/sys/sysmacros.h.jj 2004-09-08 00:18:59.000000000 +0200 ++++ libc/sysdeps/unix/sysv/linux/sys/sysmacros.h 2006-11-07 11:15:53.000000000 +0100 +@@ -0,0 +1,18 @@ ++/* DO NOT EDIT THIS FILE. ++ ++ It has been auto-edited by fixincludes from: ++ ++ "fixinc/tests/inc/sys/sysmacros.h" ++ ++ This had to be done to correct non-standard usages in the ++ original, manufacturer supplied header file. */ ++ ++ ++ ++#if defined( GLIBC_C99_INLINE_4_CHECK ) ++__extension__ ++#if __STDC_VERSION__ < 19901L ++extern ++#endif ++ __inline unsigned int ++#endif /* GLIBC_C99_INLINE_4_CHECK */ +@@ -1,5 +1,6 @@ + /* Definitions of macros to access `dev_t' values. +- Copyright (C) 1996, 1997, 1999, 2003, 2004 Free Software Foundation, Inc. ++ Copyright (C) 1996, 1997, 1999, 2003, 2004, 2006 ++ Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -27,30 +28,30 @@ + they need. */ + #ifdef __GLIBC_HAVE_LONG_LONG + __extension__ +-extern __inline unsigned int gnu_dev_major (unsigned long long int __dev) ++__extern_inline unsigned int gnu_dev_major (unsigned long long int __dev) + __THROW; + __extension__ +-extern __inline unsigned int gnu_dev_minor (unsigned long long int __dev) ++__extern_inline unsigned int gnu_dev_minor (unsigned long long int __dev) + __THROW; + __extension__ +-extern __inline unsigned long long int gnu_dev_makedev (unsigned int __major, ++__extern_inline unsigned long long int gnu_dev_makedev (unsigned int __major, + unsigned int __minor) + __THROW; + + # if defined __GNUC__ && __GNUC__ >= 2 +-__extension__ extern __inline unsigned int ++__extension__ __extern_inline unsigned int + __NTH (gnu_dev_major (unsigned long long int __dev)) + { + return ((__dev >> 8) & 0xfff) | ((unsigned int) (__dev >> 32) & ~0xfff); + } + +-__extension__ extern __inline unsigned int ++__extension__ __extern_inline unsigned int + __NTH (gnu_dev_minor (unsigned long long int __dev)) + { + return (__dev & 0xff) | ((unsigned int) (__dev >> 12) & ~0xff); + } + +-__extension__ extern __inline unsigned long long int ++__extension__ __extern_inline unsigned long long int + __NTH (gnu_dev_makedev (unsigned int __major, unsigned int __minor)) + { + return ((__minor & 0xff) | ((__major & 0xfff) << 8) diff --git a/pkgs/development/libraries/glibc/2.5/glibc-pwd.patch b/pkgs/development/libraries/glibc/2.5/glibc-pwd.patch new file mode 100644 index 000000000000..07039718477f --- /dev/null +++ b/pkgs/development/libraries/glibc/2.5/glibc-pwd.patch @@ -0,0 +1,74 @@ +diff -ruN glibc-20050110/configure glibc-20050110.patched/configure +--- glibc-20050110/configure 2005-01-05 10:39:53.000000000 +0100 ++++ glibc-20050110.patched/configure 2005-01-18 13:33:01.000000000 +0100 +@@ -1393,7 +1393,7 @@ + ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. + + +-if test "`cd $srcdir; /bin/pwd`" = "`/bin/pwd`"; then ++if test "`cd $srcdir; @PWD@`" = "`@PWD@`"; then + { { echo "$as_me:$LINENO: error: you must configure in a separate build directory" >&5 + echo "$as_me: error: you must configure in a separate build directory" >&2;} + { (exit 1); exit 1; }; } +diff -ruN glibc-20050110/io/ftwtest-sh glibc-20050110.patched/io/ftwtest-sh +--- glibc-20050110/io/ftwtest-sh 2004-02-09 21:12:23.000000000 +0100 ++++ glibc-20050110.patched/io/ftwtest-sh 2005-01-18 13:33:15.000000000 +0100 +@@ -120,7 +120,7 @@ + sort > $testout + + # perhaps $tmp involves some symlinks... +-tmpreal=`cd $tmp; /bin/pwd 2>/dev/null || /usr/bin/pwd` ++tmpreal=`cd $tmp; @PWD@ 2>/dev/null || /usr/bin/pwd` + + cat <<EOF | cmp $testout - || exit 1 + base = "$tmp/", file = "ftwtest.d", flag = FTW_D, cwd = $tmpreal, level = 0 +@@ -138,7 +138,7 @@ + EOF + rm $testout + +-curwd=`/bin/pwd 2>/dev/null || /usr/bin/pwd` ++curwd=`@PWD@ 2>/dev/null || /usr/bin/pwd` + cd "$tmp" + LD_LIBRARY_PATH=$objpfx $ldso $testprogram --chdir ftwtest.d | + sort > $testout +@@ -160,7 +160,7 @@ + EOF + rm $testout + +-curwd=`/bin/pwd 2>/dev/null || /usr/bin/pwd` ++curwd=`@PWD@ 2>/dev/null || /usr/bin/pwd` + cd "$tmp" + LD_LIBRARY_PATH=$objpfx $ldso $testprogram --chdir ftwtest.d/. | + sort > $testout +@@ -182,7 +182,7 @@ + EOF + rm $testout + +-curwd=`/bin/pwd 2>/dev/null || /usr/bin/pwd` ++curwd=`@PWD@ 2>/dev/null || /usr/bin/pwd` + cd "$tmp" + LD_LIBRARY_PATH=$objpfx $ldso $testprogram --chdir ftwtest.d/foo/lvl1/link@1 | + sort > $testout +diff -ruN glibc-20050110/scripts/rellns-sh glibc-20050110.patched/scripts/rellns-sh +--- glibc-20050110/scripts/rellns-sh 1999-12-19 00:40:25.000000000 +0100 ++++ glibc-20050110.patched/scripts/rellns-sh 2005-01-18 13:35:53.245937423 +0100 +@@ -22,13 +22,13 @@ + exit 1 + fi + +-if test -x /bin/pwd; then +- pwd=/bin/pwd +-elif test -x /usr/bin/pwd; then +- pwd=/usr/bin/pwd +-else ++#if test -x /bin/pwd; then ++# pwd=/bin/pwd ++#elif test -x /usr/bin/pwd; then ++# pwd=/usr/bin/pwd ++#else + pwd='pwd' +-fi ++#fi + + # Make both paths absolute. + if test -d $1; then diff --git a/pkgs/development/libraries/glibc/2.5/make-3-82-fix.patch b/pkgs/development/libraries/glibc/2.5/make-3-82-fix.patch new file mode 100644 index 000000000000..816e0aa528be --- /dev/null +++ b/pkgs/development/libraries/glibc/2.5/make-3-82-fix.patch @@ -0,0 +1,14 @@ +--- glibc-2.5/manual/Makefile.orig 2011-01-26 17:03:14.000000000 +0100 ++++ glibc-2.5/manual/Makefile 2011-01-26 17:04:30.000000000 +0100 +@@ -232,7 +232,10 @@ + .PHONY: stubs + stubs: $(objpfx)stubs + endif +-$(objpfx)stubs ../po/manual.pot $(objpfx)stamp%: ++$(objpfx)stubs ../po/manual.pot: ++ $(make-target-directory) ++ touch $@ ++$(objpfx)stamp%: + $(make-target-directory) + touch $@ + diff --git a/pkgs/development/libraries/glibc/2.5/x86-fnstsw.patch b/pkgs/development/libraries/glibc/2.5/x86-fnstsw.patch new file mode 100644 index 000000000000..45deb1d2d719 --- /dev/null +++ b/pkgs/development/libraries/glibc/2.5/x86-fnstsw.patch @@ -0,0 +1,32 @@ +# --- T2-COPYRIGHT-NOTE-BEGIN --- +# This copyright note is auto-generated by ./scripts/Create-CopyPatch. +# +# T2 SDE: package/.../glibc/x86-fnstsw.patch +# Copyright (C) 2008 The T2 SDE Project +# +# More information can be found in the files COPYING and README. +# +# This patch file is dual-licensed. It is available under the license the +# patched project is licensed under, as long as it is an OpenSource license +# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms +# of the GNU General Public License as published by the Free Software +# Foundation; either version 2 of the License, or (at your option) any later +# version. +# --- T2-COPYRIGHT-NOTE-END --- + +Fix more strict checking in binutils since 2.18.50.0.3: + sysdeps/i386/fpu/ftestexcept.c:33: Error: suffix or operands invalid for `fnstsw' + + - Rene Rebe <rene@exactcode.de> + +--- glibc-2.6.1/sysdeps/i386/fpu/ftestexcept.c.vanilla 2008-09-02 12:45:07.000000000 +0200 ++++ glibc-2.6.1/sysdeps/i386/fpu/ftestexcept.c 2008-09-02 12:46:37.000000000 +0200 +@@ -26,7 +26,7 @@ + int + fetestexcept (int excepts) + { +- int temp; ++ short temp; + int xtemp = 0; + + /* Get current exceptions. */ diff --git a/pkgs/development/libraries/glibc/2.7/builder.sh b/pkgs/development/libraries/glibc/2.7/builder.sh new file mode 100644 index 000000000000..d5a43229bfaf --- /dev/null +++ b/pkgs/development/libraries/glibc/2.7/builder.sh @@ -0,0 +1,60 @@ +# glibc cannot have itself in its rpath. +export NIX_NO_SELF_RPATH=1 +export NIX_DONT_SET_RPATH=1 + +source $stdenv/setup + +# Explicitly tell glibc to use our pwd, not /bin/pwd. +export PWD_P=$(type -tP pwd) + +# Needed to install share/zoneinfo/zone.tab. +export BASH_SHELL=$SHELL + + +preConfigure() { + + for i in configure io/ftwtest-sh; do + # Can't use substituteInPlace here because replace hasn't been + # built yet in the bootstrap. + sed -i "$i" -e "s^/bin/pwd^$PWD_P^g" + done + + # In the glibc 2.6/2.7 tarballs C-translit.h is a little bit older + # than C-translit.h.in, forcing Make to rebuild it unnecessarily. + # This wouldn't be problem except that it requires Perl, which we + # don't want as a dependency in the Nixpkgs bootstrap. So force + # the output file to be newer. + touch locale/C-translit.h + + mkdir ../build + cd ../build + + configureScript=../$sourceRoot/configure +} + + +postConfigure() { + # Hack: get rid of the `-static' flag set by the bootstrap stdenv. + # This has to be done *after* `configure' because it builds some + # test binaries. + export NIX_CFLAGS_LINK= + export NIX_LDFLAGS_BEFORE= +} + + +postInstall() { + if test -n "$installLocales"; then + make localedata/install-locales + fi + rm $out/etc/ld.so.cache + (cd $out/include && ln -s $kernelHeaders/include/* .) || exit 1 + + # Fix for NIXOS-54 (ldd not working on x86_64). Make a symlink + # "lib64" to "lib". + if test -n "$is64bit"; then + ln -s lib $out/lib64 + fi +} + + +genericBuild diff --git a/pkgs/development/libraries/glibc/2.7/default.nix b/pkgs/development/libraries/glibc/2.7/default.nix new file mode 100644 index 000000000000..7eb34e88899a --- /dev/null +++ b/pkgs/development/libraries/glibc/2.7/default.nix @@ -0,0 +1,57 @@ +{ stdenv, fetchurl, kernelHeaders +, installLocales ? true +, profilingLibraries ? false +}: + +stdenv.mkDerivation { + name = "glibc-2.7"; + builder = ./builder.sh; + + src = fetchurl { + url = mirror://gnu/glibc/glibc-2.7.tar.bz2; + sha256 = "06j5q20l11x8kcrl9bg15xgb1pw0w82pazikxf4zvq2fmhiaa922"; + }; + + inherit kernelHeaders installLocales; + + inherit (stdenv) is64bit; + + patches = [ + /* Fix for NIXPKGS-79: when doing host name lookups, when + nsswitch.conf contains a line like + + hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 + + don't return an error when mdns4_minimal can't be found. This + is a bug in Glibc: when a service can't be found, NSS should + continue to the next service unless "UNAVAIL=return" is set. + ("NOTFOUND=return" refers to the service returning a NOTFOUND + error, not the service itself not being found.) The reason is + that the "status" variable (while initialised to UNAVAIL) is + outside of the loop that iterates over the services, the + "files" service sets status to NOTFOUND. So when the call to + find "mdns4_minimal" fails, "status" will still be NOTFOUND, + and it will return instead of continuing to "dns". Thus, the + line + + hosts: mdns4_minimal [NOTFOUND=return] dns mdns4 + + does work because "status" will contain UNAVAIL after the + failure to find mdns4_minimal. */ + ./nss-skip-unavail.patch + ]; + + # `--with-tls --without-__thread' enables support for TLS but causes + # it not to be used. Required if we don't want to barf on 2.4 + # kernels. Or something. + configureFlags="--enable-add-ons + --with-headers=${kernelHeaders}/include + ${if profilingLibraries then "--enable-profile" else "--disable-profile"}"; + + # Workaround for this bug: + # http://sourceware.org/bugzilla/show_bug.cgi?id=411 + # I.e. when gcc is compiled with --with-arch=i686, then the + # preprocessor symbol `__i686' will be defined to `1'. This causes + # the symbol __i686.get_pc_thunk.dx to be mangled. + NIX_CFLAGS_COMPILE = "-U__i686"; +} diff --git a/pkgs/development/libraries/glibc/2.7/nss-skip-unavail.patch b/pkgs/development/libraries/glibc/2.7/nss-skip-unavail.patch new file mode 100644 index 000000000000..4d29082f9419 --- /dev/null +++ b/pkgs/development/libraries/glibc/2.7/nss-skip-unavail.patch @@ -0,0 +1,25 @@ +diff -rc glibc-2.7-orig/sysdeps/posix/getaddrinfo.c glibc-2.7/sysdeps/posix/getaddrinfo.c +*** glibc-2.7-orig/sysdeps/posix/getaddrinfo.c 2007-10-17 18:05:12.000000000 +0200 +--- glibc-2.7/sysdeps/posix/getaddrinfo.c 2008-04-08 12:17:09.000000000 +0200 +*************** +*** 498,505 **** + int no_data = 0; + int no_inet6_data = 0; + service_user *nip = NULL; +- enum nss_status inet6_status = NSS_STATUS_UNAVAIL; +- enum nss_status status = NSS_STATUS_UNAVAIL; + int no_more; + int old_res_options; + +--- 498,503 ---- +*************** +*** 689,694 **** +--- 687,694 ---- + + while (!no_more) + { ++ enum nss_status inet6_status = NSS_STATUS_UNAVAIL; ++ enum nss_status status = NSS_STATUS_UNAVAIL; + nss_gethostbyname3_r fct = NULL; + if (req->ai_flags & AI_CANONNAME) + /* No need to use this function if we do not look for diff --git a/pkgs/development/libraries/glibc/2.9/binutils-2.20.patch b/pkgs/development/libraries/glibc/2.9/binutils-2.20.patch new file mode 100644 index 000000000000..ab3d6144d6ee --- /dev/null +++ b/pkgs/development/libraries/glibc/2.9/binutils-2.20.patch @@ -0,0 +1,42 @@ +Support GNU Binutils 2.20 and beyond. Patch from +http://sourceware.org/ml/libc-alpha/2009-09/msg00009.html . + +diff --git a/configure b/configure +index 48e6952..b1d84d7 100755 +--- a/configure ++++ b/configure +@@ -4841,7 +4841,7 @@ $as_echo_n "checking version of $AS... " >&6; } + ac_prog_version=`$AS --version 2>&1 | sed -n 's/^.*GNU assembler.* \([0-9]*\.[0-9.]*\).*$/\1/p'` + case $ac_prog_version in + '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; +- 2.1[3-9]*) ++ 2.1[3-9]*|[2-9].[2-9]*) + ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; + *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; + +@@ -4904,7 +4904,7 @@ $as_echo_n "checking version of $LD... " >&6; } + ac_prog_version=`$LD --version 2>&1 | sed -n 's/^.*GNU ld.* \([0-9][0-9]*\.[0-9.]*\).*$/\1/p'` + case $ac_prog_version in + '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; +- 2.1[3-9]*) ++ 2.1[3-9]*|[2-9].[2-9]*) + ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; + *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; + +diff --git a/configure.in b/configure.in +index 4584afe..7c4f71f 100644 +--- a/configure.in ++++ b/configure.in +@@ -897,10 +897,10 @@ AC_SUBST(MIG)dnl Needed by sysdeps/mach/configure.in + # Accept binutils 2.13 or newer. + AC_CHECK_PROG_VER(AS, $AS, --version, + [GNU assembler.* \([0-9]*\.[0-9.]*\)], +- [2.1[3-9]*], AS=: critic_missing="$critic_missing as") ++ [2.1[3-9]*|[2-9].[2-9]*], AS=: critic_missing="$critic_missing as") + AC_CHECK_PROG_VER(LD, $LD, --version, + [GNU ld.* \([0-9][0-9]*\.[0-9.]*\)], +- [2.1[3-9]*], LD=: critic_missing="$critic_missing ld") ++ [2.1[3-9]*|[2-9].[2-9]*], LD=: critic_missing="$critic_missing ld") + + # We need the physical current working directory. We cannot use the + # "pwd -P" shell builtin since that's not portable. Instead we try to diff --git a/pkgs/development/libraries/glibc/2.9/binutils-ld.patch b/pkgs/development/libraries/glibc/2.9/binutils-ld.patch new file mode 100644 index 000000000000..ae70f145ce0d --- /dev/null +++ b/pkgs/development/libraries/glibc/2.9/binutils-ld.patch @@ -0,0 +1,33 @@ +From 7c8a67320e26b8c11108bf0a3410d3aef9cf3486 Mon Sep 17 00:00:00 2001 +From: Ulrich Drepper <drepper@redhat.com> +Date: Sat, 31 Jan 2009 00:21:15 +0000 +Subject: [PATCH] * elf/Makefile (ld.so): Adjust the sed script to insert _begin in to + + newer linker scripts. +--- + ChangeLog | 5 +++++ + elf/Makefile | 4 ++-- + 2 files changed, 7 insertions(+), 2 deletions(-) + +diff --git a/elf/Makefile b/elf/Makefile +index 8079fe9..e44ff1d 100644 +--- a/elf/Makefile ++++ b/elf/Makefile +@@ -1,4 +1,4 @@ +-# Copyright (C) 1995-2007, 2008 Free Software Foundation, Inc. ++# Copyright (C) 1995-2007, 2008, 2009 Free Software Foundation, Inc. + # This file is part of the GNU C Library. + + # The GNU C Library is free software; you can redistribute it and/or +@@ -304,7 +304,7 @@ $(objpfx)ld.so: $(objpfx)librtld.os $(ld-map) + $(LDFLAGS-rtld) -Wl,-z,defs -Wl,--verbose 2>&1 | \ + LC_ALL=C \ + sed -e '/^=========/,/^=========/!d;/^=========/d' \ +- -e 's/\. = 0 + SIZEOF_HEADERS;/& _begin = . - SIZEOF_HEADERS;/' \ ++ -e 's/\. = .* + SIZEOF_HEADERS;/& _begin = . - SIZEOF_HEADERS;/' \ + > $@.lds + $(LINK.o) -nostdlib -nostartfiles -shared -o $@ \ + $(LDFLAGS-rtld) -Wl,-z,defs $(z-now-$(bind-now)) \ +-- +1.6.4 + diff --git a/pkgs/development/libraries/glibc/2.9/builder.sh b/pkgs/development/libraries/glibc/2.9/builder.sh new file mode 100644 index 000000000000..c81a3ac2a9e9 --- /dev/null +++ b/pkgs/development/libraries/glibc/2.9/builder.sh @@ -0,0 +1,85 @@ +# Glibc cannot have itself in its RPATH. +export NIX_NO_SELF_RPATH=1 + +source $stdenv/setup + +# Explicitly tell glibc to use our pwd, not /bin/pwd. +export PWD_P=$(type -tP pwd) + +# Needed to install share/zoneinfo/zone.tab. Set to impure /bin/sh to +# prevent a retained dependency on the bootstrap tools in the +# stdenv-linux bootstrap. +export BASH_SHELL=/bin/sh + + +preConfigure() { + + for i in configure io/ftwtest-sh; do + # Can't use substituteInPlace here because replace hasn't been + # built yet in the bootstrap. + sed -i "$i" -e "s^/bin/pwd^$PWD_P^g" + done + + # In the glibc 2.6/2.7 tarballs C-translit.h is a little bit older + # than C-translit.h.in, forcing Make to rebuild it unnecessarily. + # This wouldn't be problem except that it requires Perl, which we + # don't want as a dependency in the Nixpkgs bootstrap. So force + # the output file to be newer. + touch locale/C-translit.h + + tar xvjf "$srcPorts" + + if test -n "$crossConfig"; then + sed -i s/-lgcc_eh//g Makeconfig + fi + + mkdir build + cd build + + configureScript=../configure + if test -n "$crossConfig"; then + cat > config.cache << "EOF" +libc_cv_forced_unwind=yes +libc_cv_c_cleanup=yes +libc_cv_gnu89_inline=yes +EOF + export BUILD_CC=gcc + export CC="${crossConfig}-gcc" + export AR="${crossConfig}-ar" + export RANLIB="${crossConfig}-ranlib" + configureFlags="${configureFlags} --cache-file=config.cache" + + # Disable the native stripping, because it breaks libc_nonshared.a + dontStrip=1 + fi +} + + +postConfigure() { + # Hack: get rid of the `-static' flag set by the bootstrap stdenv. + # This has to be done *after* `configure' because it builds some + # test binaries. + export NIX_CFLAGS_LINK= + export NIX_LDFLAGS_BEFORE= + + export NIX_DONT_SET_RPATH=1 + unset CFLAGS +} + + +postInstall() { + if test -n "$installLocales"; then + make localedata/install-locales + fi + test -f $out/etc/ld.so.cache && rm $out/etc/ld.so.cache + (cd $out/include && ln -s $kernelHeaders/include/* .) || exit 1 + + # Fix for NIXOS-54 (ldd not working on x86_64). Make a symlink + # "lib64" to "lib". + if test -n "$is64bit"; then + ln -s lib $out/lib64 + fi +} + + +genericBuild diff --git a/pkgs/development/libraries/glibc/2.9/default.nix b/pkgs/development/libraries/glibc/2.9/default.nix new file mode 100644 index 000000000000..b778743147e6 --- /dev/null +++ b/pkgs/development/libraries/glibc/2.9/default.nix @@ -0,0 +1,103 @@ +{ stdenv, fetchurl, kernelHeaders +, installLocales ? true +, profilingLibraries ? false +, gccCross ? null +}: +let + cross = if gccCross != null then gccCross.target else null; +in +stdenv.mkDerivation rec { + name = "glibc-2.9" + + stdenv.lib.optionalString (cross != null) "-${cross.config}"; + + builder = ./builder.sh; + + src = fetchurl { + url = http://ftp.gnu.org/gnu/glibc/glibc-2.9.tar.bz2; + sha256 = "0v53m7flx6qcx7cvrvvw6a4dx4x3y6k8nvpc4wfv5xaaqy2am2q9"; + }; + + srcPorts = fetchurl { + url = http://ftp.gnu.org/gnu/glibc/glibc-ports-2.9.tar.bz2; + sha256 = "0r2sn527wxqifi63di7ns9wbjh1cainxn978w178khhy7yw9fk42"; + }; + + inherit kernelHeaders installLocales; + crossConfig = if (cross != null) then cross.config else null; + + inherit (stdenv) is64bit; + + patches = [ + /* Fix for NIXPKGS-79: when doing host name lookups, when + nsswitch.conf contains a line like + + hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 + + don't return an error when mdns4_minimal can't be found. This + is a bug in Glibc: when a service can't be found, NSS should + continue to the next service unless "UNAVAIL=return" is set. + ("NOTFOUND=return" refers to the service returning a NOTFOUND + error, not the service itself not being found.) The reason is + that the "status" variable (while initialised to UNAVAIL) is + outside of the loop that iterates over the services, the + "files" service sets status to NOTFOUND. So when the call to + find "mdns4_minimal" fails, "status" will still be NOTFOUND, + and it will return instead of continuing to "dns". Thus, the + line + + hosts: mdns4_minimal [NOTFOUND=return] dns mdns4 + + does work because "status" will contain UNAVAIL after the + failure to find mdns4_minimal. */ + ./nss-skip-unavail.patch + + /* Make it possible to override the locale-archive in NixOS. */ + ./locale-override.patch + + /* Have rpcgen(1) look for cpp(1) in $PATH. */ + ./rpcgen-path.patch + + /* Support GNU Binutils 2.20 and above. */ + ./binutils-2.20.patch + + ./binutils-ld.patch + ]; + + configureFlags = [ + "--enable-add-ons" + "--with-headers=${kernelHeaders}/include" + (if profilingLibraries then "--enable-profile" else "--disable-profile") + ] ++ stdenv.lib.optionals (cross != null) [ + "--with-tls" + "--enable-kernel=2.6.0" + "--without-fp" + "--with-__thread" + ] ++ (if (stdenv.system == "armv5tel-linux") then [ + "--host=arm-linux-gnueabi" + "--build=arm-linux-gnueabi" + "--without-fp" + ] else []); + + buildNativeInputs = stdenv.lib.optionals (cross != null) [ gccCross ]; + + preInstall = if (cross != null) then '' + mkdir -p $out/lib + ln -s ${stdenv.gcc.gcc}/lib/libgcc_s.so.1 $out/lib/libgcc_s.so.1 + '' else ""; + + postInstall = if (cross != null) then '' + rm $out/lib/libgcc_s.so.1 + '' else ""; + + # Workaround for this bug: + # http://sourceware.org/bugzilla/show_bug.cgi?id=411 + # I.e. when gcc is compiled with --with-arch=i686, then the + # preprocessor symbol `__i686' will be defined to `1'. This causes + # the symbol __i686.get_pc_thunk.dx to be mangled. + NIX_CFLAGS_COMPILE = "-U__i686"; + + meta = { + homepage = http://www.gnu.org/software/libc/; + description = "The GNU C Library"; + }; +} diff --git a/pkgs/development/libraries/glibc/2.9/headers.nix b/pkgs/development/libraries/glibc/2.9/headers.nix new file mode 100644 index 000000000000..adb9a22f4810 --- /dev/null +++ b/pkgs/development/libraries/glibc/2.9/headers.nix @@ -0,0 +1,63 @@ +{ stdenv, fetchurl, kernelHeaders +, profilingLibraries ? false +}: + +stdenv.mkDerivation rec { + name = "glibc-headers-2.9"; + + builder = ./headersbuilder.sh; + + src = fetchurl { + url = http://ftp.gnu.org/gnu/glibc/glibc-2.9.tar.bz2; + sha256 = "0v53m7flx6qcx7cvrvvw6a4dx4x3y6k8nvpc4wfv5xaaqy2am2q9"; + }; + + srcPorts = fetchurl { + url = http://ftp.gnu.org/gnu/glibc/glibc-ports-2.9.tar.bz2; + sha256 = "0r2sn527wxqifi63di7ns9wbjh1cainxn978w178khhy7yw9fk42"; + }; + + inherit kernelHeaders; + + inherit (stdenv) is64bit; + + patches = [ + /* Support GNU Binutils 2.20 and above. */ + ./binutils-2.20.patch + ]; + + configureFlags = [ + "--enable-add-ons" + "--with-headers=${kernelHeaders}/include" + "--disable-sanity-checks" + "--enable-hacker-mode" + (if profilingLibraries then "--enable-profile" else "--disable-profile") + ] ++ (if (stdenv.system == "armv5tel-linux") then [ + "--host=arm-linux-gnueabi" + "--build=arm-linux-gnueabi" + "--without-fp" + ] else []); + + buildPhase = "true"; + + # I took some tricks from crosstool-0.43 + installPhase = '' + make cross-compiling=yes CFLAGS=-DBOOTSTRAP_GCC install-headers + mkdir -p $out/include/gnu + touch $out/include/gnu/stubs.h + cp ../include/features.h $out/include/features.h + (cd $out/include && ln -s $kernelHeaders/include/* .) || exit 1 + ''; + + # Workaround for this bug: + # http://sourceware.org/bugzilla/show_bug.cgi?id=411 + # I.e. when gcc is compiled with --with-arch=i686, then the + # preprocessor symbol `__i686' will be defined to `1'. This causes + # the symbol __i686.get_pc_thunk.dx to be mangled. + NIX_CFLAGS_COMPILE = "-U__i686"; + + meta = { + homepage = http://www.gnu.org/software/libc/; + description = "The GNU C Library"; + }; +} diff --git a/pkgs/development/libraries/glibc/2.9/headersbuilder.sh b/pkgs/development/libraries/glibc/2.9/headersbuilder.sh new file mode 100644 index 000000000000..23f4bd4cc619 --- /dev/null +++ b/pkgs/development/libraries/glibc/2.9/headersbuilder.sh @@ -0,0 +1,38 @@ +# Glibc cannot have itself in its RPATH. +export NIX_NO_SELF_RPATH=1 + +source $stdenv/setup + +# Explicitly tell glibc to use our pwd, not /bin/pwd. +export PWD_P=$(type -tP pwd) + +# Needed to install share/zoneinfo/zone.tab. Set to impure /bin/sh to +# prevent a retained dependency on the bootstrap tools in the +# stdenv-linux bootstrap. +export BASH_SHELL=/bin/sh + + +preConfigure() { + + for i in configure io/ftwtest-sh; do + # Can't use substituteInPlace here because replace hasn't been + # built yet in the bootstrap. + sed -i "$i" -e "s^/bin/pwd^$PWD_P^g" + done + + # In the glibc 2.6/2.7 tarballs C-translit.h is a little bit older + # than C-translit.h.in, forcing Make to rebuild it unnecessarily. + # This wouldn't be problem except that it requires Perl, which we + # don't want as a dependency in the Nixpkgs bootstrap. So force + # the output file to be newer. + touch locale/C-translit.h + + tar xvjf "$srcPorts" + + mkdir build + cd build + + configureScript=../configure +} + +genericBuild diff --git a/pkgs/development/libraries/glibc/2.9/info.nix b/pkgs/development/libraries/glibc/2.9/info.nix new file mode 100644 index 000000000000..cc79bbece3d2 --- /dev/null +++ b/pkgs/development/libraries/glibc/2.9/info.nix @@ -0,0 +1,47 @@ +{ stdenv, fetchurl, texinfo, perl }: + +stdenv.mkDerivation rec { + name = "glibc-info-2.9"; + + src = fetchurl { + url = http://nixos.org/tarballs/glibc-2.9-20081208.tar.bz2; + sha256 = "0zhxbgcsl97pf349m0lz8d5ljvvzrcqc23yf08d888xlk4ms8m3h"; + }; + + patches = [ + /* Support GNU Binutils 2.20 and above. */ + ./binutils-2.20.patch + ]; + + preConfigure = '' + export PWD_P=$(type -tP pwd) + for i in configure io/ftwtest-sh; do + # Can't use substituteInPlace here because replace hasn't been + # built yet in the bootstrap. + sed -i "$i" -e "s^/bin/pwd^$PWD_P^g" + done + mkdir ../build + cd ../build + + configureScript=../$sourceRoot/configure + ''; + + configureFlags = [ "--enable-add-ons" ]; + + buildInputs = [ texinfo perl ]; + + buildPhase = "make info"; + + # I don't know why the info is not generated in 'build' + # Somehow building the info still does not work, because the final + # libc.info hasn't a Top node. + installPhase = '' + mkdir -p $out/share/info + cp ../$sourceRoot/manual/*.info $out/share/info + ''; + + meta = { + homepage = http://www.gnu.org/software/libc/; + description = "Locale information for the GNU C Library"; + }; +} diff --git a/pkgs/development/libraries/glibc/2.9/locale-override.patch b/pkgs/development/libraries/glibc/2.9/locale-override.patch new file mode 100644 index 000000000000..108d0e35dacf --- /dev/null +++ b/pkgs/development/libraries/glibc/2.9/locale-override.patch @@ -0,0 +1,72 @@ +diff -rc glibc-2.9-20081208-orig/locale/loadarchive.c glibc-2.9-20081208/locale/loadarchive.c +*** glibc-2.9-20081208-orig/locale/loadarchive.c 2005-09-09 18:56:52.000000000 +0200 +--- glibc-2.9-20081208/locale/loadarchive.c 2009-04-19 13:54:26.000000000 +0200 +*************** +*** 124,129 **** +--- 124,142 ---- + } + + ++ static int ++ open_locale_archive () ++ { ++ int fd = -1; ++ char *path = getenv ("LOCALE_ARCHIVE"); ++ if (path) ++ fd = open_not_cancel_2 (path, O_RDONLY|O_LARGEFILE); ++ if (fd < 0) ++ fd = open_not_cancel_2 (archfname, O_RDONLY|O_LARGEFILE); ++ return fd; ++ } ++ ++ + /* Find the locale *NAMEP in the locale archive, and return the + internalized data structure for its CATEGORY data. If this locale has + already been loaded from the archive, just returns the existing data +*************** +*** 203,209 **** + archmapped = &headmap; + + /* The archive has never been opened. */ +! fd = open_not_cancel_2 (archfname, O_RDONLY|O_LARGEFILE); + if (fd < 0) + /* Cannot open the archive, for whatever reason. */ + return NULL; +--- 216,222 ---- + archmapped = &headmap; + + /* The archive has never been opened. */ +! fd = open_locale_archive (); + if (fd < 0) + /* Cannot open the archive, for whatever reason. */ + return NULL; +*************** +*** 394,400 **** + if (fd == -1) + { + struct stat64 st; +! fd = open_not_cancel_2 (archfname, O_RDONLY|O_LARGEFILE); + if (fd == -1) + /* Cannot open the archive, for whatever reason. */ + return NULL; +--- 407,413 ---- + if (fd == -1) + { + struct stat64 st; +! fd = open_locale_archive (); + if (fd == -1) + /* Cannot open the archive, for whatever reason. */ + return NULL; +diff -rc glibc-2.9-20081208-orig/sysdeps/generic/unsecvars.h glibc-2.9-20081208/sysdeps/generic/unsecvars.h +*** glibc-2.9-20081208-orig/sysdeps/generic/unsecvars.h 2006-10-11 18:24:05.000000000 +0200 +--- glibc-2.9-20081208/sysdeps/generic/unsecvars.h 2009-04-19 13:55:34.000000000 +0200 +*************** +*** 16,21 **** +--- 16,22 ---- + "LD_SHOW_AUXV\0" \ + "LD_USE_LOAD_BIAS\0" \ + "LOCALDOMAIN\0" \ ++ "LOCALE_ARCHIVE\0" \ + "LOCPATH\0" \ + "MALLOC_TRACE\0" \ + "NIS_PATH\0" \ diff --git a/pkgs/development/libraries/glibc/2.9/locales.nix b/pkgs/development/libraries/glibc/2.9/locales.nix new file mode 100644 index 000000000000..c7b1bb2bff0a --- /dev/null +++ b/pkgs/development/libraries/glibc/2.9/locales.nix @@ -0,0 +1,67 @@ +/* This function builds just the `lib/locale/locale-archive' file from + Glibc and nothing else. If `allLocales' is true, all supported + locales are included; otherwise, just the locales listed in + `locales'. See localedata/SUPPORTED in the Glibc source tree for + the list of all supported locales: + http://sourceware.org/cgi-bin/cvsweb.cgi/libc/localedata/SUPPORTED?cvsroot=glibc +*/ + +{ stdenv, fetchurl, allLocales ? true, locales ? ["en_US.UTF-8/UTF-8"] }: + +stdenv.mkDerivation rec { + name = "glibc-locales-2.9"; + + builder = ./localesbuilder.sh; + + src = fetchurl { + url = http://ftp.gnu.org/gnu/glibc/glibc-2.9.tar.bz2; + sha256 = "0v53m7flx6qcx7cvrvvw6a4dx4x3y6k8nvpc4wfv5xaaqy2am2q9"; + }; + + srcPorts = fetchurl { + url = http://ftp.gnu.org/gnu/glibc/glibc-ports-2.9.tar.bz2; + sha256 = "0r2sn527wxqifi63di7ns9wbjh1cainxn978w178khhy7yw9fk42"; + }; + + inherit (stdenv) is64bit; + + configureFlags = [ + "--enable-add-ons" + "--without-headers" + "--disable-profile" + ] ++ (if (stdenv.system == "armv5tel-linux") then [ + "--host=arm-linux-gnueabi" + "--build=arm-linux-gnueabi" + "--without-fp" + ] else []); + + patches = [ + /* Support GNU Binutils 2.20 and above. */ + ./binutils-2.20.patch + ]; + + # Awful hack: `localedef' doesn't allow the path to `locale-archive' + # to be overriden, but you *can* specify a prefix, i.e. it will use + # <prefix>/<path-to-glibc>/lib/locale/locale-archive. So we use + # $TMPDIR as a prefix, meaning that the locale-archive is placed in + # $TMPDIR/nix/store/...-glibc-.../lib/locale/locale-archive. + buildPhase = + '' + mkdir -p $TMPDIR/"$(dirname $(readlink -f $(type -p localedef)))/../lib/locale" + make localedata/install-locales \ + LOCALEDEF="localedef --prefix=$TMPDIR" \ + localedir=$out/lib/locale \ + ${if allLocales then "" else "SUPPORTED-LOCALES=\"${toString locales}\""} + ''; + + installPhase = + '' + mkdir -p $out/lib/locale + cp $TMPDIR/nix/store/*/lib/locale/locale-archive $out/lib/locale/ + ''; + + meta = { + homepage = http://www.gnu.org/software/libc/; + description = "Locale information for the GNU C Library"; + }; +} diff --git a/pkgs/development/libraries/glibc/2.9/localesbuilder.sh b/pkgs/development/libraries/glibc/2.9/localesbuilder.sh new file mode 100644 index 000000000000..a28f6bcbaeb3 --- /dev/null +++ b/pkgs/development/libraries/glibc/2.9/localesbuilder.sh @@ -0,0 +1,50 @@ +# Glibc cannot have itself in its RPATH. +export NIX_NO_SELF_RPATH=1 + +source $stdenv/setup + +# Explicitly tell glibc to use our pwd, not /bin/pwd. +export PWD_P=$(type -tP pwd) + +# Needed to install share/zoneinfo/zone.tab. Set to impure /bin/sh to +# prevent a retained dependency on the bootstrap tools in the +# stdenv-linux bootstrap. +export BASH_SHELL=/bin/sh + + +preConfigure() { + + for i in configure io/ftwtest-sh; do + # Can't use substituteInPlace here because replace hasn't been + # built yet in the bootstrap. + sed -i "$i" -e "s^/bin/pwd^$PWD_P^g" + done + + # In the glibc 2.6/2.7 tarballs C-translit.h is a little bit older + # than C-translit.h.in, forcing Make to rebuild it unnecessarily. + # This wouldn't be problem except that it requires Perl, which we + # don't want as a dependency in the Nixpkgs bootstrap. So force + # the output file to be newer. + touch locale/C-translit.h + + tar xvjf "$srcPorts" + + mkdir build + cd build + + configureScript=../configure +} + + +postConfigure() { + # Hack: get rid of the `-static' flag set by the bootstrap stdenv. + # This has to be done *after* `configure' because it builds some + # test binaries. + export NIX_CFLAGS_LINK= + export NIX_LDFLAGS_BEFORE= + + export NIX_DONT_SET_RPATH=1 + unset CFLAGS +} + +genericBuild diff --git a/pkgs/development/libraries/glibc/2.9/nss-skip-unavail.patch b/pkgs/development/libraries/glibc/2.9/nss-skip-unavail.patch new file mode 100644 index 000000000000..dc09b5098707 --- /dev/null +++ b/pkgs/development/libraries/glibc/2.9/nss-skip-unavail.patch @@ -0,0 +1,25 @@ +diff -rc glibc-2.9-20081208-orig/sysdeps/posix/getaddrinfo.c glibc-2.9-20081208/sysdeps/posix/getaddrinfo.c +*** glibc-2.9-20081208-orig/sysdeps/posix/getaddrinfo.c 2008-07-30 21:14:22.000000000 +0200 +--- glibc-2.9-20081208/sysdeps/posix/getaddrinfo.c 2008-12-10 11:39:32.000000000 +0100 +*************** +*** 505,512 **** + int no_data = 0; + int no_inet6_data = 0; + service_user *nip = NULL; +- enum nss_status inet6_status = NSS_STATUS_UNAVAIL; +- enum nss_status status = NSS_STATUS_UNAVAIL; + int no_more; + int old_res_options; + +--- 505,510 ---- +*************** +*** 702,707 **** +--- 700,707 ---- + + while (!no_more) + { ++ enum nss_status inet6_status = NSS_STATUS_UNAVAIL; ++ enum nss_status status = NSS_STATUS_UNAVAIL; + nss_gethostbyname4_r fct4 + = __nss_lookup_function (nip, "gethostbyname4_r"); + if (fct4 != NULL) diff --git a/pkgs/development/libraries/glibc/2.9/rpcgen-path.patch b/pkgs/development/libraries/glibc/2.9/rpcgen-path.patch new file mode 100644 index 000000000000..fbb03dd5fade --- /dev/null +++ b/pkgs/development/libraries/glibc/2.9/rpcgen-path.patch @@ -0,0 +1,72 @@ +By default, rpcgen(1) looks for cpp(1) from a list of fixed absolute paths +(`/lib/cpp', etc.), which may only be overrided with the `-Y' option. This +patch makes it run any `cpp' command found in $PATH. + +--- glibc-2.7/sunrpc/rpc_main.c 2006-11-10 21:54:46.000000000 +0100 ++++ glibc-2.7/sunrpc/rpc_main.c 2009-04-22 14:32:10.000000000 +0200 +@@ -79,7 +79,7 @@ static const char *cmdname; + + static const char *svcclosetime = "120"; + static int cppDefined; /* explicit path for C preprocessor */ +-static const char *CPP = SUNOS_CPP; ++static const char *CPP = "cpp"; + static const char CPPFLAGS[] = "-C"; + static char *pathbuf; + static int cpp_pid; +@@ -108,7 +108,6 @@ static char *extendfile (const char *fil + static void open_output (const char *infile, const char *outfile); + static void add_warning (void); + static void clear_args (void); +-static void find_cpp (void); + static void open_input (const char *infile, const char *define); + static int check_nettype (const char *name, const char *list_to_check[]); + static void c_output (const char *infile, const char *define, +@@ -327,31 +326,6 @@ clear_args (void) + argcount = FIXEDARGS; + } + +-/* make sure that a CPP exists */ +-static void +-find_cpp (void) +-{ +- struct stat buf; +- +- if (stat (CPP, &buf) < 0) +- { /* /lib/cpp or explicit cpp does not exist */ +- if (cppDefined) +- { +- fprintf (stderr, _ ("cannot find C preprocessor: %s \n"), CPP); +- crash (); +- } +- else +- { /* try the other one */ +- CPP = SVR4_CPP; +- if (stat (CPP, &buf) < 0) +- { /* can't find any cpp */ +- fputs (_ ("cannot find any C preprocessor (cpp)\n"), stdout); +- crash (); +- } +- } +- } +-} +- + /* + * Open input file with given define for C-preprocessor + */ +@@ -370,7 +344,6 @@ open_input (const char *infile, const ch + switch (cpp_pid) + { + case 0: +- find_cpp (); + putarg (0, CPP); + putarg (1, CPPFLAGS); + addarg (define); +@@ -380,7 +353,7 @@ open_input (const char *infile, const ch + close (1); + dup2 (pd[1], 1); + close (pd[0]); +- execv (arglist[0], (char **) arglist); ++ execvp (arglist[0], (char **) arglist); + perror ("execv"); + exit (1); + case -1: |