/*
 * Copyright (c) 2004, Brian Hawkins
 * Permission is granted to use this code without restriction as long
 * as this copyright notice appears in all source files.
 */
 
blddir = "build";
srcdir = "src";
extdir = "ext";
jardir = "jar";
jarfile = jardir+"/cpmake.jar";
 
sourceFiles = make.createFileList(srcdir, ".*\\.java", 
		(make.INCLUDE_PATH | make.RECURSE | make.RELATIVE_PATH));
classFiles = make.substitute("(.*)\\.java", blddir+"/$1.class", sourceFiles);
extJarFiles = make.createFileList(extdir, ".*\\.jar");
compileList = "";

make.addSearchPath(".*\\.java", srcdir);
make.setDefaultTarget(jarfile);

//-------------------------------------------------------------------
//==-- CLEAN CLASS FILES --==
make.createPatternRule(blddir+"/(.*)\\.class", "$1.java", "removeClass", false);
void removeClass(String target, String[] prereqs)
	{
	print(prereqs[0]);
	rm(target);
	compileList += prereqs[0] + " ";
	}

//-------------------------------------------------------------------
//==-- COMPILE --==
make.createPhonyRule("compile", blddir+" "+make.arrayToString(classFiles), "compile");	
void compile(String target, String[] prereqs)
	{
	if (make.getProperty("JIKESPATH") != null)
		{
		print("Compiling with Jikes");
		cmd = "jikes -classpath "+make.getProperty("JIKESPATH")+";ext/bsh-1.3.0.jar;ext/jython.jar;ext/groovy.jar;"+
			make.getProperty("path.separator")+blddir+" -d "+blddir+
			" -sourcepath "+srcdir+" "+compileList;
		}
	else
		{
		print("Compiling with javac");
		cmd = "javac -classpath ext/bsh-1.3.0.jar;ext/jython.jar;ext/groovy.jar;"+blddir+
			" -d "+blddir+" -sourcepath "+srcdir+" "+compileList;
		}

	make.exec(cmd, true);
	}
	
//-------------------------------------------------------------------
//==-- DIRECTORY RULES --==
make.createDirectoryRule(blddir, null, true);
make.createDirectoryRule("doc", null, true);
make.createDirectoryRule(jardir, null, true);

//-------------------------------------------------------------------
//==-- CREATE JAR FILE --==
make.createExplicitRule(jarfile, new String[] {"compile", jardir}, "createJar", true);	
void createJar(String target, String[] prereqs)
	{		
	print("Creating "+target);
	
	rm(target);
	String cmd = "jar -cfm "+target+" manifest.txt -C "+blddir+" .";
	make.exec(cmd);
	}

//-------------------------------------------------------------------
//==-- JAVADOC DOCUMENTATION --==	
make.createPhonyRule("javadoc", "doc", "javadoc");
void javadoc(String target, String[] prereqs)
	{
	make.exec("javadoc -classpath ext/bsh-1.3.0.jar;ext/jython.jar;ext/groovy.jar;. -sourcepath src -public -d doc cpmake");
	}
	
//-------------------------------------------------------------------
//==-- EXTRACT EXT JARS --==
make.createPhonyRule("extractjars", "compile", "extractJars");
void extractJars(String target, String[] prereqs)
	{
	for (int I = 0; I < extJarFiles.length; I ++)
		{
		print("Extracting "+extJarFiles[I]);
		make.exec(blddir, "jar -xf ../ext/"+extJarFiles[I], true);
		}
	}
	
//-------------------------------------------------------------------
//==-- CREATE ONE JAR --==
make.createPhonyRule("onejar", new String[]
		{
		"extractjars",
		jardir+"/cpmake.jar"
		}, null);

//-------------------------------------------------------------------
//==-- COMPILE TEST CODE --==
make.createPhonyRule("test", "onejar", "test");
void test(String target, String[] prereqs)
	{
	print("running test");
	cwd = "test/c++";
	make.exec(cwd, "java -cp ../../jar/cpmake.jar cpmake.CPMake -f build.bsh clean test", true);
	make.exec(cwd, "java -cp ../../jar/cpmake.jar cpmake.CPMake -f build.py clean test clean", true);
	//make.exec(cwd, "java -cp ../../jar/cpmake.jar cpmake.CPMake -f build.groovy clean test clean", true);
	
	cwd = "test/java";
	make.exec(cwd, "java -cp ../../jar/cpmake.jar cpmake.CPMake -f build.bsh clean test", true);
	make.exec(cwd, "java -cp ../../jar/cpmake.jar cpmake.CPMake -f build.py clean test clean", true);
	//make.exec(cwd, "java -cp ../../jar/cpmake.jar cpmake.CPMake -f build.groovy clean test clean", true);
	}