1:version             = "2.0b2";
   2:deprecation         = "on";
   3:src_dir             = "src";
   4:build_dir           = "classes";
   5:lib_dir             = "lib";
   6:dist_dir            = "dist";
   7:test_src_dir        = "tests/classes";
   8:javadoc_dir         = "javadoc";
   9:bsf_src_dir         = "bsf/src";
  10:classgen_src_dir    = "asm/src";
  11:
  12:javadoc_jar             = dist_dir+"/javadoc.zip";
  13:core_jar                = dist_dir+"/bsh-core-"+version+".jar";
  14:src_jar                 = dist_dir+"/bsh-"+version+"-src.jar";
  15:all_jar_name            = "bsh-"+version+".jar";
  16:all_jar                 = dist_dir+"/"+all_jar_name;
  17:commands_jar            = dist_dir+"/bsh-commands-"+version+".jar";
  18:classpath_jar           = dist_dir+"/bsh-classpath-"+version+".jar";
  19:reflect_jar             = dist_dir+"/bsh-reflect-"+version+".jar";
  20:util_jar                = dist_dir+"/bsh-util-"+version+".jar";
  21:bsf_jar                 = dist_dir+"/bsh-bsf-"+version+".jar";
  22:classgen_jar            = dist_dir+"/bsh-classgen-"+version+".jar";
  23:bshservlet_wbsh_war     = dist_dir+"/bshservlet-wbsh.war";
  24:bshservlet_war          = dist_dir+"/bshservlet.war";
  25:
  26:commands_bshdoc         = "docs/manual/bshcommands-bshdoc.xml";
  27:
  28:
  29://-------------------------------------------------------------------
  30://==-- JAR FILES TO ADD TO CLASSPATH --==
  31:lib_fileset = make.createFileList(lib_dir, ".*\\.jar",
  32:        (make.INCLUDE_PATH | make.RECURSE));
  33:classpath = build_dir;
  34:for (jarfile : lib_fileset)
  35:    classpath += File.pathSeparator+jarfile;
  36:
  37://-------------------------------------------------------------------
  38://==-- SET SEARCH PATHS --==
  39:make.addSearchPath(".*\\.java", src_dir);
  40:make.addSearchPath(".*\\.java", classgen_src_dir);
  41:make.addSearchPath(".*\\.java", bsf_src_dir);
  42:make.addSearchPath(".*\\.java", test_src_dir);
  43:
  44://-------------------------------------------------------------------
  45://==-- DIRECTORY CREATION RULES --==
  46:make.createDirectoryRule(build_dir, null, true);
  47:make.createDirectoryRule(dist_dir, null, true);
  48:make.createDirectoryRule(javadoc_dir, null, true);
  49:
  50://-------------------------------------------------------------------
  51://==-- RULE FOR bsh.jj --==
  52:make.createExplicitRule(src_dir+"/bsh/bsh.jj", src_dir+"/bsh/bsh.jjt", "jjtree", true);
  53:jjtree(String target, String[] prereqs)
  54:    {
  55:    print("Running jjtree");
  56:    cmd = "java -classpath "+classpath+
  57:        " jjtree -OUTPUT_DIRECTORY="+src_dir+"/bsh "+src_dir+"/bsh/bsh.jjt";
  58:    make.exec(cmd);
  59:    }
  60:
  61://-------------------------------------------------------------------
  62://==-- RULE FOR Parser.java --==
  63:make.createExplicitRule(src_dir+"/bsh/Parser.java", src_dir+"/bsh/bsh.jjt", "javacc", true);
  64:javacc(String target, String[] prereqs)
  65:    {
  66:    print("Running javacc");
  67:    cmd = "java -classpath "+classpath+
  68:        " javacc -OUTPUT_DIRECTORY="+src_dir+"/bsh "+src_dir+"/bsh/bsh.jj";
  69:    make.exec(cmd);
  70:    }   
  71:
  72:make.buildTarget(src_dir+"/bsh/Parser.java");
  73:
  74:
  75://-------------------------------------------------------------------
  76://==-- CREATE SOURCE AND CLASS FILE LISTS --==
  77:sourceFiles = make.createFileList(src_dir, ".*\\.java", 
  78:        (make.INCLUDE_PATH | make.RECURSE | make.RELATIVE_PATH));
  79:sourceFiles = make.combine(sourceFiles, make.createFileList(test_src_dir, ".*\\.java",
  80:        (make.INCLUDE_PATH | make.RECURSE | make.RELATIVE_PATH)));
  81:sourceFiles = make.combine(sourceFiles, make.createFileList(bsf_src_dir, ".*\\.java",
  82:        (make.INCLUDE_PATH | make.RECURSE | make.RELATIVE_PATH)));
  83:sourceFiles = make.combine(sourceFiles, make.createFileList(classgen_src_dir, ".*\\.java",
  84:        (make.INCLUDE_PATH | make.RECURSE | make.RELATIVE_PATH)));
  85:        
  86:classFiles = make.substitute("(.*)\\.java", build_dir+"/$1.class", sourceFiles);
  87:
  88:
  89://-------------------------------------------------------------------
  90://==-- CREATE LIST OF CLASS FILES TO BUILD --==
  91:compileList = "";
  92:compileCnt = 0;
  93:make.createPatternRule(build_dir+"/(.*).class", "$1.java", "removeClass", false);
  94:removeClass(String target, String[] prereqs)
  95:    {
  96:    //print(prereqs[0]);  //Prints the files that will be built
  97:    rm(target);
  98:    compileList += prereqs[0]+" ";
  99:    compileCnt ++;
 100:    }
 101:    
 102://-------------------------------------------------------------------
 103://==-- COMPILE CLASS FILES --==
 104:make.createPhonyRule("compile", build_dir+" "+make.arrayToString(classFiles), "compile");
 105:compile(String target, String[] prereqs)
 106:    {
 107:    print("Compiling "+compileCnt+" source files");
 108:    cmd = "javac -g -classpath "+classpath+" -d "+build_dir+
 109:            " -sourcepath "+src_dir+" "+compileList;
 110:    make.exec(cmd, true);
 111:    }
 112:
 113://-------------------------------------------------------------------
 114://==-- JAVADOC RULE --==
 115:make.createPhonyRule("makejavadoc", javadoc_dir, "createJavaDoc");
 116:createJavaDoc(String target, String[] prereqs)
 117:    {
 118:    ps = make.getProperty("path.separator");
 119:    cmd = "javadoc -d "+javadoc_dir+" -sourcepath "+src_dir+ps+classgen_src_dir+
 120:            "-version -author -use -windowtitle BeanShell -doctitle <h1>BeanShell</h1> "+
 121:            "-bottom <em>&#169;&nbsp;2000&nbsp;pat@pat.net&nbsp;:-)</em> -quiet "+
 122:            "bsh bsh.util bsh.classpath bsh.reflect";
 123:    make.exec(cmd);
 124:    }
 125:    
 126://-------------------------------------------------------------------
 127://==-- COPY RULES --==
 128:make.createCopyRule("copyCommands", null, src_dir+"/bsh/commands",
 129:        ".*\\.bsh", build_dir+"/bsh/commands");
 130:make.createCopyRule("copyLibs", null, src_dir+"/bsh/util/lib", 
 131:        ".*", build_dir+"/bsh/util/lib");
 132:make.createCopyRule("copyServlet", null, src_dir+"/bsh/servlet", 
 133:        "(.*\\.bsh)|(.*\\.template)", build_dir+"/bsh/servlet");
 134:                
 135://-------------------------------------------------------------------
 136://==-- GENERAL JAR CREATE METHOD --==
 137:createJar(String jarFile, String srcDir, String[] fileList, String manifest)
 138:    {
 139:    print("Creating "+jarFile);
 140:    fileList = make.substitute("(.++)", "-C "+srcDir+" $1", fileList);
 141:    if (manifest == null)
 142:        cmd = "jar -cf "+jarFile+" "+make.arrayToString(fileList);
 143:    else
 144:        cmd = "jar -cfm "+jarFile+" "+manifest+" "+make.arrayToString(fileList);
 145:    make.exec(cmd);
 146:    }
 147:    
 148://-------------------------------------------------------------------
 149://==-- GENERAL WAR CREATE METHOD --==
 150:createWar(String warFile, String file, String webxml, String lib)
 151:    {
 152:    print("Creating "+warFile);
 153:    if (lib == null)
 154:        make.mkdir("temp/WEB-INF");
 155:    else
 156:        {
 157:        make.mkdir("temp/WEB-INF/lib");
 158:        make.copy(lib, "temp/WEB-INF/lib");
 159:        }
 160:    
 161:    make.copy(file, "temp/");
 162:        
 163:    make.copy(webxml, "temp/WEB-INF/web.xml");
 164:    
 165:    cmd = "jar -cf "+warFile+" -C temp .";
 166:    make.exec(cmd);
 167:    
 168:    make.deltree("temp");
 169:    }
 170:    
 171://-------------------------------------------------------------------
 172://==-- ALL JAR FILE --==
 173:make.createPhonyRule("jarall", all_jar, null);
 174:make.createExplicitRule(all_jar, "compile copyCommands copyLibs copyServlet "+
 175:        dist_dir, "createAllJar", true);
 176:createAllJar(String target, String[] prereqs)
 177:    {
 178:    createJar(all_jar, build_dir, make.createFileList(build_dir, "bsh/(.*)", 
 179:            (make.INCLUDE_PATH | make.RECURSE | make.RELATIVE_PATH)), 
 180:            src_dir+"/Manifest.console");
 181:    }
 182:
 183://-------------------------------------------------------------------
 184://==-- CORE JAR FILE --==   
 185:make.createPhonyRule("jarcore", core_jar, null);
 186:make.createExplicitRule(core_jar, "compile "+dist_dir, "createCoreJar", true);
 187:createCoreJar(String target, String[] prereqs)
 188:    {
 189:    createJar(core_jar, build_dir, make.createFileList(build_dir, "(bsh/[^/]*\\.class)",
 190:            "(bsh/Console.class)|(bsh/Remote.*)|(bsh/ClassGeneratorImpl.*)|"+
 191:            "(bsh/ClassGeneratorUtil.*)|(bsh/DelayedEvalBshMethod.*)", 
 192:            (make.INCLUDE_PATH | make.RECURSE | make.RELATIVE_PATH)), 
 193:            src_dir+"/Manifest.interp");
 194:    }
 195:
 196://-------------------------------------------------------------------
 197://==-- SOURCE JAR FILE --==
 198:srcJarList = make.createFileList(".", "(.*)",
 199:            "(.*CVS.*)|(classes.*)|(dist.*)|(.*javadoc.*)|(.*\\.jar)|(.*\\.war)"+
 200:            "|(.*\\.cvs.*)|(.cpmakecache)", 
 201:            (make.INCLUDE_PATH | make.RECURSE | make.RELATIVE_PATH));
 202:make.createPhonyRule("jarsrc", src_jar, null);
 203:make.createExplicitRule(src_jar, make.arrayToString(srcJarList)+dist_dir, "createSrcJar", true);
 204:createSrcJar(String target, String[] prereqs)
 205:    {
 206:    srcJarList = make.substitute("(.++)", "BeanShell/$1", srcJarList);
 207:    createJar(src_jar, "..", srcJarList, src_dir+"/Manifest.interp");
 208:    }
 209:    
 210://-------------------------------------------------------------------
 211://==-- COMMANDS JAR FILE --==
 212:make.createExplicitRule(commands_jar, dist_dir+" compile", "createCommandsJar", true);
 213:createCommandsJar(String target, String[] prereqs)
 214:    {
 215:    createJar(commands_jar, build_dir, make.createFileList(build_dir, 
 216:            "(bsh/commands/((.*\\.class)|(.*\\.bsh)))",
 217:            (make.INCLUDE_PATH | make.RECURSE | make.RELATIVE_PATH)), null);
 218:    }
 219:
 220://-------------------------------------------------------------------
 221://==-- CLASSPATH JAR FILE --==
 222:make.createExplicitRule(classpath_jar, dist_dir+" compile", "createClasspathJar", true);
 223:createClasspathJar(String target, String[] prereqs)
 224:    {
 225:    createJar(classpath_jar, build_dir, make.createFileList(build_dir, 
 226:            "(bsh/classpath/.*\\.class)",
 227:            (make.INCLUDE_PATH | make.RECURSE | make.RELATIVE_PATH)), null);
 228:    }
 229:    
 230://-------------------------------------------------------------------
 231://==-- REFLECT JAR FILE --==
 232:make.createExplicitRule(reflect_jar, dist_dir+" compile", "createReflectJar", true);
 233:createReflectJar(String target, String[] prereqs)
 234:    {
 235:    createJar(reflect_jar, build_dir, make.createFileList(build_dir, 
 236:            "(bsh/reflect/.*\\.class)",
 237:            (make.INCLUDE_PATH | make.RECURSE | make.RELATIVE_PATH)), null);
 238:    }
 239:    
 240://-------------------------------------------------------------------
 241://==-- UTIL JAR FILE --==
 242:make.createExplicitRule(util_jar, dist_dir+" compile", "createUtilJar", true);
 243:createUtilJar(String target, String[] prereqs)
 244:    {
 245:    createJar(util_jar, build_dir, make.createFileList(build_dir, 
 246:            "(bsh/util/.*)", "(bsh/util/BeanShellBSFEngine.class)",
 247:            (make.INCLUDE_PATH | make.RECURSE | make.RELATIVE_PATH)), null);
 248:    }
 249:    
 250://-------------------------------------------------------------------
 251://==-- BSF JAR FILE --==
 252:make.createExplicitRule(bsf_jar, dist_dir+" compile", "createBsfJar", true);
 253:createBsfJar(String target, String[] prereqs)
 254:    {
 255:    createJar(bsf_jar, build_dir, new String[] {"bsh/util/BeanShellBSFEngine.class"}, null);
 256:    }
 257:    
 258://-------------------------------------------------------------------
 259://==-- CLASSGEN JAR FILE --==
 260:make.createExplicitRule(classgen_jar, dist_dir+" compile", "createClassgenJar", true);
 261:createClassgenJar(String target, String[] prereqs)
 262:    {
 263:    classgenFileList = make.createFileList(build_dir,
 264:            "(bsh/ClassGeneratorImpl.*\\.class)|(bsh/ClassGeneratorUtil.*\\.class)|"+
 265:            "(bsh/DelayedEvalBshMethod.*\\.class)", 
 266:            (make.INCLUDE_PATH | make.RECURSE | make.RELATIVE_PATH));
 267:    classgenFileList = make.combine(classgenFileList, make.createFileList(build_dir,
 268:            "bsh/org/objectweb/asm.*\\.class",
 269:            (make.INCLUDE_PATH | make.RECURSE | make.RELATIVE_PATH)));
 270:    createJar(classgen_jar, build_dir, classgenFileList, null);
 271:    }
 272:
 273://-------------------------------------------------------------------
 274://==-- JAVADOC JAR FILE --==
 275:make.createExplicitRule(javadoc_jar, dist_dir+" makejavadoc", "createJavadocJar", true);
 276:createJavadocJar(String target, String[] prereqs)
 277:    {
 278:    cmd = "jar -cf "+javadoc_jar+" -C "+javadoc_dir+" .";
 279:    make.exec(cmd);
 280:    }
 281:    
 282://-------------------------------------------------------------------
 283://==-- SERVLET WBSH JAR FILE --==
 284:make.createExplicitRule(bshservlet_wbsh_war, dist_dir+" compile", "createWbshServletWar", true);
 285:createWbshServletWar(String target, String[] prereqs)
 286:    {
 287:    createWar(bshservlet_wbsh_war, src_dir+"/bsh/servlet/index.html",
 288:            src_dir+"/bsh/servlet/example-web.xml", all_jar); 
 289:    }
 290:
 291://-------------------------------------------------------------------
 292://==-- SERVLET JAR FILE --==
 293:make.createExplicitRule(bshservlet_war, dist_dir+" compile", "createServletWar", true);
 294:createServletWar(String target, String[] prereqs)
 295:    {
 296:    createWar(bshservlet_war, src_dir+"/bsh/servlet/index.html",
 297:            src_dir+"/bsh/servlet/example-web.xml", null); 
 298:    }
 299:    
 300://-------------------------------------------------------------------
 301://==-- BSH DOC --==
 302:bshDocDepFiles = make.arrayToString(make.createFileList("src/bsh/commands", ".*\\.bsh",
 303:            (make.INCLUDE_PATH | make.RECURSE)));
 304:make.createExplicitRule(commands_bshdoc, bshDocDepFiles+all_jar, "createBshDoc", true);
 305:createBshDoc(String target, String[] prereqs)
 306:    {
 307:    print("Creating "+target);
 308:    cmd = "java -classpath "+all_jar+" bsh.Interpreter scripts/bshdoc.bsh "+
 309:            bshDocDepFiles;
 310:            
 311:    make.exec(null, cmd, true, null, commands_bshdoc);
 312:    }
 313:    
 314://-------------------------------------------------------------------
 315://==-- DISTRIBUTION RULE --==
 316:make.createPhonyRule("distribute", new String[] {
 317:        core_jar,
 318:        all_jar,
 319:        src_jar,
 320:        commands_jar,
 321:        classpath_jar,
 322:        reflect_jar,
 323:        util_jar,
 324:        bsf_jar,
 325:        classgen_jar,
 326:        javadoc_jar,
 327:        bshservlet_wbsh_war,
 328:        bshservlet_war,
 329:        commands_bshdoc }, null);
 330:
 331://-------------------------------------------------------------------
 332://==-- RUN SCRIPT --==
 333:make.createPhonyRule("bsh", "compile", "runScript");
 334:runScript(String target, String[] prereqs)
 335:    {
 336:    file = make.getProperty("file");
 337:    ps = make.getProperty("path.sererator");
 338:    if (file == null)
 339:        {
 340:        print("Please specify a script file with \"-D file=script.bsh\" on the command line");
 341:        return;
 342:        }
 343:    cmd = "java -classpath "+classpath+ps+build_dir+" bsh.Interpreter "+file;
 344:    make.exec(cmd);
 345:    }
 346:
 347://-------------------------------------------------------------------
 348://==-- RUN TEST SUITE --==
 349:make.createPhonyRule("test", all_jar, "test");
 350:test(String target, String[] prereqs)
 351:    {
 352:    make.setProperty("file", "tests/RunAllTests.bsh");
 353:    runScript(null, null);
 354:    }
 355:    
 356://-------------------------------------------------------------------
 357://==-- CLEAN RULE --==
 358://Can't use autoclean because it will remove Parser.java
 359:make.createPhonyRule("clean", null, "clean");
 360:clean(String target, String[] prereqs)
 361:    {
 362:    print("Removing "+build_dir);
 363:    make.deltree(build_dir);
 364:    print("Removing "+dist_dir);
 365:    make.deltree(dist_dir);
 366:    print("Removing "+javadoc_dir);
 367:    make.deltree(javadoc_dir);
 368:    }
 369:    
 370:
 371://If the build file changes everything must be rebuilt
 372://make.createPatternDependency("(.*\\.class)|(.*\\.jar)", "build.bsh");
 373:    
 374:make.setDefaultTarget(all_jar);