You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl-cvs@perl.apache.org by st...@apache.org on 2003/05/12 08:37:13 UTC

cvs commit: modperl-2.0/xs/APR/PerlIO Makefile.PL

stas        2003/05/11 23:37:13

  Modified:    .        Changes STATUS
               lib/Apache Build.pm
               lib/ModPerl Manifest.pm
               xs/APR/PerlIO Makefile.PL
  Log:
  an attempt to resolve the binary compatibility problem in
  PerlIOAPR_seek API when APR_HAS_LARGE_FILES=0, by compiling
  APR::PerlIO objects with Config{ccflags_uselargefiles} flags
  
  Revision  Changes    Path
  1.186     +3 -0      modperl-2.0/Changes
  
  Index: Changes
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/Changes,v
  retrieving revision 1.185
  retrieving revision 1.186
  diff -u -r1.185 -r1.186
  --- Changes	12 May 2003 00:11:24 -0000	1.185
  +++ Changes	12 May 2003 06:37:12 -0000	1.186
  @@ -12,6 +12,9 @@
   
   =item 1.99_10-dev
   
  +an attempt to resolve the binary compatibility problem in
  +PerlIOAPR_seek API when APR_HAS_LARGE_FILES=0 [Stas]
  +
   perl 5.8.0 forgets to export PerlIOBase_noop_fail, causing problems on
   win32 and aix. reimplement this function locally to solve the
   problem. APR::PerlIO should now be useful on win32 and aix [Stas]
  
  
  
  1.53      +1 -4      modperl-2.0/STATUS
  
  Index: STATUS
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/STATUS,v
  retrieving revision 1.52
  retrieving revision 1.53
  diff -u -r1.52 -r1.53
  --- STATUS	12 May 2003 00:11:24 -0000	1.52
  +++ STATUS	12 May 2003 06:37:12 -0000	1.53
  @@ -58,9 +58,6 @@
     'File::Find' and search for 'mod_perl.pm' under PREFIX, if found
     check its version and assert only if it's 1.xx
   
  -* apr/perlio.t t7 fails with blead perl w/o ithreads
  -  http://archive.develooper.com/perl5-porters@perl.org/msg93164.html
  -
   * we have shared lib loading problems on the following platforms:
   
       OpenBSD - needs investigation
  
  
  
  1.122     +21 -4     modperl-2.0/lib/Apache/Build.pm
  
  Index: Build.pm
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/lib/Apache/Build.pm,v
  retrieving revision 1.121
  retrieving revision 1.122
  diff -u -r1.121 -r1.122
  --- Build.pm	22 Apr 2003 08:32:59 -0000	1.121
  +++ Build.pm	12 May 2003 06:37:13 -0000	1.122
  @@ -874,7 +874,7 @@
   
   my %wanted_apr_config = map { $_, 1} qw(
       HAS_THREADS HAS_DSO HAS_MMAP HAS_RANDOM HAS_SENDFILE
  -    HAS_INLINE HAS_FORK
  +    HAS_LARGE_FILES HAS_INLINE HAS_FORK
   );
   
   sub get_apr_config {
  @@ -1332,12 +1332,29 @@
       "@includes";
   }
   
  -#XXX:
  +# there is no conflict if both libraries either have or don't have
  +# large files support enabled
  +sub has_large_files_conflict {
  +    my $self = shift;
  +    my $apr_config = $self->get_apr_config();
  +
  +    my $perl = $Config{uselargefiles} ? 1 : 0;
  +    my $apr  = $apr_config->{HAS_LARGE_FILES} ? 1 : 0;
  +
  +    return $perl ^ $apr;
  +}
  +
  +# if perl is built with uselargefiles, but apr not, the build won't
  +# work together as it uses two binary incompatible libraries, so
  +# reduce the functionality to the greatest common denominator (C code
  +# will have to make sure to prevent any operations that may rely on
  +# effects created by uselargefiles, e.g. Off_t=8 instead of Off_t=4)
   sub strip_lfs {
       my($self, $cflags) = @_;
  -    return $cflags unless $Config{uselargefiles};
  +    return $cflags unless $self->has_large_files_conflict();
  +
       my $lf = $Config{ccflags_uselargefiles}
  -      || '-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64';
  +        || '-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64';
       $cflags =~ s/$lf//;
       $cflags;
   }
  
  
  
  1.6       +0 -2      modperl-2.0/lib/ModPerl/Manifest.pm
  
  Index: Manifest.pm
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/lib/ModPerl/Manifest.pm,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- Manifest.pm	23 Apr 2003 04:17:52 -0000	1.5
  +++ Manifest.pm	12 May 2003 06:37:13 -0000	1.6
  @@ -90,8 +90,6 @@
   patches/
   #very few will have Chatbot::Eliza installed
   eliza
  -# fails with blead perl w/o useithreads
  -t/response/TestAPR/perlio.pm
   # segfaults with blead perl
   t/filter/TestFilter/out_str_req_mix.pm
   t/filter/out_str_req_mix.t
  
  
  
  1.3       +28 -2     modperl-2.0/xs/APR/PerlIO/Makefile.PL
  
  Index: Makefile.PL
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/xs/APR/PerlIO/Makefile.PL,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Makefile.PL	22 Mar 2003 07:21:37 -0000	1.2
  +++ Makefile.PL	12 May 2003 06:37:13 -0000	1.3
  @@ -1,8 +1,34 @@
   use lib qw(../lib);
   use ModPerl::BuildMM ();
   
  +use Config;
  +use Apache::Build;
  +use Apache::TestTrace;
  +my $build = Apache::Build->build_config();
  +
  +my $ccopts = $build->ccopts;
  +
  +# when uselargefiles is on, -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
  +# are needed to get the right 'Off_t', without which perlio compiled
  +# with Off_t as 'long long int', doesn't quite work with apr_perlio.c
  +# compiled with Off_t as 'long int'
  +#
  +# On the other handl if apr is built without large files support, we
  +# have binary compatibility problems, if we try to build mod_perl with
  +# -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
  +#
  +# XXX: it seems that enabling these flags only for apr_perlio/PerlIO
  +# seems to do the trick
  +if ($build->has_large_files_conflict) {
  +    $ccopts .= $Config{uselargefiles}
  +        ? ' ' . $Config{ccflags_uselargefiles}
  +        : '';
  +}
  +
   ModPerl::BuildMM::WriteMakefile(
  -    NAME => 'APR::PerlIO',
  +    NAME         => 'APR::PerlIO',
       VERSION_FROM => 'PerlIO.pm',
  -    OBJECT => 'PerlIO.o apr_perlio.o');
  +    CCFLAGS      => $ccopts,
  +    OBJECT       => 'PerlIO.o apr_perlio.o'
  +);