#!/usr/bin/perl
#
# Combine klibc.config, klcc.in to produce a klcc script
#
# Usage: makeklcc klcc.in klibc.config perlpath
#

use File::Spec;

($klccin, $klibcconf, $perlpath) = @ARGV;

sub pathsearch($) {
    my($file) = @_;
    my(@path);
    my($p,$pp);

    if ( $file =~ /\// ) {
	return File::Spec->rel2abs($file);
    }

    foreach $p ( split(/\:/, $ENV{'PATH'}) ) {
	$pp = File::Spec->rel2abs(File::Spec->catpath(undef, $p, $file));
	return $pp if ( -x $pp );
    }

    return undef;
}

print "#!${perlpath}\n";

open(KLIBCCONF, "< $klibcconf\0")
    or die "$0: cannot open $klibcconf: $!\n";
while ( defined($l = <KLIBCCONF>) ) {
    chomp $l;
    if ( $l =~ /^([^=]+)\=\s*(.*)$/ ) {
	$n = $1;  $s = $2;

	if ( $n eq 'CC' || $n eq 'LD' || $n eq 'STRIP' ) {
	    $s1 = pathsearch($s);
	    die "$0: Cannot find $n: $s\n" unless ( defined($s1) );
	    $s = $s1;
	}

	print "\$$n = \"\Q$s\E\";\n";
	print "\$conf{\'\L$n\E\'} = \\\$$n;\n";

	print "\@$n = ("; $sep = '';
	while ( $s =~ /^\s*(\S+)/ ) {
	    print $sep, "\"\Q$1\E\"";
	    $sep = ', ';
	    $s = "$'";
	}
	print ");\n";
    }
}
close(KLIBCCONF);

open(KLCCIN, "< $klccin\0")
or die "$0: cannot open $klccin: $!\n";
while ( defined($l = <KLCCIN>) ) {
    print $l;
}
close(KLCCIN);
