This is an automated email from the git hooks/post-receive script.

js pushed a commit to annotated tag Marpa-R2-2.085_004
in repository libmarpa-r2-perl.

commit 7d0b5766a7e40fe040c39c361cf83755a203c3d9
Author: Jeffrey Kegler <jk...@cpan.org>
Date:   Sat Apr 26 20:27:50 2014 -0700

    Work on shared library support
---
 cpan/inc/Marpa/R2/Build_Me.pm | 84 +++++++++++++++++++++++++++++++------------
 1 file changed, 62 insertions(+), 22 deletions(-)

diff --git a/cpan/inc/Marpa/R2/Build_Me.pm b/cpan/inc/Marpa/R2/Build_Me.pm
index 4bd4b2e..ebf653c 100644
--- a/cpan/inc/Marpa/R2/Build_Me.pm
+++ b/cpan/inc/Marpa/R2/Build_Me.pm
@@ -230,9 +230,10 @@ sub process_xs {
 
     my @libmarpa_build_dir = File::Spec->splitdir( $self->base_dir );
     push @libmarpa_build_dir,
-        ( defined $self->args('libmarpa-shared') )
+        (
+        defined $self->args('libmarpa-shared')
         ? 'libmarpa_shared'
-        : 'libmarpa_build';
+        : 'libmarpa_build' );
     my $libmarpa_build_dir = File::Spec->catdir(@libmarpa_build_dir);
 
     my @xs_dependencies = ( 'typemap', 'Build', $xs_file, $dest_gp_xsh );
@@ -281,33 +282,47 @@ sub process_xs {
         if not -d $spec->{archdir};
 
     my @extra_linker_flags = ();
+    my $libmarpa_build_directory = File::Spec->catdir(
+        $self->base_dir(),
+        (   defined $self->args('libmarpa-shared')
+            ? 'libmarpa_shared'
+            : 'libmarpa_build'
+        )
+    );
+
     if ( defined $self->args('libmarpa-shared') ) {
-        die qq{"libmarpa-shared" not supported for Config::AutoConf}
-            if $Marpa::R2::USE_PERL_AUTOCONF;
-        my $libmarpa_libs_dir =
-            File::Spec->catdir( $self->base_dir(), 'libmarpa_shared',
-            '.libs' );
+        my $libmarpa_libs_dir;
+        if ($Marpa::R2::USE_PERL_AUTOCONF) {
+            $libmarpa_libs_dir =
+                File::Spec->catdir( $libmarpa_build_directory,
+                qw(blib_shared arch auto libmarpa) );
+        }
+        else {
+            $libmarpa_libs_dir =
+                File::Spec->catdir( $libmarpa_build_directory, '.libs' );
+        }
         push @extra_linker_flags, '-L' . $libmarpa_libs_dir;
-        my $version_file_name = File::Spec->catfile( $self->base_dir(), 
'libmarpa_shared', 'VERSION' );
+        my $version_file_name =
+            File::Spec->catfile( $libmarpa_build_directory, 'VERSION' );
         my $libmarpa_version = $self->file_slurp($version_file_name);
         chomp $libmarpa_version;
         my @libmarpa_version = split /[.]/xms, $libmarpa_version;
-        push @extra_linker_flags, sprintf q{-lmarpa-} . ( join q{.}, 
@libmarpa_version );
+        push @extra_linker_flags,
+            sprintf q{-lmarpa-} . ( join q{.}, @libmarpa_version );
     } ## end if ( defined $self->args('libmarpa-shared') )
     else {
         my $libmarpa_archive;
         FIND_LIBRARY: {
             if ($Marpa::R2::USE_PERL_AUTOCONF) {
                 my $libmarpa_libs_dir =
-                    File::Spec->catdir( $self->base_dir(), 'libmarpa_build',
-                    'blib', 'arch', 'auto', 'libmarpa' );
+                    File::Spec->catdir( $libmarpa_build_directory, 'blib',
+                    'arch', 'auto', 'libmarpa' );
                 $libmarpa_archive = File::Spec->catfile( $libmarpa_libs_dir,
                     "libmarpa$Config{lib_ext}" );
                 last FIND_LIBRARY;
             } ## end if ($Marpa::R2::USE_PERL_AUTOCONF)
             my $libmarpa_libs_dir =
-                File::Spec->catdir( $self->base_dir(), 'libmarpa_build',
-                '.libs' );
+                File::Spec->catdir( $libmarpa_build_directory, '.libs' );
             $libmarpa_archive =
                 File::Spec->catfile( $libmarpa_libs_dir, 'libmarpa.a' );
         } ## end FIND_LIBRARY:
@@ -492,14 +507,13 @@ sub do_libmarpa {
             'MARPA_DEBUG_FLAG=' . ( join q{ }, @debug_flags );
     } ## end if ( defined $self->args('Marpa-debug') )
         
-    if ($Marpa::R2::USE_PERL_AUTOCONF) {
+    # As of this writing, only used by Config::AutoConf logic,
+    # but that may change.
+    my $libmarpa_version = $self->file_slurp('VERSION');
+    chomp $libmarpa_version;
+    my @libmarpa_version = split /[.]/xms, $libmarpa_version;
 
-        die qq{"libmarpa-shared" not supported for Config::AutoConf}
-            if defined $self->args('libmarpa-shared');
-
-        my $libmarpa_version = $self->file_slurp('VERSION');
-        chomp $libmarpa_version;
-        my @libmarpa_version = split /[.]/xms, $libmarpa_version;
+    if ($Marpa::R2::USE_PERL_AUTOCONF) {
 
         #
         ## C.f. 
http://fr.slideshare.net/hashashin/building-c-and-c-libraries-with-perl
@@ -596,14 +610,25 @@ INLINEHOOK
         if (! -r 'Makefile.PL') {
             open my $makefile_pl_fh, '>', 'Makefile.PL';
             my $CCFLAGS = @debug_flags ? "$Config{ccflags} @debug_flags" : '';
+            my $linktype = 'static';
+            my $blib = 'blib';
+            my $name = 'libmarpa';
+            if (defined $self->args('libmarpa-shared')) {
+                $linktype = 'dynamic';
+                $blib = 'blib_shared';
+            }
             print {$makefile_pl_fh} "
 use ExtUtils::MakeMaker;
 WriteMakefile(VERSION        => \"$libmarpa_version\",
               XS_VERSION     => \"$libmarpa_version\",
-              NAME           => 'libmarpa',
+              NAME           => \"$name\",
               OBJECT         => '@o',
               CCFLAGS        => '$CCFLAGS',
-              LINKTYPE       => 'static');
+              INST_LIB       => \"./$blib/lib\",
+              INST_ARCHLIB   => \"./$blib/arch\",
+              INST_SCRIPT    => \"./$blib/script\",
+              INST_BIN       => \"./$blib/bin\",
+              LINKTYPE       => $linktype);
 ";
             close $makefile_pl_fh;
             die 'Making Makefile: perl Failure'
@@ -646,6 +671,21 @@ WriteMakefile(VERSION        => \"$libmarpa_version\",
     }
 
     chdir $cwd;
+
+    if ( $Marpa::R2::USE_PERL_AUTOCONF
+        && defined $self->args('libmarpa-shared') )
+    {
+        # Config::AutoConf creates a shared library with the wrong name, and
+        # easiest thing to do is to make a copy with the right one.
+        my $libmarpa_libs_dir =
+            File::Spec->catdir( $build_dir,
+            qw(blib_shared arch auto libmarpa) );
+        my $from = File::Spec->catfile( $libmarpa_libs_dir, 'libmarpa.so' );
+        my $to = File::Spec->catfile( $libmarpa_libs_dir, 'libmarpa-' 
.$libmarpa_version . '.so' );
+        say "Copying $from -> $to ";
+        File::Copy::copy($from, $to) or die "Copy of $from to $to failed: 
$EVAL_ERROR";
+    } ## end if ( $Marpa::R2::USE_PERL_AUTOCONF && defined $self->...)
+
     return 1;
 
 } ## end sub do_libmarpa

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-perl/packages/libmarpa-r2-perl.git

_______________________________________________
Pkg-perl-cvs-commits mailing list
Pkg-perl-cvs-commits@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-perl-cvs-commits

Reply via email to