blob: f2e90d8b4181ce3c43c55ab5c75f20655eec1c3e [file] [log] [blame]
package aQute.bnd.make;
import java.io.*;
import java.util.*;
import java.util.regex.*;
import aQute.bnd.build.*;
import aQute.bnd.service.*;
import aQute.lib.osgi.*;
public class MakeBnd implements MakePlugin, Constants {
final static Pattern JARFILE = Pattern.compile("(.+)\\.(jar|ipa)");
public Resource make(Builder builder, String destination,
Map<String, String> argumentsOnMake) throws Exception {
String type = (String) argumentsOnMake.get("type");
if (!"bnd".equals(type))
return null;
String recipe = (String) argumentsOnMake.get("recipe");
if (recipe == null) {
builder.error("No recipe specified on a make instruction for "
+ destination);
return null;
}
File bndfile = builder.getFile(recipe);
if (bndfile.isFile()) {
// We do not use a parent because then we would
// build ourselves again. So we can not blindly
// inherit the properties.
Builder bchild = builder.getSubBuilder();
bchild.removeBundleSpecificHeaders();
// We must make sure that we do not include ourselves again!
bchild.setProperty(Analyzer.INCLUDE_RESOURCE, "");
bchild.setProperty(Analyzer.INCLUDERESOURCE, "");
bchild.setProperties(bndfile, builder.getBase());
Jar jar = bchild.build();
Jar dot = builder.getTarget();
if (builder.hasSources()) {
for (String key : jar.getResources().keySet()) {
if (key.startsWith("OSGI-OPT/src"))
dot.putResource(key, (Resource) jar.getResource(key));
}
}
builder.getInfo(bchild, bndfile.getName() +": ");
String debug = bchild.getProperty(DEBUG);
if (Processor.isTrue(debug)) {
if ( builder instanceof ProjectBuilder ) {
ProjectBuilder pb = (ProjectBuilder) builder;
File target = pb.getProject().getTarget();
String bsn = bchild.getBsn();
File output = new File(target, bsn+".jar");
jar.write(output);
pb.getProject().getWorkspace().changedFile(output);
}
}
return new JarResource(jar);
} else
return null;
}
}