cccl
Geoffrey Wossum (gwossum@acm.org)
http://cccl.sf.net

Introduction
------------
cccl is a wrapper around Microsoft Visual C++'s cl.exe and link.exe.  It
converts Unix compiler parameters into parameters understood by cl and link.
cccl's main use is for using Unix build processes with Microsoft compilers.
Using cccl in conjunction with ports of Unix utilities, it is possible to 
build many Unix packages using MSVC, without modifying the build process.

Full Documentation
------------------
Documentation, including how to use autotools with MSVC by using cccl, is
now included!  The documentation is in HTML and can be found in 
doc/html/index.html.

Motivation
----------
Why would I build a wrapper script to make cl and link act like gcc, when
gcc is available for Windows?  I had a cross-platform project that I wanted
to use autoconf/automake/libtool for the build process.  The obvious thing
to do would have been to use gcc on all platforms.  But on Windows I was
using some third-party libraries that didn't work with gcc, only with 
MSVC.  By creating cccl, I was able to use the same build process with the
MSVC compiler, with only minimal changes to the build process.  This 
saved a great deal of time.

Even though it's extremely simple and stupid, it saved me a lot of hassle
in the build process.  I tried to look for an already existing program to
do this, but none existed (that I could find).  I decided that since it 
proved so useful to me, I should release it to the world.

Installing
----------
cccl requires ports of the following Unix utilities:
  - a Bourne compatible shell
  - sed

I know cccl works with bash and sed from Cygwin.  It would probably also 
work with other shells and seds, such as the MKS Toolkit.  If you discover
that it does work (or does not work) with others, let me know.

You can either copy the cccl script to somewhere on your system, or you can
do a "./configure ; make install" if you have a Unixish enough environment
installed.  The configure and Makefile don't really do anything but copy
the cccl script, though.

Usage
-----
cccl will take it's command line parameters and convert the command line
parameters to something understood by cl or link.  It also attempts to
determine which program is best suited for your command line.  If you are 
compiling code, it invokes cl.  If you are linking object files, it will
invoke link.  

cccl will display the command line it is invoking before invoking it.

cccl assumes both cl and link are in your path.

cccl currently understands and converts the following command line parameters:
  -ansi
  -c
  -g[n]			[NOTE: cl only supports one debug level]
  -L<libpath> 
  -l<libname>
  -m386
  -m486
  -mpentium
  -mpentiumpro
  -o <output file>
  -pedantic		[NOTE: cl has no equivalent, this is thrown away]
  
If cccl sees a C++ file with an extension other than .cpp (i.e. .cc, .C, or
.cxx), then cccl will prepend a "/Tp" option to the cl command line to force
cl to process it as a C++ source file.

Other command line parameters are passed unchanged.

end of README

