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);

Reply via email to