eval '(exit $?0)' && eval '[ -f /usr/local/bin/perl ] && exec /usr/local/bin/perl -S $0 ${1+"$@"}; exec perl -S $0 ${1+"$@"};'
& eval 'if ( -f /usr/local/bin/perl ) exec /usr/local/bin/perl -S $0 $argv:q ; exec perl -S $0 $argv:q'
     if 0;

#  Gerald Pani

#
#  imake.pl
#

# mpichler: give warning but do no exit on wrong $major or $minor
# mpichler: always give an error if $CPU is not set


@args = @ARGV;

@defs = &machine();

$comm = join(' ', 'imake', @defs, @args);
print "$comm\n";
system($comm);

exit(0);
  
sub machine {
    local( $uname, $sysname, $release, @defs);
    $uname = &which('uname') || (&warning( "uname not found") && return ());
    
    chop( $sysname = `$uname -s`) || (&warning( "no sysinfo from uname -s") && return ());
    chop( $release = `$uname -r`) || (&warning( "no release from uname -r") && return ());

    local($cpu) = $ENV{'CPU'};
    if (!defined($cpu) || !$cpu) {
	&warning( "CPU environment variable not set");
	exit(1);
    }
    
    if ($sysname =~ /^HP-UX$/) {
	# HPUX: mars, venus (HP-UX mars A.09.01 E 9000/720 64954132 8-user license)
	local($major, $minor) = ($release =~ /^A.([0-9]+)\.([0-9]+)/);
	if ($major != 9) {
	    &warning( "Major OS release must be 9 for HP-UX.");
	    # return ();
	}
	if ($minor != 1) {
	    &warning( "OS release must be 9.01 for HP-UX.");
	    # return ();
	}
	return ("-DHPUX", 
		"-DHGExtraCCDefines=\"-DHPUX -DSYSV -DHG_OSMaj=9 -DHG_OSMin=1\"");
    }
    elsif ($sysname =~ /^SunOS$/) {
	# SUNX: ganymed, pluto
	local($major, $minor) = ($release =~ /^([0-9]+)\.([0-9]+)/);
	if ($major != 4 && $major != 5) {
	    &warning( "Major OS release must be 4 or 5 for SunOS.");
	    # return ();
	}
	if ($major == 4) {
	    if ($minor != 1) {
		&warning( "OS release must be 4.1.x for SunOS4");
		# return ();
	    }
	    # SunOS ganymed 4.1.3 1 sun4m
            # mpichler, 19950711: added -D__GNUC__ for compilation with g++
	    return ("-DSUN -D__GNUC__", 
		    "-DHGExtraCCDefines=\"-DSUN -DBSD -DHG_OSMaj=4 -DHG_OSMin=1\"");
	}
	if ($major == 5) {
	    if ($minor != 3) {
		&warning( "OS release must be 5.3 for Solaris");
		# return ();
	    }
	    # SunOS pluto 5.3 Generic_101674-01 sun4m sparc
	    return ("-DSOLARIS", "-DSUN", 
		    "-DHGExtraCCDefines=\"-DSUN -DSOLARIS -DSYSV -DSVR4 -DHG_OSMaj=5 -DHG_OSMin=3\"");
	}
    }
    elsif ($sysname =~ /^ULTRIX$/) {
	# PMAX: triton, titan (ULTRIX titan 4.2 0 RISC)
	local($major, $minor) = ($release =~ /^([0-9]+)\.([0-9]+)/);
	if ($major != 4) {
	    &warning( "Major OS release must be 4 for Ultrix.");
	    # return ();
	}
	if ($minor != 2) {
	    &warning( "OS release must be 4.2 for Ultrix");
	    # return ();
	}
	return ("-DULTRIX",
		"-DHGExtraCCDefines=\"-DULTRIX -DBSD -DHG_OSMaj=4 -DHG_OSMin=2\"");
    }
    elsif ($sysname =~ /^IRIX$/) {
	# SGI: uranus (IRIX fiicmsg01 5.[2-9] 02282013 IP12 mips)
	local($major, $minor) = ($release =~ /^([0-9]+)\.([0-9]+)/);
	if ($major != 5) {
	    &warning( "Major OS release must be 5 for Irix.");
	    # return ();
	}
	if ($minor < 2) {
	    &warning( "OS release must be at least 5.2 for Irix");
	    # return ();
	}
#       local($cpu) = $ENV{'CPU'};
#       if (!defined($cpu) || !$cpu) {
#           &warning( "CPU environment variable not set");
#           exit(1);
#       }
	if ($cpu eq 'SGI_GNU') {
	    return ("-DIRIX -D__GNUC__",
		    "-DHGExtraCCDefines=\"-DIRIX -DSYSV -DSVR4 -DHG_OSMaj=5 -DHG_OSMin=$minor\"");
	}
	elsif ($cpu eq 'SGI') {
	    return ("-DIRIX",
		    "-DHGExtraCCDefines=\"-DIRIX -DSYSV -DSVR4 -DHG_OSMaj=5 -DHG_OSMin=$minor\"");
	}
	else {
	    &warning( "use either SGI_GNU or SGI for the CPU environment variable");
	    exit(1);
	}
    }
    elsif ($sysname =~ /^OSF1$/) {
	# ALPHA_OSF1: jupiter (OSF1 jupiter V3.2 214 alpha)
	local($major, $minor) = ($release =~ /^V([0-9]+)\.([0-9]+)/);
	if ($major < 2) {
	    &warning( "Major OS release must be at least 2 for OSF1.");
	    # return ();
	}
# 	if ($minor != 1) {
# 	    &warning( "OS release must be 2.1 for OSF1");
# 	    return ();
# 	}
#       local($cpu) = $ENV{'CPU'};
#       if (!defined($cpu) || !$cpu) {
#           &warning( "CPU environment variable not set");
#           exit(1);
#       }
	if ($cpu eq 'ALPHA_GNU') {
	    return ("-DOSF1 -D__GNUC__",
		    "-DHGExtraCCDefines=\"-DOSF1 -DBSD -DHG_OSMaj=$major -DHG_OSMin=$minor\"");
	}
	elsif ($cpu eq 'ALPHA_OSF1') {
	    return ("-DOSF1",
		    "-DHGExtraCCDefines=\"-DOSF1 -DBSD -DHG_OSMaj=$major -DHG_OSMin=$minor\"");
	}
	else {
	    &warning( "use either ALPHA_GNU or ALPHA_OSF1 for the CPU environment variable");
	    exit(1);
	}
    }
    elsif ($sysname =~ /^Linux$/) {
	# LINUX: fiicm1pc40 (Linux fiicm1pc40 1.1.62 #3 Thu Nov 17 23:20:08 MET 1994 i486)
	local($major, $minor) = ($release =~ /^([0-9]+)\.([0-9]+)/);
	if ($major != 1) {
	    &warning( "Major OS release must be 1 for Linux.");
	    # return ();
	}
	if ($minor != 2) {
	    &warning( "OS release must be 1.2 for Linux");
	    # return ();
	}
	return ("-DLINUX",
		"-DHGExtraCCDefines=\"-DLINUX -DHG_OSMaj=1 -DHG_OSMin=1\"");
    }
    elsif ($sysname =~ /^SCO_SV$/) {
    # SCO: (SCO 3.2v5.0.0 i386) <mwhyles@merlyn.galstar.com>
        local($major, $minor) = ($release =~ /^([0-9]+)\.([0-9]+)/);
        if ($major != 3) {
                &warning( "Major OS release must be 3 for SCO.");
                # return ();
        }
        if ($minor != 2) {
                &warning( "OS release must be 2 for SCO");
                # return ();
        }
        return ("-Dsco",
                "-DHGExtraCCDefines=\"-DSCO -DSYSV -DHG_OSMaj=3 -DHG_OSMin=2\"");
    }

    elsif ($sysname =~ /^AIX$/) {
	# AIX: fsmtiw01 AIX fsmtiw01 2 3 000029423700()
	local($major, $minor);
	$minor = $release;
	chop( $major = `$uname -v`) || (&warning( "no version from uname -v") && return ());
	if ($major != 3) {
	    &warning( "Major OS release must be 3 for AIX.");
	    # return ();
	}
	if ($minor != 2) {
	    &warning( "OS release must be 3.2.x for AIX");
	    # return ();
	}
	return ("-DAIX",
		"-DHGExtraCCDefines=\"-DAIX -DAIXV3 -DSYSV -DHG_OSMaj=3 -DHG_OSMin=2\"");
    }
    elsif ($sysname =~ /^UNIX_SV$/) {
	# UnixWare, other SVR4.x; mike@novell.co.uk
	return ("-DSOLARIS", "-DUnixWare", 
		    "-DHGExtraCCDefines=\"-DUnixWare -DSOLARIS -DSYSV -DSVR4 \"");
    }
    &warning( "OS unknown");
    return ();
}

sub warning {
    local( $msg) = @_;
    print "********************************************************\n";
    print "WARNING: $msg\n";
    print "********************************************************\n";
    return 1;
}



sub which {
  local( $prog) = @_;
  local(@path) = split( /:/, $ENV{'PATH'});
  while(defined($p = shift(@path))) {
    $p .= '/' . $prog;
    return $p if (-x $p) && (-f $p);
  }
  return '';
}
