# -*-perl-*- # Copyright (c) 2010 The NetBSD Foundation, Inc. # All rights reserved. # # This code is derived from software contributed to The NetBSD Foundation # by Roland Illig. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All advertising materials mentioning features or use of this software # must display the following acknowledgement: # This product includes software developed by the NetBSD # Foundation, Inc. and its contributors. # 4. Neither the name of The NetBSD Foundation nor the names of its # contributors may be used to endorse or promote products derived # from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # This is a drop-in replacement for the MakeMaker Perl module. Instead # of generating a Makefile, it extracts the dependency information for # other Perl modules. It is used to simplify the generation of pkgsrc # packages for Perl modules. package ExtUtils::MakeMaker; use strict; use warnings; use constant conf_pkgsrcdir => '@PKGSRCDIR@'; BEGIN { use Exporter; use vars qw(@ISA @EXPORT); @ISA = qw(Exporter); @EXPORT = qw(WriteMakefile prompt); } # From lib/perl5/5.18.0/ExtUtils/MakeMaker.pm our $VERSION = '6.66'; our $Verbose = 0; # exported our @EXPORT = qw($Verbose $version); our @EXPORT_OK = qw(&neatvalue); # Finds and returns the category a given package lies in. # If the package does not exist, C is returned. # If the package exists more than once, it is unspecified which # of the categories is returned. sub find_category($) { my ($pkg) = @_; my ($retval, $pkgsrcdir); opendir(D, conf_pkgsrcdir) or die; foreach my $cat (readdir(D)) { next if ($cat =~ qr"^\."); if (-d (conf_pkgsrcdir."/${cat}/${pkg}")) { $retval = $cat; } } closedir(D); return $retval; } sub WriteMakefile(%) { my (%options) = @_; if (exists($options{"PREREQ_PM"})) { my $deps = $options{"PREREQ_PM"}; foreach my $dep (sort(keys(%{$deps}))) { my ($ver, $pkgbase, $category); $ver = $deps->{$dep}; ($pkgbase = "p5-${dep}") =~ s/::/-/g; $category = find_category($pkgbase); if (defined($category)) { printf("%s>=%s:../../%s/%s\n", $pkgbase, $ver, $category, $pkgbase); } else { # If the package does not exist but the # Perl module can be loaded, assume that # no extra dependency is needed. Otherwise fail. if (!eval(sprintf("use %s %s; 1;", $dep, $ver))) { die("$0: ERROR: No pkgsrc package found for dependency ${dep}>=${ver}.\n$@\n"); } } } } } sub prompt(@) { my ($message, $default) = @_; return $default || ""; } sub neatvalue { return; } 1;