RE: Building mod-perl 2 for cygwin
Unfortunately, I get the same (as far as I can see) result. Here's my latest perl -V ... [perl-5.8.0]$ perl -V Summary of my perl5 (revision 5.0 version 8 subversion 0) configuration: Platform: osname=cygwin, osvers=1.3.19(0.7132), archname=cygwin-thread-multi-64int uname='cygwin_nt-5.1 au-stb-mobile 1.3.19(0.7132) 2003-01-23 21:31 i686 unkn own unknown cygwin ' config_args='-Duse64bitint -Doptimize=-O2 -Dman3ext=3pm -Dusemultiplicity -D usethreads -Duselargefiles' hint=recommended, useposix=true, d_sigaction=define usethreads=define use5005threads=undef useithreads=define usemultiplicity=de fine useperlio=define d_sfio=undef uselargefiles=define usesocks=undef use64bitint=define use64bitall=undef uselongdouble=undef usemymalloc=y, bincompat5005=undef Compiler: cc='gcc', ccflags ='-DPERL_USE_SAFE_PUTENV -fno-strict-aliasing', optimize='-O2', cppflags='-DPERL_USE_SAFE_PUTENV -fno-strict-aliasing' ccversion='', gccversion='3.2 20020927 (prerelease)', gccosandvers='' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=12345678 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12 ivtype='long long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lsee ksize=4 alignbytes=8, prototype=define Linker and Libraries: ld='ld2', ldflags =' -L/usr/local/lib' libpth=/usr/local/lib /usr/lib /lib libs=-lgdbm -ldb -lcrypt -lutil perllibs=-lcrypt -lutil libc=/usr/lib/libc.a, so=dll, useshrplib=true, libperl=libperl.a gnulibc_version='' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=dll, d_dlsymun=undef, ccdlflags=' ' cccdlflags=' ', lddlflags=' -L/usr/local/lib' Characteristics of this binary (from libperl): Compile-time options: MULTIPLICITY USE_ITHREADS USE_64_BIT_INT USE_LARGE_FILES PERL_IMPLICIT_CONTEXT Built under cygwin Compiled at Feb 19 2003 20:16:49 %ENV: CYGWIN= @INC: /cygdrive/d/perldev /usr/local/lib/perl5/5.8.0/cygwin-thread-multi-64int /usr/local/lib/perl5/5.8.0 /usr/local/lib/perl5/site_perl/5.8.0/cygwin-thread-multi-64int /usr/local/lib/perl5/site_perl/5.8.0 /usr/local/lib/perl5/site_perl . -Original Message- From: Stas Bekman [mailto:[EMAIL PROTECTED]] Sent: Wednesday, 19 February 2003 10:07 AM To: Steve Baldwin Cc: [EMAIL PROTECTED] Subject: Re: Building mod-perl 2 for cygwin Steve Baldwin wrote: OK, I've rebuilt my perl using the following options ... ./Configure -de -Duse64bitint -Doptimize=-O2 -Dman3ext=3pm (to try to keep as similar as possible to packaged perl, but without the threads stuff). I also tried with simply ./Configure -des With exactly the same result. and if you build with -Dusethreads?
Re: Building mod-perl 2 for cygwin: taint cleanup
[splitting the thread in two] Stas Bekman wrote: Steve Baldwin wrote: I've got Apache2 installed and as far as I can tell, it is functional. I'm trying to build mod-perl from source (as I couldn't find any binaries for cygwin). When I initially ran the command : perl Makefile.PL MP_AP_PREFIX=/usr/local/apache2 I got errors telling me it couldn't find cygdb-3.1.dll, which I eventually tracked down to Apache::TextConfig::open_cmd. I commented out the line : local @ENV{ qw(PATH IFS CDPATH ENV BASH_ENV) }; and the errors went away (it was clearing $ENV{PATH} which I think was causing the error). We need to explicitly set $ENV{PATH} to be able to start a process under -T (see perlsec). We could hardcode the path of the value, but that would be different for each platform. What the normal value of PATH on your system? Is this something standard that other cygwin users can rely on? this issue needs to be resolved as well. can you follow up on this? __ Stas BekmanJAm_pH -- Just Another mod_perl Hacker http://stason.org/ mod_perl Guide --- http://perl.apache.org mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com http://modperlbook.org http://apache.org http://ticketmaster.com
Re: Building mod-perl 2 for cygwin
Steve Baldwin wrote: Unfortunately, I get the same (as far as I can see) result. Here's my latest perl -V ... You mean, you get a bunch of unresolved symbols, right? from your previous report: Now, make (of mod-perl) gives the following errors ... modperl_env.lo(.text+0x89e):modperl_env.c: variable '_PL_vtbl_env' can't be auto-imported. Please read the documentation for ld's --enable-auto-import for details. : Creating library file: libmod_perl.dll.a mod_perl.lo(.text+0x2f9):mod_perl.c: undefined reference to `_apr_pool_cleanup_null' mod_perl.lo(.text+0x2fe):mod_perl.c: undefined reference to `_apr_pool_cleanup_register' mod_perl.lo(.text+0x4e9):mod_perl.c: undefined reference to `_ap_log_error' mod_perl.lo(.text+0x52b):mod_perl.c: undefined reference to `_ap_mpm_query' What looks weird is: Creating library file: libmod_perl.dll.a I'm not a win32 user, but it looks strange to me that dll.a thing. Is that a valid thing? I understand that cygwin is unix over win32. Though it still builds native win32 dlls, no? So may be the problem is that the mod_perl build decides to go with unix build when it should really do the win32 build? Any developers on cygwin that can help us here? Hopefully Per Einar is around and can help. __ Stas BekmanJAm_pH -- Just Another mod_perl Hacker http://stason.org/ mod_perl Guide --- http://perl.apache.org mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com http://modperlbook.org http://apache.org http://ticketmaster.com
Re: Building mod-perl 2 for cygwin
On Thu, 20 Feb 2003, Stas Bekman wrote: Steve Baldwin wrote: Unfortunately, I get the same (as far as I can see) result. Here's my latest perl -V ... You mean, you get a bunch of unresolved symbols, right? from your previous report: Now, make (of mod-perl) gives the following errors ... modperl_env.lo(.text+0x89e):modperl_env.c: variable '_PL_vtbl_env' can't be auto-imported. Please read the documentation for ld's --enable-auto-import for details. : Creating library file: libmod_perl.dll.a mod_perl.lo(.text+0x2f9):mod_perl.c: undefined reference to `_apr_pool_cleanup_null' mod_perl.lo(.text+0x2fe):mod_perl.c: undefined reference to `_apr_pool_cleanup_register' mod_perl.lo(.text+0x4e9):mod_perl.c: undefined reference to `_ap_log_error' mod_perl.lo(.text+0x52b):mod_perl.c: undefined reference to `_ap_mpm_query' What looks weird is: Creating library file: libmod_perl.dll.a I'm not a win32 user, but it looks strange to me that dll.a thing. Is that a valid thing? I understand that cygwin is unix over win32. Though it still builds native win32 dlls, no? So may be the problem is that the mod_perl build decides to go with unix build when it should really do the win32 build? Any developers on cygwin that can help us here? Hopefully Per Einar is around and can help. I have cygwin (for the tools), but haven't looked into compiling Apache/mod_perl with it. From what I understand, cygwin provides a C library (a dll) to get a unix-style API; this is to be contrasted with MinGW, which produces programs that don't rely on 3rd party dlls. cygwin, as well as having the usual .a (static) and .dll libs, does have a .dll.a type of lib, which is an import library. So having such a lib isn't unusual - whether that should be done here is another question ... -- best regards, randy kobes
Re: Building mod-perl 2 for cygwin
I have cygwin (for the tools), but haven't looked into compiling Apache/mod_perl with it. From what I understand, cygwin provides a C library (a dll) to get a unix-style API; this is to be contrasted with MinGW, which produces programs that don't rely on 3rd party dlls. cygwin, as well as having the usual .a (static) and .dll libs, does have a .dll.a type of lib, which is an import library. So having such a lib isn't unusual - whether that should be done here is another question ... OK, hopefully someone with try cygwin soonish and help Steve resolve the problems. It should definitely compile the threaded modperl. we will look at resolving the MULTIPLICITY alone, later. __ Stas BekmanJAm_pH -- Just Another mod_perl Hacker http://stason.org/ mod_perl Guide --- http://perl.apache.org mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com http://modperlbook.org http://apache.org http://ticketmaster.com
Re: Building mod-perl 2 for cygwin
Steve Baldwin wrote: OK, I've rebuilt my perl using the following options ... ./Configure -de -Duse64bitint -Doptimize=-O2 -Dman3ext=3pm (to try to keep as similar as possible to packaged perl, but without the threads stuff). I also tried with simply ./Configure -des With exactly the same result. and if you build with -Dusethreads? Now, make (of mod-perl) gives the following errors ... modperl_env.lo(.text+0x89e):modperl_env.c: variable '_PL_vtbl_env' can't be auto-imported. Please read the documentation for ld's --enable-auto-import for details. : Creating library file: libmod_perl.dll.a mod_perl.lo(.text+0x2f9):mod_perl.c: undefined reference to `_apr_pool_cleanup_null' mod_perl.lo(.text+0x2fe):mod_perl.c: undefined reference to `_apr_pool_cleanup_register' mod_perl.lo(.text+0x4e9):mod_perl.c: undefined reference to `_ap_log_error' mod_perl.lo(.text+0x52b):mod_perl.c: undefined reference to `_ap_mpm_query' : modperl_directives.lo(.text+0x4e7):modperl_directives.c: more undefined references to `_apr_pstrcat' follow collect2: ld returned 1 exit status perlld: *** system() failed to execute gcc -shared -o cygperl5_8_0.dll -Wl,--out-implib=libmod_perl.dll.a -Wl,--export-all-symbols -Wl,--enable-auto-import -Wl,--stack,8388608 \ -L/usr/local/lib mod_perl.lo modperl_interp.lo modperl_tipool.lo modperl_log.lo modperl_config.lo modperl_cmd.lo modperl_options.lo modperl_callback.lo modperl_handler.lo modperl_gtop.lo modperl_util.lo modperl_io.lo modperl_filter.lo modperl_bucket.lo modperl_mgv.lo modperl_pcw.lo modperl_global.lo modperl_env.lo modperl_cgi.lo modperl_perl.lo modperl_perl_global.lo modperl_perl_pp.lo modperl_sys.lo modperl_module.lo modperl_svptr_table.lo modperl_const.lo modperl_constants.lo modperl_hooks.lo modperl_directives.lo modperl_flags.lo modperl_xsinit.lo -L/usr/local/lib /usr/local/lib/perl5/5.8.0/cygwin/auto/DynaLoader/DynaLoader.a -L/usr/local/lib/perl5/5.8.0/cygwin/CORE -lperl -lcrypt -lutil make[1]: *** [mod_perl.so] Error 1 make[1]: Leaving directory `/cygdrive/d/Downloads/mod_perl-1.99_08/src/modules/perl' make: *** [modperl_lib] Error 2 Here's my new output from perl -V ... [mod_perl-1.99_08]$ perl -V Summary of my perl5 (revision 5.0 version 8 subversion 0) configuration: Platform: osname=cygwin, osvers=1.3.19(0.7132), archname=cygwin uname='cygwin_nt-5.1 au-stb-mobile 1.3.19(0.7132) 2003-01-23 21:31 i686 unkn own unknown cygwin ' config_args='-de -Duse64bitint -Doptimize=-O2 -Dman3ext=3pm' hint=previous, useposix=true, d_sigaction=define usethreads=undef use5005threads=undef useithreads=undef usemultiplicity=unde f useperlio=define d_sfio=undef uselargefiles=define usesocks=undef use64bitint=undef use64bitall=undef uselongdouble=undef usemymalloc=y, bincompat5005=undef Compiler: cc='gcc', ccflags ='-DPERL_USE_SAFE_PUTENV -fno-strict-aliasing', optimize='-O2', cppflags='-DPERL_USE_SAFE_PUTENV -fno-strict-aliasing -DPERL_USE_SAFE_PUTENV -fno-strict-aliasing' ccversion='', gccversion='3.2 20020927 (prerelease)', gccosandvers='' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12 ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize =4 alignbytes=8, prototype=define Linker and Libraries: ld='ld2', ldflags =' -L/usr/local/lib' libpth=/usr/local/lib /usr/lib /lib libs=-lgdbm -ldb -lcrypt -lutil perllibs=-lcrypt -lutil libc=/usr/lib/libc.a, so=dll, useshrplib=true, libperl=libperl.a gnulibc_version='' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=dll, d_dlsymun=undef, ccdlflags=' ' cccdlflags=' ', lddlflags=' -L/usr/local/lib' Characteristics of this binary (from libperl): Compile-time options: USE_LARGE_FILES Built under cygwin Compiled at Feb 18 2003 20:15:28 %ENV: CYGWIN= @INC: /cygdrive/d/perldev /usr/local/lib/perl5/5.8.0/cygwin /usr/local/lib/perl5/5.8.0 /usr/local/lib/perl5/site_perl/5.8.0/cygwin /usr/local/lib/perl5/site_perl/5.8.0 /usr/local/lib/perl5/site_perl . -Original Message- From: Stas Bekman [mailto:[EMAIL PROTECTED]] Sent: Monday, 17 February 2003 8:58 PM To: Steve Baldwin Cc: [EMAIL PROTECTED] Subject: Re: Building mod-perl 2 for cygwin Steve Baldwin wrote: Thanks very much for your reply Stas. Pardon my ignorance, but are you saying I need to rebuild Perl with different options. Unfortunately (at least for a time being) yes. The version of Perl I'm using is the packaged one I installed with the cygwin install utility. If this is the case, could you please a little more information as to the arguments you recommend to build a version of Perl that works fine 'standalone', as well as embedded (which I presume is the case with mod-perl) if that is possible. Currently mod_perl 2.0 supports the multiple Perl interpreters only if perl has been built with -Dusethreads. This may change
RE: Building mod-perl 2 for cygwin
Thanks very much for your reply Stas. Pardon my ignorance, but are you saying I need to rebuild Perl with different options. The version of Perl I'm using is the packaged one I installed with the cygwin install utility. If this is the case, could you please a little more information as to the arguments you recommend to build a version of Perl that works fine 'standalone', as well as embedded (which I presume is the case with mod-perl) if that is possible. Steve -Original Message- From: Stas Bekman [mailto:[EMAIL PROTECTED]] Sent: Monday, 17 February 2003 4:03 PM Cc: Steve Baldwin; [EMAIL PROTECTED] Subject: Re: Building mod-perl 2 for cygwin We can take two approaches, patch all the places in the code where perl context is set explicitly to use #ifdef MULTIPLICITY, rather than #ifdef USE_THREADS. Or we can refuse to build mod_perl if MULTIPLICITY is enabled without the threads. Of course the first solution is more favorable for users. I've played a bit with various options and it seems that it's going to be a big trouble to support MULTIPLICITY without USE_THREADS. My suggestion for now is to either rebuild with -Uusemultiplicity or -Dusethreads (less preferred if you don't need threads, but need speed). README.cygwin says: =item * C-Dusemultiplicity Multiplicity is required when embedding Perl in a C program and using more than one interpreter instance. This works with the Cygwin port. Though I can't see that this is a required option. __ Stas BekmanJAm_pH -- Just Another mod_perl Hacker http://stason.org/ mod_perl Guide --- http://perl.apache.org mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com http://modperlbook.org http://apache.org http://ticketmaster.com
Re: Building mod-perl 2 for cygwin
Steve Baldwin wrote: Thanks very much for your reply Stas. Pardon my ignorance, but are you saying I need to rebuild Perl with different options. Unfortunately (at least for a time being) yes. The version of Perl I'm using is the packaged one I installed with the cygwin install utility. If this is the case, could you please a little more information as to the arguments you recommend to build a version of Perl that works fine 'standalone', as well as embedded (which I presume is the case with mod-perl) if that is possible. Currently mod_perl 2.0 supports the multiple Perl interpreters only if perl has been built with -Dusethreads. This may change in the future, or may be not. For now please build with: ./Configure -des -Dusethreads [...] or (assuming that perl automatically turns on this option, which I doubt): ./Configure -des -Uusemultiplicity [...] I think if you build by yourself, all you need is: ./Configure -des (-des picks all the defaults) what's important is that when your perl has been built, it should either have: usethreads=define useithreads=define usemultiplicity=define or usethreads=undef useithreads=undef usemultiplicity=undef in the output of: % perl -V | grep usethreads -Original Message- From: Stas Bekman [mailto:[EMAIL PROTECTED]] Sent: Monday, 17 February 2003 4:03 PM Cc: Steve Baldwin; [EMAIL PROTECTED] Subject: Re: Building mod-perl 2 for cygwin We can take two approaches, patch all the places in the code where perl context is set explicitly to use #ifdef MULTIPLICITY, rather than #ifdef USE_THREADS. Or we can refuse to build mod_perl if MULTIPLICITY is enabled without the threads. Of course the first solution is more favorable for users. I've played a bit with various options and it seems that it's going to be a big trouble to support MULTIPLICITY without USE_THREADS. My suggestion for now is to either rebuild with -Uusemultiplicity or -Dusethreads (less preferred if you don't need threads, but need speed). README.cygwin says: =item * C-Dusemultiplicity Multiplicity is required when embedding Perl in a C program and using more than one interpreter instance. This works with the Cygwin port. Though I can't see that this is a required option. __ Stas BekmanJAm_pH -- Just Another mod_perl Hacker http://stason.org/ mod_perl Guide --- http://perl.apache.org mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com http://modperlbook.org http://apache.org http://ticketmaster.com -- __ Stas BekmanJAm_pH -- Just Another mod_perl Hacker http://stason.org/ mod_perl Guide --- http://perl.apache.org mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com http://modperlbook.org http://apache.org http://ticketmaster.com
Re: Building mod-perl 2 for cygwin
Steve Baldwin wrote: I've got Apache2 installed and as far as I can tell, it is functional. I'm trying to build mod-perl from source (as I couldn't find any binaries for cygwin). When I initially ran the command : perl Makefile.PL MP_AP_PREFIX=/usr/local/apache2 I got errors telling me it couldn't find cygdb-3.1.dll, which I eventually tracked down to Apache::TextConfig::open_cmd. I commented out the line : local @ENV{ qw(PATH IFS CDPATH ENV BASH_ENV) }; and the errors went away (it was clearing $ENV{PATH} which I think was causing the error). We need to explicitly set $ENV{PATH} to be able to start a process under -T (see perlsec). We could hardcode the path of the value, but that would be different for each platform. What the normal value of PATH on your system? Is this something standard that other cygwin users can rely on? However, when I run 'make', I get the following ... [mod_perl-1.99_08]$ make cd src/modules/perl make -f Makefile.modperl make[1]: Entering directory `/cygdrive/d/Downloads/mod_perl-1.99_08/src/modules/perl' gcc -I/cygdrive/d/Downloads/mod_perl-1.99_08/src/modules/perl -I/cygdrive/d/Downloads/mod_perl-1.99_08/xs -I/usr/local/apache2/include -DPERL_USE_SAFE_PUTENV -fno-strict-aliasing -I/usr/lib/perl5/5.8.0/cygwin-multi-64int/CORE -DMOD_PERL -O2 \ -c mod_perl.c mv mod_perl.o mod_perl.lo mod_perl.c: In function `modperl_shutdown': mod_perl.c:10: `my_perl' undeclared (first use in this function) mod_perl.c:10: (Each undeclared identifier is reported only once mod_perl.c:10: for each function it appears in.) mod_perl.c: In function `modperl_hook_post_config': mod_perl.c:498: `my_perl' undeclared (first use in this function) mod_perl.c: In function `modperl_response_handler_cgi': mod_perl.c:771: `my_perl' undeclared (first use in this function) make[1]: *** [mod_perl.lo] Error 1 make[1]: Leaving directory `/cygdrive/d/Downloads/mod_perl-1.99_08/src/modules/perl' make: *** [modperl_lib] Error 2 The key is: [mod_perl-1.99_08]$ perl -V [...] usethreads=undef use5005threads=undef useithreads=undef usemultiplicity=define You don't have threads enabled, but you do have multiplicity enabled. I thought that this problem could be workarounded with this: Index: src/modules/perl/modperl_perl_includes.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_perl_includes.h,v retrieving revision 1.17 diff -u -r1.17 modperl_perl_includes.h --- src/modules/perl/modperl_perl_includes.h25 Nov 2002 01:31:00 - 1.17 +++ src/modules/perl/modperl_perl_includes.h17 Feb 2003 04:14:48 - @@ -42,6 +42,19 @@ # endif #endif +/* If perl was compiled with MULTIPLICITY and/or + * PERL_IMPLICIT_CONTEXT, but no USE_ITHREADS, for mod_perl 2.0 it's + * the same as no multiplicity at all. This is to simplify the #ifdef + * logic of handling the perl context switching */ +#ifndef USE_ITHREADS +#ifdef PERL_IMPLICIT_CONTEXT +#undef PERL_IMPLICIT_CONTEXT +#endif +#ifdef MULTIPLICITY +#undef MULTIPLICITY +#endif +#endif + #include EXTERN.h #include perl.h #include XSUB.h but unfortunately this won't work, as certain PL_ variables aren't defined without defined(MULTIPLICITY), while they are defined in the perl core library. I suppose there are many other problems with this approach. We can take two approaches, patch all the places in the code where perl context is set explicitly to use #ifdef MULTIPLICITY, rather than #ifdef USE_THREADS. Or we can refuse to build mod_perl if MULTIPLICITY is enabled without the threads. Of course the first solution is more favorable for users. But may I ask why do you have MULTIPLICITY enabled? Is it required for cygwin perl (fork emulation?) __ Stas BekmanJAm_pH -- Just Another mod_perl Hacker http://stason.org/ mod_perl Guide --- http://perl.apache.org mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com http://modperlbook.org http://apache.org http://ticketmaster.com
Re: Building mod-perl 2 for cygwin
We can take two approaches, patch all the places in the code where perl context is set explicitly to use #ifdef MULTIPLICITY, rather than #ifdef USE_THREADS. Or we can refuse to build mod_perl if MULTIPLICITY is enabled without the threads. Of course the first solution is more favorable for users. I've played a bit with various options and it seems that it's going to be a big trouble to support MULTIPLICITY without USE_THREADS. My suggestion for now is to either rebuild with -Uusemultiplicity or -Dusethreads (less preferred if you don't need threads, but need speed). README.cygwin says: =item * C-Dusemultiplicity Multiplicity is required when embedding Perl in a C program and using more than one interpreter instance. This works with the Cygwin port. Though I can't see that this is a required option. __ Stas BekmanJAm_pH -- Just Another mod_perl Hacker http://stason.org/ mod_perl Guide --- http://perl.apache.org mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com http://modperlbook.org http://apache.org http://ticketmaster.com