56 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/perl
 | |
| use Cwd;
 | |
| use strict;
 | |
| my $cxx;
 | |
| my $ccorcxx;
 | |
| if ($ARGV[0] ne '++') {
 | |
|     $ccorcxx = 'CC';
 | |
|     $cxx = 0;
 | |
| } else {
 | |
|     shift @ARGV;
 | |
|     $ccorcxx = 'CXX';
 | |
|     $cxx = 1;
 | |
| }
 | |
| die "$0: $ccorcxx environment variable does not exist\n" unless exists $ENV{$ccorcxx};
 | |
| my @compiler = split ' ', $ENV{$ccorcxx};
 | |
| if ("@ARGV" !~ / -nostdinc/o) {
 | |
|     my $fd;
 | |
|     push @compiler, ($cxx ? '-xc++' : '-xc');
 | |
|     if (!open $fd, '-|') {
 | |
| 	open STDERR, '>&', \*STDOUT;
 | |
| 	exec @compiler, '/dev/null', '-v', '-E', '-o', '/dev/null' or die "*** error execing $compiler[0] - $!\n";
 | |
|     }
 | |
|     $compiler[1] =~ s/xc/nostdinc/o;
 | |
|     push @compiler, '-nostdinc' if $cxx;
 | |
|     push @compiler, '-I' . $_ for split ' ', $ENV{CCWRAP_HEADERS};
 | |
|     push @compiler, '-isystem', $_ for split ' ', $ENV{CCWRAP_SYSTEM_HEADERS};
 | |
|     my $finding_paths = 0;
 | |
|     my $mingw_compiler = $compiler[0] =~ /mingw/o;
 | |
|     my @dirafters;
 | |
|     for my $d (split ' ', $ENV{CCWRAP_DIRAFTER_HEADERS}) {
 | |
| 	push @dirafters, '-isystem', $d if !$mingw_compiler || $d !~ /w32api/o;
 | |
|     }
 | |
|     while (<$fd>) {
 | |
| 	if (/^\*\*\*/o) {
 | |
| 	    print;
 | |
| 	} elsif ($_ eq "#include <...> search starts here:\n") {
 | |
| 	    $finding_paths = 1;
 | |
| 	} elsif (!$finding_paths) {
 | |
| 	    next;
 | |
| 	} elsif ($_ eq "End of search list.\n") {
 | |
| 	    last;
 | |
| 	} elsif (!@dirafters || !m%w32api|mingw.*/include%o) {
 | |
| 	    chomp;
 | |
| 	    s/^\s+//;
 | |
| 	    push @compiler, '-isystem', Cwd::abs_path($_);
 | |
| 	}
 | |
|     }
 | |
|     push @compiler, @dirafters;
 | |
|     close $fd;
 | |
| }
 | |
| 
 | |
| push @compiler, @ARGV;
 | |
| 
 | |
| print join(' ', '+', @compiler), "\n" if $ENV{CCWRAP_VERBOSE};
 | |
| exec @compiler or die "$0: $compiler[0] failed to execute\n";
 |