History log of /seL4-l4v-10.1.1/HOL4/tools/Holmake/Holmake_tools.sml
Revision Date Author Comments
# 2abaf720 02-Aug-2018 Michael Norrish <Michael.Norrish@nicta.com.au>

Let ANSI colouring happen on screen terminals

screen is documented as explicitly supporting these codes


# 1c9452f4 14-Jun-2018 Michael Norrish <Michael.Norrish@nicta.com.au>

Fix bug where Holmake would die with Subscript exception

Issue was terminal environments where `stty size` and/or `tput
cols` (these are Unix shell commands) would return suggesting that the
width of the terminal window was 0. Fix the getWidth function to not
allow this.

Preserve a diagnostic message in poly/BuildCommand.sml that was of
some help in tracking this down.


# 7c7ec861 20-May-2018 Michael Norrish <Michael.Norrish@nicta.com.au>

Make tty-output (Holmake and testutils) terminal-width aware

Holmake even checks for resizing every second so that long-running
jobs can have the terminal resized by the user and have the pretty
columns of jobs adjust accordingly.

Closes #526


# 4b27d2a3 06-Mar-2018 Michael Norrish <Michael.Norrish@nicta.com.au>

Holmake: Handle / occurring after an 'open' more gracefully

Closes #518


# 1bdfad7e 05-Mar-2018 Michael Norrish <Michael.Norrish@nicta.com.au>

Reduce and prettify Holmake's recursive invocation verbiage


# 4ba33079 16-Jan-2018 Michael Norrish <Michael.Norrish@nicta.com.au>

Holmake improvements (bug in caching of dep. analysis; diag change)

Two intertwined patches (bad form I know):
1. Fix the bug in tests/indepchildren.
2. Revise the internal diag function to take a function generating a
string rather than a string; then the work of generating the string
only happens if diagnostics have been asked for.


# 151eb099 13-Jan-2018 Michael Norrish <Michael.Norrish@nicta.com.au>

Move holmake-recursion code into Holmake.sml

The move of this code into separate Holmake_tools.sml happened in
order to try to share code between MoscowML and PolyML
implementations. I imagined then that I would have to have the
top-level functions trapped in language-specific implementations, but
that various leaf-level things could be reused. I noticed that the
recursion logic governing the way INCLUDES specs were followed could
be stripped out of Holmake and so moved maybe_recurse into
Holmake_tools.

But now, the much more sensible scheme whereby only specific leaves in
the code-tree are language specific is used, and so the quite
high-level recursion stuff can come back into Holmake.sml.


# 89cd819d 10-Jan-2018 Michael Norrish <Michael.Norrish@nicta.com.au>

Canonicalise directory names better in Holmake

Previous behaviour saw it unnecessarily distinguishing foo//bar and
foo/bar (when the former was coming from something like
$(MAKEVAR)/bar, with MAKEVAR set to foo/).


# 7c949327 04-Jan-2018 Michael Norrish <Michael.Norrish@nicta.com.au>

Fix Holmake bug to do with --no_prereqs

Bug is identified in previous commit (and in accompanying test-cases).
It comes down to the fact that even with --no_prereqs specified,
Holmake needs to scan ancestor directories in order to get
dependencies correctly recorded in generated files, particularly
Theory.uo files.


# d56fd8b3 22-Aug-2017 Michael Norrish <Michael.Norrish@nicta.com.au>

Update Holmake to cope with Theory.dat files

No tests specific to that feature yet.

Still also need to update for Moscow ML.


# 46ee3d3e 13-Jul-2017 Michael Norrish <Michael.Norrish@nicta.com.au>

Allow an indication of side-products of theory builds

Basically, write something like

foo: *theorynameScript.sml

to indicate that foo will be built when the theory theoryname is
built. As part of the process, provide much better testing of the
parallel execution of multiple target rules and completely change the
way these are handled.

In particular, the dependency graph that Holmake maintains now does
not have multiple targets for a single node, but instead makes sure
that when a command is executed for a single target, all nodes that
would execute the same command are considered to be running at the
same time, and get the same success/failure status when the command
finishes.

Needs documentation, but is progress with Github issue #429


# 1391f0da 07-Jun-2017 Michael Norrish <Michael.Norrish@nicta.com.au>

First hack at providing mlton Holmake


# 00768057 18-Apr-2017 Michael Norrish <Michael.Norrish@nicta.com.au>

Make a clean-for-reloc only delete HOL heaps


# f0590a52 29-Jan-2017 Michael Norrish <Michael.Norrish@nicta.com.au>

Implement build cleanForReloc

This sub-command deletes heaps, .uo and .ui files, at least under
Poly/ML. These are the files that embody absolute path values, and
which will cause breakages if a source tree gets moved. The Theory.sig
and Theory.sml files don't contain those paths, so they don't need to
be deleted. Given that its their generation that takes all the time,
we may be able to regenerate an installation by only doing the
relatively quick generation of heaps, .uo and .ui files.


