/usr/share/perl5/Carp/Datum/MakeMaker.pm is in libcarp-datum-perl 1:0.1.3-6.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 | # -*- Mode: perl -*-
#
# $Id: MakeMaker.pm,v 0.1 2001/03/31 10:04:36 ram Exp $
#
# Copyright (c) 2000-2001, Christophe Dehaudt & Raphael Manfredi
#
# You may redistribute only under the terms of the Artistic License,
# as specified in the README file that comes with the distribution.
#
# HISTORY
# $Log: MakeMaker.pm,v $
# Revision 0.1 2001/03/31 10:04:36 ram
# Baseline for first Alpha release.
#
# $EndLog$
#
use strict;
package Carp::Datum::MakeMaker;
use Log::Agent;
require Exporter;
use vars qw(@ISA @EXPORT);
@ISA = qw(Exporter);
@EXPORT = qw(WriteMakefile);
require ExtUtils::MakeMaker;
#
# ->WriteMakefile
#
# Supersedes the version from ExtUtils::MakeMaker to get a chance to ask
# whether the debugging version of the module needs to be installed or not.
# This is only possible starting with version 5.45 of MakeMaker (perl 5.6.1).
#
sub WriteMakefile {
my %args = @_;
my $version = $ExtUtils::MakeMaker::VERSION;
my $name = $args{NAME};
my $LIMIT = 5.45;
if ($version < $LIMIT) {
print "Keeping Carp::Datum calls in $name -- MakeMaker is too old\n";
print "(Would need ExtUtils::MakeMaker version $LIMIT or better)\n";
return &ExtUtils::MakeMaker::WriteMakefile;
} elsif (-t STDIN) {
local *TTY;
open(TTY, ">/dev/tty");
select((select(TTY), $| = 1)[0]);
print TTY <<EOM;
The $name module uses the Carp::Datum extension to implement the
Programming by Contract paradigm, and also get flexible tracing abilities.
By default, I shall strip all the Carp::Datum stuff at build time, and
you will get a clean copy, almost as if the author of $name had never
used Carp::Datum in the first place. Only DTRACE calls will be kept,
and will be redirected at runtime to Log::Agent.
Or you can choose to install the debugging version. However, unless your
application explicitely requests debugging, Carp::Datum will remain silent,
only monitoring the assertions. The exact runtime penalty you will suffer
depends on the amount of assertions, but it is around 15%.
EOM
print TTY "Strip Carp::Datum calls in installed $name? [y] ";
close TTY;
my $ans = <STDIN>;
return &ExtUtils::MakeMaker::WriteMakefile if $ans =~ /^n/i;
} else {
print "Will build $name with calls to Carp::Datum stripped\n";
}
#
# They wish to remove all Carp::Datum code from the installed files.
#
$args{'macro'} = {} unless exists $args{'macro'};
$args{'macro'}->{PM_FILTER} = "datum_strip";
return &ExtUtils::MakeMaker::WriteMakefile(%args);
}
1;
=head1 NAME
Carp::Datum::MakeMaker - Offer to strip Carp::Datum calls statically
=head1 SYNOPSIS
# Put this at the top of the Makefile.PL for your module
use ExtUtils::MakeMaker; # you may omit this line
use Carp::Datum::MakeMaker;
=head1 DESCRIPTION
The C<Carp::Datum::MakeMaker> module supersedes the regular WriteMakefile()
routine of C<ExtUtils::MakeMaker>.
When running the Makefile.PL from a module interactively, the user will
be asked whether calls to C<Carp::Datum> should be stripped at build time.
By default, or when running non-interactively, most calls to Carp::Datum
routines will be removed:
the C<datum_strip> program will be invoked to filter *.pm files during
the build process. This program is a mere wrapper for the datum_strip()
routine, defined in C<Carp::Datum::Strip>.
The only call that will not be stripped is the DTRACE() call. However, it
will be dynamically remapped to a C<Log::Agent> call. It cannot be statically
remapped because of its baroque interface.
At the top of Makefile.PL, insert
use Carp::Datum::MakeMaker;
which will take care of loading C<ExtUtils::MakeMaker>. Note that
it makes sense to refer to this module, since C<Carp::Datum> is being used
internally, and therefore the user will not be able to install the module
if they do not have C<Carp::Datum> already installed.
If you wish to be nicer about C<Carp::Datum> not being installed, you
can say instead:
use ExtUtils::MakeMaker;
eval "use Carp::Datum::MakeMaker;";
WriteMakefile(
'NAME' => "Your::module::name",
'PREREQ_PM' => {
'Carp::Datum' => '0.100',
},
);
It will allow them to run the Makefile.PL, and yet be reminded about the
missing C<Carp::Datum> module. Chances are they won't be able to go
much farther though...
=head1 AUTHORS
Christophe Dehaudt and Raphael Manfredi are the original authors.
Send bug reports, hints, tips, suggestions to Dave Hoover at <squirrel@cpan.org>.
=head1 SEE ALSO
Carp::Datum::Strip(3), ExtUtils::MakeMaker(3).
=cut
|