[37] | 1 | ###############################################################################
|
---|
[60] | 2 | # makefrwd.mif :: Make Include -- Forwards GNU Make to other Make Utilities. #
|
---|
[37] | 3 | ###############################################################################
|
---|
| 4 |
|
---|
| 5 | #
|
---|
| 6 | # A Linux build-environment where "make" would not work is like having
|
---|
| 7 | # a motorbike with an empty tank, flat tires and no wrench in site.
|
---|
| 8 | # Penguins like to "just make" using GNU Make, so let's forward it.
|
---|
| 9 | #
|
---|
| 10 | # This is done by defining 2 targets: 'all:' for when no targets are specified,
|
---|
| 11 | # and '%:' to forward one or more targets.
|
---|
| 12 | #
|
---|
[46] | 13 | # Because GNU Make first looks for 'GNUmakefile', which only includes this
|
---|
| 14 | # forwarder, it will process this file before 'Makefile'.
|
---|
| 15 | # The Make Utility that we forward to will process 'Makefile'.
|
---|
[37] | 16 | #
|
---|
| 17 | # Note that GNU Make processes the '%:' target-list sequentially.
|
---|
| 18 | # So for multiple targets specified on the cli, there is a difference
|
---|
| 19 | # whether make (and thus this front-end) or wmake directly (using Makefile)
|
---|
| 20 | # was used.
|
---|
| 21 | #
|
---|
| 22 | # With wmake the targets are all specified in the Makefile so dependencies
|
---|
[46] | 23 | # are resolved. With GNU Make, each target is seperately forwarded to Makefile
|
---|
| 24 | # wmake, so no dependencies are resolved.
|
---|
| 25 | # This means that a 'make rebuild clean' behaves exactly like that,
|
---|
| 26 | # removing all just built targets, because the 'clean' is performed last.
|
---|
| 27 | # A 'wmake rebuild clean' will not run the last 'clean' because 'rebuild'
|
---|
[37] | 28 | # runs it before doing the build, so 'clean' is considered up-to-date.
|
---|
| 29 | #
|
---|
| 30 |
|
---|
| 31 | #
|
---|
| 32 | # The Make Utility we want to forward to.
|
---|
| 33 | #
|
---|
| 34 | OTHER_MAKE=wmake
|
---|
| 35 |
|
---|
| 36 | #
|
---|
| 37 | # Braces need to be escaped on Linux.
|
---|
| 38 | #
|
---|
| 39 | ifeq "$(SHELL)" "/bin/sh"
|
---|
| 40 | LB = \(
|
---|
| 41 | RB = \)
|
---|
| 42 | LQ = \'
|
---|
| 43 | RQ = \'
|
---|
| 44 | LDQ = \"
|
---|
| 45 | RDQ = \"
|
---|
| 46 | else
|
---|
| 47 | LB = (
|
---|
| 48 | RB = )
|
---|
| 49 | LQ = '
|
---|
| 50 | RQ = '
|
---|
| 51 | LDQ = "
|
---|
| 52 | RDQ = "
|
---|
| 53 | endif
|
---|
| 54 |
|
---|
| 55 | #
|
---|
| 56 | # Show this message to indicate this front-end is active.
|
---|
| 57 | #
|
---|
| 58 | HEADER=GNU Make front-end invoked for $(LQ)$(OTHER_MAKE)$(RQ)
|
---|
| 59 |
|
---|
| 60 |
|
---|
| 61 |
|
---|
| 62 | #
|
---|
| 63 | # Forward to the other Make Utility.
|
---|
| 64 | # Note that the local target 'default:' is not passed so the
|
---|
| 65 | # first target in Makefile is used.
|
---|
| 66 | #
|
---|
| 67 | default:
|
---|
| 68 | @echo $(HEADER)
|
---|
| 69 | @$(OTHER_MAKE)
|
---|
| 70 |
|
---|
| 71 | #
|
---|
| 72 | # Forward any target to the other Make Utility.
|
---|
| 73 | # Note that this rule gets processed in sequence for every target
|
---|
| 74 | # specified on the cli.
|
---|
| 75 | #
|
---|
| 76 | %:
|
---|
| 77 | @echo $(HEADER) with target: $(LQ)$@$(RQ)
|
---|
[60] | 78 | @$(OTHER_MAKE) -h $@
|
---|