version = "2.0b2"; deprecation = "on"; src_dir = "src"; build_dir = "classes"; lib_dir = "lib"; dist_dir = "dist"; test_src_dir = "tests/classes"; javadoc_dir = "javadoc"; bsf_src_dir = "bsf/src"; classgen_src_dir = "asm/src"; javadoc_jar = dist_dir+"/javadoc.zip"; core_jar = dist_dir+"/bsh-core-"+version+".jar"; src_jar = dist_dir+"/bsh-"+version+"-src.jar"; all_jar_name = "bsh-"+version+".jar"; all_jar = dist_dir+"/"+all_jar_name; commands_jar = dist_dir+"/bsh-commands-"+version+".jar"; classpath_jar = dist_dir+"/bsh-classpath-"+version+".jar"; reflect_jar = dist_dir+"/bsh-reflect-"+version+".jar"; util_jar = dist_dir+"/bsh-util-"+version+".jar"; bsf_jar = dist_dir+"/bsh-bsf-"+version+".jar"; classgen_jar = dist_dir+"/bsh-classgen-"+version+".jar"; bshservlet_wbsh_war = dist_dir+"/bshservlet-wbsh.war"; bshservlet_war = dist_dir+"/bshservlet.war"; commands_bshdoc = "docs/manual/bshcommands-bshdoc.xml"; //------------------------------------------------------------------- //==-- JAR FILES TO ADD TO CLASSPATH --== lib_fileset = make.createFileList(lib_dir, ".*\\.jar", (make.INCLUDE_PATH | make.RECURSE)); classpath = build_dir; for (jarfile : lib_fileset) classpath += File.pathSeparator+jarfile; //------------------------------------------------------------------- //==-- SET SEARCH PATHS --== make.addSearchPath(".*\\.java", src_dir); make.addSearchPath(".*\\.java", classgen_src_dir); make.addSearchPath(".*\\.java", bsf_src_dir); make.addSearchPath(".*\\.java", test_src_dir); //------------------------------------------------------------------- //==-- DIRECTORY CREATION RULES --== make.createDirectoryRule(build_dir, null, true); make.createDirectoryRule(dist_dir, null, true); make.createDirectoryRule(javadoc_dir, null, true); //------------------------------------------------------------------- //==-- RULE FOR bsh.jj --== make.createExplicitRule(src_dir+"/bsh/bsh.jj", src_dir+"/bsh/bsh.jjt", "jjtree", true); jjtree(String target, String[] prereqs) { print("Running jjtree"); cmd = "java -classpath "+classpath+ " jjtree -OUTPUT_DIRECTORY="+src_dir+"/bsh "+src_dir+"/bsh/bsh.jjt"; make.exec(cmd); } //------------------------------------------------------------------- //==-- RULE FOR Parser.java --== make.createExplicitRule(src_dir+"/bsh/Parser.java", src_dir+"/bsh/bsh.jjt", "javacc", true); javacc(String target, String[] prereqs) { print("Running javacc"); cmd = "java -classpath "+classpath+ " javacc -OUTPUT_DIRECTORY="+src_dir+"/bsh "+src_dir+"/bsh/bsh.jj"; make.exec(cmd); } make.buildTarget(src_dir+"/bsh/Parser.java"); //------------------------------------------------------------------- //==-- CREATE SOURCE AND CLASS FILE LISTS --== sourceFiles = make.createFileList(src_dir, ".*\\.java", (make.INCLUDE_PATH | make.RECURSE | make.RELATIVE_PATH)); sourceFiles = make.combine(sourceFiles, make.createFileList(test_src_dir, ".*\\.java", (make.INCLUDE_PATH | make.RECURSE | make.RELATIVE_PATH))); sourceFiles = make.combine(sourceFiles, make.createFileList(bsf_src_dir, ".*\\.java", (make.INCLUDE_PATH | make.RECURSE | make.RELATIVE_PATH))); sourceFiles = make.combine(sourceFiles, make.createFileList(classgen_src_dir, ".*\\.java", (make.INCLUDE_PATH | make.RECURSE | make.RELATIVE_PATH))); classFiles = make.substitute("(.*)\\.java", build_dir+"/$1.class", sourceFiles); //------------------------------------------------------------------- //==-- CREATE LIST OF CLASS FILES TO BUILD --== compileList = ""; compileCnt = 0; make.createPatternRule(build_dir+"/(.*).class", "$1.java", "removeClass", false); removeClass(String target, String[] prereqs) { //print(prereqs[0]); //Prints the files that will be built rm(target); compileList += prereqs[0]+" "; compileCnt ++; } //------------------------------------------------------------------- //==-- COMPILE CLASS FILES --== make.createPhonyRule("compile", build_dir+" "+make.arrayToString(classFiles), "compile"); compile(String target, String[] prereqs) { print("Compiling "+compileCnt+" source files"); cmd = "javac -g -classpath "+classpath+" -d "+build_dir+ " -sourcepath "+src_dir+" "+compileList; make.exec(cmd, true); } //------------------------------------------------------------------- //==-- JAVADOC RULE --== make.createPhonyRule("makejavadoc", javadoc_dir, "createJavaDoc"); createJavaDoc(String target, String[] prereqs) { ps = make.getProperty("path.separator"); cmd = "javadoc -d "+javadoc_dir+" -sourcepath "+src_dir+ps+classgen_src_dir+ "-version -author -use -windowtitle BeanShell -doctitle

