[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