Hi Gerald and everybody,
As you know I had a lot of problems building Embperl on Aix. I've managed to build
everything correctly but DIDN'T TEST IT YET with Apache2/mod_perl2.
I have a LOT OF QUESTIONS and hope to get some answers. :-)
I first tried to build Embperl from CPAN:
'install HTML::Embperl'
It fetches the files and extracts them in cpan builds directory. Fine. Then I assume
it runs 'perl Makefile.PL' and execute it soon after (AM I RIGHT ABOUT THIS?)
When compiling from CPAN, i get to many typemap errors :
/usr/local/bin/perl /usr/local/lib/perl5/5.8.2/ExtUtils/xsubpp -typemap
/usr/local/lib/perl5/5.8.2/ExtUtils/typemap -typemap typemap xs/Embperl/App/App.xs >
xs/Embperl/App/App.xsc && mv xs/Embperl/App/App.xsc xs/Embperl/App/App.c Can't find
typemap in /root/.cpan/build/Embperl-2.0b10/xs/Embperl/App
*** Error code 2
Every subdirectory under /xs/ has the same problem, so I had to go under :
/App
/Component
/Req
/Syntax
/Thread
And do 'perl Makefile.PL && make'
(NOTE that I ran 'clean HTML::Embperl' in CPAN shell to be able to 'make
HTML::Embperl' again, and I ran these makes AFTER the clean)
First, why I have to manually compile everything under the xs directories by hand? I
noticed that running the Makefile only creates a .c file? Could anyone explain me what
is the use of directories under /xs?
Ok. After compiling in these subdirectories by hand, I ran 'make HTML::Embperl' again.
Now I have another problem. All the .c files under /xs subdirectories reference to
some header files in the top-level source directory:
snippet from a .c file under /xs/App/ directory :
#include "ep.h"
#include "epmacro.h"
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "eptypes.h"
#include "eppublic.h"
#include "epdat2.h"
#include "ep_xs_sv_convert.h"
#include "ep_xs_typedefs.h"
When running 'make HTML::Embperl' in CPAN shell, these .h files aren't found and it
returns errors. However, when running make on the top-level Makefile to install
Embperl by hand, I have NO SUCH ERRORS. Could anyone tell me what makes the difference
here?
To solve my problem (I wanted to build Embperl with CPAN at all cost) : I copied the
top-level header files (ep.h, epmacro.h, etc.) to EACH /xs subdirectory and their
respective /Config subdirectory. Could I have done that more intelligently? (ex. make
it look in the top-level directory to find the header files?)
Running 'make HTML::Embperl' was then compiling these .c correctly. GOOD!
The last error I got was missing symbols :
Writing Embperl.bs
chmod 644 Embperl.bs
rm -f blib/arch/auto/Embperl/Embperl.so
LD_RUN_PATH="" ld -bhalt:4 -bM:SRE
-bI:/usr/local/lib/perl5/5.8.3/aix/CORE/perl.exp -bE:Embperl.exp -bnoentry -lc
-L/usr/local/lib Embperl.o epmain.o epio.o epchar.o eputil.o epeval.o epmem.o epinit.o
epcgiinit.o epcmd2.o epparse.o epdom.o epcomp.o epcache.o epprovider.o mod_embperl.o
epapfilter.o xs/Embperl/App/App.o xs/Embperl/App/Config/Config.o
xs/Embperl/Component/Component.o xs/Embperl/Component/Config/Config.o
xs/Embperl/Component/Param/Param.o xs/Embperl/Component/Output/Output.o
xs/Embperl/Req/Req.o xs/Embperl/Req/Config/Config.o xs/Embperl/Req/Param/Param.o
xs/Embperl/Thread/Thread.o xs/Embperl/Syntax/Syntax.o -brtl -L/usr/local/lib -b32 -o
blib/arch/auto/Embperl/Embperl.so
ld: 0711-317 ERROR: Undefined symbol: .apr_palloc
ld: 0711-317 ERROR: Undefined symbol: .ap_rputc
ld: 0711-317 ERROR: Undefined symbol: .ap_rflush
ld: 0711-317 ERROR: Undefined symbol: .ap_rwrite
ld: 0711-317 ERROR: Undefined symbol: .ap_setup_client_block
ld: 0711-317 ERROR: Undefined symbol: .ap_should_client_block
ld: 0711-317 ERROR: Undefined symbol: .ap_get_client_block
ld: 0711-317 ERROR: Undefined symbol: .apr_pstrdup
ld: 0711-317 ERROR: Undefined symbol: .apr_table_add
ld: 0711-317 ERROR: Undefined symbol: .apr_table_set
ld: 0711-317 ERROR: Undefined symbol: .apr_table_elts
ld: 0711-317 ERROR: Undefined symbol: .ap_log_error
ld: 0711-317 ERROR: Undefined symbol: .ap_hook_open_logs
ld: 0711-317 ERROR: Undefined symbol: .ap_exists_config_define
ld: 0711-317 ERROR: Undefined symbol: .apr_pool_create_ex
ld: 0711-317 ERROR: Undefined symbol: .ap_add_version_component
ld: 0711-317 ERROR: Undefined symbol: .apr_table_get
ld: 0711-317 ERROR: Undefined symbol: .apr_table_do
ld: 0711-317 ERROR: Undefined symbol: .ap_sub_req_lookup_uri
ld: 0711-317 ERROR: Undefined symbol: .apr_pstrcat
ld: 0711-317 ERROR: Undefined symbol: .ap_sub_req_lookup_file
ld: 0711-317 ERROR: Undefined symbol: .ap_run_sub_req
ld: 0711-317 ERROR: Undefined symbol: .ap_destroy_sub_req
ld: 0711-317 ERROR: Undefined symbol: .apr_brigade_destroy
ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.
make: The error code from the last command is 8.
As Gerald told me, it is probably a linker issue, maybe because the Aix ld doesn't
work the same way? (why anyway?)
That were I was really stucked building Embperl from CPAN. So I resigned to build
Embperl directly from the sources, and modify the top-level Makefile to add the
missing symbols :
Snippet from the top-level Makefile that I had modified :
LD = ld
LDDLFLAGS = -bhalt:4 -bM:SRE -bI:$(PERL_INC)/perl.exp /usr/local/apache2/lib/apr.exp
/usr/local/apache2/lib/aprutil.exp /usr/local/apache2/modules/httpd.exp
-bE:$(BASEEXT).exp -bnoentry -lc -L/usr/local/lib
I added every .exp file found under my apache2 directory (apr.exp, aprutil.exp and
httpd.exp)
Could you explain what .exp file are and why the few found under /apache2/ are related
to Embperl. I know that they are 'symbol files' but what is the big deal with symbol
files? (I have a little experience with C)
I ran make again and it compiled and linked everything smoothly. I soon after ran
'make install' and I will test Embperl later today.
Here is the summary of questions I would like to have answers :
1. What's the advantage of Makefile.PL files? Could you have written only a simple
Makefile?
2. What is the use of all the .c files (generated by Makefile) under /xs
subdirectories (/App, /Component, /Syntax, etc)
3. Why I have to manually build the .c files in these subdirectories before building
from CPAN and I am not required to do so if I compile Embperl myself?
4. Why did I have to copy the top-level header files (ep.h, epmacro.h, etc) in these
subdirectories for CPAN to compile correctly and I were not required to do so when
compiling Embperl myself?
5. Could I had fixed the missing header files by making CPAN look in the top-level
directory? How?
6. What are .exp files. Why does Embperl need to be linked with .exp files found under
/Apache2/, what is the big deal behind .exp files?
You might want to answer "Look, it works if you build Embperl yourself, why bother
with CPAN?"
I just want to UNDERSTAND in what CPAN builds the software differently. As far as I
know, It would use the SAME top-level Makefile to build Embperl; I don't understand
why building from CPAN forces me to compile /xs subdirectories by and and gives me
missing headers errors, and running the Makefile manually don't return me these
errors.
Well, if I have answer to these 6 main questions, I will feel better and maybe sleep
better tonight :-)
I will test Embperl against Apache2/mod_perl2 on this Aix box later today. Will keep
you posted.
Thank you VERY MUCH for your great support and for taking time to answer my questions.
It is very appreciated.
Best regards,
Steve Hemond
Programmeur Analyste / Analyst Programmer
Smurfit-Stone, Ressources Foresti�res
La Tuque, P.Q.
Tel.: (819) 676-8100 X2833
[EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]