NAME
hmake - a tool for automated compilation of Haskell programs
SYNOPSIS
hmake [ options ] target ...
DESCRIPTION
hmake is a make(1) like command for compiling Haskell programs.
Dependencies are automatically extracted from the source files; there
is no need to construct or maintain a Makefile.
The target arguments determine what to compile. If target is the name
of an executable (i.e. it has no extension), then one of target.hs or
target.gc or target.lhs is assumed to contain the main module of a
program. All modules it depends on are compiled (if necessary) and
linked to an executable. If target is the name of a source module (i.e
it ends in .hs or .gc or .lhs) then the object file for that module is
generated.
hmake allows several programs to reside in the same directory. Modules
can be shared between several programs. Modules can also reside in
different directories. Directories to search for modules can be
specified with the -I or -i flag, in the same way as for Haskell
compilers.
hmake correctly handles the fact that Haskell compilers generate two
files, an object file and an interface file, for each module compiled.
It also handles GreenCard sourcefiles (.gc) transparently, and
sourcefiles which contain C preprocessor directives. It calls any of
the widely available Haskell compilers - nhc98, hbc, or ghc. (Note:
hbc does not yet implement GreenCard.)
OPTIONS
-n No execution mode. Print commands but do not execute them.
-q Quiet mode. Do not print commands before executing them.
-g Output the module dependency graph on the standard output.
-M Output module dependencies on stdout in the standard Makefile
format.
-Md Like -M, but treats the -d option specially.
-dobjdir
This option sets the search path for object files - it also
arranges for objects and the final executable to be placed in
this directory by the compiler. Only one -d is allowed.
-Idir -idir This option adds directory dir to the search path for
source modules. Modules needed from that directory are compiled
(and linked). If more than one -I or -i is specified, the
directories are searched in order.
-Pdir This option adds directory dir to the search path for
prelude/stdlib modules. Only interface files in that directory
are checked - it is assumed that the modules are already
compiled. If more than one -P is specified, the directories are
searched in order. Modules found in these directories are not
added to any linking step.
-keepPrelude
Calculate dependencies also for Prelude modules that are
explicitly imported.
-Nmodule
Ignore dependencies with respect to the named module.
-nhc98 Use the York/Chalmers nhc98 Haskell compiler.
-hbc Use the Chalmers hbc Haskell compiler.
-ghc Use the Glasgow ghc Haskell compiler.
Most other flags are assumed to be compiler options and are passed to
the compiler when compiling and linking. Some of these compiler flags
are ‘noticed’ by hmake as well as being passed through. One to note in
particular is:
-Dsymbol
-Dsymbol=value
Define the preprocessor symbol. Preprocessor directives are
often used to modify module dependencies in source files.
COMPILER OPTIONS
The command line used to compile a module is
$(HC) $(HFLAGS) -c file.hs
and to link an executable
$(HC) $(HFLAGS) -o executable file.o ...
where HC is your chosen Haskell compiler (default is the compiler you
built hmake with). The commands are then augmented with any
compiler/linker options given when invoking hmake.
ENVIRONMENT
HC if set, it is used as the name of the Haskell compiler. The
default is the compiler you used to build hmake with.
HFLAGS if set, is used as extra arguments to the Haskell compiler. The
default is empty.
MKPROG if set, it is used as the location of the main program, instead
of the default /usr/local/lib/hmake/$MACHINE/MkProg.
OLDER if set, it is used as the location of the help program ‘Older’,
instead of the default /usr/local/lib/hmake/$MACHINE/Older.
NHC98INCDIR
if set, it is used as the location of the directory containing
interface files for the Prelude and standard libraries (for
nhc98 only). The default is /usr/local/include/nhc98/.
LMLDIR if set, is used as the base location of the hbc compiler.
HBCINCPATH
if set, is interpreted as a colon-separated list of directories
to search for interface files for the Prelude and standard
libraries (for hbc only). The default is
$LMLDIR/hlib1.3/:$LMLDIR/hbc_library1.3/.
GHCINCDIR
if set, is used as the base location for ghc include files. The
default is /usr/local/lib/ghc-4.02/lib/imports.
GHCINCPATH
if set, is interpreted as a colon-separated list of directories
to search for interface files for the Prelude and standard
libraries (for ghc only). The default is
$GHCINCDIR/std:$GHCINCDIR/exts.
FILES
/usr/local/lib/hmake/$(MACHINE)/MkProg the main program
/usr/local/lib/hmake/$(MACHINE)/Older help program to determine if a
target is out of date.
SEE ALSO
nhc98(1), hbc(1), ghc(1), lmlmake(1), make(1)
BUGS
Please report any bugs or enhancement suggestions to the author.
AUTHOR
Malcolm Wallace Malcolm.Wallace@cs.york.ac.uk;
based on nhcmake by Niklas Röjemo rojemo@cs.chalmers.se;
based on hbcmake/lmlmake by Thomas Hallgren, hallgren@cs.chalmers.se
local