diff options
Diffstat (limited to 'autoconf/cccl')
-rwxr-xr-x | autoconf/cccl | 199 |
1 files changed, 199 insertions, 0 deletions
diff --git a/autoconf/cccl b/autoconf/cccl new file mode 100755 index 0000000..9bbb25a --- /dev/null +++ b/autoconf/cccl @@ -0,0 +1,199 @@ +#!/bin/sh + +# cccl +# Wrapper around MS's cl.exe and link.exe to make them act more like +# Unix cc and ld +# +# Copyright (C) 2000-2003 Geoffrey Wossum (gwossum@acm.org) +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# + +usage() +{ + cat <<EOF +Usage: cccl [OPTIONS] + +cccl is a wrapper around Microsoft's cl.exe and link.exe. It translates +parameters that Unix cc's and ld's understand to parameters that cl and link +understand. +EOF + exit $1 +} + +case $MACHTYPE in + *-msys) + slash="//" + ;; + *) + slash="/" + ;; +esac +# prog specifies the program that should be run (cl.exe or link.exe) +# We'll assume cl to start out +prog=cl +# opts specifies the command line to pass to the MSVC program +clopt="${slash}nologo" +linkopt="${slash}nologo" +# gotparam is 0 if we didn't ever see a param, in which case we show usage() +gotparam= + +# We want exceptions +clopt="$clopt ${slash}EHsc" + +### Run through every option and convert it to the proper MS one +while test $# -gt 0; do + case "$1" in + -D*) optarg= ;; + -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + gotparam=1 + + case "$1" in + --version) + cat <<EOF +cccl 0.03 + +Copyright 2000-2003 Geoffrey Wossum +This is free software; see the source for copying conditions. There is NO +waranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +EOF + exit 1; + ;; + + -ansi) + clopt="$clopt ${slash}Za" + ;; + + -c) + # -c (compile only) is actually the same, but for clarity... + clopt="$clopt ${slash}c" + ;; + + -g[0-9] | -g) + # cl only supports one debugging level + clopt="$clopt ${slash}Zi" + ;; + + -L*) + path=`echo "$1" | sed 's/-L//'` + linkopt="$linkopt /LIBPATH:$path" + ;; + + -l*) + lib=`echo "$1" | sed 's/-l//'` + if [ $lib != "dnsapi" -a $lib != "ws2_32" -a $lib != "wsock32" ]; then + lib="lib$lib.lib" + else + lib="$lib.lib" + fi + + clopt="$clopt $lib" + linkopt="$linkopt $lib" + ;; + + -m386) + clopt="$clopt ${slash}G3" + ;; + + -m486) + clopt="$clopt ${slash}G4" + ;; + + -mpentium) + clopt="$clopt ${slash}G5" + ;; + + -mpentiumpro) + clopt="$clopt ${slash}G6" + ;; + + -o) + # specifying output file, is it an object or an executable + shift + case "$1" in + *.o | *.obj) + clopt="$clopt ${slash}Fo$1" + ;; + *) + clopt="$clopt ${slash}Fe$1"; + linkopt="$linkopt ${slash}out:$1" + ;; + esac;; + + -pedantic) + #ignore pedantic + ;; + + -W*) + #ignore warnings + ;; + + -isystem) + shift + clopt="$clopt -I$1" + ;; + + -MT) + exit 0 + ;; + + -mno-cygwin) + ;; + + *.cc | *.cxx | *.C) + # C++ source file with non .cpp extension, make sure cl understand + # that it is C++ + clopt="$clopt ${slash}Tp$1" + ;; + + *.o | *.obj | *.a | *.lib) + # Object files/libraries seen, this command will require link + # Switch the prog to link + linkopt="$linkopt $1" + prog="link" + ;; + + *) + clopt="$clopt $1" + linkopt="$linkopt $1" + if test x$optarg != x ; then + clopt="$clopt=$optarg" + linkopt="$linkopt=$optarg" + fi + ;; + + esac + shift +done + +if test x$gotparam = x ; then + usage + exit 1 +fi + +# choose which opts we built up based on which program will actually run +if test x$prog = xcl ; then + opts=$clopt +else + opts=$linkopt +fi + +#echo "$prog $opts" +exec $prog $opts +exit 0 + + |