# a870a911 23-Jan-2017 Michael Norrish <Michael.Norrish@nicta.com.au>

Rebuild .uo and .ui files without forcing unnecessary extra work

This is by analogy with what has already been attempted for heaps, and
is progress with github issue #105.

Also fix a bug with the heap handling if the heap was in a
directory with script-files (not the case with the heaps in HOL/src):
the dependency graph built for the directory spotted that there was a
dependency from the heap to the script files, and even though the
heap's time-stamp was set appropriately, the existence of the link in
the graph meant that the rest of the graph got executed.

The fix for this (in both the case of the heap and the .uo/.ui file)
is for execution of graph nodes to check at the time the node is made
ready to execute if the target really does need to be redone (by
examining time-stamps). Then, the rebuild can be skipped even though
the initial analysis thought it was going to have to happen.

Future work:
- For the moment, both build and Holmake rely on having a particular
environment variable set to enable this option. I will augment
and/or replace this with command-line options. (The buildheap
program needs to retain this use of the environment variable though
because neither Holmake nor build control how that program is
called; instead this program is called by the user via
Holmakefiles.)
- Build needs to take an option to clean a HOL installation of its
heaps and ui/uo files. I don't know how to automatically identify
the heaps, but could just purge those that are identified as such in
Holmakefiles.


# 5ab23e87 12-Jan-2017 Michael Norrish <Michael.Norrish@nicta.com.au>

Stop Holmake generating default targets from *Theory.{sig,sml}

If a directory has a fooScript.sml file, then fooTheory.uo will still
be generated as a default target, so there's no need to generate
fooTheory.uo from fooTheory.sml. If fooTheory.sml is stale or
orphaned (perhaps its script file has been moved to another
directory), attempting to build in this directory will just cause an
annoying Holmake error. If fooScript.sml is generated from a special
rule in a Holmakefile, then that Holmakefile can equally take
responsibility for making fooTheory.uo a target.

This is part of an approach to github issue #295.

The second part of this would be automatically remove the
stale/orphaned theory files.


# e765035a 05-Sep-2016 Michael Norrish <Michael.Norrish@nicta.com.au>

Move Holmake & test verdicts one character left

This stops the rightmost character (the 'K' in 'OK', for example) from
being blanked by the clear-to-end-of-line formatting that gets output
after Holmake verdicts (as per 6828af9a21). If your screen is wider than
80 columns, you don't see this effect.


# b744103d 06-Jun-2016 Michael Norrish <Michael.Norrish@nicta.com.au>

Clean all generated .art files (raw or processed)


# 7098f9c7 05-Jun-2016 Michael Norrish <Michael.Norrish@nicta.com.au>

Handle opentheory intermediate leftovers better

In particular, the parallel process for building .art files creates an
intermediate thyname.artScript.sml file that shouldn't be regarded as a
normal script file. (Indeed, it can't work as a normal script file
because of the presence of the full-stop in the theory name, so there's
a warning emitted for other occurrences of this if seen.)

These intermediates can be cleaned by Holmake as well if they're
found. (Normal execution of Holmake will remove these files after
they're used, but if the build is interrupted for some reason, they get
left behind.)


# ac18d770 10-May-2016 Michael Norrish <Michael.Norrish@nicta.com.au>

Make check_distrib fn visible in Holmake_tools API


# 186637a4 28-Apr-2016 Michael Norrish <Michael.Norrish@nicta.com.au>

Emit CHEAT when non-qof tactic fails; get nice colours

By having the tactic cheat, and the non-qof handling of prove both emit
the string "CHEAT" as part of their behaviour, Holmake's multibuild can
give you a CHEATED verdict on scripts that do either. Strictly,
speaking the tag attached to non-qof failure is not cheat, but I don't
think that's really important here.


# aa7b7a9c 26-Apr-2016 Anthony Fox <anthony.fox@cl.cam.ac.uk>

Clean out .hollogs at the same time as .HOLMK.


# 20eb6cc0 21-Apr-2016 Michael Norrish <michael.norrish@nicta.com.au>

Make parallel Holmake's output prettier

When a process fails, a chunk of its output up to the failure point is
output to the main screen. Also, a process that is killed because of a
general desire to give up (a failure elsewhere and no -k option, say),
now gets a red M-KILLED ("monitor killed") report.


# 1c326356 20-Apr-2016 Michael Norrish <Michael.Norrish@nicta.com.au>

Make multibuild output prettier


# bf1164c0 15-Apr-2016 Michael Norrish <Michael.Norrish@nicta.com.au>

Make Holmake less chatty by default

