Changes to Make in Java
The current Make in Java is version 1.6 released on 2002 February
- Changed make rule algorithm as follows. The target's
prerequisites are made. When the target exists, the cached value of
its time stamp is updated. If the target is out-of-date, immediately
after the rule for an existing target completes, the cached value is
once again updated. Finally, an existing target is considered made if
one of its prerequisites is made even if the target itself need not be
- Updated the user documentation to show how to produce a list of
packages that are found in a list of directories. Search for
- Added the file edu/neu/ccs/jmk/sun/Javac1_3.java. This allows
compilation to occur inside a J2SE 1.3 JVM running the makefile
- Added the file edu/neu/ccs/jmk/contrib/ExecChdirOperator.java.
This operatior changes the directory before executing a program as an
- Considered adding the "cdexec" command to the main
package, but did not. The change would mean the code would not work
under JDK 1.1.
Changes from version 1.4 to version 1.5
Make in Java version 1.5 was released on 2001 December 06.
- Changed the example makefile in the documentation to show current pactice.
- Updated jmk.sh so that it does the right thing on platforms that
do not have POSIX shells.
- Updated all HTML to follow the Strict 4.01 DTD.
- replaced deprecated use of java.util.Properties.save with store in
Changes from version 1.3 to version 1.4
Make in Java version 1.4 was released on 2000 September 21.
- Added $Id: changes.html,v 1.7 2002/02/11 12:09:24 ramsdell Exp $ tags for use with CVS.
- Moved sources to http://jmk.sourceforge.net.
Changes from version 1.2 to version 1.3
Make in Java version 1.3 was released on 1999 October 19.
- Added a recursive delete operator called delall.
- Added filter function example to the documentation.
- Documentation corrected to state the purpose of JMK is to support
the task of writing platform independent makefiles.
Changes from version 1.1 to version 1.2
- Swing GUI changes.
- Word wrapping.
- Color Hilightning.
- Load/Save Properties.
- Mac look and feel.
- Flag indicator.
- File names given to the glob function and file operators may
contain more than one wild card character.
Changes from version 1.0 to version 1.1
- Made the enter key start a make process in the swing interface.
- Added functions first, rest, dirs, and load. See the section on
functions in the user documentation.
- Changed the license to the Lesser General Public License.
Changes from version 0.9 to version 1.0
- The generic path separator character has been changed from colon
to semicolon. Old makefiles that use generic path lists must be modified
to reflect this change.
Changes from version 0.8 to version 0.9
-s option gives a new graphical interface based on Swing.
Olivier Refalo contributed the interface.
- The AWT graphical interface is invoked when there is a linkage
failure in the swing interface.
- Expressions in the commands associated with a rule are evaluated
when the rule's commands are executed.
- There are now two types of
values used to specify rules: lists of strings and functions. Syntax
has been added to allow the construction of user defined functions.
The new syntax causes the following incompatible changes:
- function and do are now reserved words.
- There is no longer a separate name space for functions.
Changes from version 0.7 to version 0.8
- A command preceded by "-" ignores errors.
- File operations try all arguments before failing.
- appendLine and appendLongLine in MakeWindow are no longer synchronized.
- The online documentation pages conform to the HTML 4.0 traditional DTD.
Changes from version 0.6 to version 0.7
- Fixed a bug in file last modified time caching.
- Recursive makes implemented. All prerequisites of a target are
made before the target is analyzed.
- Added class edu.neu.ccs.jmk.shell.Kawa which allows commands
to be written in Scheme.
- Fixed a bug in parse error messages as the line number was always
one less than it should be.
- Removed Linux JDK 1.1.3 hacks. All is fine under Linux JDK
- Added Make Writer, a writer for output to the make window. This
object eliminates the need for a thread.
Changes from version 0.5 to version 0.6
- Class edu.neu.ccs.jmk.Make implements the Operator interface
allowing the invocation of jmk from commands in makefiles.
- Added class edu.neu.ccs.jmk.shell.JPython which allows commands
to be written in Python.
Changes from version 0.4 to version 0.5
- Added the rename and copy file operator.
- Added the create operator.
- Changed MakeWindow so that it compiles on Linux JDK 1.1.3
Changes from version 0.3 to version 0.4
- Added the file inclusion command.
- Added conditionals.
- Added the equal string function.
- The Make object stores its associated file as a java.io.File, not
Changes from version 0.2 to version 0.3
- Changed the operator interface so that exec includes a
PrintWriter. This change was made so that multiple make windows can
be run within one Java virtual machine.
- Added a task thread when using the window interface. Make and
load run in this thread instead of the window thread.
- A make run can be cancelled. The make run is interrupted as soon
as the currently executing command terminates.
- The make short cut was changed from 'M' to 'A' because it invoked
make twice on Windows 95.
- Added a menu item that transfers the transcript to the system
- Added the note command operator.
- Added a Java trademark notice to index.html.
Changes from version 0.1 to version 0.2
- Changed the jar file name to jmk.jar.
- Changed the package to edu.neu.ccs.jmk.
- In class Make, the appropriate methods are now public so that
other applications can easily use the class.
- Changed debug mode (-d) so that it prints assignments in
addition to the previous information printed about rule interpretation.
- Added just print mode (-n) which prints, but does not
- Added a main method in MakeWindow for starting the application in
a window without command line arguments.
- All options set on the command line can be set in the make window.
- Window size and font information are obtained from the
jmk.properties file in the current class path.
The author thinks the most important improvement that should be
made to JMK is to make sequences of commands into first class objects
that can be manipulated just as functions and lists of strings can
be. The change would allow the application of the full power of the
expression interpreter to the task of creating command sequences,
which are constructed as the makefile is read in.
The semantics of pattern rules should be more like those in GNU Make.
In a block, a sequence of local assignments of function constants
should create mutually recursive definitions.
The program should use the internationalization facilities to
produce error messages in multiple languages.
Suggestions for new features are welcome.
John D. Ramsdell