Hi,
the attached patch should fix the build with perl 5.36:
- adapt to renamed HVhek_UNSHARED
- adjust for changes in the complement operation
Best,
Benjamin Lorenz
On 03/07/2022 16.33, Niko Tyni wrote:
Source: polymake
Version: 4.6-3
Tags: ftbfs
User: [email protected]
Usertags: perl-5.36-transition
This package fails to build from source with Perl 5.36 (currently in
experimental.)
Build log at
http://perl.debian.net/rebuild-logs/perl-5.36-throwaway/polymake_4.6-3/polymake_4.6-3_amd64-2022-06-09T09:42:58Z.build
Excerpt:
FAILED:
/<<PKGBUILDDIR>>/build/Opt/lib/perlx/5.36.0/x86_64-linux-gnu-thread-multi/RefHash.o
g++ -c -o /<<PKGBUILDDIR>>/build/Opt/lib/perlx/5.36.0/x86_64-linux-gnu-thread-multi/RefHash.o -MMD -MT
/<<PKGBUILDDIR>>/build/Opt/lib/perlx/5.36.0/x86_64-linux-gnu-thread-multi/RefHash.o -MF
/<<PKGBUILDDIR>>/build/Opt/lib/perlx/5.36.0/x86_64-linux-gnu-thread-multi/RefHash.o.d -fPIC -pipe -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=.
-fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -std=c++14 -ftemplate-depth-200 -fno-strict-aliasing -fopenmp -Wshadow
-Wlogical-op -Wconversion -Wzero-as-null-pointer-constant -Wno-parentheses -Wno-error=unused-function -Wno-stringop-overflow -Wno-array-bounds -Wno-maybe-uninitialized
-Wno-free-nonheap-object -DPOLYMAKE_WITH_FLINT -DPOLYMAKE_DEBUG=0 -DNDEBUG -O2 -I/usr/lib/x86_64-linux-gnu/perl/5.36/CORE -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fwrapv
-fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DPerlVersion=5360 -Wno-nonnull
-I/<<PKGBUILDDIR>>/include/core-wrappers -I/<<PKGBUILDDIR>>/include/core
/<<PKGBUILDDIR>>/build/perlx/5.36.0/x86_64-linux-gnu-thread-multi/RefHash.cc && : 'COMPILER_USED=11.3.0'
/<<PKGBUILDDIR>>/lib/core/src/perl/RefHash.xxs: In member function ‘SV*
pm::perl::glue::{anonymous}::tmp_keysv::set(SV*)’:
/<<PKGBUILDDIR>>/lib/core/src/perl/RefHash.xxs:74:22: error:
‘HVhek_UNSHARED’ was not declared in this scope; did you mean ‘HVhek_NOTSHARED’?
74 | HEK_FLAGS(hekp) = HVhek_UNSHARED;
| ^~~~~~~~~~~~~~
| HVhek_NOTSHARED
[954/965] g++ -c -o /<<PKGBUILDDIR>>/build/Opt/lib/perlx/5.36.0/x86_64-linux-gnu-thread-multi/Poly.o -MMD -MT
/<<PKGBUILDDIR>>/build/Opt/lib/perlx/5.36.0/x86_64-linux-gnu-thread-multi/Poly.o -MF
/<<PKGBUILDDIR>>/build/Opt/lib/perlx/5.36.0/x86_64-linux-gnu-thread-multi/Poly.o.d -fPIC -pipe -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=.
-fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -std=c++14 -ftemplate-depth-200 -fno-strict-aliasing -fopenmp -Wshadow
-Wlogical-op -Wconversion -Wzero-as-null-pointer-constant -Wno-parentheses -Wno-error=unused-function -Wno-stringop-overflow -Wno-array-bounds -Wno-maybe-uninitialized
-Wno-free-nonheap-object -DPOLYMAKE_WITH_FLINT -DPOLYMAKE_DEBUG=0 -DNDEBUG -O2 -I/usr/lib/x86_64-linux-gnu/perl/5.36/CORE -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fwrapv
-fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DPerlVersion=5360 -Wno-nonnull
-I/<<PKGBUILDDIR>>/include/core-wrappers -I/<<PKGBUILDDIR>>/include/core
/<<PKGBUILDDIR>>/build/perlx/5.36.0/x86_64-linux-gnu-thread-multi/Poly.cc && : 'COMPILER_USED=11.3.0'
[955/965] g++ -c -o /<<PKGBUILDDIR>>/build/Opt/lib/perlx/5.36.0/x86_64-linux-gnu-thread-multi/RuleGraph.o -MMD -MT
/<<PKGBUILDDIR>>/build/Opt/lib/perlx/5.36.0/x86_64-linux-gnu-thread-multi/RuleGraph.o -MF
/<<PKGBUILDDIR>>/build/Opt/lib/perlx/5.36.0/x86_64-linux-gnu-thread-multi/RuleGraph.o.d -fPIC -pipe -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=.
-fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -std=c++14 -ftemplate-depth-200 -fno-strict-aliasing -fopenmp -Wshadow
-Wlogical-op -Wconversion -Wzero-as-null-pointer-constant -Wno-parentheses -Wno-error=unused-function -Wno-stringop-overflow -Wno-array-bounds -Wno-maybe-uninitialized
-Wno-free-nonheap-object -DPOLYMAKE_WITH_FLINT -DPOLYMAKE_DEBUG=0 -DNDEBUG -O2 -I/usr/lib/x86_64-linux-gnu/perl/5.36/CORE -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fwrapv
-fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DPerlVersion=5360 -Wno-nonnull
-I/<<PKGBUILDDIR>>/include/core-wrappers -I/<<PKGBUILDDIR>>/include/core
/<<PKGBUILDDIR>>/build/perlx/5.36.0/x86_64-linux-gnu-thread-multi/RuleGraph.cc && : 'COMPILER_USED=11.3.0'
ninja: build stopped: subcommand failed.
make[1]: *** [debian/rules:56: override_dh_auto_build] Error 1
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
make: *** [debian/rules:35: build] Error 2
diff --git a/lib/core/src/perl/RefHash.xxs b/lib/core/src/perl/RefHash.xxs
index f6087a10aa..fbf7309a50 100644
--- a/lib/core/src/perl/RefHash.xxs
+++ b/lib/core/src/perl/RefHash.xxs
@@ -71,7 +71,11 @@ SV* tmp_keysv::set(SV* keysv)
Copy(obj.keyp, HEK_KEY(hekp), sizeof(SV*), char);
HEK_LEN(hekp) = sizeof(SV*);
HEK_HASH(hekp) = U32(obj.keyl >> 4); // hash value
+#if defined(HVhek_NOTSHARED)
+ HEK_FLAGS(hekp) = HVhek_NOTSHARED;
+#else
HEK_FLAGS(hekp) = HVhek_UNSHARED;
+#endif
sv.sv_any = &xpv;
sv.sv_refcnt = 1;
sv.sv_flags = SVt_PVIV | SVf_IVisUV | SVf_POK | SVp_POK | PmFlagsForHashKey;
diff --git a/lib/core/src/perl/namespaces.xxs b/lib/core/src/perl/namespaces.xxs
index 4d86cc174b..54c032eff3 100644
--- a/lib/core/src/perl/namespaces.xxs
+++ b/lib/core/src/perl/namespaces.xxs
@@ -24,7 +24,7 @@ namespace pm { namespace perl { namespace glue {
namespace {
Perl_check_t def_ck_CONST, def_ck_ENTERSUB, def_ck_LEAVESUB, def_ck_LEAVEEVAL,
- def_ck_GV, def_ck_RV2SV, def_ck_RV2AV, def_ck_RV2HV, def_ck_RV2CV, def_ck_ANONCODE, def_ck_PRINT, def_ck_SYSTEM;
+ def_ck_GV, def_ck_RV2SV, def_ck_RV2AV, def_ck_RV2HV, def_ck_RV2CV, def_ck_ANONCODE, def_ck_PRINT, def_ck_SYSTEM, def_ck_COMPLEMENT;
Perl_ppaddr_t def_pp_GV, def_pp_GVSV, def_pp_AELEMFAST, def_pp_PADAV, def_pp_SPLIT, def_pp_LEAVESUB, def_pp_ANONCODE,
def_pp_ENTEREVAL, def_pp_REGCOMP, def_pp_NEXTSTATE, def_pp_DBSTATE, def_pp_ANONLIST, def_pp_SASSIGN, def_pp_PRINT;
@@ -1615,7 +1615,7 @@ OP* intercept_ck_negate(pTHX_ OP* o)
return o;
}
-OP* intercept_ck_anonlist(pTHX_ OP* o)
+OP* intercept_ck_anonlist_complement(pTHX_ OP* o)
{
OP* a = cUNOPo->op_first;
if (a->op_type == OP_ANONLIST && (a->op_flags & OPf_SPECIAL)) {
@@ -1624,10 +1624,10 @@ OP* intercept_ck_anonlist(pTHX_ OP* o)
OP* new_op = construct_const_creation_optree(aTHX_ op_descr, a, false);
clear_bit_flags(o->op_flags, OPf_KIDS);
FreeOp(o);
- o = new_op;
+ return new_op;
}
}
- return o;
+ return def_ck_COMPLEMENT(aTHX_ o);
}
OP* pp_print_bool(pTHX)
@@ -4018,7 +4018,7 @@ PPCODE:
Perl_croak(aTHX_ "subroutine reference expected");
AV* op_descr = newAV();
SV* reset_sv = newSVuv((UV)PL_check[OP_COMPLEMENT]);
- SV* catch_sv = newSVuv((UV)&intercept_ck_anonlist);
+ SV* catch_sv = newSVuv((UV)&intercept_ck_anonlist_complement);
av_extend(op_descr, intercept_op_last);
av_store(op_descr, intercept_op_code, newSViv(OP_COMPLEMENT));
av_store(op_descr, intercept_op_subref, SvREFCNT_inc_simple_NN(subr));
@@ -4456,6 +4456,7 @@ BOOT:
def_ck_ANONCODE = PL_check[OP_ANONCODE];
def_ck_PRINT = PL_check[OP_PRINT];
def_ck_SYSTEM = PL_check[OP_SYSTEM];
+ def_ck_COMPLEMENT= PL_check[OP_COMPLEMENT];
def_kw_plugin = PL_keyword_plugin;
pm::perl::ops::init_globals(aTHX);