summaryrefslogtreecommitdiff
path: root/Tools/scripts/mkptools/mkpskel
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/scripts/mkptools/mkpskel')
-rwxr-xr-xTools/scripts/mkptools/mkpskel280
1 files changed, 280 insertions, 0 deletions
diff --git a/Tools/scripts/mkptools/mkpskel b/Tools/scripts/mkptools/mkpskel
new file mode 100755
index 000000000000..bc5336812ed6
--- /dev/null
+++ b/Tools/scripts/mkptools/mkpskel
@@ -0,0 +1,280 @@
+#!/usr/bin/perl -w
+#
+# Copyright (c) 2000 Neil Blakey-Milner
+# All rights reserved.
+#
+# 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.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+#
+
+# a script to gain a bit of knowledge about a supplied distfile
+
+use strict;
+use vars qw/ $opt_n /;
+
+use File::Basename qw( basename dirname );
+use Getopt::Std qw( getopts );
+
+my ($filename, $ver, $initdir, $distdir, $wrkdir, $tmpdir);
+my ($makefile, $wrksrc);
+my (%cap);
+
+chomp($initdir = `pwd`);
+
+$cap{"MAINTAINER"} = ($ENV{"MAINTAINER"} || "ports\@freebsd.org");
+
+getopts('n');
+
+&usage if $#ARGV != 0;
+
+$filename = $ARGV[0];
+
+if ($filename =~ m#^(f|ht)tp\://#) {
+ print `fetch $filename`;
+ $filename = basename($filename);
+}
+chdir(dirname($filename));
+chomp($distdir = `pwd`);
+chdir ($initdir);
+
+&chk_extract; # .tar.gz vs .tgz vs .tar.bz2, &c.
+&enh_distname;
+if ($opt_n) {
+ print "filename is $filename\n";
+ print "PORTNAME is " . $cap{"PORTNAME"} . "\n";
+ print "PORTVERSION is " . $cap{"PORTVERSION"} . "\n";
+ exit;
+}
+&bareskel;
+&md5;
+&writemk;
+
+exit;
+
+sub bareskel {
+ $tmpdir = $cap{'PORTNAME'};
+ $tmpdir .= ".$$" while -e $tmpdir;
+ mkdir($tmpdir,0777);
+
+ `printf "\n" > $tmpdir/pkg-plist`;
+ `printf "\n" > $tmpdir/pkg-descr`;
+ `printf "A\n" > $tmpdir/pkg-comment`;
+}
+
+sub writemk {
+
+ my (%tmp);
+ my ($key);
+
+ my ($distname);
+ $distname = $cap{"PORTNAME"};
+
+ foreach $key (keys %cap) {
+ $tmp{$key} = $cap{$key};
+ }
+
+ open(MAKEFILE, ">$tmpdir/Makefile");
+ my ($date);
+ chomp($date = `date +"\%d \%b \%Y"`);
+
+ print MAKEFILE <<EOF;
+# New ports collection makefile for: $distname
+# Date created: $date
+# Whom: makeport.pl
+#
+# \$FreeBSD\$
+#
+
+EOF
+
+ print MAKEFILE "PORTNAME= " . $tmp{"PORTNAME"} . "\n";
+ print MAKEFILE "PORTVERSION= " . $tmp{"PORTVERSION"} . "\n";
+ delete($tmp{"PORTNAME"});
+ delete($tmp{"PORTVERSION"});
+
+ print MAKEFILE "CATEGORIES= misc\n";
+ foreach $key (keys %tmp) {
+ my($tmp) = $tmp{$key};
+ if (($key eq "DISTNAME") || ($key eq "EXTRACT_SUFX")) {
+ print MAKEFILE "$key=\t$tmp\n";
+ delete($tmp{$key});
+ }
+ }
+
+ print MAKEFILE "\nMAINTAINER=\t" . $tmp{"MAINTAINER"} . "\n\n";
+ delete($tmp{"MAINTAINER"});
+
+ if ($tmp{"LIB_DEPENDS"}) {
+ print MAKEFILE "LIB_DEPENDS=". $tmp{"LIB_DEPENDS"} . "\n\n";
+ delete($tmp{"LIB_DEPENDS"});
+ }
+
+ #second group
+ foreach $key (keys %tmp) {
+ my($tmp) = $tmp{$key};
+ print MAKEFILE "$key=\t$tmp\n";
+ }
+
+ print MAKEFILE "# -- eos --\n\n";
+
+ print MAKEFILE ".include <bsd.port.mk>\n";
+ close (MAKEFILE);
+}
+
+sub md5 {
+ my $tmp = basename($filename);
+ chdir ($initdir);
+ `md5 $filename | perl -pe "s#$filename#$tmp#" > $tmpdir/distinfo`;
+}
+
+sub chk_extract {
+ my $tmp = basename($filename);
+
+ $tmp =~ s/(\.tgz)$// && do {
+ $cap{"DISTNAME"} = $tmp;
+ $cap{"EXTRACT_SUFX"} = $1;
+ return;
+ };
+ $tmp =~ s/(\.tar\.bz2)$// && do {
+ $cap{"DISTNAME"} = $tmp;
+ $cap{"EXTRACT_SUFX"} = $1 if ($1 ne ".tar.bz2");
+ $cap{"USE_BZIP2"} = "YES";
+ return;
+ };
+ $tmp =~ s/(\.tar)$// && do {
+ $cap{"DISTNAME"} = $tmp;
+ $cap{"EXTRACT_SUFX"} = $1;
+ return;
+ };
+ $tmp =~ s/(\.tar.*)$// && do {
+ $cap{"DISTNAME"} = $tmp;
+ $cap{"EXTRACT_SUFX"} = $1 if ($1 ne ".tar.gz");
+ return;
+ };
+}
+
+sub add_extsuffix {
+ return if $cap{"EXTRACT_SUFX"};
+ if ($cap{"USE_BZIP2"}) {
+ $cap{"EXTRACT_SUFX"} = ".tar.bz2";
+ } else {
+ $cap{"EXTRACT_SUFX"} = ".tar.gz";
+ }
+}
+
+sub enh_distname {
+ my($changes) = 0;
+ my($play) = $cap{"DISTNAME"};
+ #print "starting play...\n";
+ my($firstshot) = 0;
+ my($portname, $portversion);
+ if (defined($play) eq "") {
+ die "can't make heads or tails of $filename";
+ }
+ while ($changes == 0) {
+ $changes = 1;
+ $firstshot++;
+ $_ = $play;
+ #print "using $play\n";
+ /^(.*[0-9][a-z]?)([-._][a-z]*)$/i && do {
+ print "Door #1\n";
+ $cap{"DISTNAME"} = $1;
+ $play = $1;
+ &add_extsuffix;
+ $cap{"EXTRACT_SUFX"} = $2 . $cap{"EXTRACT_SUFX"};
+ $changes = 0;
+ next;
+ };
+ /^([a-z]*)([0-9]+)([-._])([0-9]+([-._]).*)$/i && do {
+ print "Door #2\n";
+ if ($5 eq $3) {
+ $play = "$1-$2.$4";
+ #$cap{"PORTNAME"} = $1;
+ #$cap{"PORTVERSION"} = "$2.$4";
+ $portname = $1;
+ $portversion = "$2.$4";
+ $changes = 0;
+ next;
+ }
+ };
+ /^(.*?[^-._])([0-9])([-._])([^v]?[0-9]*[a-z]*)([-._]?)(.*)$/i &&( $firstshot == 1) && do {
+ print "Door #4\n";
+ if (($5 eq $3) || ($5 eq "")) {
+ #$cap{"PORTNAME"} = $1;
+ #$cap{"PORTVERSION"} = "$2$3$4$5$6";
+ $portname = $1;
+ $portversion = "$2$3$4$5$6";
+ next;
+ }
+ };
+ /^(.*?)([-._])(v?)((?:[0-9][-._])*[0-9][a-z]?.*)$/i && do {
+ print "Door #3\n";
+ my($tmp);
+ $tmp = $1;
+ $ver = "$4";
+ if ($ver =~ /^(.*)([-._])([0-9]?)([a-z])[a-z]+([0-9]?)$/) {
+ print "Door #3.1\n";
+ my($foo) = "";
+ #print "1 - $1\n";
+ #print "2 - $2\n";
+ #print "3 - $3\n";
+ #print "4 - $4\n";
+ #print "5 - $5\n";
+ $foo = "." if $2;
+ #$ver = "$1$foo$3$4$5";
+ $ver = "$1$foo$3$4$5";
+ }
+ $portname = $tmp;
+ $portversion = $ver;
+ next;
+ };
+ }
+
+ if (defined($portversion) eq "") {
+ die "can't make heads or tails of $filename";
+ }
+
+ $portversion =~ s/_/./g;
+ $portversion =~ s/-/./g;
+
+ $cap{"PORTNAME"} = $portname;
+ $cap{"PORTVERSION"} = $portversion;
+
+ my ($temp1);
+ my ($temp2);
+
+ $temp1 = $cap{"DISTNAME"};
+ $temp2 = $cap{"PORTNAME"} . "-" . $cap{"PORTVERSION"};
+
+ if ($temp1 eq $temp2) {
+ delete($cap{"DISTNAME"});
+ }
+}
+
+sub usage {
+ print STDERR <<"EOF";
+usage: $0 filename
+
+ generates a ports skeleton for port based on filename
+
+EOF
+ exit;
+}