-sources BOOLEAN | bnd
Description: public Resource make(Builder builder, String destination, Map<String,String> argumentsOnMake) throws Exception { String type = argumentsOnMake.get("type"); if (!"bnd".equals(type)) return null;

- # -sources BOOLEAN
  Builder

      public Resource make(Builder builder, String destination, Map<String,String> argumentsOnMake) throws Exception {
      	String type = argumentsOnMake.get("type");
      	if (!"bnd".equals(type))
      		return null;

      	String recipe = 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, jar.getResource(key));
      			}
      		}
      		builder.getInfo(bchild, bndfile.getName() + ": ");
      		return new JarResource(jar);
      	}
      	return null;
      }

      	/**
       *
       */
      private void addSources(Jar dot) {
      	if (!hasSources())
      		return;

      	Set<PackageRef> packages = Create.set();

      	for (TypeRef typeRef : getClassspace().keySet()) {
      		PackageRef packageRef = typeRef.getPackageRef();
      		String sourcePath = typeRef.getSourcePath();
      		String packagePath = packageRef.getPath();

      		boolean found = false;
      		String[] fixed = {
      				"packageinfo", "package.html", "module-info.java", "package-info.java"
      		};

      		for (Iterator<File> i = getSourcePath().iterator(); i.hasNext();) {
      			File root = i.next();

      			// TODO should use bcp?

      			File f = getFile(root, sourcePath);
      			if (f.exists()) {
      				found = true;
      				if (!packages.contains(packageRef)) {
      					packages.add(packageRef);
      					File bdir = getFile(root, packagePath);
      					for (int j = 0; j < fixed.length; j++) {
      						File ff = getFile(bdir, fixed[j]);
      						if (ff.isFile()) {
      							String name = "OSGI-OPT/src/" + packagePath + "/" + fixed[j];
      							dot.putResource(name, new FileResource(ff));
      						}
      					}
      				}
      				if (packageRef.isDefaultPackage())
      					System.err.println("Duh?");
      				dot.putResource("OSGI-OPT/src/" + sourcePath, new FileResource(f));
      			}
      		}
      		if (!found) {
      			for (Jar jar : getClasspath()) {
      				Resource resource = jar.getResource(sourcePath);
      				if (resource != null) {
      					dot.putResource("OSGI-OPT/src/" + sourcePath, resource);
      				} else {
      					resource = jar.getResource("OSGI-OPT/src/" + sourcePath);
      					if (resource != null) {
      						dot.putResource("OSGI-OPT/src/" + sourcePath, resource);
      					}
      				}
      			}
      		}
      		if (getSourcePath().isEmpty())
      			warning("Including sources but " + SOURCEPATH + " does not contain any source directories ");
      		// TODO copy from the jars where they came from
      	}
      }

      	/**
       * Cop
       *
       * @param dest
       * @param srce
       * @param path
       * @param overwriteResource
       */
      private void copy(Jar dest, Jar srce, String path, boolean overwrite) {
      	trace("copy d=" + dest + " s=" + srce + " p=" + path);
      	dest.copy(srce, path, overwrite);

      	// bnd.info sources must be preprocessed
      	String bndInfoPath = path + "/bnd.info";
      	Resource r = dest.getResource(bndInfoPath);
      	if (r != null && !(r instanceof PreprocessResource)) {
      		trace("preprocessing bnd.info");
      		PreprocessResource pp = new PreprocessResource(this, r);
      		dest.putResource(bndInfoPath, pp);
      	}

      	if (hasSources()) {
      		String srcPath = "OSGI-OPT/src/" + path;
      		Map<String,Resource> srcContents = srce.getDirectories().get(srcPath);
      		if (srcContents != null) {
      			dest.addDirectory(srcContents, overwrite);
      		}
      	}
      }