Files in this directory are makefile fragments which might be included by arbitrary project types during the instance make invocation. You can think of it as a little library of makefile fragments which can be used to build project types more easily, and to favour code reuse and API consistency between different project types. Each of the makefile fragments will normally contain * standalone makefile code * make targets and rules The makefile fragment must document (ie list at the very least) very clear which variables are used by the makefile fragment. Normally, the variables are either * $($(GNUSTEP_INSTANCE)_XXX) variables, such as $($(GNUSTEP_INSTANCE)_HEADERS) for a makefile fragment installing headers. Because GNUSTEP_INSTANCE is guaranteed to be the name of the instance we process during an instance invocation, this will extract xxx_HEADERS regardless of the type of project. Most variables should be of this type. * GNUSTEP_SHARED_XXX_YYY, where XXX should be the makefile fragment name (such as 'HEADERS', or 'JAVA'), and YYY is the variable specific name. These variables are to be thought as arguments being passed from the project makefile to the shared makefile fragment. For example, GNUSTEP_SHARED_JAVA_INSTALLATION_DIR will be set to JAVA_INSTALLATION_DIR by Instance/java.make and to JAVA_TOOL_INSTALLATION_DIR/Java by Instance/java-tool.make, before including Shared/java.make. Shared/java.make will install the java files into GNUSTEP_SHARED_JAVA_INSTALLATION_DIR, which will point to the correct location in both cases. Please note that in this case you can't use $($(GNUSTEP_INSTANCE)_XXX) variables because the end-user API explicitly allow them to set a single JAVA_[TOOL_]INSTALLATION_DIR for the whole GNUmakefile. The make fragments rules should be named as follows - shared-instance-xxx-yyy where xxx is the name of the makefile fragment (such as 'java' or 'headers'), and yyy is the actual target (such as 'clean', 'install', 'all'). If possible, the standard targets should be provided (all, install, uninstall, clean, distclean). In certain cases, additional targets might be provided, or empty standard targets omitted. It should be clear which ones are 'public' targets, and which ones are 'private' targets (internal to the implementation of the makefile fragment). The make fragments do not need to be protected against multiple inclusions.