Merge pull request #265307 from reckenrode/clang16-fixes-batch2
rubyPackages.iconv, v8: fix build with clang 16
This commit is contained in:
commit
023d20ae64
4 changed files with 110 additions and 1 deletions
|
@ -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: {
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
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;
|
|
@ -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.
|
||||
|
|
|
@ -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 { };
|
||||
|
||||
|
|
Loading…
Reference in a new issue