[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

reloading a required file

    From: pshannon@iapetus.cv.nrao.edu (Paul Shannon)
    Date: Mon, 16 Aug 1993 01:59:52 GMT

    I have an mcl program in two files: a main file, and  a small one
    that defines a function that returns a view containing dialog items.

    After I tinker with the dialog items, I save the file, and re-evaluate
    all of the main file.  

    I had hoped that the function call

	 (require 'rules-dialog-box)

    would detect that  rules-dialog-box.lisp had changed since last loaded,
    but it seems not to.  The only solution I can imagine at this point is
    to quit from mcl, and start from scratch.  There must be a better way.

You can easily implement a recompile-and-reload-if-necessary function
using the Common Lisp function FILE-WRITE-DATE to compare the time
the binary was written with the time the source file was written.
Many defsystems do something like this.

  "Assumes you want the binary to be in the same directory with .fasl
   extension.  You can parameterize this if desired."
       	       (OR (NOT (PROBE-FILE BIN))
                   (NULL (SETQ SRCDATE (FILE-WRITE-DATE SRC)))
                   (NULL (SETQ BINDATE (FILE-WRITE-DATE BIN)))
                   (> SRCDATE BINDATE)))
      (LOAD BIN)))) ;;in a defsystem, you'd put the LOAD outside the WHEN.

You can even add your own require-like functionality by (e.g.) binding a flag
when your rules-dialog-box file is loaded, then adding a check in the
above function for whether the flag is boundp.

While there may be an MCL-native way to do this, the approach above is
portable across Common Lisps (assuming you parameterize correctly for
file naming conventions).

-- Bob