Enable old level of chattiness with -v or --verbose command line option.


# e7c52075 15-Apr-2016 Michael Norrish <Michael.Norrish@nicta.com.au>

Replace 'print' with Holmake's output functions


# b6dd58ef 14-Apr-2016 Michael Norrish <Michael.Norrish@nicta.com.au>

Get "build from graph" Holmake to compile

Poly/ML version fails miserably at boolScript hurdle however.


# 4121aab1 13-Apr-2016 Michael Norrish <Michael.Norrish@nicta.com.au>

Start to implement building from dependency graph

This code is as yet unconnected to any execution, and is attempting to
replicate the behaviour that we have at the moment (corresponding to
what will eventually be -j 1).

Slightly adjust some types along the way, including changing a
bool*bool*string tuple into a record that identifies what the bools are.


# 7b43df0a 30-Mar-2016 Michael Norrish <Michael.Norrish@nicta.com.au>

Remove diffs between poly and mosml Holmake impls

Next step is to actually remove as much as possible of the
tools-poly/Holmake directory.


# 60a69fd8 30-Mar-2016 Michael Norrish <Michael.Norrish@nicta.com.au>

Pass more info to the impl-specific BuildCommand

In particular, pass
- the full Holmakefile-derived envlist function (which turns $(...)
references into string lists);
- output functions (warn, die, etc)
- quit_on_failure, which is derived from the Holmakefile and core
command-line options


# 4aa9adb2 28-Mar-2016 Michael Norrish <Michael.Norrish@nicta.com.au>

Purge Holmake.sml of much Moscow ML specific code

The Moscow ML stuff has moved into mosml/BuildCommand etc

Progress with github issue #77


# c0d1d17f 28-Mar-2016 Michael Norrish <Michael.Norrish@nicta.com.au>

Cleanup more Holmake code

