diff options
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/libidn2')
3 files changed, 100 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/libraries/libidn2/default.nix b/nixpkgs/pkgs/development/libraries/libidn2/default.nix new file mode 100644 index 000000000000..724778999f5f --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/libidn2/default.nix @@ -0,0 +1,50 @@ +{ fetchurl, lib, stdenv, libiconv, libunistring, help2man, texinfo, buildPackages }: + +# Note: this package is used for bootstrapping fetchurl, and thus +# cannot use fetchpatch! All mutable patches (generated by GitHub or +# cgit) that are needed here should be included directly in Nixpkgs as +# files. + +with lib; + +stdenv.mkDerivation rec { + pname = "libidn2"; + version = "2.3.2"; + + src = fetchurl { + url = "mirror://gnu/gnu/libidn/${pname}-${version}.tar.gz"; + sha256 = "sha256-dpQM1Od46Ak1eanRlbJf/16Tbp3GJCBoUotDenZ2T5E="; + }; + + strictDeps = true; + # Beware: non-bootstrap libidn2 is overridden by ./hack.nix + outputs = [ "bin" "dev" "out" "info" "devdoc" ]; + + patches = optional stdenv.isDarwin ./fix-error-darwin.patch; + + enableParallelBuilding = true; + + # The above patch causes the documentation to be regenerated, so the + # documentation tools are required. + nativeBuildInputs = optionals stdenv.isDarwin [ help2man texinfo ]; + buildInputs = [ libunistring ] ++ optional stdenv.isDarwin libiconv; + depsBuildBuild = [ buildPackages.stdenv.cc ]; + + meta = { + homepage = "https://www.gnu.org/software/libidn/#libidn2"; + description = "Free software implementation of IDNA2008 and TR46"; + + longDescription = '' + Libidn2 is believed to be a complete IDNA2008 and TR46 implementation, + but has yet to be as extensively used as the IDNA2003 Libidn library. + + The installed C library libidn2 is dual-licensed under LGPLv3+|GPLv2+, + while the rest of the package is GPLv3+. See the file COPYING for + detailed information. + ''; + + license = with lib.licenses; [ lgpl3Plus gpl2Plus gpl3Plus ]; + platforms = lib.platforms.all; + maintainers = with lib.maintainers; [ fpletz ]; + }; +} diff --git a/nixpkgs/pkgs/development/libraries/libidn2/fix-error-darwin.patch b/nixpkgs/pkgs/development/libraries/libidn2/fix-error-darwin.patch new file mode 100644 index 000000000000..e2202abd947c --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/libidn2/fix-error-darwin.patch @@ -0,0 +1,20 @@ +diff --git a/src/idn2.c b/src/idn2.c +index 6abbc72..804f0f2 100644 +--- a/src/idn2.c ++++ b/src/idn2.c +@@ -31,7 +31,6 @@ + #include <unistr.h> + + /* Gnulib headers. */ +-#include "error.h" + #include "gettext.h" + #define _(String) dgettext (PACKAGE, String) + #include "progname.h" +@@ -222,7 +219,7 @@ main (int argc, char *argv[]) + } + + if (ferror (stdin)) +- error (EXIT_FAILURE, errno, "%s", _("input error")); ++ perror (_("input error")); + + cmdline_parser_free (&args_info); diff --git a/nixpkgs/pkgs/development/libraries/libidn2/no-bootstrap-reference.nix b/nixpkgs/pkgs/development/libraries/libidn2/no-bootstrap-reference.nix new file mode 100644 index 000000000000..e5922073437d --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/libidn2/no-bootstrap-reference.nix @@ -0,0 +1,30 @@ +{ stdenv, lib, libidn2, libunistring, runCommandLocal, patchelf }: +# Construct a copy of libidn2.* where all (transitive) libc references (in .bin) +# get replaced by a new one, so that there's no reference to bootstrap tools. +runCommandLocal + "${libidn2.pname}-${libidn2.version}" + { + outputs = [ "bin" "dev" "out" ]; + passthru = { + inherit (libidn2) out info devdoc; # no need to touch these store paths + }; + } + '' + cp -r '${libidn2.bin}' "$bin" + chmod +w "$bin"/bin/* + patchelf \ + --set-interpreter '${stdenv.cc.bintools.dynamicLinker}' \ + --set-rpath '${lib.concatMapStringsSep ":" (p: lib.getLib p + "/lib") + [ stdenv.cc.libc libunistring libidn2 ]}' \ + "$bin"/bin/* + + cp -r '${libidn2.dev}' "$dev" + chmod +w "$dev"/nix-support/propagated-build-inputs + substituteInPlace "$dev"/nix-support/propagated-build-inputs \ + --replace '${libidn2.bin}' "$bin" + substituteInPlace "$dev"/lib/pkgconfig/libidn2.pc \ + --replace '${libidn2.dev}' "$dev" + + ln -s '${libidn2.out}' "$out" # it's hard to be without any $out + '' + |