blob: d7ae8ed9f6d632d6a77ed9ab83251a682f35b45a [file] [log] [blame]
Stuart McCullochd00f9712009-07-13 10:06:47 +00001package aQute.bnd.make;
2
3import java.io.*;
4import java.util.*;
5import java.util.regex.*;
6
7import aQute.bnd.build.*;
8import aQute.bnd.service.*;
9import aQute.lib.osgi.*;
10
11public class MakeBnd implements MakePlugin, Constants {
12 final static Pattern JARFILE = Pattern.compile("(.+)\\.(jar|ipa)");
13
14 public Resource make(Builder builder, String destination,
15 Map<String, String> argumentsOnMake) throws Exception {
16 String type = (String) argumentsOnMake.get("type");
17 if (!"bnd".equals(type))
18 return null;
19
20 String recipe = (String) argumentsOnMake.get("recipe");
21 if (recipe == null) {
22 builder.error("No recipe specified on a make instruction for "
23 + destination);
24 return null;
25 }
26 File bndfile = builder.getFile(recipe);
27 if (bndfile.isFile()) {
28 // We do not use a parent because then we would
29 // build ourselves again. So we can not blindly
30 // inherit the properties.
31 Builder bchild = builder.getSubBuilder();
32 bchild.removeBundleSpecificHeaders();
33
34 // We must make sure that we do not include ourselves again!
35 bchild.setProperty(Analyzer.INCLUDE_RESOURCE, "");
36 bchild.setProperties(bndfile, builder.getBase());
37
38 Jar jar = bchild.build();
39 Jar dot = builder.getTarget();
40
41 if (builder.hasSources()) {
42 for (String key : jar.getResources().keySet()) {
43 if (key.startsWith("OSGI-OPT/src"))
44 dot.putResource(key, (Resource) jar.getResource(key));
45 }
46 }
47 builder.getInfo(bchild, bndfile.getName() +": ");
48 String debug = bchild.getProperty(DEBUG);
49 if (Processor.isTrue(debug)) {
50 if ( builder instanceof ProjectBuilder ) {
51 ProjectBuilder pb = (ProjectBuilder) builder;
52 File target = pb.getProject().getTarget();
53 target.mkdirs();
54 String bsn = bchild.getBsn();
55 File output = new File(target, bsn+".jar");
56 jar.write(output);
57 }
58 }
59 return new JarResource(jar);
60 } else
61 return null;
62 }
63
64}