You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by rb...@locus.apache.org on 2000/04/04 05:51:55 UTC

cvs commit: apache-2.0/src/lib/apr/test mod_test.c testdso.c Makefile.in

rbb         00/04/03 20:51:55

  Modified:    src/lib/apr/test Makefile.in
  Added:       src/lib/apr/test mod_test.c testdso.c
  Log:
  Adding tests for dso support and the Makefile.  This also updates some
  dependancies.  These tests work on Linux, and I assume the work on
  BeOS.  Everybody else, YMMV.
  Submitted by:	David Reid
  Reviewed by:	Ryan Bloom
  
  Revision  Changes    Path
  1.13      +77 -42    apache-2.0/src/lib/apr/test/Makefile.in
  
  Index: Makefile.in
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/test/Makefile.in,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- Makefile.in	2000/03/01 16:21:17	1.12
  +++ Makefile.in	2000/04/04 03:51:55	1.13
  @@ -24,7 +24,9 @@
   	htdigest@EXEEXT@ \
   	testmmap@EXEEXT@ \
   	testshmem@EXEEXT@ \
  -	testpipe@EXEEXT@
  +	testpipe@EXEEXT@ \
  +	testdso@EXEEXT@ \
  +	mod_test.so
   
   OBJS= testfile.o \
   	testproc.o \
  @@ -35,7 +37,9 @@
           testcontext.o \
   	ab_apr.o \
   	htdigest.o \
  -         testmmap.o
  +	testmmap.o \
  +	testdso.o \
  +	mod_test.o
   
   .c.o:
   	$(CC) -c $(CFLAGS) $(INCLUDES) $<
  @@ -45,6 +49,12 @@
   testfile@EXEEXT@: testfile.o
   	$(CC) $(CFLAGS) testfile.o -o testfile@EXEEXT@ $(LDFLAGS) 
   
  +testdso@EXEEXT@: testdso.o
  +	$(CC) $(CFLAGS) --export-dynamic -fPIC testdso.o -o testdso@EXEEXT@ $(LDFLAGS) 
  +
  +mod_test.so: mod_test.o
  +	$(CC) -shared mod_test.o -o mod_test.so 
  +
   testargs@EXEEXT@: testargs.o
   	$(CC) $(CFLAGS) testargs.o -o testargs@EXEEXT@ $(LDFLAGS) 
   
  @@ -103,43 +113,68 @@
   	    && rm Makefile.new
   
   # DO NOT REMOVE
  -ab_apr.o: ab_apr.c $(INCDIR)/apr_network_io.h \
  - $(INCDIR)/apr_general.h $(INCDIR)/apr_config.h \
  - $(INCDIR)/apr_errno.h $(INCDIR)/apr_file_io.h $(INCDIR)/apr_time.h
  -abc.o: abc.c $(INCDIR)/apr_file_io.h $(INCDIR)/apr_general.h \
  - $(INCDIR)/apr_config.h $(INCDIR)/apr_errno.h
  -client.o: client.c $(INCDIR)/apr_network_io.h \
  - $(INCDIR)/apr_general.h $(INCDIR)/apr_config.h \
  - $(INCDIR)/apr_errno.h
  -htdigest.o: htdigest.c $(INCDIR)/apr_lib.h $(INCDIR)/apr_general.h \
  - $(INCDIR)/apr_config.h $(INCDIR)/apr_errno.h \
  - $(INCDIR)/apr_file_io.h $(INCDIR)/apr_md5.h
  -htpasswd.o: htpasswd.c $(INCDIR)/apr_signal.h \
  - $(INCDIR)/apr_general.h $(INCDIR)/apr_config.h \
  - $(INCDIR)/apr_errno.h $(INCDIR)/apr_lib.h $(INCDIR)/apr_file_io.h
  -logresolve.o: logresolve.c $(INCDIR)/apr_config.h
  -rotatelogs.o: rotatelogs.c $(INCDIR)/apr_config.h
  -server.o: server.c $(INCDIR)/apr_network_io.h \
  - $(INCDIR)/apr_general.h $(INCDIR)/apr_config.h \
  - $(INCDIR)/apr_errno.h
  -suexec.o: suexec.c $(INCDIR)/apr_config.h suexec.h
  -testargs.o: testargs.c $(INCDIR)/apr_file_io.h \
  - $(INCDIR)/apr_general.h $(INCDIR)/apr_config.h \
  - $(INCDIR)/apr_errno.h $(INCDIR)/apr_lib.h
  -testfile.o: testfile.c $(INCDIR)/apr_file_io.h \
  - $(INCDIR)/apr_general.h $(INCDIR)/apr_config.h \
  - $(INCDIR)/apr_errno.h $(INCDIR)/apr_lib.h
  -testproc.o: testproc.c $(INCDIR)/apr_thread_proc.h \
  - $(INCDIR)/apr_file_io.h $(INCDIR)/apr_general.h \
  - $(INCDIR)/apr_config.h $(INCDIR)/apr_errno.h $(INCDIR)/apr_win.h \
  - $(INCDIR)/apr_lib.h 
  -testsock.o: testsock.c $(INCDIR)/apr_thread_proc.h \
  - $(INCDIR)/apr_file_io.h $(INCDIR)/apr_general.h \
  - $(INCDIR)/apr_config.h $(INCDIR)/apr_errno.h $(INCDIR)/apr_win.h \
  - $(INCDIR)/apr_lib.h
  -testthread.o: testthread.c $(INCDIR)/apr_thread_proc.h \
  - $(INCDIR)/apr_file_io.h $(INCDIR)/apr_general.h \
  - $(INCDIR)/apr_config.h $(INCDIR)/apr_errno.h $(INCDIR)/apr_win.h \
  - $(INCDIR)/apr_lock.h
  -testtime.o: testtime.c $(INCDIR)/apr_time.h $(INCDIR)/apr_general.h \
  - $(INCDIR)/apr_config.h $(INCDIR)/apr_errno.h
  +ab_apr.o: ab_apr.c ../include/apr_network_io.h \
  + ../include/apr_general.h ../include/apr.h ../include/apr_errno.h \
  + ../include/apr_file_io.h ../include/apr_time.h \
  + ../include/apr_getopt.h
  +abc.o: abc.c ../include/apr_file_io.h ../include/apr_general.h \
  + ../include/apr.h ../include/apr_errno.h ../include/apr_time.h
  +client.o: client.c ../include/apr_network_io.h \
  + ../include/apr_general.h ../include/apr.h ../include/apr_errno.h \
  + ../include/apr_file_io.h ../include/apr_time.h /usr/include/errno.h
  +htdigest.o: htdigest.c ../include/apr_lib.h ../include/apr_general.h \
  + ../include/apr.h ../include/apr_errno.h ../include/apr_file_io.h \
  + ../include/apr_time.h ../include/apr_thread_proc.h \
  + ../include/apr_md5.h
  +htpasswd.o: htpasswd.c ../include/apr_signal.h \
  + ../include/apr_general.h ../include/apr.h ../include/apr_errno.h \
  + ../include/apr_lib.h ../include/apr_file_io.h ../include/apr_time.h \
  + ../include/apr_thread_proc.h
  +logresolve.o: logresolve.c ../include/apr_config.h
  +mod_test.o: mod_test.c
  +rotatelogs.o: rotatelogs.c ../include/apr_config.h
  +server.o: server.c ../include/apr_network_io.h \
  + ../include/apr_general.h ../include/apr.h ../include/apr_errno.h \
  + ../include/apr_file_io.h ../include/apr_time.h
  +testargs.o: testargs.c ../include/apr_file_io.h \
  + ../include/apr_general.h ../include/apr.h ../include/apr_errno.h \
  + ../include/apr_time.h ../include/apr_lib.h \
  + ../include/apr_thread_proc.h ../include/apr_getopt.h
  +testcontext.o: testcontext.c ../include/apr_file_io.h \
  + ../include/apr_general.h ../include/apr.h ../include/apr_errno.h \
  + ../include/apr_time.h ../include/apr_lib.h \
  + ../include/apr_thread_proc.h
  +testdso.o: testdso.c ../include/apr_config.h ../include/apr_general.h \
  + ../include/apr.h ../include/apr_errno.h ../include/apr_pools.h \
  + ../include/apr_lib.h ../include/apr_file_io.h ../include/apr_time.h \
  + ../include/apr_thread_proc.h ../include/apr_dso.h
  +testfile.o: testfile.c ../include/apr_file_io.h \
  + ../include/apr_general.h ../include/apr.h ../include/apr_errno.h \
  + ../include/apr_time.h ../include/apr_lib.h \
  + ../include/apr_thread_proc.h
  +testmmap.o: testmmap.c ../include/apr_mmap.h ../include/apr_general.h \
  + ../include/apr.h ../include/apr_errno.h ../include/apr_network_io.h \
  + ../include/apr_file_io.h ../include/apr_time.h \
  + ../include/apr_portable.h ../include/apr_thread_proc.h \
  + ../include/apr_lock.h ../include/apr_lib.h
  +testpipe.o: testpipe.c ../include/apr_file_io.h \
  + ../include/apr_general.h ../include/apr.h ../include/apr_errno.h \
  + ../include/apr_time.h ../include/apr_lib.h \
  + ../include/apr_thread_proc.h
  +testproc.o: testproc.c ../include/apr_thread_proc.h \
  + ../include/apr_file_io.h ../include/apr_general.h ../include/apr.h \
  + ../include/apr_errno.h ../include/apr_time.h ../include/apr_lib.h \
  + /usr/include/errno.h
  +testshmem.o: testshmem.c ../include/apr_shmem.h ../include/apr.h \
  + ../include/apr_general.h ../include/apr_errno.h ../include/apr_lock.h \
  + ../include/apr_lib.h ../include/apr_file_io.h ../include/apr_time.h \
  + ../include/apr_thread_proc.h /usr/include/errno.h
  +testsock.o: testsock.c ../include/apr_thread_proc.h \
  + ../include/apr_file_io.h ../include/apr_general.h ../include/apr.h \
  + ../include/apr_errno.h ../include/apr_time.h ../include/apr_lib.h
  +testthread.o: testthread.c ../include/apr_thread_proc.h \
  + ../include/apr_file_io.h ../include/apr_general.h ../include/apr.h \
  + ../include/apr_errno.h ../include/apr_time.h ../include/apr_lock.h \
  + /usr/include/errno.h
  +testtime.o: testtime.c ../include/apr_time.h ../include/apr_general.h \
  + ../include/apr.h ../include/apr_errno.h /usr/include/errno.h
  
  
  
  1.1                  apache-2.0/src/lib/apr/test/mod_test.c
  
  Index: mod_test.c
  ===================================================================
  #include <stdio.h>
  
  int goodbyes = 0;
  
  void print_hello(void)
  {
      fprintf(stdout,"Hello - I'm a DSO!\n");
  }
  
  int print_goodbye(int reps)
  {
      int i = 0;
      for (i = 0;i < reps; i++) {
          fprintf (stdout, "Goodbye from the DSO! (%d of %d)\n", i+1, reps);
      }
      goodbyes = reps;
  }
  
  
  
  1.1                  apache-2.0/src/lib/apr/test/testdso.c
  
  Index: testdso.c
  ===================================================================
  #include "apr_config.h"
  #include "apr_general.h"
  #include "apr_pools.h"
  #include "apr_errno.h"
  #include "apr_dso.h"
  #include <string.h>
  
  #define LIB_NAME "mod_test.so"
  
  int main (int argc, char ** argv)
  {
      ap_dso_handle_t *h = NULL;
      ap_dso_handle_sym_t func1 = NULL;
      ap_dso_handle_sym_t func2 = NULL;
      ap_context_t *cont;
      void (*function)(void);
      void (*function1)(int);
      int *retval;
      char filename[256];   
  
      getcwd(filename, 256);
      strcat(filename, "/");
      strcat(filename, LIB_NAME);
  
      ap_initialize();
      atexit(ap_terminate);
          
      if (ap_create_context(&cont, NULL) != APR_SUCCESS) {
          fprintf(stderr, "Couldn't allocate context.");
          exit(-1);
      }
  
      fprintf(stdout,"Initializing DSO's.........................");
      if (ap_dso_init() != APR_SUCCESS) {
          fprintf(stderr, "Couldn't initialize DSO's !");
          exit (-1);
      }
      fprintf(stdout,"OK\n");
      fprintf(stdout,"Trying to load DSO now.....................");
      fflush(stdout);
      if (ap_dso_load(&h, filename, cont) != APR_SUCCESS){
          fprintf(stderr, "Failed to load %s!\n", filename);
          exit (-1);
      }
      fprintf(stdout,"OK\n");
  
      fprintf(stdout,"Trying to get the DSO's attention..........");
      fflush(stdout);
      if (ap_dso_sym(&func1, h, "print_hello") != APR_SUCCESS) { 
          fprintf(stderr, "Failed!\n");
          exit (-1);
      }        
      fprintf(stdout,"OK\n");
      
      function = (void *)func1;
      (*function)();
  
      fprintf(stdout,"Saying farewell 5 times....................");
      fflush(stdout);
      if (ap_dso_sym(&func2, h, "print_goodbye") != APR_SUCCESS) {
          fprintf(stderr, "Failed!\n");
          exit (-1);
      }        
      fprintf(stdout,"OK\n");
  
      function1 = (void *)(int)func2;
      (*function1)(5);
  
      fprintf(stdout,"Checking how many times I said goodbye..");
      fflush(stdout);
      if (ap_dso_sym(&func1, h, "goodbyes") != APR_SUCCESS) {
          fprintf(stderr, "Failed!\n");
          exit (-1);
      }
      retval = (int *)func1;
      fprintf(stdout,"%d..", (*retval));
      fflush(stdout);
      if ((*retval) == 5){
          fprintf(stderr,"OK\n");
      } else {
          fprintf(stderr,"Failed!\n");
      }
         
      fprintf(stdout,"Trying to unload DSO now...................");
      if (ap_dso_unload(h) != APR_SUCCESS) {
          fprintf(stderr, "Failed!\n");
          exit (-1);
      }
      fprintf(stdout,"OK\n");
  
      fprintf(stdout,"Checking it's been unloaded................");
      fflush(stdout);
      if (ap_dso_sym(&func1, h, "print_hello") == APR_SUCCESS) {
          fprintf(stderr, "Failed!\n");
          exit (-1);
      }        
      fprintf(stdout,"OK\n");
      
      return 0;
  }