dougm       00/04/17 14:11:07

  Modified:    lib/ModPerl Code.pm
               src/modules/perl mod_perl.c mod_perl.h modperl_config.c
                        modperl_config.h modperl_types.h
  Log:
  hook in xsinit
  add PerlSwitches directive
  
  Revision  Changes    Path
  1.11      +6 -1      modperl-2.0/lib/ModPerl/Code.pm
  
  Index: Code.pm
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/lib/ModPerl/Code.pm,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- Code.pm   2000/04/17 07:10:55     1.10
  +++ Code.pm   2000/04/17 21:11:06     1.11
  @@ -278,7 +278,7 @@
   );
   
   my @c_src_names = qw(interp log config gtop);
  -my @g_c_names = map { "modperl_$_" } qw(hooks directives);
  +my @g_c_names = map { "modperl_$_" } qw(hooks directives xsinit);
   my @c_names   = ('mod_perl', (map "modperl_$_", @c_src_names), @g_c_names);
   sub c_files { [map { "$_.c" } @c_names] }
   sub o_files { [map { "$_.o" } @c_names] }
  @@ -360,6 +360,11 @@
       }
   
       $self->postamble;
  +
  +    my $xsinit = "$self->{path}/modperl_xsinit.c";
  +    warn "generating...$xsinit\n";
  +
  +    ExtUtils::Embed::xsinit($xsinit);
   }
   
   1;
  
  
  
  1.8       +8 -5      modperl-2.0/src/modules/perl/mod_perl.c
  
  Index: mod_perl.c
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- mod_perl.c        2000/04/17 07:10:55     1.7
  +++ mod_perl.c        2000/04/17 21:11:06     1.8
  @@ -2,13 +2,13 @@
   
   void modperl_startup(server_rec *s, ap_pool_t *p)
   {
  +    MP_dSCFG(s);
       PerlInterpreter *perl;
       int status;
  -    char *argv[] = { "httpd", "/dev/null" };
  -    int argc = 2;
  +    char **argv;
  +    int argc;
   
   #ifdef MP_USE_GTOP
  -    MP_dSCFG(s);
       MP_TRACE_m_do(
           scfg->gtop = modperl_gtop_new(p);
           modperl_gtop_do_proc_mem_before(MP_FUNC ": perl_parse");
  @@ -21,8 +21,10 @@
       }
   
       perl_construct(perl);
  -    
  -    status = perl_parse(perl, NULL, argc, argv, NULL);
  +
  +    argv = modperl_srv_config_argv_init(scfg, &argc);
  +
  +    status = perl_parse(perl, xs_init, argc, argv, NULL);
   
       if (status) {
           perror("perl_parse");
  @@ -63,6 +65,7 @@
   }
   
   static command_rec modperl_cmds[] = {  
  +    MP_SRV_CMD_ITERATE("PerlSwitches", switches, "Perl Switches"),
   #ifdef MP_TRACE
       MP_SRV_CMD_TAKE1("PerlTrace", trace, "Trace level"),
   #endif
  
  
  
  1.8       +1 -0      modperl-2.0/src/modules/perl/mod_perl.h
  
  Index: mod_perl.h
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.h,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- mod_perl.h        2000/04/17 07:10:55     1.7
  +++ mod_perl.h        2000/04/17 21:11:06     1.8
  @@ -38,5 +38,6 @@
   #include "modperl_directives.h"
   
   void modperl_init(server_rec *s, ap_pool_t *p);
  +void xs_init(pTHXo);
   
   #endif /*  MOD_PERL_H */
  
  
  
  1.5       +52 -1     modperl-2.0/src/modules/perl/modperl_config.c
  
  Index: modperl_config.c
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_config.c,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- modperl_config.c  2000/04/16 01:33:56     1.4
  +++ modperl_config.c  2000/04/17 21:11:06     1.5
  @@ -10,10 +10,42 @@
       return NULL;
   }
   
  +#define scfg_push_argv(arg) \
  +    *(char **)ap_push_array(scfg->argv) = arg
  +
   modperl_srv_config_t *modperl_srv_config_new(ap_pool_t *p)
   {
  -    return (modperl_srv_config_t *)
  +    modperl_srv_config_t *scfg = (modperl_srv_config_t *)
           ap_pcalloc(p, sizeof(modperl_srv_config_t));
  +
  +    scfg->argv = ap_make_array(p, 2, sizeof(char *));
  +
  +    scfg_push_argv("httpd");
  +
  +    return scfg;
  +}
  +
  +#ifdef MP_TRACE
  +static void dump_argv(modperl_srv_config_t *scfg)
  +{
  +    int i;
  +    char **argv = (char **)scfg->argv->elts;
  +    fprintf(stderr, "modperl_srv_config_argv_init =>\n");
  +    for (i=0; i<scfg->argv->nelts; i++) {
  +        fprintf(stderr, "   %d = %s\n", i, argv[i]);
  +    }
  +}
  +#endif
  +
  +char **modperl_srv_config_argv_init(modperl_srv_config_t *scfg, int *argc)
  +{
  +    scfg_push_argv("-e;0");
  +    
  +    *argc = scfg->argv->nelts;
  +
  +    MP_TRACE_g_do(dump_argv(scfg));
  +
  +    return (char **)scfg->argv->elts;
   }
   
   void *modperl_create_srv_config(ap_pool_t *p, server_rec *s)
  @@ -56,9 +88,28 @@
   #define MP_CONFIG_BOOTSTRAP(parms) \
   if (!scfg->mip) modperl_init(parms->server, parms->pool)
   
  +#define MP_SRV_CMD_TRACE \
  +    MP_TRACE_d(MP_FUNC, "%s %s\n", parms->cmd->name, arg)
  +
  +#define MP_SRV_CMD_CHECK \
  +MP_SRV_CMD_TRACE; \
  +{ \
  +    const char *err = ap_check_cmd_context(parms, GLOBAL_ONLY); \
  +    if (err) return err; \
  +}
  +
   MP_DECLARE_SRV_CMD(trace)
   {
  +    MP_SRV_CMD_CHECK;
       modperl_trace_level_set(arg);
  +    return NULL;
  +}
  +
  +MP_DECLARE_SRV_CMD(switches)
  +{
  +    MP_dSCFG(parms->server);
  +    MP_SRV_CMD_CHECK;
  +    scfg_push_argv(arg);
       return NULL;
   }
   
  
  
  
  1.6       +7 -0      modperl-2.0/src/modules/perl/modperl_config.h
  
  Index: modperl_config.h
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_config.h,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- modperl_config.h  2000/04/16 01:33:56     1.5
  +++ modperl_config.h  2000/04/17 21:11:06     1.6
  @@ -13,10 +13,13 @@
   
   char *modperl_cmd_push_handlers(MpAV *handlers, char *name, ap_pool_t *p);
   
  +char **modperl_srv_config_argv_init(modperl_srv_config_t *scfg, int *argc);
  +
   #define MP_DECLARE_SRV_CMD(item) \
   const char *modperl_cmd_##item(cmd_parms *parms, \
                                  void *dummy, char *arg)
   MP_DECLARE_SRV_CMD(trace);
  +MP_DECLARE_SRV_CMD(switches);
   
   #ifdef USE_ITHREADS
   MP_DECLARE_SRV_CMD(interp_start);
  @@ -28,6 +31,10 @@
   #define MP_SRV_CMD_TAKE1(name, item, desc) \
       { name, modperl_cmd_##item, NULL, \
         RSRC_CONF, TAKE1, desc }
  +
  +#define MP_SRV_CMD_ITERATE(name, item, desc) \
  +    { name, modperl_cmd_##item, NULL, \
  +      RSRC_CONF, ITERATE, desc }
   
   #define MP_dRCFG \
      modperl_request_config_t *rcfg = \
  
  
  
  1.7       +1 -0      modperl-2.0/src/modules/perl/modperl_types.h
  
  Index: modperl_types.h
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_types.h,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- modperl_types.h   2000/04/17 07:10:55     1.6
  +++ modperl_types.h   2000/04/17 21:11:06     1.7
  @@ -84,6 +84,7 @@
   #ifdef MP_USE_GTOP
       modperl_gtop_t *gtop;
   #endif
  +    MpAV *argv;
       int flags;
   } modperl_srv_config_t;
   
  
  
  

Reply via email to