#!/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; 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 (!m%w32api|mingw.*/include%o) { chomp; s/^\s+//; push @compiler, '-isystem', Cwd::abs_path($_); } } push @compiler, '-isystem', $_ for split ' ', $ENV{CCWRAP_DIRAFTER_HEADERS}; close $fd; } push @compiler, @ARGV; print join(' ', '+', @compiler), "\n" if $ENV{CCWRAP_VERBOSE}; exec @compiler or die "$0: $compiler[0] failed to execute\n";