Issues with compiling libembperl-perl from source on Debian 12 Bookworm
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
Reply to: