tools-make/Master
2023-02-06 21:19:49 +01:00
..
application.make Implemented new 'make internalmessages=yes' option which prints all recursive make invocations. Never print them (uninteresting/annoying for users) unless internalmessages=yes is used 2010-02-14 23:13:47 +00:00
bundle.make Implemented new 'make internalmessages=yes' option which prints all recursive make invocations. Never print them (uninteresting/annoying for users) unless internalmessages=yes is used 2010-02-14 23:13:47 +00:00
clibrary.make Attempt to ease unit testing by having a builtin rule to set up LD_LIBRARY_PATH 2015-10-20 13:33:17 +00:00
ctool.make Implemented new 'make internalmessages=yes' option which prints all recursive make invocations. Never print them (uninteresting/annoying for users) unless internalmessages=yes is used 2010-02-14 23:13:47 +00:00
deb.make Master/deb.make: Now adding gnustep-make dependency to the DEB_BUILD_DEPENDS only when creating _debenv file. 2014-06-07 17:28:25 +00:00
documentation.make Make that documentation=no instead of skip_documentation=yes 2016-03-02 10:57:18 +00:00
framework.make Attempt to ease unit testing by having a builtin rule to set up LD_LIBRARY_PATH 2015-10-20 13:33:17 +00:00
gswapp.make Implemented new 'make internalmessages=yes' option which prints all recursive make invocations. Never print them (uninteresting/annoying for users) unless internalmessages=yes is used 2010-02-14 23:13:47 +00:00
gswbundle.make Implemented new 'make internalmessages=yes' option which prints all recursive make invocations. Never print them (uninteresting/annoying for users) unless internalmessages=yes is used 2010-02-14 23:13:47 +00:00
java-tool.make Implemented new 'make internalmessages=yes' option which prints all recursive make invocations. Never print them (uninteresting/annoying for users) unless internalmessages=yes is used 2010-02-14 23:13:47 +00:00
java.make Add support for building jars from Java projects (`make jar'). 2014-12-21 07:16:04 +00:00
library.make Attempt to ease unit testing by having a builtin rule to set up LD_LIBRARY_PATH 2015-10-20 13:33:17 +00:00
nsis.make Add support for library and framework packages 2012-02-17 20:35:40 +00:00
objc.make Implemented new 'make internalmessages=yes' option which prints all recursive make invocations. Never print them (uninteresting/annoying for users) unless internalmessages=yes is used 2010-02-14 23:13:47 +00:00
palette.make Implemented new 'make internalmessages=yes' option which prints all recursive make invocations. Never print them (uninteresting/annoying for users) unless internalmessages=yes is used 2010-02-14 23:13:47 +00:00
parallel-subdirectories.make Implemented new 'make internalmessages=yes' option which prints all recursive make invocations. Never print them (uninteresting/annoying for users) unless internalmessages=yes is used 2010-02-14 23:13:47 +00:00
README Fixed some grammar typos 2002-01-30 18:59:43 +00:00
resource-set.make Added makefile mode comment for emacs to all Master makefiles 2010-02-12 08:55:56 +00:00
rpm.make Have PACKAGE_NEEDS_CONFIGURE and JAVADOC_BUILD_ALWAYS variables recognize the standard 'yes' and 'no' values as well as 'YES' and 'NO' 2010-03-06 16:15:18 +00:00
rules.make Changed to restructure subdirectory layout for binaries and system dependent 2016-06-25 07:12:41 +00:00
serial-subdirectories.make Implemented new 'make internalmessages=yes' option which prints all recursive make invocations. Never print them (uninteresting/annoying for users) unless internalmessages=yes is used 2010-02-14 23:13:47 +00:00
service.make Implemented new 'make internalmessages=yes' option which prints all recursive make invocations. Never print them (uninteresting/annoying for users) unless internalmessages=yes is used 2010-02-14 23:13:47 +00:00
source-distribution.make Try to implement .dist-ignore support for git-dist: after archive, export and recompress again by excluding .dist-ignore 2023-02-06 21:19:49 +01:00
subproject.make Implemented new 'make internalmessages=yes' option which prints all recursive make invocations. Never print them (uninteresting/annoying for users) unless internalmessages=yes is used 2010-02-14 23:13:47 +00:00
test-application.make Implemented new 'make internalmessages=yes' option which prints all recursive make invocations. Never print them (uninteresting/annoying for users) unless internalmessages=yes is used 2010-02-14 23:13:47 +00:00
test-library.make Attempt to ease unit testing by having a builtin rule to set up LD_LIBRARY_PATH 2015-10-20 13:33:17 +00:00
test-tool.make Implemented new 'make internalmessages=yes' option which prints all recursive make invocations. Never print them (uninteresting/annoying for users) unless internalmessages=yes is used 2010-02-14 23:13:47 +00:00
tool.make Bump version for new release and add Sebastian's resource cleanup fix. 2013-12-24 05:57:50 +00:00

The 'Master' invocation is the first time that 'make' is run on any
GNUmakefile in your project.

During the 'Master' invocation, gnustep-make determines exactly what
it needs to build.  For example, in the following GNUmakefile -

include $(GNUSTEP_MAKEFILES)/common.make

LIBRARY_NAME = libquantum
TOOL_NAME = create destroy

create_OBJC_FILES = create.m
destroy_OBJC_FILES = destroy.m
libquantum_OBJC_FILES = quantum.m

include $(GNUSTEP_MAKEFILES)/library.make
include $(GNUSTEP_MAKEFILES)/tool.make

the 'Master' invocation will determine that we need to perform the
following logically separated operations - 

type:library name:libquantum operation:all
type:tool    name:create     operation:all
type:tool    name:destroy    operation:all

It will then run an 'Instance' invocation for each of these tasks.
The 'Instance' invocation is a submake invocation, with some special
variables set telling it exactly what task it needs to perform out of
all the available ones.  The 'Instance' invocation will read the same
user GNUmakefile(s) as the 'Master' invocation, but will use different
system makefiles.  The 'Instance' invocation will actually include and
use all the code to perform the required tasks.

The role of the 'Master' invocation is very limited.  It needs to
determine which 'Instance' invocations to run, and then exit.

Please note that we have a 'Master' invocation per each GNUmakefile in
your project.  We have an 'Instance' invocation per each logically
separate thing to do in your project.

You might wonder why we use 'Instance' invocations at all, and why we
don't actually perform each instance task inside the 'Master'
invocation itself.  The explanation is very technical ... in a few
words, we can't because of limitations of make.  The problem is that
if you have multiple instances of the same type, say multiple
libraries or multiple tools or multiple yyys (or all of them), each
one might require an arbitrarily complex makefile code to be built,
which should change according to the value of xxx_ANY_VARIABLE_HERE,
where xxx is the library/tool/yyy name.  So we have the problem that
we need to execute the same makefile code with an arbitrary value of
xxx, for each xxx.  That is difficult to do in the same make
invocation, because the make grammar doesn't contain any looping
construct allowing us to include the same makefile multiple times, one
for each value of xxx.  What we do to work around this problem is, we
run a separate submake invocation per instance to be built.