Unverified Commit 023d20ae authored by Weijia Wang's avatar Weijia Wang Committed by GitHub
Browse files

Merge pull request #265307 from reckenrode/clang16-fixes-batch2

rubyPackages.iconv, v8: fix build with clang 16
parents 7d2381f7 2c4e2d81
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -369,7 +369,12 @@ in
  };

  iconv = attrs: {
    dontBuild = false;
    buildFlags = lib.optional stdenv.isDarwin "--with-iconv-dir=${libiconv}";
    patches = [
      # Fix incompatible function pointer conversion errors with clang 16
      ./iconv-fix-incompatible-function-pointer-conversions.patch
    ];
  };

  idn-ruby = attrs: {
+51 −0
Original line number Diff line number Diff line
diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c
index 2801049..77fae7e 100644
--- a/ext/iconv/iconv.c
+++ b/ext/iconv/iconv.c
@@ -188,7 +188,7 @@ static VALUE iconv_convert _((iconv_t cd, VALUE str, long start, long length, in
 static VALUE iconv_s_allocate _((VALUE klass));
 static VALUE iconv_initialize _((int argc, VALUE *argv, VALUE self));
 static VALUE iconv_s_open _((int argc, VALUE *argv, VALUE self));
-static VALUE iconv_s_convert _((struct iconv_env_t* env));
+static VALUE iconv_s_convert _((VALUE env));
 static VALUE iconv_s_iconv _((int argc, VALUE *argv, VALUE self));
 static VALUE iconv_init_state _((VALUE cd));
 static VALUE iconv_finish _((VALUE self));
@@ -204,7 +204,7 @@ static VALUE charset_map;
  * Returns the map from canonical name to system dependent name.
  */
 static VALUE
-charset_map_get(void)
+charset_map_get(VALUE klass)
 {
     return charset_map;
 }
@@ -642,7 +642,7 @@ iconv_s_allocate(VALUE klass)
 }
 
 static VALUE
-get_iconv_opt_i(VALUE i, VALUE arg)
+get_iconv_opt_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, arg))
 {
     VALUE name;
 #if defined ICONV_SET_TRANSLITERATE || defined ICONV_SET_DISCARD_ILSEQ
@@ -784,8 +784,9 @@ iconv_s_open(int argc, VALUE *argv, VALUE self)
 }
 
 static VALUE
-iconv_s_convert(struct iconv_env_t* env)
+iconv_s_convert(VALUE env_value)
 {
+    struct iconv_env_t* env = (struct iconv_env_t*)env_value;
     VALUE last = 0;
 
     for (; env->argc > 0; --env->argc, ++env->argv) {
@@ -906,7 +907,7 @@ list_iconv(unsigned int namescount, const char *const *names, void *data)
 
 #if defined(HAVE_ICONVLIST) || defined(HAVE___ICONV_FREE_LIST)
 static VALUE
-iconv_s_list(void)
+iconv_s_list(VALUE klass)
 {
 #ifdef HAVE_ICONVLIST
     int state;
+44 −0
Original line number Diff line number Diff line
@@ -42,6 +42,50 @@ rec {
    stdenv.override (prev: { allowedRequisites = null; extraBuildInputs = (prev.extraBuildInputs or []) ++ pkgs; });


  # Override the libc++ dynamic library used in the stdenv to use the one from the platform’s
  # default stdenv. This allows building packages and linking dependencies with different
  # compiler versions while still using the same libc++ implementation for compatibility.
  #
  # Note that this adapter still uses the headers from the new stdenv’s libc++. This is necessary
  # because older compilers may not be able to parse the headers from the default stdenv’s libc++.
  overrideLibcxx = stdenv:
    assert stdenv.cc.libcxx != null;
    let
      llvmLibcxxVersion = lib.getVersion llvmLibcxx;
      stdenvLibcxxVersion = lib.getVersion stdenvLibcxx;

      stdenvLibcxx = pkgs.stdenv.cc.libcxx;
      stdenvCxxabi = pkgs.stdenv.cc.libcxx.cxxabi;

      llvmLibcxx = stdenv.cc.libcxx;
      llvmCxxabi = stdenv.cc.libcxx.cxxabi;

      libcxx = pkgs.runCommand "${stdenvLibcxx.name}-${llvmLibcxxVersion}" {
        outputs = [ "out" "dev" ];
        inherit cxxabi;
        isLLVM = true;
      } ''
        mkdir -p "$dev/nix-support"
        ln -s '${stdenvLibcxx}' "$out"
        echo '${stdenvLibcxx}' > "$dev/nix-support/propagated-build-inputs"
        ln -s '${lib.getDev llvmLibcxx}/include' "$dev/include"
      '';

      cxxabi = pkgs.runCommand "${stdenvCxxabi.name}-${llvmLibcxxVersion}" {
        outputs = [ "out" "dev" ];
        inherit (stdenvCxxabi) libName;
      } ''
        mkdir -p "$dev/nix-support"
        ln -s '${stdenvCxxabi}' "$out"
        echo '${stdenvCxxabi}' > "$dev/nix-support/propagated-build-inputs"
        ln -s '${lib.getDev llvmCxxabi}/include' "$dev/include"
      '';
    in
    overrideCC stdenv (stdenv.cc.override {
      inherit libcxx;
      extraPackages = [ cxxabi pkgs.pkgsTargetTarget."llvmPackages_${lib.versions.major llvmLibcxxVersion}".compiler-rt ];
    });

  # Override the setup script of stdenv.  Useful for testing new
  # versions of the setup script without causing a rebuild of
  # everything.
+10 −1
Original line number Diff line number Diff line
@@ -25481,7 +25481,16 @@ with pkgs;
  ucommon = callPackage ../development/libraries/ucommon { };
  v8 = darwin.apple_sdk_11_0.callPackage ../development/libraries/v8 { };
  v8 = callPackage ../development/libraries/v8 (
    let
      stdenv' = if stdenv.cc.isClang && lib.versionAtLeast (lib.getVersion stdenv.cc.cc) "16"
        then overrideLibcxx llvmPackages_15.stdenv
        else stdenv;
    in
    {
      stdenv = if stdenv'.isDarwin then overrideSDK stdenv' "11.0" else stdenv';
    }
  );
  intel-vaapi-driver = callPackage ../development/libraries/intel-vaapi-driver { };