### Build configuration

The build mechanism is driven by a build configuration. The build configuration for an individual plug-in, fragment, or feature is found in a build.properties file for the corresponding element.

PDE project creation wizards generate the build.properties file when plug-in projects are created. The file contains information on how to compile source folders into JARs. This information can be indirectly updated in the Runtime page of the manifest editor. It can also be directly modified using the appropriate editor.

PDE provides a simple editor for the build.properties that has form and source views. The file itself follows the Java properties format. You need to provide a number of keys and their corresponding values. Multiple values are separated using a comma as the delimiter.

#### Common properties

- bin.includes - lists files that will included in the binary version of the plug-in being built;
- bin.excludes - lists files to exclude from the binary build;
- qualifier - when the element version number ends with .qualifier this indicates by which value ".qualifier" must be replaced. The value of the property can either be context, <value> or none. Context will generate a date according to the system date, or use the CVS tags when the built is automated. Value is an actual value. None will remove ".qualifier". If the property is omitted, context is used.
- custom=true - indicates that the build script is hand-crafted as opposed to automatically generated. Therefore no other value is consulted.

#### Plug-in specific properties

- source.<library> - lists source folders that will be compiled (e.g. source.xyz.jar=src/, src-ant/). If the library is specified in your plugin.xml or manifest.mf, the value should match it;
- output.<library> - lists the output folder receiving the result of the compilation;
- exclude.<library> - lists the files that should not be copied into the library by the compiler;
- extra.<library> - extra classpaths used to perform automated build. Classpath can either be relative paths, or platform urls referring to plug-ins and fragments of your development environment (e.g. ../someplugin/xyz.jar, platform:/plugins/org.apache.ant/ant.jar). Platform urls are recommended over relative paths;
- manifest.<library> - indicate the file that will be used as a manifest for the library. The file must be located in one of the source folder being used as input of the jar.
- src.includes - lists files to include in the source build;
- src.excludes - lists files to exclude from the source build;
- jars.extra.classpath - (deprecated) same effect than extra.<library> except that the entries are applied to all libraries;
- jars.compile.order - defines the order in which jars should be compiled (in case there are multiple libraries).

The values defined for these keys ending with "includes" or "excludes" are expressed as Ant "patterns". Standard formats give the expected results. For example, "*.jar" indicates all jar files in the top level directory. The patterns are not deep by default. If you want to describe all Java files for example, you should use the pattern "**/*.java". The pattern "**" matches any number of directory levels. Similarly, to describe whole sub-trees, use "xyz/".

#### Feature specific properties

- root - list the files and folders that must be included in the root of the product. The different values supported are:
  - <folderName> - a relative path to a folder to be copied;
  - file:<fileName> - a relative path to a file to be copied;
  - absolute:<folderName> - an absolute path to a folder to be copied;
  - absolute:file:<fileName> - an absolute path to a file to be copied;
- root.<config> - list the files and folders that must be included in the root of the product when it is built for the specified configuration. config is composed of the three (3) segments of a configuration separated with a dot;
- root.permissions.<permissionValue> - list the files and folders to chmod to the given value. Reference to folders must ends with a '/';
- root.permissions.<config>.<permissionValue> - list the files and folders to chmod to the given value for a specific configuration. Reference to folders must ends with '/';
- root.link - list by pairs (separated by a comma) the files and folders that need to be symbolicly linked. The first entry indicate the source (target in the unix terminology) and the second entry the link name;
- root.link.<config> - a comma separated list of pairs of files and folders that need to be symbolicly linked for a specific configuration. The first entry indicate the source (target in the unix terminology) and the second entry the link name;
- generate.feature@<featureId> - indicates that the source feature featureId will be the source feature for the feature indicated as value of this property. The values listed after the first comma indicates elements to be fetched from the repository;
- generate.plugin@<pluginId> - indicates that the source plug-in pluginId will be the source plug-in for the indicated as value of this property.

The following example has been extracted from the build.properties of the org.eclipse.platform feature.

    bin.includes=epl-v10.html,eclipse_update_120.jpg,feature.xml,feature.properties,license.html

    root=rootfiles,file:../../plugins/org.eclipse.platform/startup.jar,configuration/
    root.permissions.755=eclipse

    root.linux.motif.x86=../../plugins/platform-launcher/bin/linux/motif,linux.motif
    root.linux.motif.x86.link=libXm.so.2.1,libXm.so.2,libXm.so.2.1,libXm.so
    root.linux.motif.x86.permissions.755=*.so*