dougm 01/03/04 19:51:16 Added: xs/APR/APR APR.pm APR.xs Makefile.PL apr-test Log: module for using APR outside of Apache Revision Changes Path 1.1 modperl-2.0/xs/APR/APR/APR.pm Index: APR.pm =================================================================== package APR; use DynaLoader (); our $VERSION = '0.01'; our @ISA = qw(DynaLoader); #dlopen("APR.so", RTDL_GLOBAL); so we only need to link libapr.a once sub dl_load_flags { 0x01 } __PACKAGE__->bootstrap($VERSION); 1; __END__ 1.1 modperl-2.0/xs/APR/APR/APR.xs Index: APR.xs =================================================================== #include "mod_perl.h" MODULE = APR PACKAGE = APR BOOT: file = file; /* -Wall */ apr_initialize(); void END() CODE: apr_terminate(); 1.1 modperl-2.0/xs/APR/APR/Makefile.PL Index: Makefile.PL =================================================================== use ExtUtils::MakeMaker; use lib qw(../lib); use ModPerl::MM (); use Config; my $root = ModPerl::MM::build_config('dir') || ""; my $srclib = "$root/srclib"; my $apr = "$srclib/apr"; my @libs; if ($root) { @libs = join ' ', "-L$apr/.libs -lapr", "-L$srclib/apr-util/.libs -laprutil", "-L$srclib/expat-lite/.libs -lexpat", "-L$apr/shmem/unix/mm/.libs -lmm"; } ModPerl::MM::WriteMakefile( 'NAME' => 'APR', 'VERSION_FROM' => 'APR.pm', 'LIBS' => \@libs, ); sub MY::const_loadlibs { my $self = shift; my $string = $self->MM::const_loadlibs; return $string unless $Config{gccversion}; #XXX my $wa = '-Wl,--whole-archive'; my $nwa = '-Wl,--no-whole-archive'; $string =~ s/(LDLOADLIBS\s*=\s*)(.*)/$1$wa $2 $nwa/; $string; } 1.1 modperl-2.0/xs/APR/APR/apr-test Index: apr-test =================================================================== #!perl use Test; plan tests => 10; use blib; use warnings FATAL => 'all'; use strict; use APR (); use APR::UUID (); use APR::Pool (); use APR::Lock (); use APR::Lib (); use APR::Base64 (); use APR::Signal (); my $status; my $uuid = APR::UUID->new->format; ok $uuid; my $p = APR::Pool->new; my $num_bytes = $p->num_bytes; ok $num_bytes; #print "begin bytes=$num_bytes\n"; ok $p; my $lock = APR::Lock->new($p, 0, 1, "lock.file"); $status = $lock->acquire and die APR::strerror($status); $status = $lock->release and die APR::strerror($status); $status = APR::password_validate("one", "two"); my $str = APR::strerror($status); ok $str eq "passwords do not match"; ok $status; my $bytes = APR::generate_random_bytes(10); ok length($bytes) == 10; my $encoded = APR::Base64::encode($bytes); #print "encoded=$encoded\n"; ok $encoded; my $decoded = APR::Base64::decode($encoded); ok $decoded eq $bytes; $p->clear; while ($num_bytes == $p->num_bytes) { APR::Lock->new($p); } my $cur_num_bytes = $p->num_bytes; #print "end bytes=$cur_num_bytes\n"; ok (($cur_num_bytes / 2) == $num_bytes); for (1..9) { my $desc = APR::Signal::get_description($_); #print "$_ => $desc\n"; } ok 1; $p->destroy; #XXX