Patch attached. This uses clojure.core/compile. But it still doesn't work. I get the same error Stephen reported:
[java] java.lang.IllegalStateException: Var null/null is unbound. (core.clj:21) [java] at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:194) [java] at org.apache.tools.ant.taskdefs.Java.run(Java.java:747) ... [java] Caused by: java.lang.IllegalStateException: Var null/null is unbound. (core.clj:21) [java] at clojure.lang.Compiler.analyzeSeq(Compiler.java:4067) [java] at clojure.lang.Compiler.analyze(Compiler.java:3896) ... [java] Caused by: java.lang.IllegalStateException: Var null/null is unbound. [java] at clojure.lang.Var.get(Var.java:129) [java] at clojure.lang.Compiler$FnExpr.parse(Compiler.java:2947) [java] at clojure.lang.Compiler.analyzeSeq(Compiler.java:4058) [java] ... 42 more [java] --- Nested Exception --- [java] java.lang.IllegalStateException: Var null/null is unbound. (core.clj:21) [java] at clojure.lang.Compiler.analyzeSeq(Compiler.java:4067) [java] at clojure.lang.Compiler.analyze(Compiler.java:3896) ... [java] Caused by: java.lang.IllegalStateException: Var null/null is unbound. [java] at clojure.lang.Var.get(Var.java:129) [java] at clojure.lang.Compiler$FnExpr.parse(Compiler.java:2947) [java] at clojure.lang.Compiler.analyzeSeq(Compiler.java:4058) [java] ... 42 more -Stuart Sierra --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---
Index: src/clj/precompile.clj =================================================================== --- src/clj/precompile.clj (revision 1106) +++ src/clj/precompile.clj (working copy) @@ -1,11 +0,0 @@ -;; This script is run by the Ant build task to precompile the core -;; Clojure source files. - -(println "Compiling Clojure core sources...") - -(binding [*compile-path* (System/getProperty "clojure.compile.path")] - (compile 'clojure.core) - (compile 'clojure.set) - (compile 'clojure.xml) - (compile 'clojure.zip) - (compile 'clojure.inspector)) Index: src/jvm/clojure/lang/CompileFiles.java =================================================================== --- src/jvm/clojure/lang/CompileFiles.java (revision 0) +++ src/jvm/clojure/lang/CompileFiles.java (revision 0) @@ -0,0 +1,58 @@ +/** + * Copyright (c) Rich Hickey. All rights reserved. + * The use and distribution terms for this software are covered by the + * Common Public License 1.0 (http://opensource.org/licenses/cpl.php) + * which can be found in the file CPL.TXT at the root of this distribution. + * By using this software in any fashion, you are agreeing to be bound by + * the terms of this license. + * You must not remove this notice, or any other, from this software. + **/ + +package clojure.lang; + +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.io.IOException; +import java.io.File; +import java.io.Reader; +import java.io.FileReader; +import java.io.BufferedReader; +import java.util.List; +import java.util.Arrays; + +/** Static compiler for .clj files. All files given on the command + * line will be compiled and saved to the directory named in the Java + * system property "clojure.compile.path". That directory must also + * be on the classpath. */ +public class CompileFiles { + + private static final String PATH_PROP = "clojure.compile.path"; + private static final Var COMPILE = RT.var("clojure.core", "compile"); + private static final IFn COMPILE_FN = COMPILE.fn(); + private static final Var NS = RT.var("clojure.core", "*ns*"); + static final Symbol USER = Symbol.create("user"); + static final Symbol CLOJURE = Symbol.create("clojure.core"); + + static final Var in_ns = RT.var("clojure.core", "in-ns"); + static final Var refer = RT.var("clojure.core", "refer"); + + public static void main(String[] args) throws Exception { + if (System.getProperty(PATH_PROP) == null) { + System.err.println("ERROR: Must set system property " + PATH_PROP + + "\nto the location for compiled .class files." + + "\nThis directory must also be on your CLASSPATH."); + System.exit(1); + } + Var.pushThreadBindings(RT.map(NS, NS.get(), + Compiler.COMPILE_FILES, RT.T, + Compiler.COMPILE_PATH, System.getProperty(PATH_PROP), + RT.WARN_ON_REFLECTION, RT.WARN_ON_REFLECTION.get())); + in_ns.invoke(USER); + refer.invoke(CLOJURE); + for (String lib : args) { + COMPILE_FN.invoke(Symbol.create(lib)); + } + Var.popThreadBindings(); + } +} + Index: build.xml =================================================================== --- build.xml (revision 1106) +++ build.xml (working copy) @@ -11,7 +11,6 @@ <property name="build" location="classes"/> <property name="clojure_jar" location="clojure.jar"/> <property name="bootclj" location="${cljsrc}/clojure/core.clj"/> - <property name="precompile" location="${cljsrc}/precompile.clj"/> <target name="init"> <tstamp/> @@ -25,10 +24,14 @@ <target name="core" depends="compile" description="Precompile Clojure core sources."> - <java classname="clojure.lang.Script" + <java classname="clojure.lang.CompileFiles" classpath="${build}:${cljsrc}"> <sysproperty key="clojure.compile.path" value="${build}"/> - <arg value="${precompile}"/> + <arg value="clojure.core"/> + <arg value="clojure.set"/> + <arg value="clojure.xml"/> + <arg value="clojure.zip"/> + <arg value="clojure.inspector"/> </java> </target>