diff interps/clc-intercal/Makefile.PL @ 996:859f9b4339e6

<Gregor> tar xf egobot.tar.xz
author HackBot
date Sun, 09 Dec 2012 19:30:08 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/interps/clc-intercal/Makefile.PL	Sun Dec 09 19:30:08 2012 +0000
@@ -0,0 +1,225 @@
+#!/usr/bin/perl -w
+
+eval 'exec perl -S $0 ${1+"$@"}'
+    if 0;
+
+# This script will create the Makefile to build and install CLC-INTERCAL
+
+# This file is part of CLC-INTERCAL 1.-94.-2
+
+# Copyright (c) 2008 Claudio Calvelli, all rights reserved.
+
+# CLC-INTERCAL is copyrighted software. However, permission to use, modify,
+# and distribute it is granted provided that the conditions set out in the
+# licence agreement are met. See files README and COPYING in the distribution.
+
+use vars qw($VERSION $PERVERSION);
+($VERSION) = ($PERVERSION = "CLC-INTERCAL Makefile.PL 1.-94.-2") =~ /\s(\S+)$/;
+
+use strict;
+use Cwd;
+use ExtUtils::MakeMaker;
+
+BEGIN { $ENV{CLC_INTERCAL_PATH} = '' }
+
+my @A = map {
+    /'/ and die "Try not to use single quotes...\n";
+    "'$_'"
+} @ARGV;
+
+# find out what packages are included in this
+my $ddsh_suffix = 'ddsh';
+my $tar_suffix = 'tar';
+my $gz_suffix = 'gz';
+
+open(MANIFEST, '<', 'MANIFEST')
+    or die "Sorry, I can't work without a MANIFEST\n";
+my $base = undef;
+my @extras = ();
+my @other_tar = ();
+my @other_ddsh = ();
+my @other_echo = ();
+while (<MANIFEST>) {
+    if (/^(.*)\.($ddsh_suffix|$tar_suffix)\.$gz_suffix\s+(\S+)$/) {
+	my ($name, $suffix, $path) = ($1, $2, $3);
+	"$name$suffix$path" =~ /[\s'"]/ and die "Invalid file name, please inform maintainer\n";
+	if ($name =~ /\bBase\b/) {
+	    $base and die "Something is wrong... Base is provided by $name and $base->[0]\n";
+	    $base = [$name, $suffix, $path];
+	} else {
+	    push @extras, [$name, $suffix, $path];
+	}
+	push @other_echo, "\$(ECHO) '$name.$ddsh_suffix.$gz_suffix   $path' >> .ddsh/MANIFEST";
+    } elsif (/^(\S+)/) {
+	push @other_tar, "\$(CP) $1 .tar/CLC-INTERCAL-%v/$1";
+	push @other_ddsh, "\$(CP) $1 .ddsh/$1" if $1 ne 'MANIFEST';
+	push @other_echo, "\$(ECHO) $1 >> .ddsh/MANIFEST";
+    }
+}
+close MANIFEST;
+$base or die "Something is wrong... Base package was not included\n";
+
+# pretend to write a Makefile. so that we get all the constants
+my $constants = '';
+ExtUtils::MakeMaker::WriteEmptyMakefile(
+    NORECURS => 1,
+);
+
+# extract base package
+extract(@$base);
+
+$ENV{CLC_INTERCAL_PATH} = getcwd . '/' . $base->[2];
+
+# extract other packages
+for my $extra (@extras) {
+    extract(@$extra);
+}
+
+# create a simple Makefile
+my @targets = qw(all test clean realclean install tardist ddsh_dist);
+my %beforepath = (
+    tardist => [
+	'$(RM_RF) .tar',
+	"\$(NOECHO) $^X -MExtUtils::Command -e mkpath .tar/CLC-INTERCAL-%v",
+	@other_tar,
+    ],
+    ddsh_dist => [
+	'$(RM_RF) .ddsh',
+	"\$(NOECHO) $^X -MExtUtils::Command -e mkpath .ddsh",
+	@other_echo,
+	@other_ddsh,
+    ],
+);
+my %afterpath = (
+    clean => [
+	'$(RM_F) Makefile.old',
+	'$(MV) Makefile Makefile.old',
+    ],
+    realclean => '$(RM_F) Makefile',
+    tardist => [
+	'cd .tar && $(TAR) $(TARFLAGS) ../CLC-INTERCAL-%v.tar CLC-INTERCAL-%v',
+	'$(RM_F) CLC-INTERCAL-%v.tar.%g',
+	'gzip CLC-INTERCAL-%v.tar',
+	'$(RM_RF) .tar',
+    ],
+    ddsh_dist => [
+	"cd .ddsh && $^X -e 'require \"../$base->[2]/INTERCAL/Distribute.pm\";' \\",
+	"\t-e 'Language::INTERCAL::Distribute::makeddshdist()' \\",
+	"\t'' MANIFEST ../CLC-INTERCAL-%v.ddsh %v",
+	'$(RM_F) CLC-INTERCAL-%v.ddsh.%g',
+	'gzip CLC-INTERCAL-%v.ddsh',
+	'$(RM_RF) .ddsh',
+    ],
+);
+my %perpath = (
+    realclean => '$(RM_RF) %p',
+    tardist => '$(MV) "%p/CLC-INTERCAL-%n-%v.tar.%g" ".tar/CLC-INTERCAL-%v/%n.tar.%g"',
+    ddsh_dist => '$(MV) "%p/CLC-INTERCAL-%n-%v.ddsh.%g" ".ddsh/%n.ddsh.%g"',
+);
+
+open(MAKEFILE, '>', 'Makefile') or die "Makefile: $!\n";
+print MAKEFILE "# Tool paths from MakeMaker...\n\n" or die "Makefile: $!\n";
+print MAKEFILE $constants or die "Makefile: $!\n";
+print MAKEFILE "\n\n# Generated by CLC-INTERCAL...\n\n" or die "Makefile: $!\n";
+print MAKEFILE "SUBDIRS = \\\n" or die "Makefile: $!\n";
+for my $pv (@extras) {
+    print MAKEFILE "\t$pv->[2]\\\n" or die "Makefile: $!\n";
+}
+print MAKEFILE "\t$base->[2]\n\n" or die "Makefile: $!\n";
+print MAKEFILE "CLC_INTERCAL_PATH = $ENV{CLC_INTERCAL_PATH}\n\n" or die "Makefile: $!\n";
+print MAKEFILE ".PHONY: @targets dist\n\n" or die "Makefile: $!\n";
+for my $target (@targets) {
+    print MAKEFILE "$target :\n" or die "Makefile: $!\n";
+    if (exists $beforepath{$target}) {
+	my $s = $beforepath{$target};
+	my %rep = (
+	    v => $VERSION,
+	    g => $gz_suffix,
+	    '%' => '%',
+	);
+	for my $c (ref $s ? @$s : $s) {
+	    my $cv = $c;
+	    $cv =~ s/%([vg%])/$rep{$1}/ge;
+	    print MAKEFILE "\t$cv\n" or die "Makefile: $!\n";
+	}
+    }
+    my $env = '';
+    for my $pv ($base, @extras) {
+	my ($name, $suffix, $path) = @$pv;
+	print MAKEFILE "\tcd $path; $env\$(MAKE) $target\n" or die "Makefile: $!\n";
+	my %rep = (
+	    p => $path,
+	    n => $name,
+	    s => $suffix,
+	    v => $VERSION,
+	    g => $gz_suffix,
+	    '%' => '%',
+	);
+	if (exists $perpath{$target}) {
+	    my $s = $perpath{$target};
+	    for my $c (ref $s ? @$s : $s) {
+		my $cv = $c;
+		$cv =~ s/%([pnsgv%])/$rep{$1}/ge;
+		print MAKEFILE "\t$cv\n" or die "Makefile: $!\n";
+	    }
+	}
+	$env = 'CLC_INTERCAL_PATH=\'$(CLC_INTERCAL_PATH)\' ';
+    }
+    if (exists $afterpath{$target}) {
+	my $s = $afterpath{$target};
+	my %rep = (
+	    v => $VERSION,
+	    g => $gz_suffix,
+	    '%' => '%',
+	);
+	for my $c (ref $s ? @$s : $s) {
+	    my $cv = $c;
+	    $cv =~ s/%([vg%])/$rep{$1}/ge;
+	    print MAKEFILE "\t$cv\n" or die "Makefile: $!\n";
+	}
+    }
+    print MAKEFILE "\n" or die "Makefile: $!\n";
+}
+print MAKEFILE "dist : ddsh_dist\n" or die "Makefile: $!\n";
+print MAKEFILE "\n" or die "Makefile: $!\n";
+close MAKEFILE or die "Makefile: $!\n";
+
+sub extract {
+    my ($name, $suffix, $path) = @_;
+    my @unlink = ();
+    print "Uncompressing $name\n";
+    unlink "$name.$suffix";
+    system("gzip  -dc '$name.$suffix.$gz_suffix' > $name.$suffix") == 0
+	or die "Uncompress failed: $!\n";
+    push @unlink, "$name.$suffix";
+    print "Extracting $name\n";
+    if ($suffix eq $ddsh_suffix) {
+	system('sh', "$name.$suffix") == 0
+	    or die "Extraction failed: $!\n";
+    } elsif ($suffix eq $tar_suffix) {
+	system('tar', '-xf', "$name.$suffix") == 0
+	    or die "Extraction failed: $!\n";
+    } else {
+	die "Internal error, suffix is not supposed to be $suffix\n";
+    }
+    unlink @unlink;
+    print "Running Makefile.PL for $name\n";
+    system("cd '$path' && $^X Makefile.PL @A") == 0
+	or die "Makefile.PL failed: $!\n";
+}
+
+sub MY::tools_other {
+    package MY;
+    my $i = shift->SUPER::tools_other(@_);
+    $constants .= $i;
+    $i;
+}
+
+sub MY::dist {
+    package MY;
+    my $i = shift->SUPER::dist(@_);
+    $constants .= $i;
+    $i;
+}
+
+1;