[SCM] Debian packaging of libfile-mmagic-xs-perl branch, master, updated. debian/0.09006-4-11-g92143e8

gregor herrmann gregoa at debian.org
Mon May 13 19:16:18 UTC 2013


The following commit has been merged in the master branch:
commit d779212a820f1f46f6b832b179b322936cc5135e
Author: gregor herrmann <gregoa at debian.org>
Date:   Mon May 13 21:08:44 2013 +0200

    Update the embedded Module::Install::XSUtil.
    
    Closes: #708076

diff --git a/debian/patches/M::I::XSUtil.pm.diff b/debian/patches/M::I::XSUtil.pm.diff
new file mode 100644
index 0000000..5b3c5c1
--- /dev/null
+++ b/debian/patches/M::I::XSUtil.pm.diff
@@ -0,0 +1,656 @@
+Description: ship a newer Module::Install::XSUtil that's compatible with recent perls
+Origin: vendor
+Bug: https://rt.cpan.org/Public/Bug/Display.html?id=63048
+Bug-Debian: http://bugs.debian.org/708076
+Forwarded: not-needed
+Author: gregor herrmann <gregoa at debian.org>
+Last-Update: 2013-05-13
+
+--- a/inc/Module/Install/XSUtil.pm
++++ b/inc/Module/Install/XSUtil.pm
+@@ -1,9 +1,8 @@
+-#line 1
+ package Module::Install::XSUtil;
+ 
+ use 5.005_03;
+ 
+-$VERSION = '0.24';
++$VERSION = '0.44';
+ 
+ use Module::Install::Base;
+ @ISA     = qw(Module::Install::Base);
+@@ -18,19 +17,21 @@
+ use constant _VERBOSE => $ENV{MI_VERBOSE} ? 1 : 0;
+ 
+ my %ConfigureRequires = (
+-    # currently nothing
++    'ExtUtils::ParseXS' => 2.21,
+ );
+ 
+ my %BuildRequires = (
+-    'ExtUtils::ParseXS' => 2.21, # the newer, the better
+ );
+ 
+ my %Requires = (
+-    'XSLoader' => 0.10, # the newer, the better
++    'XSLoader' => 0.02,
+ );
+ 
+ my %ToInstall;
+ 
++my $UseC99       = 0;
++my $UseCplusplus = 0;
++
+ sub _verbose{
+     print STDERR q{# }, @_, "\n";
+ }
+@@ -46,8 +47,8 @@
+         $self->{xsu_initialized} = 1;
+ 
+         if(!$self->cc_available()){
+-            print "This package requires a C compiler, but it's not available.\n";
+-            exit(0);
++            warn "This distribution requires a C compiler, but it's not available, stopped.\n";
++            exit;
+         }
+ 
+         $self->configure_requires(%ConfigureRequires);
+@@ -64,7 +65,7 @@
+                 $self->makemaker_args->{OPTIMIZE} = '-Zi';
+             }
+             else{
+-                $self->makemaker_args->{OPTIMIZE} = '-g';
++                $self->makemaker_args->{OPTIMIZE} = '-g -ggdb -g3';
+             }
+             $self->cc_define('-DXS_ASSERT');
+         }
+@@ -92,25 +93,44 @@
+         ;
+     }
+ 
++    # cf. https://github.com/sjn/toolchain-site/blob/219db464af9b2f19b04fec05547ac10180a469f3/lancaster-consensus.md
+     my $want_xs;
+     sub want_xs {
+-        my $default = @_ ? shift : 1; # you're using this module, you /must/ want XS by default
++        my($self, $default) = @_;
+         return $want_xs if defined $want_xs;
+ 
++        # you're using this module, you must want XS by default
++        # unless PERL_ONLY is true.
++        $default = !$ENV{PERL_ONLY} if not defined $default;
++
+         foreach my $arg(@ARGV){
+-            if($arg eq '--pp'){
++
++            my ($k, $v) = split '=', $arg; # MM-style named args
++            if ($k eq 'PUREPERL_ONLY' && defined $v) {
++                return $want_xs = !$v;
++            }
++            elsif($arg eq '--pp'){ # old-style
+                 return $want_xs = 0;
+             }
+             elsif($arg eq '--xs'){
+                 return $want_xs = 1;
+             }
+         }
++
++        if ($ENV{PERL_MM_OPT}) {
++            my($v) = $ENV{PERL_MM_OPT} =~ /\b PUREPERL_ONLY = (\S+) /xms;
++            if (defined $v) {
++                return $want_xs = !$v;
++            }
++        }
++
+         return $want_xs = $default;
+     }
+ }
+ 
+ sub use_ppport{
+     my($self, $dppp_version) = @_;
++    return if $self->{_ppport_ok}++;
+ 
+     $self->_xs_initialize();
+ 
+@@ -142,28 +162,60 @@
+     return;
+ }
+ 
++sub use_xshelper {
++    my($self, $opt) = @_;
++    $self->_xs_initialize();
++    $self->use_ppport();
++
++    my $file = 'xshelper.h';
++    open my $fh, '>', $file or die "Cannot open $file for writing: $!";
++    print $fh $self->_xshelper_h();
++    close $fh or die "Cannot close $file: $!";
++    if(defined $opt) {
++        if($opt eq '-clean') {
++            $self->clean_files($file);
++        }
++        else {
++            $self->realclean_files($file);
++        }
++    }
++    return;
++}
++
++sub _gccversion {
++    my $res = `$Config{cc} --version`;
++    my ($version) = $res =~ /\(GCC\) ([0-9.]+)/;
++    no warnings 'numeric', 'uninitialized';
++    return sprintf '%g', $version;
++}
++
+ sub cc_warnings{
+     my($self) = @_;
+ 
+     $self->_xs_initialize();
+ 
+     if(_is_gcc()){
+-        # Note: MSVC++ doesn't support C99, so -Wdeclaration-after-statement helps ensure C89 specs.
+         $self->cc_append_to_ccflags(qw(-Wall));
+ 
+-        no warnings 'numeric';
+-        if($Config{gccversion} >= 4.0){
+-            $self->cc_append_to_ccflags('-Wextra -Wdeclaration-after-statement');
+-            if($Config{gccversion} >= 4.1){
+-                $self->cc_append_to_ccflags('-Wc++-compat');
++        my $gccversion = _gccversion();
++        if($gccversion >= 4.0){
++            $self->cc_append_to_ccflags(qw(-Wextra));
++            if(!($UseC99 or $UseCplusplus)) {
++                # Note: MSVC++ doesn't support C99,
++                # so -Wdeclaration-after-statement helps
++                # ensure C89 specs.
++                $self->cc_append_to_ccflags(qw(-Wdeclaration-after-statement));
++            }
++            if($gccversion >= 4.1 && !$UseCplusplus) {
++                $self->cc_append_to_ccflags(qw(-Wc++-compat));
+             }
+         }
+         else{
+-            $self->cc_append_to_ccflags('-W -Wno-comment');
++            $self->cc_append_to_ccflags(qw(-W -Wno-comment));
+         }
+     }
+     elsif(_is_msvc()){
+-        $self->cc_append_to_ccflags('-W3');
++        $self->cc_append_to_ccflags(qw(-W3));
+     }
+     else{
+         # TODO: support other compilers
+@@ -172,6 +224,60 @@
+     return;
+ }
+ 
++sub c99_available {
++    my($self) = @_;
++
++    return 0 if not $self->cc_available();
++
++    require File::Temp;
++    require File::Basename;
++
++    my $tmpfile = File::Temp->new(SUFFIX => '.c');
++
++    $tmpfile->print(<<'C99');
++// include a C99 header
++#include <stdbool.h>
++inline // a C99 keyword with C99 style comments
++int test_c99() {
++    int i = 0;
++    i++;
++    int j = i - 1; // another C99 feature: declaration after statement
++    return j;
++}
++C99
++
++    $tmpfile->close();
++
++    system "$Config{cc} -c " . $tmpfile->filename;
++
++    (my $objname = File::Basename::basename($tmpfile->filename)) =~ s/\Q.c\E$/$Config{_o}/;
++    unlink $objname or warn "Cannot unlink $objname (ignored): $!";
++
++    return $? == 0;
++}
++
++sub requires_c99 {
++    my($self) = @_;
++    if(!$self->c99_available) {
++        warn "This distribution requires a C99 compiler, but $Config{cc} seems not to support C99, stopped.\n";
++        exit;
++    }
++    $self->_xs_initialize();
++    $UseC99 = 1;
++    return;
++}
++
++sub requires_cplusplus {
++    my($self) = @_;
++    if(!$self->cc_available) {
++        warn "This distribution requires a C++ compiler, but $Config{cc} seems not to support C++, stopped.\n";
++        exit;
++    }
++    $self->_xs_initialize();
++    $UseCplusplus = 1;
++    return;
++}
++
+ sub cc_append_to_inc{
+     my($self, @dirs) = @_;
+ 
+@@ -242,7 +348,7 @@
+ 
+     if ( ! $self->{xsu_loaded_checklib} ) {
+         my $loaded_lib = 0;
+-        foreach my $checklib qw(inc::Devel::CheckLib Devel::CheckLib) {
++        foreach my $checklib (qw(inc::Devel::CheckLib Devel::CheckLib)) {
+             eval "use $checklib 0.4";
+             if (!$@) {
+                 $loaded_lib = 1;
+@@ -290,7 +396,7 @@
+     return;
+ }
+ 
+-sub requires_xs{
++sub requires_xs_module {
+     my $self  = shift;
+ 
+     return $self->requires() unless @_;
+@@ -339,7 +445,7 @@
+     $self->cc_append_to_inc (grep{ !$uniq{ $_ }++ } @inc);
+ 
+     %uniq = ();
+-    $self->cc_append_to_libs(grep{ !$uniq{ $_->[0] }++ } @libs);
++    $self->cc_libs(grep{ !$uniq{ $_->[0] }++ } @libs);
+ 
+     return %added;
+ }
+@@ -365,9 +471,10 @@
+         }
+     }, @dirs);
+ 
++    my $xs_to = $UseCplusplus ? '.cpp' : '.c';
+     foreach my $src_file(@src_files){
+         my $c = $src_file;
+-        if($c =~ s/ \.xs \z/.c/xms){
++        if($c =~ s/ \.xs \z/$xs_to/xms){
+             $XS_ref->{$src_file} = $c;
+ 
+             _verbose "xs: $src_file" if _VERBOSE;
+@@ -478,10 +585,14 @@
+         $cppflags   .= ' ' . $mm->{DEFINE} if $mm->{DEFINE};
+ 
+         my $add_include = _is_msvc() ? '-FI' : '-include';
+-        $cppflags   .= ' ' . join ' ', map{ qq{$add_include "$_"} } qw(EXTERN.h perl.h XSUB.h);
++        $cppflags   .= ' ' . join ' ',
++            map{ qq{$add_include "$_"} } qw(EXTERN.h perl.h XSUB.h);
+ 
+         my $cppcmd = qq{$Config{cpprun} $cppflags $h_file};
+-
++        # remove all the -arch options to workaround gcc errors:
++        #       "-E, -S, -save-temps and -M options are not allowed
++        #        with multiple -arch flags"
++        $cppcmd =~ s/ -arch \s* \S+ //xmsg;
+         _verbose("extract functions from: $cppcmd") if _VERBOSE;
+         `$cppcmd`;
+     };
+@@ -546,12 +657,120 @@
+     return;
+ }
+ 
++sub _xshelper_h {
++    my $h = <<'XSHELPER_H';
++:/* THIS FILE IS AUTOMATICALLY GENERATED BY Module::Install::XSUtil $VERSION. */
++:/*
++:=head1 NAME
++:
++:xshelper.h - Helper C header file for XS modules
++:
++:=head1 DESCRIPTION
++:
++:    // This includes all the perl header files and ppport.h
++:    #include "xshelper.h"
++:
++:=head1 SEE ALSO
++:
++:L<Module::Install::XSUtil>, where this file is distributed as a part of
++:
++:=head1 AUTHOR
++:
++:Fuji, Goro (gfx) E<lt>gfuji at cpan.orgE<gt>
++:
++:=head1 LISENCE
++:
++:Copyright (c) 2010, Fuji, Goro (gfx). All rights reserved.
++:
++:This library is free software; you can redistribute it and/or modify
++:it under the same terms as Perl itself.
++:
++:=cut
++:*/
++:
++:#ifdef __cplusplus
++:extern "C" {
++:#endif
++:
++:#define PERL_NO_GET_CONTEXT /* we want efficiency */
++:#include <EXTERN.h>
++:#include <perl.h>
++:#define NO_XSLOCKS /* for exceptions */
++:#include <XSUB.h>
++:
++:#ifdef __cplusplus
++:} /* extern "C" */
++:#endif
++:
++:#include "ppport.h"
++:
++:/* portability stuff not supported by ppport.h yet */
++:
++:#ifndef STATIC_INLINE /* from 5.13.4 */
++:# if defined(__GNUC__) || defined(__cplusplus) || (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L))
++:#   define STATIC_INLINE static inline
++:# else
++:#   define STATIC_INLINE static
++:# endif
++:#endif /* STATIC_INLINE */
++:
++:#ifndef __attribute__format__
++:#define __attribute__format__(a,b,c) /* nothing */
++:#endif
++:
++:#ifndef LIKELY /* they are just a compiler's hint */
++:#define LIKELY(x)   (!!(x))
++:#define UNLIKELY(x) (!!(x))
++:#endif
++:
++:#ifndef newSVpvs_share
++:#define newSVpvs_share(s) Perl_newSVpvn_share(aTHX_ STR_WITH_LEN(s), 0U)
++:#endif
++:
++:#ifndef get_cvs
++:#define get_cvs(name, flags) get_cv(name, flags)
++:#endif
++:
++:#ifndef GvNAME_get
++:#define GvNAME_get GvNAME
++:#endif
++:#ifndef GvNAMELEN_get
++:#define GvNAMELEN_get GvNAMELEN
++:#endif
++:
++:#ifndef CvGV_set
++:#define CvGV_set(cv, gv) (CvGV(cv) = (gv))
++:#endif
++:
++:/* general utility */
++:
++:#if PERL_BCDVERSION >= 0x5008005
++:#define LooksLikeNumber(x) looks_like_number(x)
++:#else
++:#define LooksLikeNumber(x) (SvPOKp(x) ? looks_like_number(x) : (I32)SvNIOKp(x))
++:#endif
++:
++:#define newAV_mortal()         (AV*)sv_2mortal((SV*)newAV())
++:#define newHV_mortal()         (HV*)sv_2mortal((SV*)newHV())
++:#define newRV_inc_mortal(sv)   sv_2mortal(newRV_inc(sv))
++:#define newRV_noinc_mortal(sv) sv_2mortal(newRV_noinc(sv))
++:
++:#define DECL_BOOT(name) EXTERN_C XS(CAT2(boot_, name))
++:#define CALL_BOOT(name) STMT_START {            \
++:        PUSHMARK(SP);                           \
++:        CALL_FPTR(CAT2(boot_, name))(aTHX_ cv); \
++:    } STMT_END
++XSHELPER_H
++    $h =~ s/^://xmsg;
++    $h =~ s/\$VERSION\b/$Module::Install::XSUtil::VERSION/xms;
++    return $h;
++}
+ 
+ package
+     MY;
+ 
+ # XXX: We must append to PM inside ExtUtils::MakeMaker->new().
+-sub init_PM{
++sub init_PM {
+     my $self = shift;
+ 
+     $self->SUPER::init_PM(@_);
+@@ -579,7 +798,233 @@
+     return $cccmd
+ }
+ 
++sub xs_c {
++    my($self) = @_;
++    my $mm = $self->SUPER::xs_c();
++    $mm =~ s/ \.c /.cpp/xmsg if $UseCplusplus;
++    return $mm;
++}
++
++sub xs_o {
++    my($self) = @_;
++    my $mm = $self->SUPER::xs_o();
++    $mm =~ s/ \.c /.cpp/xmsg if $UseCplusplus;
++    return $mm;
++}
++
+ 1;
+ __END__
+ 
+-#line 774
++=for stopwords gfx API
++
++=head1 NAME
++
++Module::Install::XSUtil - Utility functions for XS modules
++
++=head1 VERSION
++
++This document describes Module::Install::XSUtil version 0.44.
++
++=head1 SYNOPSIS
++
++    # in Makefile.PL
++    use inc::Module::Install;
++
++    # Enables C compiler warnings
++    cc_warnings;
++
++    # Uses ppport.h
++    # No need to include it. It's created here.
++    use_ppport 3.19;
++
++
++    # Sets C pre-processor macros.
++    cc_define q{-DUSE_SOME_FEATURE=42};
++
++    # Sets paths for header files
++    cc_include_paths 'include'; # all the header files are in include/
++
++    # Sets paths for source files
++    cc_src_paths 'src'; # all the XS and C source files are in src/
++
++    # Installs header files
++    install_headers; # all the header files in @cc_include_paths
++
++
++=head1 DESCRIPTION
++
++Module::Install::XSUtil provides a set of utilities to setup distributions
++which include or depend on XS module.
++
++See L<XS::MRO::Compat> and L<Method::Cumulative> for example.
++
++=head1 FUNCTIONS
++
++=head2 cc_available
++
++Returns true if a C compiler is available. YOU DO NOT NEED TO CALL
++THIS FUNCTION YOURSELF: it will be called for you when this module is
++initialized, and your Makefile.PL process will exit with 0 status.
++Only explicitly call if you need to do some esoteric handling when
++no compiler is available (for example, when you have a pure perl alternative)
++
++=head2 c99_available
++
++Returns true if a C compiler is available and it supports C99 features.
++
++=head2 want_xs ?$default
++
++Returns true if the user asked for the XS version or pure perl version of the
++module.
++
++Will return true if C<--xs> is explicitly specified as the argument to
++F<Makefile.PL>, and false if C<--pp> is specified. If neither is explicitly
++specified, will return the value specified by C<$default>. If you do not
++specify the value of C<$default>, then it will be true.
++
++
++=head2 use_ppport ?$version
++
++Creates F<ppport.h> using C<Devel::PPPort::WriteFile()>.
++
++This command calls C<< configure_requires 'Devel::PPPort' => $version >>
++and adds C<-DUSE_PPPORT> to C<MakeMaker>'s C<DEFINE>.
++
++=head2 use_xshelper ?-clean|-realclean
++
++Create sF<xshelper.h>, which is a helper header file to include
++F<EXTERN.h>, F<perl.h>, F<XSUB.h> and F<ppport.h>, and defines
++some portability stuff which are not supported by F<ppport.h>.
++
++Optional argument C<-clean> and C<-realclean> set C<clean_files>
++or C<realclean_files> to the generated file F<xshelper.h> respectably.
++
++This command includes C<use_ppport>.
++
++=head2 cc_warnings
++
++Enables C compiler warnings.
++
++=head2 cc_define @macros
++
++Sets C<cpp> macros as compiler options.
++
++=head2 cc_src_paths @source_paths
++
++Sets source file directories which include F<*.xs> or F<*.c>.
++
++=head2 cc_include_paths @include_paths
++
++Sets include paths for a C compiler.
++
++=head2 cc_inc_paths @include_paths;
++
++This B<was> an alias to C<cc_include_paths>, but from 0.42,
++this is C<Module::Install::Compiler::cc_inc_paths>, which
++replaces the EUMM's C<INC> parameter.
++
++Don't use this function. Use C<cc_include_paths> instead.
++
++=head2 cc_libs @libs
++
++Sets C<MakeMaker>'s C<LIBS>. If a name starts C<->, it will be interpreted as is.
++Otherwise prefixed C<-l>.
++
++e.g.:
++
++    cc_libs -lfoo;
++    cc_libs  'foo'; # ditto.
++    cc_libs qw(-L/path/to/libs foo bar); # with library paths
++
++=head2 cc_assert_lib %args
++
++Checks if the given C library is installed via Devel::CheckLib.
++Takes exactly what Devel::CheckLib takes. Note that you must pass
++the path names explicitly.
++
++=head2 requires_c99
++
++Tells the build system to use C99 features.
++
++=head2 requires_cplusplus
++
++Tells the build system to use C++ language.
++
++=head2 install_headers ?@header_files
++
++Declares providing header files, extracts functions from these header files,
++and adds these functions to C<MakeMaker>'s C<FUNCLIST>.
++
++If I<@header_files> are omitted, all the header files in B<include paths> will
++be installed.
++
++=head2 cc_append_to_inc @include_paths
++
++Low level API.
++
++=head2 cc_append_to_libs @libraries
++
++Low level API.
++
++=head2 cc_append_to_ccflags @ccflags
++
++Low level API.
++
++=head2 cc_append_to_funclist @funclist
++
++Low level API.
++
++=head1 OPTIONS
++
++Under the control of this module, F<Makefile.PL> accepts C<-g> option, which
++sets C<MakeMaker>'s C<OPTIMIE> C<-g> (or something like). It will disable
++optimization and enable some debugging features.
++
++=head1 DEPENDENCIES
++
++Perl 5.5.3 or later.
++
++=head1 NOTE
++
++In F<Makefile.PL>, you might want to use C<author_requires>, which is
++provided by C<Module::Install::AuthorReauires>, in order to tell co-developers
++that they need to install this plugin.
++
++    author_requires 'Module::Install::XSUtil';
++
++=head1 BUGS
++
++No bugs have been reported.
++
++Please report any bugs or feature requests to the author.
++
++=head1 ACKNOWLEDGEMENT
++
++Thanks to Taro Nishino for the test reports.
++
++Tanks to lestrrat for the suggestions and patches.
++
++=head1 AUTHOR
++
++Goro Fuji (gfx) E<lt>gfuji(at)cpan.orgE<gt>.
++
++=head1 SEE ALSO
++
++L<ExtUtils::Depends>.
++
++L<Module::Install>.
++
++L<Module::Install::CheckLib>.
++
++L<Devel::CheckLib>.
++
++L<ExtUtils::MakeMaker>.
++
++=head1 LICENSE AND COPYRIGHT
++
++Copyright (c) 2009-2010, Goro Fuji (gfx). All rights reserved.
++
++This library is free software; you can redistribute it and/or modify
++it under the same terms as Perl itself.
++
++=cut
diff --git a/debian/patches/series b/debian/patches/series
index a8ab736..2aa3217 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1 +1,2 @@
 format_string_fix.diff
+M::I::XSUtil.pm.diff

-- 
Debian packaging of libfile-mmagic-xs-perl



More information about the Pkg-perl-cvs-commits mailing list