# GNUstep-make hooks
GNUstep-make provides various [double-colon rules](https://www.gnu.org/software/make/manual/html_node/Double_002dColon.html) that define integration points where you can run your own processes before, during, and after GNUstep-make actions.

For example, you can run additional steps after you build your app by defining `after_$(GNUSTEP_INSTANCE)_all::` (where `$(GNUSTEP_INSTANCE)` is the name of your app), or supply the commands to run your tests when someone runs `make check` by defining `internal-check::`.

## Global Hooks

These hooks are defined in `Master/rules.make` and apply to the entire build process:

| Hook Name | Target-Specific Variant | Description |
|-----------|-------------------------|-------------|
| `before-all::` | No | Executed before building all targets |
| `internal-all::` | No | Internal target for building all |
| `after-all::` | No | Executed after building all targets |
| `before-jar::` | No | Executed before creating JAR files |
| `internal-jar::` | No | Internal target for creating JAR files |
| `after-jar::` | No | Executed after creating JAR files |
| `before-install::` | No | Executed before installation |
| `internal-install::` | No | Internal target for installation |
| `after-install::` | No | Executed after installation |
| `internal-after-install::` | No | Internal target after installation (for packaging) |
| `before-uninstall::` | No | Executed before uninstallation |
| `internal-uninstall::` | No | Internal target for uninstallation |
| `after-uninstall::` | No | Executed after uninstallation |
| `internal-after-uninstall::` | No | Internal target after uninstallation |
| `before-clean::` | No | Executed before cleaning |
| `internal-clean::` | No | Internal target for cleaning |
| `after-clean::` | No | Executed after cleaning |
| `before-distclean::` | No | Executed before distcleaning |
| `internal-distclean::` | No | Internal target for distcleaning |
| `after-distclean::` | No | Executed after distcleaning |
| `before-check::` | No | Executed before running checks |
| `internal-check::` | No | Internal target for running checks |
| `after-check::` | No | Executed after running checks |
| `before-strings::` | No | Executed before processing strings |
| `internal-strings::` | No | Internal target for processing strings |
| `after-strings::` | No | Executed after processing strings |

## Instance-Specific Hooks

These hooks are defined in `Instance/rules.make` and apply to specific instances (targets):

| Hook Name | Target-Specific Variant | Description |
|-----------|-------------------------|-------------|
| `before-$(GNUSTEP_INSTANCE)-all::` | Yes | Executed before building a specific instance |
| `after-$(GNUSTEP_INSTANCE)-all::` | Yes | Executed after building a specific instance |
| `before-$(GNUSTEP_INSTANCE)-jar::` | Yes | Executed before creating JAR for a specific instance |
| `after-$(GNUSTEP_INSTANCE)-jar::` | Yes | Executed after creating JAR for a specific instance |
| `before-$(GNUSTEP_INSTANCE)-install::` | Yes | Executed before installing a specific instance |
| `after-$(GNUSTEP_INSTANCE)-install::` | Yes | Executed after installing a specific instance |
| `before-$(GNUSTEP_INSTANCE)-uninstall::` | Yes | Executed before uninstalling a specific instance |
| `after-$(GNUSTEP_INSTANCE)-uninstall::` | Yes | Executed after uninstalling a specific instance |

## Framework-Specific Hooks

These hooks are defined in `Master/framework.make` and apply only to framework builds:

| Hook Name | Target-Specific Variant | Description |
|-----------|-------------------------|-------------|
| `before-build-headers::` | No | Executed before building framework headers |
| `internal-build-headers::` | No | Internal target for building framework headers |
| `after-build-headers::` | No | Executed after building framework headers |


