1*b1cdbd2cSJim Jagielski#************************************************************** 2*b1cdbd2cSJim Jagielski# 3*b1cdbd2cSJim Jagielski# Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski# or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski# distributed with this work for additional information 6*b1cdbd2cSJim Jagielski# regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski# to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski# "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski# with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski# 11*b1cdbd2cSJim Jagielski# http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski# 13*b1cdbd2cSJim Jagielski# Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski# software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski# KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski# specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski# under the License. 19*b1cdbd2cSJim Jagielski# 20*b1cdbd2cSJim Jagielski#************************************************************** 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski$solarversion = $ENV{SOLARVERSION}; 25*b1cdbd2cSJim Jagielski$solarversion =~ s![^0-9A-Za-z]!\\$&!g; 26*b1cdbd2cSJim Jagielski$in = <> || die 'no input'; 27*b1cdbd2cSJim Jagielskichomp $in; 28*b1cdbd2cSJim Jagielskiif ($ENV{OS} eq 'LINUX') { 29*b1cdbd2cSJim Jagielski 1 while $in =~ s!\s+-I\s*[^/]\S*\s*! !g; # discard relative includes 30*b1cdbd2cSJim Jagielski $in =~ s!(\s+-I\s*)$solarversion(\S*)!$1\${SOLARVERSION}$2!og; 31*b1cdbd2cSJim Jagielski # macrofy includes to solver 32*b1cdbd2cSJim Jagielski $in =~ s!\s+-o\s*\S+! -o /dev/null! || die 'bad input: no -o'; 33*b1cdbd2cSJim Jagielski $in =~ s!\S+/testhxx.cxx!-x c++ /proc/self/fd/0! 34*b1cdbd2cSJim Jagielski || die 'bad input: no source file'; 35*b1cdbd2cSJim Jagielski print STDOUT '#!/bin/sh', "\n"; 36*b1cdbd2cSJim Jagielski print STDOUT $in, 37*b1cdbd2cSJim Jagielski ' <<<"#include \\"`echo $(if [ ${1%/*} != $1 ];then cd ${1%/*};fi;', 38*b1cdbd2cSJim Jagielski '/bin/pwd)/${1##*/}`\\""', "\n"; 39*b1cdbd2cSJim Jagielski} elsif ($ENV{OS} eq 'SOLARIS') { 40*b1cdbd2cSJim Jagielski 1 while $in =~ s!\s+-I\s*[^/]\S*\s*! !g; # discard relative includes 41*b1cdbd2cSJim Jagielski $in =~ s!(\s+-I\s*)$solarversion(\S*)!$1\${SOLARVERSION}$2!og; 42*b1cdbd2cSJim Jagielski # macrofy includes to solver 43*b1cdbd2cSJim Jagielski $in =~ s!\s+-o\s*\S+! -o /dev/null! || die 'bad input: no -o'; 44*b1cdbd2cSJim Jagielski $in =~ s!\S+/testhxx.cxx!\${my_tmp}! 45*b1cdbd2cSJim Jagielski || die 'bad input: no source file'; 46*b1cdbd2cSJim Jagielski print STDOUT '#!/bin/sh', "\n"; 47*b1cdbd2cSJim Jagielski print STDOUT 48*b1cdbd2cSJim Jagielski 'my_tmp=${TMPDIR:-/tmp}/`/usr/xpg4/bin/id -u`_$$_include.cc', "\n"; 49*b1cdbd2cSJim Jagielski print STDOUT 'my_pat=`dirname $1`', "\n"; 50*b1cdbd2cSJim Jagielski print STDOUT 'my_fil=`basename $1`', "\n"; 51*b1cdbd2cSJim Jagielski print STDOUT 'my_org=${PWD}', "\n"; 52*b1cdbd2cSJim Jagielski print STDOUT 'cd $my_pat || exit 1', "\n"; 53*b1cdbd2cSJim Jagielski print STDOUT 'my_pat=`pwd`', "\n"; 54*b1cdbd2cSJim Jagielski print STDOUT 'cd $my_org || exit 1', "\n"; 55*b1cdbd2cSJim Jagielski print STDOUT 56*b1cdbd2cSJim Jagielski 'echo "#include \\"${my_pat}/${my_fil}\\"" > ${my_tmp} || exit 1', "\n"; 57*b1cdbd2cSJim Jagielski print STDOUT $in, ' > ${my_tmp}.out 2>&1', "\n"; 58*b1cdbd2cSJim Jagielski print STDOUT 'my_ret=$?', "\n"; 59*b1cdbd2cSJim Jagielski print STDOUT 60*b1cdbd2cSJim Jagielski 'if [ ${my_ret} -ne 0 ] ; then echo $1 >&2 ; cat ${my_tmp}.out >&2 ;', 61*b1cdbd2cSJim Jagielski ' fi', "\n"; 62*b1cdbd2cSJim Jagielski print STDOUT 'unlink ${my_tmp} || exit 1', "\n"; 63*b1cdbd2cSJim Jagielski print STDOUT 'unlink ${my_tmp}.out || exit 1', "\n"; 64*b1cdbd2cSJim Jagielski print STDOUT 'exit ${my_ret}', "\n"; 65*b1cdbd2cSJim Jagielski} elsif ($ENV{OS} eq 'WNT') { 66*b1cdbd2cSJim Jagielski if ($ENV{COM} eq 'GCC') { 67*b1cdbd2cSJim Jagielski 1 while $in =~ s!\s+-I\s*\.\S*\s*! !g; # discard relative includes 68*b1cdbd2cSJim Jagielski $in =~ s!(\s+-I\s*)(?i:$solarversion)(\S*)!$1\${SOLARVERSION}$2!og; 69*b1cdbd2cSJim Jagielski # macrofy includes to solver 70*b1cdbd2cSJim Jagielski $in =~ s!\s+-o\s*\S+! -o /dev/null! || die 'bad input: no -o'; 71*b1cdbd2cSJim Jagielski $in =~ s!\S+/testhxx.cxx!\${my_tmp}! 72*b1cdbd2cSJim Jagielski || die 'bad input: no source file'; 73*b1cdbd2cSJim Jagielski print STDOUT '#!/bin/sh', "\n"; 74*b1cdbd2cSJim Jagielski print STDOUT 75*b1cdbd2cSJim Jagielski 'my_tmp=${TMPDIR:-/tmp}/`id -u`_$$_include.cc', "\n"; 76*b1cdbd2cSJim Jagielski print STDOUT 'my_pat=`dirname $1`', "\n"; 77*b1cdbd2cSJim Jagielski print STDOUT 'my_fil=`basename $1`', "\n"; 78*b1cdbd2cSJim Jagielski print STDOUT 'my_org=${PWD}', "\n"; 79*b1cdbd2cSJim Jagielski print STDOUT 'cd $my_pat || exit 1', "\n"; 80*b1cdbd2cSJim Jagielski print STDOUT 'my_pat=`cygpath -m \`pwd\``', "\n"; 81*b1cdbd2cSJim Jagielski print STDOUT 'cd $my_org || exit 1', "\n"; 82*b1cdbd2cSJim Jagielski print STDOUT 83*b1cdbd2cSJim Jagielski 'echo "#include \\"${my_pat}/${my_fil}\\"" > ${my_tmp} || exit 1', "\n"; 84*b1cdbd2cSJim Jagielski print STDOUT $in, ' > ${my_tmp}.out 2>&1', "\n"; 85*b1cdbd2cSJim Jagielski print STDOUT 'my_ret=$?', "\n"; 86*b1cdbd2cSJim Jagielski print STDOUT 87*b1cdbd2cSJim Jagielski 'if [ ${my_ret} -ne 0 ] ; then echo $1 >&2 ; cat ${my_tmp}.out >&2 ;', 88*b1cdbd2cSJim Jagielski ' fi', "\n"; 89*b1cdbd2cSJim Jagielski print STDOUT 'unlink ${my_tmp} || exit 1', "\n"; 90*b1cdbd2cSJim Jagielski print STDOUT 'unlink ${my_tmp}.out || exit 1', "\n"; 91*b1cdbd2cSJim Jagielski print STDOUT 'exit ${my_ret}', "\n"; 92*b1cdbd2cSJim Jagielski } else { 93*b1cdbd2cSJim Jagielski 1 while $in =~ s!\s+-I\s*\.\S*\s*! !g; # discard relative includes 94*b1cdbd2cSJim Jagielski $in =~ s!(\s+-I\s*)(?i:$solarversion)(\S*)!$1\${SOLARVERSION}$2!og; 95*b1cdbd2cSJim Jagielski # macrofy includes to solver 96*b1cdbd2cSJim Jagielski $in =~ s!\s+-Fo\s*\S+! -Fo$[my_tmp}obj! || die 'bad input: no -Fo'; 97*b1cdbd2cSJim Jagielski $in =~ s!\s+-Zi\s! !; 98*b1cdbd2cSJim Jagielski $in =~ s!\s+-Fd\s*\S+!!; 99*b1cdbd2cSJim Jagielski print STDOUT '#!/bin/sh', "\n"; 100*b1cdbd2cSJim Jagielski print STDOUT 101*b1cdbd2cSJim Jagielski 'my_tmp=${TMPDIR:-/tmp}/`id -u`_$$_include.cc', "\n"; 102*b1cdbd2cSJim Jagielski print STDOUT 'my_pat=`dirname $1`', "\n"; 103*b1cdbd2cSJim Jagielski print STDOUT 'my_fil=`basename $1`', "\n"; 104*b1cdbd2cSJim Jagielski print STDOUT 'my_org=${PWD}', "\n"; 105*b1cdbd2cSJim Jagielski print STDOUT 'cd $my_pat || exit 1', "\n"; 106*b1cdbd2cSJim Jagielski print STDOUT 'my_pat=`pwd`', "\n"; 107*b1cdbd2cSJim Jagielski print STDOUT 'cd $my_org || exit 1', "\n"; 108*b1cdbd2cSJim Jagielski print STDOUT 109*b1cdbd2cSJim Jagielski 'echo "#include \\"${my_pat}/${my_fil}\\"" > ${my_tmp} || exit 1', "\n"; 110*b1cdbd2cSJim Jagielski print STDOUT $in, ' > ${my_tmp}.out 2>&1', "\n"; 111*b1cdbd2cSJim Jagielski print STDOUT 'my_ret=$?', "\n"; 112*b1cdbd2cSJim Jagielski print STDOUT 113*b1cdbd2cSJim Jagielski 'if [ ${my_ret} -ne 0 ] ; then echo $1 >&2 ; cat ${my_tmp}.out >&2 ;', 114*b1cdbd2cSJim Jagielski ' fi', "\n"; 115*b1cdbd2cSJim Jagielski print STDOUT 'unlink ${my_tmp} || exit 1', "\n"; 116*b1cdbd2cSJim Jagielski print STDOUT 'unlink ${my_tmp}.out || exit 1', "\n"; 117*b1cdbd2cSJim Jagielski print STDOUT 'exit ${my_ret}', "\n"; 118*b1cdbd2cSJim Jagielski } 119*b1cdbd2cSJim Jagielski} else { 120*b1cdbd2cSJim Jagielski print STDOUT 'echo \'no testhxx on this platform\'', "\n"; 121*b1cdbd2cSJim Jagielski} 122