# -*- python -*- # Top-level SConstruct for Gizmoball # # This doesn't work! Current known problems: # * The javadoc generator is just plain wrong. # * Jar is jarring things up with the entirely wrong path import os, glob abspath = os.path.abspath # # Create options # opts = Options("custom.py") #opts.Add(BoolOption("DEBUG", "Set for debug build", 1)) opts.Add(EnumOption("JAVAC", "Set java compiler", "jikes", allowed_values = ("javac", "jikes"))) # # Set up environment # env = Environment(ENV = {"PATH" : os.environ["PATH"], "CLASSPATH" : map(abspath, glob.glob(os.path.join("lib","*.jar")))}, options = opts) if env["JAVAC"] == "jikes": env["JAVACFLAGS"] = "+E" # # Javadoc builder (note that this is not general) # def javadocGenerator(source, target, env, for_signature): if len(target) != 1: raise "javadoc must take only the single target directory" taglets = ["requires", "effects", "modifies", "returns", "specfield", "derivedfield"] realtaglets = [] for taglet in taglets: realtaglets.append("-taglet") realtaglets.append("javadoc6170."+taglet.title()+"Taglet") return ["javadoc", "-windowtitle", "Gizmoball", "-tagletpath", abspath(os.path.join("$LIB","javadoc6170.jar")) \ ] + realtaglets + \ ["-stylesheetfile", "$DOC/6170-javadoc.css", "-classpath", "$CLASSPATH", "-sourcepath", source, "-version", "-author", "-link", "http://web.mit.edu/6.170/www/javadoc/j2sdk1.4.1-docs-api" \ ] + source import SCons javadocBuilder = Builder(generator = javadocGenerator) env.Append(BUILDERS = {'Javadoc' : javadocBuilder}) def findJavaSource(dir): newSources = [] def visit(arg, dirname, names): for name in names: if name.endswith(".java"): newSources.append(os.path.join(dirname, name)) os.path.walk(dir, visit, None) return newSources # # Set up paths # env["SRC"] = abspath("src") env["OBJ"] = abspath("obj") env["DOC"] = abspath("doc") # # Run recursive sconscripts # Export("env") def visit(arg, dirname, names): if "SConscript" in names: SConscript(os.path.join(dirname, "SConscript")) names[:] = [] # Don't recurse further os.path.walk("src", visit, None) # # Build classes # classes = env.Java("$OBJ", "$SRC") env.Clean("$CLASSES", "$CLASSES") # # Build class jar # env["JARCHDIR"] = "$OBJ" jar = env.Jar("gizmoball.jar", "gizmoball") # # Build javadoc # javadoc = env.Javadoc("$DOC/api", findJavaSource(env.subst("$SRC"))) # # Aliases # env.Alias("obj", "$OBJ") env.Alias("jar", jar) env.Alias("javadoc", javadoc) env.Default("jar") # # Help # Help(opts.GenerateHelpText(env) + """ Targets: "scons obj" to build all classes "scons jar" to build class jar """)