My company recently took ownership of a project/website that was
utilizes Apache, mod_perl, and Apache::ePerl on a Linux box. While I'm
familiar with Apache, mod_perl, and other embedding methods (Embperl to
name one), I'm new to ePerl.
I don't have access to the original server, and I've been asked to build
a Linux/Apache/mod_perl/ePerl box from scratch. After a very basic
RedHat install (to avoid RPM dependancy hell), I successfully built Perl
5.6.1 and Apache 1.3.26 with mod_perl 1.27 and mod_ssl 2.8.10 all from
source tarballs. Unfortunately on my last step, I'm having trouble
building ePerl from the 2.2.14 or 2.2.13 tarballs.
I'm attempting to build the integrated Perl 5 modules (Parse::* and
Apache::ePerl, etc.). The first step, "perl Makefile.PL" works fine.
However, I get the following error when doing "make":
[gregg@litlink eperl-2.2.14]$ perl Makefile.PL
Configuring for ePerl 2.2.14 (02-08-1998)
Now please type 'make' to compile. Good luck.
[gregg@litlink eperl-2.2.14]$ make
./configure --with-perl=/usr/local/bin/perl
Configuring for ePerl 2.2.14 (02-08-1998)
creating cache ./config.cache
__ CHECK: Configuration of Perl Language __
checking for Perl language... /usr/local/bin/perl v
Latest Perl found on your system is ,
but at least Perl version 5.003 is required.
In case the newer one is not in PATH, just use
the option --with-perl=/path/to/bin/perl to
provide the correct executable.
configure: error: Perl version too old
make[1]: Entering directory `/home/gregg/eperl-2.2.14'
make[1]: *** No rule to make target `libeperl.a'. Stop.
make[1]: Leaving directory `/home/gregg/eperl-2.2.14'
make: *** [all] Error 2
I came to the conclusion that Perl 5.6.1 produces a different output
from its "perl -v" argument than version 5.003 for example. So I went
into the "configure" file, and I edited line 574 to read
'perlvers="5.6.1"'. That didn't work, and produced a similar error to
the one described above, so I edited the line to read 'perlvers="5.003"'.
This time, it began making the files, but it stoped with a compiler error:
cd mod && make
make[1]: Entering directory `/home/gregg/eperl-2.2.14/mod'
make[2]: Entering directory `/home/gregg/eperl-2.2.14/mod/Parse'
cp ePerl.pm ../blib/lib/Parse/ePerl.pm
AutoSplitting ../blib/lib/Parse/ePerl.pm (../blib/lib/auto/Parse/ePerl)
/usr/local/bin/perl -I/usr/local/lib/perl5/5.6.1/i686-linux
-I/usr/local/lib/perl5/5.6.1 /usr/local/lib/perl5/5.6.1/ExtUtils/xsubpp
-typemap /usr/local/lib/perl5/5.6.1/ExtUtils/typemap ePerl.xs >
ePerl.xsc && mv ePerl.xsc ePerl.c
cc -c -I/home/gregg/eperl-2.2.14 -fno-strict-aliasing
-I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2
-DVERSION=\"2.0214\" -DXS_VERSION=\"2.0214\" -fpic
-I/usr/local/lib/perl5/5.6.1/i686-linux/CORE ePerl.c
In file included from ePerl.xs:49:
/home/gregg/eperl-2.2.14/eperl_proto.h:84: parse error before
`__extension__'
/home/gregg/eperl-2.2.14/eperl_proto.h:84: parse error before `n'
/home/gregg/eperl-2.2.14/eperl_proto.h:84: parse error before `if'
/home/gregg/eperl-2.2.14/eperl_proto.h:84: conflicting types for `__retval'
/home/gregg/eperl-2.2.14/eperl_proto.h:84: previous declaration of
`__retval'
/home/gregg/eperl-2.2.14/eperl_proto.h:84: `__len' undeclared here (not
in a function)
/home/gregg/eperl-2.2.14/eperl_proto.h:84: warning: initialization makes
integer from pointer without a cast
/home/gregg/eperl-2.2.14/eperl_proto.h:84: initializer element is not
constant
/home/gregg/eperl-2.2.14/eperl_proto.h:84: warning: data definition has
no type or storage class
/home/gregg/eperl-2.2.14/eperl_proto.h:84: parse error before `if'
/home/gregg/eperl-2.2.14/eperl_proto.h:84: redefinition of `__retval'
/home/gregg/eperl-2.2.14/eperl_proto.h:84: `__retval' previously defined
here
/home/gregg/eperl-2.2.14/eperl_proto.h:84: parse error before `char'
/home/gregg/eperl-2.2.14/eperl_proto.h:84: warning: data definition has
no type or storage class
/home/gregg/eperl-2.2.14/eperl_proto.h:84: warning: data definition has
no type or storage class
/home/gregg/eperl-2.2.14/eperl_proto.h:84: parse error before `}'
make[2]: *** [ePerl.o] Error 1
make[2]: Leaving directory `/home/gregg/eperl-2.2.14/mod/Parse'
make[1]: *** [subdirs] Error 2
make[1]: Leaving directory `/home/gregg/eperl-2.2.14/mod'
make: *** [all] Error 2
I'm using gcc version 2.96 2731 (Red Hat Linux 7.3 2.96-110). While
I can hack Perl, I know little of C. I know ePerl-2.2.14 was released in
1998, so it wasn't written with version 5.6.1 of Perl or gcc 2.96 in
mind. Is there a way to build ePerl with a modern Linux distro? Am I
doing something wrong, or must I use an older version of Perl and/or gcc?
Many thanks,
Gregg Casillo