Issues with compiling libembperl-perl from source on Debian 12 Bookworm

Neil Gunton <[email protected]>
Newsgroups gmane.linux.debian.devel.perl
Message-ID <[email protected]>
Hi, I am having an issue with Embperl as supplied by Debian Bookworm src 
package.

It completes the compile, albeit with some warnings, and my website 
(which has been running since 2000) mostly seems to work. However there 
is an issue with the [$ hidden $] meta command. It comes up with this in 
the Apache log:

Warning in Perl code: Use of uninitialized value in subroutine entry

This is for the line which has [$ hidden $]. I am aware that sometimes 
line numbers are a little skewed, but when I remove the [$ hidden $] 
line this warning goes away, so I'm pretty sure it is actually about 
that command.

The strange thing is, other meta commands like [$ foreach $] do work, in 
fact most of Embperl seems to be working as expected (the home page on 
my site is quite complex, and it renders with no warnings now).

One quirk I noticed is that there are now many warnings from my code, 
which didn't happen before on Debian Stretch (which I have just been 
upgrading from). All of these warnings are related to uninitialized 
variables, whereas previously Perl would quietly initialize, now it 
gives me a warning. Which means I have to go through many hundreds of 
instances where code like this gives a warning:

if ($fdat{page} ne '')

This gives a warning now if $fdat{page} isn't instantiated ($fdat is ok, 
just 'page' doesn't exist in that hash). I have to fix it by doing

if (defined($fdat{page}) && $fdat{page} ne '')

... which is a bit of a pain, and makes the code more complex, but I 
don't know if it's maybe a good thing by and large since I guess Perl is 
just being more rigorous. Anyway, I can stand this, it's not a huge deal.

The [$ hidden $] warning is more of a problem, since that is core 
Embperl functionality.

Also there is an error in the 'make test' for the Embperl src package, 
as follows:

PERL_DL_NONLAZY=0 "/usr/bin/perl" "-Iblib/lib" "-Iblib/arch" test.pl

loading...                    ok

Testing offline mode...

#0 ascii...                                       ok
#1 pure.htm...                                    ok
#2 nooutput.htm...                                ok
#3 nooutput.htm...                                ok
#4 plain.htm...                                   ok
#5 plain.htm...                                   ok
#6 plain.htm...                                   ok
#7 plainblock.htm...                              ok
#8 plainblock.htm...                              ok
#15 error.htm...                                  ok
#16 error.htm...                                  ok
#17 error.htm...                                  ok
#27 errormismatch.htm...

Expected 1 more error(s) in logfile

Input:        test/html/errormismatch.htm
Output:        test/tmp/out.htm
Log:        test/tmp/test.log
Testparameter:
   version = 2
   errors = 1

  ERRORS detected! NOT all tests have been passed successfully

cat: test/tmp/httpd.pid: No such file or directory
make: *** [Makefile:1453: test_dynamic] Error 1

I disregarded this initially and just installed the package to see if it 
would work anyway, which it largely does. I know this is considered 
unwise in general, but in my defense, historically there have been 
issues with the 'make test' on Embperl, it often appears to fail whereas 
the package is actually working just fine. So I learned to kind of skip 
the test errors, as they often turned out to be problems with the test 
suite itself rather than the actual package.

The original author of the package, Gerald Richter, doesn't appear to 
interact on the Embperl mailing list any more. I haven't had any 
response from that list either, since yesterday at least. I wrote to one 
of the maintainers listed on the libembperl-perl page for Debian, and 
they told me to write to this list. I hope someone can give me some 
guidance on how to fix these issues, as Embperl is a very important 
package for me, it's central to my website.

I am using a new install of Debian 12 Bookworm, and Apache is built from 
source using latest tarballs from Apache (2.4.57) APR (1.7.0) and 
mod_perl (2.0.12). Perl is reported as 5.36 as per Bookworm. Some of the 
warnings during the compile of Embperl:

x86_64-linux-gnu-gcc -c  -I/usr/local/httpd_perl/include 
-I/usr/local/httpd_perl/regex -I/usr/local/httpd_perl/os/unix 
-I/usr/local/apr/include/apr-1 -I/usr/src/libembperl-perl-2.5.0/xs 
-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fwrapv -fno-strict-aliasing -pipe 
-I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 
-I/usr/lib/x86_64-linux-gnu/perl/5.36/CORE -DMOD_PERL -DMP_COMPAT_1X 
-fgnu89-inline -DLINUX  -O2 -g   -DVERSION=\"2.5.0\" 
-DXS_VERSION=\"2.5.0\" -fPIC 
"-I/usr/lib/x86_64-linux-gnu/perl/5.36/CORE"  -DAPACHE -DAPACHE2 -DEP2 
-o Embperl.o Embperl.c
x86_64-linux-gnu-gcc -c  -I/usr/local/httpd_perl/include 
-I/usr/local/httpd_perl/regex -I/usr/local/httpd_perl/os/unix 
-I/usr/local/apr/include/apr-1 -I/usr/src/libembperl-perl-2.5.0/xs 
-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fwrapv -fno-strict-aliasing -pipe 
-I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 
-I/usr/lib/x86_64-linux-gnu/perl/5.36/CORE -DMOD_PERL -DMP_COMPAT_1X 
-fgnu89-inline -DLINUX  -O2 -g   -DVERSION=\"2.5.0\" 
-DXS_VERSION=\"2.5.0\" -fPIC 
"-I/usr/lib/x86_64-linux-gnu/perl/5.36/CORE"  -DAPACHE -DAPACHE2 -DEP2 
-o epmain.o epmain.c
epmain.c: In function ‘DoLogError’:
epmain.c:70:14: warning: assignment to ‘PerlInterpreter *’ {aka ‘struct 
interpreter *’} from incompatible pointer type ‘struct perl_thread *’ 
[-Wincompatible-pointer-types]
    70 |         aTHX = r -> pPerlTHX ;
       |              ^
epmain.c:72:14: warning: assignment to ‘PerlInterpreter *’ {aka ‘struct 
interpreter *’} from incompatible pointer type ‘struct perl_thread *’ 
[-Wincompatible-pointer-types]
    72 |         aTHX = a -> pPerlTHX ;
       |              ^
In file included from ep.h:195,
                  from epmain.c:19:
epmain.c: In function ‘CreateSessionCookie’:
eppriv.h:24:22: warning: initialization of ‘PerlInterpreter *’ {aka 
‘struct interpreter *’} from incompatible pointer type ‘struct 
perl_thread *’ [-Wincompatible-pointer-types]
    24 | #define epTHX pTHX = r -> pPerlTHX
       |                      ^
epmain.c:488:5: note: in expansion of macro ‘epTHX’
   488 |     epTHX ;
       |     ^~~~~
epmain.c: In function ‘ResetRequest’:
eppriv.h:24:22: warning: initialization of ‘PerlInterpreter *’ {aka 
‘struct interpreter *’} from incompatible pointer type ‘struct 
perl_thread *’ [-Wincompatible-pointer-types]
    24 | #define epTHX pTHX = r -> pPerlTHX
       |                      ^
epmain.c:622:5: note: in expansion of macro ‘epTHX’
   622 |     epTHX ;
       |     ^~~~~
epmain.c: In function ‘StartOutput’:
eppriv.h:24:22: warning: initialization of ‘PerlInterpreter *’ {aka 
‘struct interpreter *’} from incompatible pointer type ‘struct 
perl_thread *’ [-Wincompatible-pointer-types]
    24 | #define epTHX pTHX = r -> pPerlTHX
       |                      ^
eppriv.h:27:16: note: in expansion of macro ‘epTHX’
    27 | #define epTHX_ epTHX ;
       |                ^~~~~
epmain.c:680:5: note: in expansion of macro ‘epTHX_’
   680 |     epTHX_
       |     ^~~~~~

More like that, I can capture the lot if it would help, but that gives 
an idea.

Thanks,

Neil Gunton
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.