This is in pursuit of more unification between Moscow ML and Poly/ML
implementations (github issue #77).


# fdc5cae7 07-Mar-2016 Michael Norrish <Michael.Norrish@nicta.com.au>

Make KERNELID variable available to Holmake

This is the value of the kernel option that was passed to build when the
system was built. The build program stores it in the filesystem in a
"canonical location", and this file is read by Holmake when it starts
up.


# 6d759162 11-Jan-2016 Anthony Fox <anthony.fox@cl.cam.ac.uk>

Simplify build output by not printing out the full path of "Holmake".


# 51de37ac 01-Nov-2015 Ramana Kumar <ramana@member.fsf.org>

Initial stab at making Holmake aware of article files (#310)

It builds, and Holmake's normal behaviour appears not to have broken.
But the new functionality is not at all tested yet.


# f11b6356 06-May-2015 Michael Norrish <Michael.Norrish@nicta.com.au>

Use printf instead of echo for added portability


# 103c7011 23-Apr-2015 Hannes Mehnert <hannes@mehnert.org>

use /bin/sh instead of /bin/bash (which is not available on all UNIX systems)

also, use cc instead of gcc (no need to compile HOL4 with gcc)


# 227f4708 22-Feb-2015 Michael Norrish <michael.norrish@nicta.com.au>

More progress with Holmake and recursive dependencies

Both depchain selftests pass now on both Poly and Moscow ML.

The treatment of relative and absolute directories is more careful,
for which see the hmdir structure within Holmake_tools. This stuff is
really only as complicated as it is for cosmetic reasons: the various
messages printed to the user try to avoid absolute paths for as long
as possible. However, more/most/all internal uses will now be with
absolute paths, which should help.


# a72d68fc 16-Feb-2015 Michael Norrish <michael.norrish@nicta.com.au>

Most of a fix for recursive holdep problem.

See test-case in Holmake/tests/depchain1

Test-case still not re-enabled as I don't think this quite works for
Moscow ML yet.

Some incidental progress with sharing more code between Moscow ML and
Poly/ML (github issue #77).


# 07480c25 12-Feb-2015 Michael Norrish <michael.norrish@nicta.com.au>

Slightly adjust Holmake's internal interface.

Just a refactoring to make the recursive calls return a record-option
rather a straight set. Intention is to next make the return value a
bigger record so that it can return a list of extra includes, thereby
allowing a fix for issue illustrated by the holdep test-case under
Holmake/tests.


# 4522c28a 02-Feb-2015 Michael Norrish <michael.norrish@nicta.com.au>

runholdep function moves to Holmake_tools (Poly/ML Holmake affected)

In the latter module, it can be used in the Poly/ML implementation.
This is progress with github issue #77

The Poly/ML implementation now fails the regression test in

tools/Holmake/tests/depchain1/dir3

so comment out that test from the build sequence temporarily. I
believe there will be a Holmake failure in machine-code until the
behaviour is properly fixed. I hope selftest 2 will go through
correctly.

Holmake's output also changes slightly because I've been more
consistent about using the built-in 'info' function instead of print.


# 6e6ca266 02-Nov-2014 Michael Norrish <michael.norrish@nicta.com.au>

Empty command-line Holmake only builds first target in Holmakefile.

If there is no Holmakefile, or if there is a Holmakefile with no
targets, then the old behaviour of attempting to build everything
possible happens.

Documented in release notes and DESCRIPTION.

Many of the distribution's Holmakefiles were harmed in the creation of
this commit, but, for the reasons given in the release notes, I don't
think this should happen that often for typical user developments.

Closes #175


# 91e46ef1 21-Oct-2014 Michael Norrish <michael.norrish@nicta.com.au>

Move generate_all_plausible_targets into common Holmake_tools.

Progress with #77


# 732be988 24-Feb-2014 Michael Norrish <michael.norrish@nicta.com.au>

Share more code between mosml and poly Holmake.

Work on github issue #77


# 65957565 17-Oct-2013 Michael Norrish <michael.norrish@nicta.com.au>

Put information about Holmake's current directory into terminal title

This relies on magic escape sequences supported by xterm,
gnome-terminal and MacOS's Terminal.app. Nothing extra is done under
Windows.


# e63d42fc 17-Jul-2013 Michael Norrish <michael.norrish@nicta.com.au>

Implement recursive cleaning for Holmake.

Closes #125; not extensively tested.


# a8d391cc 04-Nov-2012 Michael Norrish <michael.norrish@nicta.com.au>

Improve diagnostic output when Holmake switches to execute another Holmake.

Holmake now explains why it is switching: either because it is in
another Holmakeā€™s distribution, or because another Holmake was used to
build this directory last time.


# f5f11785 15-Aug-2012 Michael Norrish <michael.norrish@nicta.com.au>

Get recursive Holmake to handle absolute paths in INCLUDES.

This was broken by 44cef4623, handling #64.


# 44cef462 14-Aug-2012 Michael Norrish <michael.norrish@nicta.com.au>

Improve Holmake's messages about recursive invocation.

Closes #64.

Also helps with #77 because the code controlling the recursive
invocations is now in Holmake_tools rather than in both versions of
Holmake.sml.


# 239b7fad 22-Mar-2011 Michael Norrish <Michael.Norrish@nicta.com.au>

Move more code (including directory cleaning) into common Holmake_tools.


# cadb3c61 22-Mar-2011 Michael Norrish <Michael.Norrish@nicta.com.au>

Move Holmake's structured file type into shared Holmake_tools module.


# 56b0bbbe 12-Aug-2010 Michael Norrish <Michael.Norrish@nicta.com.au>

Adjust order in which 'last-made-by analysis' considers options.

In particular, if running Holmake inside a HOL distribution, this will take
precedence over a last-made-by file. I.e., the 'local' Holmake will be used
rather than something appearing in a last-made-by file.


# 81936ffd 02-Jun-2010 Michael Norrish <Michael.Norrish@nicta.com.au>

Update use of exec to reflect its proper practice (name of executable in args).

When you call execv (the Unix system call), you pass the thing to run as well
as an argv. Tradition has that the first thing in argv is the name of the
thing being executed (in shell scripts, this is bash, for example). This change
makes our use of exec match this.


# d3380925 09-May-2010 Michael Norrish <Michael.Norrish@nicta.com.au>

Make call to CommandLine.name() happen inside Holmake rather than the compiler.

If you are compiling

val execname = CommandLine.name()

with this phrase at the top-level, then it will get "poly" (or some
variant thereof). If arrange to have the code above called first
within an executable generated from compilation, it will get the right
name (i.e., "Holmake" in this setting).


# d7631584 09-May-2010 Michael Norrish <Michael.Norrish@nicta.com.au>

New Holmake feature: check to see if it should be being used as builder.

If, as I do, you have multiple HOL installations on the same machine,
it can be a pain to remember to build things with the correct Holmake.
On the other hand, it's certainly convenient having a Holmake in one's
PATH. So, this change gets Holmake to determine if it should be the
Holmake being used, and if it thinks another Holmake should be being
used instead, that other Holmake gets called out to instead. This
"calling out" is done through Systeml.exec, so can even be across
Poly/ML-mosml boundaries.

There are two ways in which a Holmake can decide determine the correct
Holmake to be used. If it sees a .HOLMK/lastmaker file containing a
path, then this is used. This file is written to when a Holmake does
decide it's the rightful make executable. Secondly, if Holmake
determines (by jumping up through the file-system) that it is being
called inside a HOL installation already containing a bin/Holmake,
then that is taken to be correct.

When a second Holmake is called as part of this process, it also gets
passed the --nolmbc flag ("no last made by check") to stop it going
through the whole process all over again.