12-Jan-00: This file is getting very out-of-date. There have been numerous improvements, bugfixes, and so on since the last entry. hmake now works with all Haskell compilers, including ghc, hbc, and nhc98. It is thus distributed separately from the nhc98 compiler now. 13-Jun-98: A major overhaul of everything. The script now uses /bin/sh instead of tcsh, and recognises a better set of options. The programs NhcMk and Older now compile cleanly with nhc13. I have added an option to search for (and generate) object files in a separate target directory. I have added a simple parser for cpp-directives in source files, as these can alter which `import' lines are seen. 30-Oct-97: Files with a .gc extension are now recognised (they use the GreenCard preprocessor) and treated as normal .hs files. (nhc13 does the actual pre-processing, but nhc13make extracts the import declarations.) 5-Mar-96: If the interface files is taken from a directory specified with -I ocr -P, then the corresponding object file is also taken from that directory. This didn't work before 6-June-94: nhcmake now use different environment variables for binaries and interface files. 29-Mar-94: nhcmake can now be compiled with either hbc or nhc. The flag -O is changed to -D. 20-Feb-94: hbcmake/lmlmake is translated into Haskell and changed so that it compiles under nhc. A lot of the extra bells and whistles are removed and the default compiler is nhc. NhcMk make works both under RISC OS and (with the flagg -unix) under Unix. 17-Nov-93: hbcmake now uses the script "hbcmakehbc" to compile. The script allows per file compilation flags to be specified in the file "Flags". 28-Oct-93: LDFLAGS are now extracted from Makefile too. All flags found in the environment variables LDFLAGS and HBCFLAGS/LMLFLAGS, in a Makefile, and on the command line are now passed to the compiler/linker. An environment variable can no longer be used to override Makefile definitions. Man pages updated. 13-Oct-93: Some small updates to the man pages. Improved extraction of LMLFLAGS/HBCFLAGS from Makefile. 11-Oct-93: Changed cmds.m to generate commands for sh instead of csh. This solves a problem with very long `quotes`. Changed hbcmake/lmlmake scripts to run output from lmlmk through sh instead of csh. 13-Jul-93: Added some new environment variables: HBC & LMLC to specify alternate compilers to hbc and lmlc; LMLMK_CONFIG to make it possible to compile languages other than Haskell/LML. Set it to s_ext:ls_ext:i_ext:inc:comp:compflags:pathvar where s_ext is the source file extension ls_ext is the extension for literate style source files i_ext is the interface file extension inc specifies how to extract dependencies (haskell or cpp) compflags specifies compiler flags to use pathvar is the name of an env var containg the include path The two configs for LML and Haskell built in to lmlmk are: .m:.lm:.t:cpp:lmlc:LMLFLAGS:LMLINCPATH .hs:.lhs:.hi:haskell:hbc:HBCFLAGS:HBCINCPATH 1-Mar-93: lmlmake used to die with "Fail: hd on []" if a ".t" file without a corresponding ".m" file was encountered. Now it doesn't die anymore, but instead it tries to compile the ".t" file. (Harmless, but should be fixed.) 22-Jan-93: Corrected what directories are searched when compiling a file that is not in the current directory. Hope I got it right this time. E.g. lmlxmake -Ifoo bar/main.m main.m: #include "sub.t" -- searches bar and foo 17-Jan-93: New flag: -strip to produce a stripped executable New flag: -o name to specify the name of the executable 8-Jan-93: Corrected what directories are searched when compiling a file that is not in the current directory. E.g. lmlxmake -Ifoo bar/main.m main.m: #include "sub.t" -- searches bar and bar/foo E.g. lmlxmake -I/foo bar/main.m main.m: #include "sub.t" -- searches bar and /foo 25-Jul-92: LMLINCLUDE env var now used internally only. Setting it from outside has no effect. 24-Jul-92: Included ".h" files are now checked for further depencencies (applies only to LML programs). Support for -I flag and a new env variable LMLINCLUDE added. 23-Apr-92: hbcmake is now aware of that modules can be imported from hbc_libraries. If a module isn't found in the current directory, but found in the library, it is ignored and assumed to be linked in automatically. -i flag added to hbcmake, works as for hbc & lmlc. hbcmake and lmlmk uses HBCINCPATH. lmlmk uses LMLINCPATH when compiling LML programs. 12-Mar-92: Fast hack: you can now put the word "lmlmake_ignore" after an include directive to tell lmlmake to ignore the dependence on that module. (You have to include the appropriate object files in LDFLAGS) 25-Feb-92: lmlmk now works better in the presence of links (inode numbers are used to identify source files). When two links refer to the same file, one of them is ignored. This means that only one .o and one .t file is created and this can cause problems! (To be fixed) 12-Feb-92: lmlmk now adds $LDFLAGS at end of link commands. -l args handled in lmlmake/hbcmake script by adding them to LDFLAGS. lmlmk now generates commands to compile independent modules in parallel if env var PARALLEL is set. 8-Jan-92: New script file hbcmake to compile Haskell programs. lmlmk uses environment variable LMLMK_LANG, which can be set to "lml" or "hbc". 7-Jan-92: Fixed two bugs in the parsing of file names. One caused names like "../../papp/tstmenu" to parsed as a file called "../." with the extension "/papp/tstmenu". The other caused "../../x" and "./../x" to be treated as equal to "x". 27-Dec-91: first release