# hmake versions

3.14

- Fix build system for ghc-6.8.x.

3.13

- No, really fix hmake to build with ghc-6.6.

3.12

- New feature: hmake -M dependency analysis now adds "# -cpp" if cpp is required.
- Fix to enable hmake to build with ghc-6.6.

3.11

- New: the #! runhs script 'interpreter'.
- Bugfix: now finds dependency B in `module A where { import B; ... }`
- Bugfixes: for compatibility problems with gcc-4.0.
- Re-organised the internal cpphs library.

3.10

- Improved the extraction of import decls from source files: now accepts corner cases like multiple imports on a single line.
- Source file scanning is now lazier - it stops at the first line that indicates no further import decls are possible. This fixes some bugs dealing with .hsc files, and .ly files.
- Takes care of the new package story in ghc-6.4.
- Now interprets the compiler options `-odir=foo` option as well as passing it on to the compiler.

3.09

- Some fixes so that hi now works under Cygwin/GHC.
- Now interprets a `-hidir=foo` option as well as passing it on to the compiler.
- Improvements to the internal documentation of the APIs (thanks to Isaac Jones).
- Improved handling of C pre-processor directives (thanks to cpphs).

3.08

- Hmake should now build cleanly with GHC 6.0.
- In hmake-interactive, if the readline library is not available, the simple line editor now has a history mechanism.

3.07

- Hmake should now build cleanly with GHC under Cygwin.
- Better handling of config files. Your personal config file is now used as an override for the system-wide config file, rather than being used instead of it. Hence, any global config updates are now automatically propagated to all users.
- The new command `hmake-config new` is now needed to begin a fresh personal config file.
- `hmake-config list` can now take a specific compiler argument to show detailed info for that compiler.

3.06

- Better handling of package libraries. Previously, the package import directories were detected at installation time, so the addition of a new package required a re-configure of hmake. Also, because all of the package dirs were searched on every invocation, hmake could not warn of a missing `package' flag. Now, package dirs are detected at runtime, and only for the requested packages - this fixes both problems.
- Added the cmdline option `list' to `hmake-config` to display the set of Haskell compilers known to `hmake`.
- Bugfix for the -hat option. Ensure that if a file goes through cpp before hat-trans, the resulting .hx file is moved from the temporary dir back to the build dir.
- Bugfix, to ensure that hmake isn't confused by the escaped character \\ in a literal string.

3.05

- Some small fixes for the cpp preprocessor config. Always give it the -traditional option, to cope with single quote marks. Also, if cpp is required before hat-trans, give it an input filename!

3.04

- Remove the use of the Posix package under GHC. It is not available on Windows platforms, and only one feature is needed anyway, which can easily be coded directly using the FFI.

3.03

- The -P option to hmake (which specifies a directory in which there are interface files, but no sources) should be translated automatically to -i when the compiler is either ghc or hbc.
- Some problems with hmake-config not detecting compilers correctly on Solaris and BSD machines are now fixed.

3.02

- An automatic invocation of a pre-processor should supply default options to it. Also fix the dependency determination to correctly use the un-pre-processed file modification time.
- When the hmake option -hat is used, add -package hat to the generated calls to the compiler.
- Minor configuration fix to ease building under Cygwin.

3.01

- When detecting ghc 5.00 or later, hmake-config now uses the relevant ghc-pkg tool to discover import directories.
- An hmake command with no specified compiler no longer fails if the location of the config file (to provide a default compiler) cannot be discovered correctly.
- If a `.hs.cpp` file is discovered, use the `-x c` option correctly (was missing a space before).

3.00

- The mechanism by which hmake knows about installed Haskell compilers has been completely revamped. It is now possible to have more than one compiler of the same type (e.g. ghc-4.08 and ghc-5.02) installed simultaneously.
- A new configuration utility hmake-config is provided. This allows an individual user to have a personalised set-up telling hmake about new compilers, removing old compilers, and changing the default compiler.
- hmake now knows about many more preprocessors for Haskell - happy, hsc2hs, c2hs, greencard. If it finds the appropriate file extension (.ly, .hsc, .chs, .gc) it now calls the preprocessor before the compiler.
- The new -hat flag is for the Hat tracing system, if you have it installed. With this option, hmake calls the tracing transformation tool hat-trans between any preprocessor and the compiler. The resulting program generates a trace file suitable for viewing with the hat browsers.

