move to common gemini arch directory
[charm.git] / src / arch / win64 / unix2nt_cc.old
1 #!/bin/sh
2 ##############################################################################
3 # unix2nt_cc:   for VC++ ver 6
4 # Maps UNIX C/C++ compiler command-line options to 
5 # Microsoft Visual C++ 6.0 command line options. 
6 # That is, this script is a UNIX-ifying wrapper for 
7 # the NT CL and LINK commands. 
8 #
9 # Known bugs: pathnames with spaces cause quoting problems.
10 #
11 # Orion Sky Lawlor, olawlor@acm.org, 1/22/2001
12 ##############################################################################
13
14 #TMP environment variable seems get lost in sub shell
15 export TMP=`cygpath -w /tmp`
16 export TEMP=`cygpath -w /tmp`
17 if [ ! -d "$TMP" ]
18 then
19         echo "Error no $TMP"
20         echo "unix2nt_cc exiting..." 1>&2
21         exit 1
22 fi
23
24 # Configurable option: Location of MSDEV
25 VCC_DIR="C:/Program Files/Microsoft Visual Studio/Vc98"
26
27 #CL command-line options for -O and -g mode
28 CL_CMD="$VCC_DIR/BIN/CL.EXE"
29 CL_COMMON=' /nologo /W3 /GB /GX /DWIN32 /D_WINDOWS /FD /Zp4 '
30 CL_O=$CL_COMMON" /DNDEBUG /MT /Ox"
31 CL_DEF=$CL_COMMON" /MT"
32 CL_G=$CL_COMMON" /Z7 /MTd /Od"
33 CL_DLL="/LD"
34
35 #LINK command-line options for -O and -g mode
36 LINK_CMD="$VCC_DIR/BIN/LINK.EXE"
37 LINK_COMMON='/nologo /subsystem:console '
38 LINK_O=$LINK_COMMON
39 LINK_DEF=$LINK_COMMON
40 LINK_G="$LINK_COMMON /DEBUG"
41 LINK_POST='ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib 
42   comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib 
43   odbc32.lib odbccp32.lib /SUBSYSTEM:CONSOLE /INCREMENTAL:NO /MACHINE:IX86 '
44
45 if [ "x$LIB" = "x" ]
46 then
47         export INCLUDE="$VCC_DIR/include"
48         export LIB="$VCC_DIR/lib"
49 fi
50
51 ###################################################################
52 #
53 #  Utility routines used below
54 #
55 ###################################################################
56
57 # PrintUsage: prints a helpful command-line usage message and quits
58 # Args: any additional messages
59 printUsage() {
60     echo "Usage: unix2nt_cc [ flags ] <files>"
61     echo
62     echo "  flags:"
63     echo "        -c <file> -o <target> -g -O"
64     echo "        -D<define> -I<include path> -L<lib path> -l<library>"
65         echo "  files: <fName>.c <fName>.C <fName>.cpp <fName>.cxx"
66     echo
67     echo "  Compiles C, C++ programs using NT CL and LINK commands."
68         echo "Version 1.0, Parallel Programming Lab, UIUC, 2001"
69     echo $*
70     exit 1
71 }
72
73 # End blows away the temporary files (unless SAVE is true) and exits
74 # Args: <exit code>
75 End() {
76     exit $1
77 }
78
79 # This procedure prints an error message and exits.
80 # ("1>&2" redirects the echo output to stderr).
81 # Args: written to stderr
82 Abort() {
83         echo "unix2nt_cc Fatal Error in directory "`pwd` 1>&2
84         echo "   $*" 1>&2
85         echo "unix2nt_cc exiting..." 1>&2
86         End 1
87 }
88
89 # This procedure removes the extention (the ".c" in "./main.c") from
90 # its first argument, and prints the result. Unlike the builtin command
91 # basename, it keeps the directory path.
92 # Args: <name to strip>
93 stripExtention() {
94         se_base=`echo $1 | awk -F/ '{print $NF}'`
95         se_strip=`echo $se_base | awk -F. '{ORS="";print $1;for (i=2;i<NF;i++) print "."$i}'`
96         se_ret=`echo $1 | awk -F/ '{ORS="";for (i=1;i<NF;i++) print $i"/"}'`"$se_strip"
97         echo $se_ret
98 }
99
100 # GetExtention returns the extention on the given file name
101 # or "" if none.  (e.g. "./bob/snack.c" returns ".c")
102 # Args: <name to find extention of>
103 getExtention() {
104         se_base=`echo $1 | awk -F/ '{print $NF}'`
105         se_ret=`echo $se_base | awk -F. '{if (NF<=1) print ""; else print "."$NF}'`
106         echo $se_ret
107 }
108
109 ##############################################################################
110 #
111 # Parse & convert the arguments
112 #
113 ##############################################################################
114
115 #Program state:
116 VERBOSE="no"
117 DEBUG_SCRIPT=""
118 SAVE=""
119
120 DOCOMPILE="no"
121 DOLINK="no"
122 OUTPUT=""
123 CL_OPTS=$CL_DEF
124 LINK_OPTS=$LINK_DEF
125 LIBDIR=""
126 LIBDIRS=""
127
128 #NT CL and LINK command-line arguments:
129 LINK=""
130 CL=""
131
132 [ $# -eq 0 ] && printUsage "Error: No arguments given."
133
134 while [ ! $# -eq 0 ]
135 do
136         arg="$1"
137         shift
138
139         case "$arg" in
140         -verbose)
141                 VERBOSE="yes"
142                 ;;
143         -E)
144                 CL="$CL /E"
145                 ;;
146         -O)
147                 CL_OPTS=$CL_O
148                 LINK_OPTS=$LINK_O
149                 ;;
150         -g)
151                 CL_OPTS=$CL_G
152                 LINK_OPTS=$LINK_G
153                 ;;
154         -c) 
155                 CL="$CL /c";;
156         -D)
157                 CL="$CL /D$1"
158                 shift
159                 ;;
160         -D*)
161                 def=`echo $arg | awk -F@ '{print substr($1,3)}'`
162                 CL="$CL /D$def"
163                 ;;
164         -I)
165                 CL="$CL /I`cygpath -w $1`"
166                 shift
167                 ;;
168         -I*)
169                 path=`echo $arg | awk -F@ '{print substr($1,3)}'`
170                 CL="$CL /I`cygpath -w $path`"
171                 ;;
172         -L)
173                 LIBDIR="`cygpath -w $1`"
174                 LIBDIRS="$LIBDIRS `cygpath -u $LIBDIR`"
175                 LINK=$LINK"     /LIBPATH:$LIBDIR"
176                 shift
177                 ;;
178         -L*)
179                 LIBDIR=`echo $arg | awk -F@ '{print substr($1,3)}'`
180                 LIBDIR="`cygpath -w $LIBDIR`"
181                 LIBDIRS="$LIBDIRS `cygpath -u $LIBDIR`"
182                 LINK=$LINK"     /LIBPATH:$LIBDIR"
183                 ;;
184         -l*)
185                 if [ "$arg" != "-lm" ]
186                 then
187 #Convert -lfoo to path-to-foo.a
188                         L=`echo $arg | awk -F@ '{print substr($1,3)}'`
189                         D="no"
190                         [ -r "$L" ] && D="$L"
191                         [ -r "$L.a" ] && D="$L.a"
192                         [ -r "$L.lib" ] && D="$L.lib"
193                         [ -r "lib$L.a" ] && D="lib$L.a"
194                         test -n "$LIBDIRS" &&   \
195                         for dir in $LIBDIRS
196                         do
197                           [ -r "$dir/lib$L" ] && D="$dir/lib$L"
198                           [ -r "$dir/lib$L.a" ] && D="$dir/lib$L.a"
199                           [ -r "$dir/$L.lib" ] && D="$dir/$L.lib"
200                         done
201                         [ $D = no ] && Abort "Couldn't find library $L in . or $LIBDIRS"
202                         LINK="$LINK `cygpath -w $D`"
203                 fi
204                 ;;
205         -o)
206                 out=$1
207                 shift
208                 if [ "x`getExtention $out`" = "x.o" ]
209                 then
210 #It's a .o output filename-- tell CL
211                         OUTPUT="/Fo`cygpath -w $out`"
212                 elif [ "x`getExtention $out`" = "x.so" ]
213                 then
214                         OUTPUT="/Fo`cygpath -w $out`"
215                 else
216 #It's an exe filename-- tell LINK
217                         LINK="$LINK /out:$out.exe"
218                         DOLINK="yes"
219                 fi
220                 ;;
221         
222 #Object file or library-- add to link
223         *.o|*.a|*.lib)
224                 if [ "$DOCOMPILE" = "yes" ]
225                 then
226                   CL="$CL `cygpath -w $arg`"
227                 else
228                   LINK="$LINK `cygpath -w $arg`"
229                   DOLINK="yes"
230                 fi
231                 ;;
232 #C source file
233         *.c)
234                 base=`stripExtention $arg`
235                 CL="$CL /Tc`cygpath -w $arg`"
236 #               OUTPUT="/Fo$base.o"
237                 LINK="$LINK $base.o"
238                 DOCOMPILE="yes"
239                 ;;
240 #C++ source file
241         *.C|*.cxx|*.cpp)
242                 base=`stripExtention $arg`
243                 CL="$CL /Tp`cygpath -w $arg`"
244 #               OUTPUT="/Fo$base.o"
245                 LINK="$LINK $base.o"
246                 DOCOMPILE="yes"
247                 ;;
248 # Default
249         *)
250 #               printUsage  "Error: Unrecognized argument $arg"
251                 echo  "Ignored Unrecognized argument $arg"
252                 ;;
253         esac
254 done
255
256 #if [ "x$CL" != "x" ]
257 if [ $DOCOMPILE = yes ]
258 then
259         OPTS="$CL_OPTS $OUTPUT $CL"
260         [ $VERBOSE = yes ] && echo "unix2nt_cc> $CL_CMD" $OPTS
261         "$CL_CMD" $OPTS
262         if [ $? != 0 ]
263         then
264                 Abort "Error executing" "$CL_CMD" $OPTS
265         fi
266 fi
267
268 if [ $DOLINK = yes ]
269 then
270         OPTS="$LINK_OPTS $LINK $LINK_POST"
271         [ $VERBOSE = yes ] && echo "unix2nt_cc> $LINK_CMD" $OPTS
272         "$LINK_CMD" $OPTS
273         if [ $? != 0 ]
274         then
275                 Abort "Error executing" "$LINK_CMD" $OPTS 
276         fi      
277 fi
278
279 exit 0