help-make
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

What's the best way to do this?


From: subnet
Subject: What's the best way to do this?
Date: Wed, 9 Jun 2004 00:30:31 +0200
User-agent: KMail/1.6.2

I have a set of programs to start/stop, with certain dependencies among each 
other. I would want to use make to start and stop them, since it handles 
dependencies autmatically.
I thought of separating all the deps in a separate include file, and put in 
the main makefile only the commands for starting/stopping/restarting them.
I use timestamp files to record start/stop events.

Example of the include file:

program1.start:
program2.start: program1.start

program1.stop: program2.stop
program2.stop:

etc (this is customizable).

In another part of the makefile, I put the commands to start and stop the 
programs:

%.start:
        <script that starts the program and creates file .start>

%.stop:
        <script that stops the program, removes file .start and creates
        file .stop>

So, "make program2.start" does what one wants, taking care of the deps 
starting program1 first. The same holds for "make program1.stop".
 
On the other hand, restarting a program requires stopping all the programs 
that depend on it, restarting the program, and restarting the deps stopped 
before. To implement this, I was thinking to do the following (%.start not 
modified):

%.stop:
        <script that stops the program, removes file .start and creates
        the file .stop; if RESTART = 1, also creates .stopped_dep file 
        for the stopped program>

.PHONY: %.restart %.restartdeps

%.restart: RESTART = 1    # pattern-specific variable: if my understanding is
                          # correct, this should only affect this target and
                          # all its dependencies

%.restart: %.stop %.start %.restartdeps

%.restartdeps: $(patsubst %.stopped_dep, %.start, $(wildcard *.stopped_dep))

The idea is: %.restart sets RESTART=1, so all stopped services also get 
their .stopped_dep file, that %.restartdeps sees and can invoke %.start on 
each of them.

But I'm not sure at all about the correctness of my solution, since I suspect 
there's a simpler way to do a restart. Furthermore, doing a "make 
program1.restart" aborts with the message

make: *** No rule to make target `program1.restart'.  Stop.

Any help will be greatly appreciated.

Thanks

D




reply via email to

[Prev in Thread] Current Thread [Next in Thread]