2.03

- Updated the configure script to understand ghc-5.02's location.
- Incorporates other small bugfixes.

2.02

- Note: patch-2.02-devnull must be applied to fix the unfortunate behaviour that the configure script destroys `/dev/null` if you run it as root.
- Improved the error-reporting in hmake. When a module cannot be found, it now shows where the demand for the module arose, and which directories were searched.
- Added knowledge of extended file suffixes like .p.o, .T.o, and .T.hi to hmake.
- Fixed a bug in the generation of Makefile dependencies in the presence of a -I option.
- Ghc's options `-syslib n` and `-package n` no longer need to be enclosed in double quotes.

2.01

- If you build hi with ghc, the automatic configuration now detects and links in the readline library for command-line editing. (Thanks to Simon Marlow for the code changes.)
- hi now uses unique temporary filenames so that multiple users on one machine do not conflict with each other. (Thanks to Kamo Hiroyasu for the suggestion.) Temporaries are also now tidied up afterwards.

2.00

- Many improvements to hi, which moves out of alpha-testing to beta. We think this is worth an increment to the major version number.

1.9

- New options: -clean and -realclean, which remove relevant .o files (or both .o and .hi files).
- Addition of a simple line editor to hi.
- Bugfix: the auto-configuration of hi was erratic, but should now work much more smoothly.
- Bugfix: all the nasty possibilities of unmatched comment characters inside strings and unmatched quote chars inside comments no longer cause hmake to give up on trying to extract dependencies from a file.

1.8

- New addition: hmake interactive, or hi for short. Looks and feels like Hugs, but uses hmake + any Haskell compiler as a backend.
- Small bugfixes, for instance to allow #-} at the beginning of a line (previously interpreted as a cpp directive!).

1.7.2

- Small configure script patch for BUILDWITH variable.
- Small driver script patch to permit -N option again.

1.7.1

- Small configuration patch for hmake built from C sources.

1.7

- The previous patch for detecting hbc 0.9999.5 was wrong, now fixed.
- However, you cannot build hmake with hbc 0.9999.5 (at least on linux-libc6), as that compiler has buggy libraries. A binary distribution built with ghc is available for this platform as an alternative.
- It often makes sense to have the default compiler called by hmake to be the same as the one that built it. This is now enabled by default. You can override it by editing the COMP variable in your hmake.config file, or by setting your HC environment variable at runtime.
- Treatment of the -i dir option has been changed: it is now identical to the -I dir option, for compatibility with hbc and ghc.

1.6.2

- Small patch for detecting hbc version >= 0.9999.5 correctly.

1.6.1

- Small cosmetic patch to fix the -g flag (module dependency graph) whose output had multiple entries for some imports (depending on how many blank lines preceded it).

1.6

- Import determination is no longer confused by {- -} nested comments, end-of-line comments, or line-breaks between the "import"/"qualified" keywords and module name.
- hmake driver script now returns true exit status.

1.5

- Configuration now automatically determines which Haskell compilers are available, where they live, and so on - no editing of files required.
- Some minor bugfixes.

1.4

- Symbol error in GetDep.hs when compiling with ghc, fixed.

1.3

- Cpp-emulation now understands numeric comparisons.
- Compiler cpp symbols (e.g. `__HBC__`) are not defined twice now.
- Revert to allowing both GHCINCDIR and GHCINCPATH.

1.2

- Allow "`import A-- comment`", "`import A;`", "`import A{-comment-}`".
- Change GHCINCDIR to GHCINCPATH to allow multiple directories for prelude .hi files.

1.1 | Minor bug fixes.
1.0 | Initial release (separated from nhc98/nhc13).

The latest updates to this software are available on the WWW from `http://www.haskell.org/hmake/`
`http://www.cs.york.ac.uk/fp/hmake/`

Information last updated: 21st May 2008
York Functional Programming Group
Malcolm.Wallace@cs.york.ac.uk