Major build system reorganization
[dyninst.git] / Makefile
1 #
2 #
3 # First cut at a topLevel makefile for the paradyn system.
4 #
5 # $Log: Makefile,v $
6 # Revision 1.19  1995/01/30 18:08:12  jcargill
7 # Major build system reorganization
8 #
9 #
10
11 # Standalone is the list of standalone binaries.  These get built
12 # first when we "make world", since they include tools for building
13 # the rest of the system.
14 #
15 # Subsystems is the list of all other pieces which should be built.
16 #
17 buildfirst      = util igen thread visi dag hist
18 subsystems      = bininst paradyn paradynd paradyndSIM paradyndPVM \
19                   rtinst rthist visiClients/tclVisi visiClients/barchart
20
21
22 # This rule makes most of the normal recursive stuff.  Just about any
23 # target can be passed down to the lower-level Makefiles by listing it
24 # as a target on the next line:
25
26 # Note that the first item listed in this rule ("all") is what gets
27 # made by default if make is passed no arguments.  Don't add other
28 # target before all!
29
30 all clean install depend:
31         +for subsystem in $(buildfirst) $(subsystems); do       \
32             if [ -f $$subsystem/$(PLATFORM)/Makefile ]; then    \
33                $(MAKE) -C $$subsystem/$(PLATFORM) $@;           \
34             else                                                \
35                 true;                                           \
36             fi                                                  \
37         done
38
39 # This rules passes down the documentation-related stuff to
40 # lower-level Makefiles in the individual "docs" directories.
41
42 docs install-man:
43         +for subsystem in $(buildfirst) $(subsystems); do       \
44             if [ -f $$subsystem/docs/Makefile ]; then           \
45                $(MAKE) -C $$subsystem/docs $@;                  \
46             else                                                \
47                 true;                                           \
48             fi                                                  \
49         done
50
51
52 # The "make world" target is set up to build things in the "correct"
53 # order for a build from scratch.  It builds things in the
54 # "buildfirst" list first, then builds everything, then installs
55 # everything.
56 #
57 # This make target doesn't go first in the Makefile, though, since we
58 # really only want to make "install" when it's specifically requested.
59 # Note that "world" doesn't do a "clean", since it's nice to be able
60 # to restart a compilation that fails without re-doing a lot of
61 # unnecessary work.
62
63 world:
64         +for subsystem in $(buildfirst); do                     \
65             if [ -f $$subsystem/$(PLATFORM)/Makefile ]; then    \
66                $(MAKE) -C $$subsystem/$(PLATFORM) all install;  \
67             else                                                \
68                 true;                                           \
69             fi                                                  \
70         done
71         $(MAKE) all
72         $(MAKE) install
73
74
75 # The "make nightly" target is what should get run automatically every
76 # night.  It uses "make world" to build things in the right order for
77 # a build from scratch.  
78 #
79
80 # Note that "nightly" should only be run on the primary build site,
81 # and does things like building documentation that don't need to be
82 # built for each different architecture.  Other "non-primary" build
83 # sites that run each night should just run "make clean world".
84
85 nightly:
86         $(MAKE) clean
87         $(MAKE) world
88         $(MAKE) docs
89         $(MAKE) install-man
90         chmod 644 /p/paradyn/man/man?/*