BeanShell

"+ "-bottom © 2000 pat@pat.net :-) -quiet "+ "bsh bsh.util bsh.classpath bsh.reflect"; make.exec(cmd); } //------------------------------------------------------------------- //==-- COPY RULES --== make.createCopyRule("copyCommands", null, src_dir+"/bsh/commands", ".*\\.bsh", build_dir+"/bsh/commands"); make.createCopyRule("copyLibs", null, src_dir+"/bsh/util/lib", ".*", build_dir+"/bsh/util/lib"); make.createCopyRule("copyServlet", null, src_dir+"/bsh/servlet", "(.*\\.bsh)|(.*\\.template)", build_dir+"/bsh/servlet"); //------------------------------------------------------------------- //==-- GENERAL JAR CREATE METHOD --== createJar(String jarFile, String srcDir, String[] fileList, String manifest) { print("Creating "+jarFile); fileList = make.substitute("(.++)", "-C "+srcDir+" $1", fileList); if (manifest == null) cmd = "jar -cf "+jarFile+" "+make.arrayToString(fileList); else cmd = "jar -cfm "+jarFile+" "+manifest+" "+make.arrayToString(fileList); make.exec(cmd); } //------------------------------------------------------------------- //==-- GENERAL WAR CREATE METHOD --== createWar(String warFile, String file, String webxml, String lib) { print("Creating "+warFile); if (lib == null) make.mkdir("temp/WEB-INF"); else { make.mkdir("temp/WEB-INF/lib"); make.copy(lib, "temp/WEB-INF/lib"); } make.copy(file, "temp/"); make.copy(webxml, "temp/WEB-INF/web.xml"); cmd = "jar -cf "+warFile+" -C temp ."; make.exec(cmd); make.deltree("temp"); } //------------------------------------------------------------------- //==-- ALL JAR FILE --== make.createPhonyRule("jarall", all_jar, null); make.createExplicitRule(all_jar, "compile copyCommands copyLibs copyServlet "+ dist_dir, "createAllJar", true); createAllJar(String target, String[] prereqs) { createJar(all_jar, build_dir, make.createFileList(build_dir, "bsh/(.*)", (make.INCLUDE_PATH | make.RECURSE | make.RELATIVE_PATH)), src_dir+"/Manifest.console"); } //------------------------------------------------------------------- //==-- CORE JAR FILE --== make.createPhonyRule("jarcore", core_jar, null); make.createExplicitRule(core_jar, "compile "+dist_dir, "createCoreJar", true); createCoreJar(String target, String[] prereqs) { createJar(core_jar, build_dir, make.createFileList(build_dir, "(bsh/[^/]*\\.class)", "(bsh/Console.class)|(bsh/Remote.*)|(bsh/ClassGeneratorImpl.*)|"+ "(bsh/ClassGeneratorUtil.*)|(bsh/DelayedEvalBshMethod.*)", (make.INCLUDE_PATH | make.RECURSE | make.RELATIVE_PATH)), src_dir+"/Manifest.interp"); } //------------------------------------------------------------------- //==-- SOURCE JAR FILE --== srcJarList = make.createFileList(".", "(.*)", "(.*CVS.*)|(classes.*)|(dist.*)|(.*javadoc.*)|(.*\\.jar)|(.*\\.war)"+ "|(.*\\.cvs.*)|(.cpmakecache)", (make.INCLUDE_PATH | make.RECURSE | make.RELATIVE_PATH)); make.createPhonyRule("jarsrc", src_jar, null); make.createExplicitRule(src_jar, make.arrayToString(srcJarList)+dist_dir, "createSrcJar", true); createSrcJar(String target, String[] prereqs) { srcJarList = make.substitute("(.++)", "BeanShell/$1", srcJarList); createJar(src_jar, "..", srcJarList, src_dir+"/Manifest.interp"); } //------------------------------------------------------------------- //==-- COMMANDS JAR FILE --== make.createExplicitRule(commands_jar, dist_dir+" compile", "createCommandsJar", true); createCommandsJar(String target, String[] prereqs) { createJar(commands_jar, build_dir, make.createFileList(build_dir, "(bsh/commands/((.*\\.class)|(.*\\.bsh)))", (make.INCLUDE_PATH | make.RECURSE | make.RELATIVE_PATH)), null); } //------------------------------------------------------------------- //==-- CLASSPATH JAR FILE --== make.createExplicitRule(classpath_jar, dist_dir+" compile", "createClasspathJar", true); createClasspathJar(String target, String[] prereqs) { createJar(classpath_jar, build_dir, make.createFileList(build_dir, "(bsh/classpath/.*\\.class)", (make.INCLUDE_PATH | make.RECURSE | make.RELATIVE_PATH)), null); } //------------------------------------------------------------------- //==-- REFLECT JAR FILE --== make.createExplicitRule(reflect_jar, dist_dir+" compile", "createReflectJar", true); createReflectJar(String target, String[] prereqs) { createJar(reflect_jar, build_dir, make.createFileList(build_dir, "(bsh/reflect/.*\\.class)", (make.INCLUDE_PATH | make.RECURSE | make.RELATIVE_PATH)), null); } //------------------------------------------------------------------- //==-- UTIL JAR FILE --== make.createExplicitRule(util_jar, dist_dir+" compile", "createUtilJar", true); createUtilJar(String target, String[] prereqs) { createJar(util_jar, build_dir, make.createFileList(build_dir, "(bsh/util/.*)", "(bsh/util/BeanShellBSFEngine.class)", (make.INCLUDE_PATH | make.RECURSE | make.RELATIVE_PATH)), null); } //------------------------------------------------------------------- //==-- BSF JAR FILE --== make.createExplicitRule(bsf_jar, dist_dir+" compile", "createBsfJar", true); createBsfJar(String target, String[] prereqs) { createJar(bsf_jar, build_dir, new String[] {"bsh/util/BeanShellBSFEngine.class"}, null); } //------------------------------------------------------------------- //==-- CLASSGEN JAR FILE --== make.createExplicitRule(classgen_jar, dist_dir+" compile", "createClassgenJar", true); createClassgenJar(String target, String[] prereqs) { classgenFileList = make.createFileList(build_dir, "(bsh/ClassGeneratorImpl.*\\.class)|(bsh/ClassGeneratorUtil.*\\.class)|"+ "(bsh/DelayedEvalBshMethod.*\\.class)", (make.INCLUDE_PATH | make.RECURSE | make.RELATIVE_PATH)); classgenFileList = make.combine(classgenFileList, make.createFileList(build_dir, "bsh/org/objectweb/asm.*\\.class", (make.INCLUDE_PATH | make.RECURSE | make.RELATIVE_PATH))); createJar(classgen_jar, build_dir, classgenFileList, null); } //------------------------------------------------------------------- //==-- JAVADOC JAR FILE --== make.createExplicitRule(javadoc_jar, dist_dir+" makejavadoc", "createJavadocJar", true); createJavadocJar(String target, String[] prereqs) { cmd = "jar -cf "+javadoc_jar+" -C "+javadoc_dir+" ."; make.exec(cmd); } //------------------------------------------------------------------- //==-- SERVLET WBSH JAR FILE --== make.createExplicitRule(bshservlet_wbsh_war, dist_dir+" compile", "createWbshServletWar", true); createWbshServletWar(String target, String[] prereqs) { createWar(bshservlet_wbsh_war, src_dir+"/bsh/servlet/index.html", src_dir+"/bsh/servlet/example-web.xml", all_jar); } //------------------------------------------------------------------- //==-- SERVLET JAR FILE --== make.createExplicitRule(bshservlet_war, dist_dir+" compile", "createServletWar", true); createServletWar(String target, String[] prereqs) { createWar(bshservlet_war, src_dir+"/bsh/servlet/index.html", src_dir+"/bsh/servlet/example-web.xml", null); } //------------------------------------------------------------------- //==-- BSH DOC --== bshDocDepFiles = make.arrayToString(make.createFileList("src/bsh/commands", ".*\\.bsh", (make.INCLUDE_PATH | make.RECURSE))); make.createExplicitRule(commands_bshdoc, bshDocDepFiles+all_jar, "createBshDoc", true); createBshDoc(String target, String[] prereqs) { print("Creating "+target); cmd = "java -classpath "+all_jar+" bsh.Interpreter scripts/bshdoc.bsh "+ bshDocDepFiles; make.exec(null, cmd, true, null, commands_bshdoc); } //------------------------------------------------------------------- //==-- DISTRIBUTION RULE --== make.createPhonyRule("distribute", new String[] { core_jar, all_jar, src_jar, commands_jar, classpath_jar, reflect_jar, util_jar, bsf_jar, classgen_jar, javadoc_jar, bshservlet_wbsh_war, bshservlet_war, commands_bshdoc }, null); //------------------------------------------------------------------- //==-- RUN SCRIPT --== make.createPhonyRule("bsh", "compile", "runScript"); runScript(String target, String[] prereqs) { file = make.getProperty("file"); ps = make.getProperty("path.sererator"); if (file == null) { print("Please specify a script file with \"-D file=script.bsh\" on the command line"); return; } cmd = "java -classpath "+classpath+ps+build_dir+" bsh.Interpreter "+file; make.exec(cmd); } //------------------------------------------------------------------- //==-- RUN TEST SUITE --== make.createPhonyRule("test", all_jar, "test"); test(String target, String[] prereqs) { make.setProperty("file", "tests/RunAllTests.bsh"); runScript(null, null); } //------------------------------------------------------------------- //==-- CLEAN RULE --== //Can't use autoclean because it will remove Parser.java make.createPhonyRule("clean", null, "clean"); clean(String target, String[] prereqs) { print("Removing "+build_dir); make.deltree(build_dir); print("Removing "+dist_dir); make.deltree(dist_dir); print("Removing "+javadoc_dir); make.deltree(javadoc_dir); } //If the build file changes everything must be rebuilt //make.createPatternDependency("(.*\\.class)|(.*\\.jar)", "build.bsh"); make.setDefaultTarget(all_jar);