Apache2.2.2 + PersistentPerl2.22 on Cygwin
Cygwin版apache2は、プログラム名がhttpd2,apxs2になっているが、PersistentPerlはhttpd,apxsだと決め打ちされているため、一発インストールができない。また、多少のコード修正が必要。
$ cpan cpan> look PersistentPerl $ ln -s /usr/sbin/apxs2 /usr/local/bin/apxs $ cp src/PersistentMake.pl src/PersistentMake.pl.orig && vi src/PersistentMake.pl $ diff -Naru src/PersistentMake.pl.orig src/PersistentMake.pl --- src/PersistentMake.pl.orig 2006-06-21 15:14:48.309529600 -0700 +++ src/PersistentMake.pl 2006-06-21 15:25:18.425592000 -0700 @@ -381,7 +381,7 @@ } sub find_httpd { - my $x = &apxs_query('SBINDIR') . '/httpd'; + my $x = &apxs_query('SBINDIR') . '/httpd2'; return -x $x ? $x : 'httpd'; } $ cp src/mod_persistentperl2.c src/mod_persistentperl2.c.orig && vi src/mod_persistentperl2.c $ diff -Naru src/mod_persistentperl2.c.orig src/mod_persistentperl2.c --- src/mod_persistentperl2.c.orig 2006-06-21 16:29:51.447729600 -0700 +++ src/mod_persistentperl2.c 2006-06-21 16:30:31.585444800 -0700 @@ -340,7 +340,9 @@ const char *buf; apr_size_t len; apr_status_t rv; - APR_BRIGADE_FOREACH(e, bb) { + for (e = APR_BRIGADE_FIRST(bb); + e != APR_BRIGADE_SENTINEL(bb); + e = APR_BUCKET_NEXT(e)) { if (APR_BUCKET_IS_EOS(e)) { break; } @@ -380,7 +382,7 @@ return DECLINED; } - argv0 = apr_filename_of_pathname(r->filename); + argv0 = apr_filepath_name_get(r->filename); nph = !(strncmp(argv0, "nph-", 4)); if (!(ap_allow_options(r) & OPT_EXECCGI) && !is_scriptaliased(r)) @@ -436,7 +438,7 @@ if ((rv = default_build_command(&command, &argv, r, p)) != APR_SUCCESS) { ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_TOCLIENT, rv, r, "don't know how to spawn child process: %s", - apr_filename_of_pathname(r->filename)); + apr_filepath_name_get(r->filename)); return HTTP_INTERNAL_SERVER_ERROR; } @@ -445,7 +447,7 @@ command, argv, r, p)) != APR_SUCCESS) { ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_TOCLIENT, rv, r, "couldn't spawn child process: %s", - apr_filename_of_pathname(r->filename)); + apr_filepath_name_get(r->filename)); return HTTP_INTERNAL_SERVER_ERROR; } @@ -465,7 +467,9 @@ return rv; } - APR_BRIGADE_FOREACH(bucket, bb) { + for (bucket = APR_BRIGADE_FIRST(bb); + bucket != APR_BRIGADE_SENTINEL(bb); + bucket = APR_BUCKET_NEXT(bucket)) { const char *data; apr_size_t len; $ perl Makefile.PL Compile mod_persistentperl (default no)? y $ cp perperl_backend/xsinit.c perperl_backend/xsinit.c.orig && vi perperl_backend/xsinit.c $ diff -Naru perperl_backend/xsinit.c.orig perperl_backend/xsinit.c --- perperl_backend/xsinit.c.orig 2006-06-21 15:18:30.589152000 -0700 +++ perperl_backend/xsinit.c 2006-06-21 15:18:34.604926400 -0700 @@ -16,6 +16,5 @@ {extern void perperl_xs_init(); perperl_xs_init();} /* DynaLoader is a special case */ newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file); - newXS("::bootstrap", boot_, file); newXS("Win32CORE::bootstrap", boot_Win32CORE, file); } $ rm /usr/local/bin/apxs
apr_filename_of_pathnameについて
/usr/share/doc/apr1-1.2.7/CHANGES: apr_filename_of_pathname -> apr_filepath_name_get
APR_BRIGADE_FOREACHについて
http://www.schumann.cx/docs/apr-util/group__APR__Util__Bucket__Brigades.html#a80
追記:で、動かなかったわけだこれが。