1
#### CONFIGURE VARIABLE
3
# export ERLC_EMULATOR to fix a bug in R9B with native compilation
13
ERLDIR=@ERLANG_ROOT_DIR@
16
USEMOCHIWEBLIBS=@erlang_cv_orelse@
18
ERLANG_XMERL_DIR=@ERLANG_LIB_DIR_xmerl@/include
20
raw_erlang_prefix=@libdir@/erlang/
22
PACKAGE_TARNAME=@PACKAGE_TARNAME@
25
exec_prefix=@exec_prefix@
29
datarootdir=@datarootdir@
31
TEMPLATES_SUBDIR=@TEMPLATES_SUBDIR@
33
CONFIGURE_DEPENDENCIES=@CONFIGURE_DEPENDENCIES@
34
CONFIG_STATUS_DEPENDENCIES=@CONFIG_STATUS_DEPENDENCIES@
36
VERSION=@PACKAGE_VERSION@
37
PACKAGE=@PACKAGE_NAME@
40
#### END OF SUBSTITUTION
42
SVN_REVISION=$Revision$
44
ERL_COMPILER_OPTIONS="[warn_unused_vars]"
45
export ERL_COMPILER_OPTIONS
48
OPT =+debug_info -DDEBUG
53
OPT = +strict_record_tests
67
ifeq ($(TYPE),snapshot)
68
DAY=$(shell date +"%Y%m%d")
69
distdir = $(PACKAGE)-$(VERSION)-$(DAY)
71
distdir = $(PACKAGE)-$(VERSION)
76
LIBDIR = $(libdir)/tsung/
77
TOOLS_BINDIR = $(LIBDIR)/bin
78
CONFDIR = $(docdir)/examples
79
SHARE_DIR = $(datadir)/tsung/
80
TEMPLATES_DIR = $(datadir)/$(TEMPLATES_SUBDIR)
81
MAN_DIR = $(datadir)/man/man1/
85
BEHAVIORS = ebin/ts_plugin.beam
87
BUILDER_LOG = /tmp/builder-tsung.log
89
ERLANG_LIB_DIR = $(libdir)/erlang/lib
92
CONTROLLER_APPLICATION = tsung_controller
93
RECORDER_APPLICATION = tsung_recorder
95
RECORDER_TARGETDIR = $(ERLANG_LIB_DIR)/$(RECORDER_APPLICATION)-$(VERSION)
96
CONTROLLER_TARGETDIR = $(ERLANG_LIB_DIR)/$(CONTROLLER_APPLICATION)-$(VERSION)
97
TARGETDIR = $(ERLANG_LIB_DIR)/$(APPLICATION)-$(VERSION)
99
TEMPLATES = $(wildcard $(ESRC)/templates/*.thtml)
100
TEMPLATES += $(wildcard $(ESRC)/templates/*.js)
101
TMP = $(wildcard *~) $(wildcard src/*~) $(wildcard inc/*~)
102
INC_FILES = $(wildcard $(INC)/*.hrl)
103
LIBSRC = $(wildcard $(ESRC)/lib/[^mochi]*.erl)
104
ifeq ($(USEMOCHIWEBLIBS),yes)
105
LIBSRC += $(wildcard $(ESRC)/lib/mochi*.erl)
107
TESTSRC = $(wildcard $(ESRC)/test/*.erl)
108
SRC = $(wildcard $(ESRC)/$(APPLICATION)/*.erl)
109
CONTROLLER_SRC = $(wildcard $(ESRC)/$(CONTROLLER_APPLICATION)/*.erl)
110
RECORDER_SRC = $(wildcard $(ESRC)/$(RECORDER_APPLICATION)/*.erl)
111
CONFFILE_SRC = $(wildcard examples/*.xml.in)
112
CONFFILE = $(basename $(CONFFILE_SRC))
113
TEST_CONFFILE_SRC = $(wildcard src/test/*.xml.in)
114
TEST_CONFFILE = $(basename $(TEST_CONFFILE_SRC))
115
USERMANUAL = doc/user_manual.html doc/IDXDOC.css
116
USERMANUAL_IMG = $(wildcard doc/images/*.png)
117
USERMANUAL_SRC = doc/user_manual.tex
118
MANPAGES = $(wildcard doc/*.1)
119
PERL_SCRIPTS_SRC = $(wildcard $(ESRC)/*.pl.in)
120
PERL_SCRIPTS = $(basename $(PERL_SCRIPTS_SRC))
122
TSPLOT_SRC = $(wildcard $(ESRC)/tsung-plotter/*.py.in)
123
TSPLOT = $(basename $(TSPLOT_SRC))
124
TSUNG_PLOTTER_LIB= $(wildcard $(ESRC)/tsung-plotter/tsung/*.py)
125
TSUNG_PLOTTER_CONF= $(wildcard $(ESRC)/tsung-plotter/tsung/*.conf) $(wildcard $(ESRC)/tsung-plotter/*.conf)
127
TARGET = $(addsuffix .beam, $(basename \
128
$(addprefix $(EBIN)/, $(notdir $(SRC)))))
129
LIB_TARGET = $(addsuffix .beam, $(basename \
130
$(addprefix $(EBIN)/, $(notdir $(LIBSRC)))))
131
CONTROLLER_TARGET = $(addsuffix .beam, $(basename \
132
$(addprefix $(EBIN)/, $(notdir $(CONTROLLER_SRC)))))
133
RECORDER_TARGET = $(addsuffix .beam, $(basename \
134
$(addprefix $(EBIN)/, $(notdir $(RECORDER_SRC)))))
135
TEST_TARGET = $(addsuffix .beam, $(basename \
136
$(addprefix $(EBIN)/, $(notdir $(TESTSRC)))))
137
DEBIAN = debian/changelog debian/control debian/compat debian/copyright debian/docs debian/tsung.dirs debian/rules
139
SRC_APPFILES = $(ESRC)/$(APPLICATION)/$(APPLICATION).app.src $(ESRC)/$(APPLICATION)/$(APPLICATION).rel.src
140
SRC_APPFILES_IN = $(ESRC)/$(APPLICATION)/$(APPLICATION).app.src.in $(ESRC)/$(APPLICATION)/$(APPLICATION).rel.src
141
CONTROLLER_SRC_APPFILES = $(ESRC)/$(CONTROLLER_APPLICATION)/$(CONTROLLER_APPLICATION).app.src $(ESRC)/$(CONTROLLER_APPLICATION)/$(CONTROLLER_APPLICATION).rel.src
142
CONTROLLER_SRC_APPFILES_IN = $(ESRC)/$(CONTROLLER_APPLICATION)/$(CONTROLLER_APPLICATION).app.src.in $(ESRC)/$(CONTROLLER_APPLICATION)/$(CONTROLLER_APPLICATION).rel.src
143
RECORDER_SRC_APPFILES = $(ESRC)/$(RECORDER_APPLICATION)/$(RECORDER_APPLICATION).app.src $(ESRC)/$(RECORDER_APPLICATION)/$(RECORDER_APPLICATION).rel.src
144
RECORDER_SRC_APPFILES_IN = $(ESRC)/$(RECORDER_APPLICATION)/$(RECORDER_APPLICATION).app.src.in $(ESRC)/$(RECORDER_APPLICATION)/$(RECORDER_APPLICATION).rel.src
145
TGT_APPFILES_E = $(EBIN)/$(APPLICATION).app
146
CONTROLLER_TGT_APPFILES_E = $(EBIN)/$(CONTROLLER_APPLICATION).app
147
RECORDER_TGT_APPFILES_E = $(EBIN)/$(RECORDER_APPLICATION).app
148
TGT_APPFILES_P = priv/$(APPLICATION)*
149
RECORDER_TGT_APPFILES_P = priv/$(RECORDER_APPLICATION)*
150
CONTROLLER_TGT_APPFILES_P = priv/$(CONTROLLER_APPLICATION)*
152
SCRIPT = $(BINDIR)/tsung
153
REC_SCRIPT = $(BINDIR)/tsung-recorder
155
BUILD_OPTIONS = '[{systools, \
157
{"TSUNGPATH", "$(PWD)/temp/"}] \
160
{make_app, true }, {make_rel, true}].'
162
BUILD_OPTIONS_DOT = $(subst $(PWD)/temp/,./,$(BUILD_OPTIONS))
164
BUILD_OPTIONS_FILE = ./BUILD_OPTIONS
166
DIST_COMMON=Makefile.in $(CONFFILE_SRC) $(PERL_SCRIPTS_SRC) $(TSPLOT_SRC) tsung.sh.in tsung-recorder.sh.in tsung.spec.in $(CONTROLLER_SRC_APPFILES_IN)
168
DOC_OPTS={def,{version,\"$(VERSION)\"}}
172
tsung: Makefile config.status $(PERL_SCRIPTS) $(TSPLOT) tsung.sh tsung-recorder.sh tsung.spec $(TARGET) $(RECORDER_TARGET) $(CONTROLLER_TARGET) $(LIB_TARGET) $(CONTROLLER_SRC_APPFILES) $(SRC_APPFILES) $(RECORDER_SRC_APPFILES)
174
buildtest: $(TEST_TARGET)
179
$(MAKE) TYPE=test dotest
181
dotest: tsung buildtest $(CONFFILE) $(TEST_CONFFILE)
182
$(ERL) -noshell -pa ./ebin -s eunit test ts_test_all -s init stop
185
$(ERL) -noshell -eval "edoc:application($(APPLICATION), \"./$(ESRC)/$(APPLICATION)\", [$(DOC_OPTS)])" -s init stop
186
$(ERL) -noshell -eval "edoc:application($(CONTROLLER_APPLICATION), \
187
\"./$(ESRC)/$(CONTROLLER_APPLICATION)\", [$(DOC_OPTS)])" -s init stop
188
$(ERL) -noshell -eval "edoc:application($(RECORDER_APPLICATION), \
189
\"./$(ESRC)/$(RECORDER_APPLICATION)\", [$(DOC_OPTS)])" -s init stop
192
$(DIALYZER) -r ebin -I ./include/
202
rpm: release tsung.spec
203
rpmbuild -ta $(distdir).tar.gz
205
validate: $(CONFFILE)
206
@for i in $(CONFFILE); do xmlproc_val $$i; done
209
fakeroot debian/rules clean
211
fakeroot debian/rules binary
214
-cd priv && rm -f $(shell ls priv | grep -v builder\.erl| grep -v CVS) && cd ..
215
-rm -f $(TARGET) $(TMP) $(BUILD_OPTIONS_FILE) builder.beam
216
-rm -f $(TGT_APPFILES) $(PERL_SCRIPTS) $(TSPLOT) $(CONFFILE)
217
-rm -f ebin/*.beam tsung.sh tsung.spec tsung.xml tsung.sh tsung-recorder.sh
218
-rm -f *.xml config.log src/test/*.xml src/test/usersdb.csv
220
install: doc boot install_recorder install_controller $(CONFFILE)
223
install -d $(DESTDIR)$(TARGETDIR)/priv
224
install -d $(DESTDIR)$(TARGETDIR)/ebin
225
install -d $(DESTDIR)$(TARGETDIR)/src
226
install -d $(DESTDIR)$(TARGETDIR)/include
227
install -d $(DESTDIR)$(TOOLS_BINDIR)/
228
install -d $(DESTDIR)$(BINDIR)/
230
install -m 0644 $(INC_FILES) $(DESTDIR)$(TARGETDIR)/include/
231
install -m 0644 $(TARGET) $(DESTDIR)$(TARGETDIR)/ebin/
232
install -m 0644 $(LIB_TARGET) $(DESTDIR)$(TARGETDIR)/ebin/
233
install -m 0644 builder.beam $(DESTDIR)$(TARGETDIR)/ebin/
236
install -m 0644 $(TGT_APPFILES_E) $(DESTDIR)$(TARGETDIR)/ebin/
237
install -m 0644 $(TGT_APPFILES_P) $(DESTDIR)$(TARGETDIR)/priv/
240
install -m 0644 $(SRC) $(SRC_APPFILES) $(DESTDIR)$(TARGETDIR)/src/
241
echo $(BUILD_OPTIONS_DOT) > $(DESTDIR)$(TARGETDIR)/BUILD_OPTIONS
244
# install the man page & user's manual
245
install -d $(DESTDIR)$(MAN_DIR)
246
install -m 0644 $(MANPAGES) $(DESTDIR)$(MAN_DIR)
247
install -d $(DESTDIR)$(DOC_DIR)/images
248
install -m 0644 $(USERMANUAL) $(DESTDIR)$(DOC_DIR)
249
install -m 0644 $(USERMANUAL_IMG) $(DESTDIR)$(DOC_DIR)/images
251
# create startup script
252
install -m 0755 tsung.sh $(DESTDIR)$(SCRIPT)
253
install -m 0755 tsung-recorder.sh $(DESTDIR)$(REC_SCRIPT)
254
install -m 0755 $(PERL_SCRIPTS) $(DESTDIR)$(TOOLS_BINDIR)
256
install -m 0755 $(TSPLOT) $(DESTDIR)$(BINDIR)/tsplot
257
install -d $(DESTDIR)$(LIBDIR)/tsung_plotter
258
install -d $(DESTDIR)$(SHARE_DIR)/tsung_plotter
259
install -m 0644 $(TSUNG_PLOTTER_LIB) $(DESTDIR)$(LIBDIR)/tsung_plotter
260
install -m 0644 $(TSUNG_PLOTTER_CONF) $(DESTDIR)$(SHARE_DIR)/tsung_plotter
262
install -d $(DESTDIR)$(CONFDIR)
263
install -m 0644 $(CONFFILE) $(DESTDIR)$(CONFDIR)/
265
install -d $(DESTDIR)$(TEMPLATES_DIR)
266
install -m 0644 $(TEMPLATES) $(DESTDIR)$(TEMPLATES_DIR)/
267
install -m 0644 $(DTD) $(DESTDIR)$(SHARE_DIR)/
270
install -d $(DESTDIR)$(RECORDER_TARGETDIR)/priv
271
install -d $(DESTDIR)$(RECORDER_TARGETDIR)/ebin
272
install -d $(DESTDIR)$(RECORDER_TARGETDIR)/src
273
install -d $(DESTDIR)$(RECORDER_TARGETDIR)/include
275
install -m 0644 $(INC_FILES) $(DESTDIR)$(RECORDER_TARGETDIR)/include
276
install -m 0644 $(RECORDER_TARGET) $(DESTDIR)$(RECORDER_TARGETDIR)/ebin
278
install -m 0644 $(RECORDER_TGT_APPFILES_E) $(DESTDIR)$(RECORDER_TARGETDIR)/ebin
279
install -m 0644 $(RECORDER_TGT_APPFILES_P) $(DESTDIR)$(RECORDER_TARGETDIR)/priv
281
install -m 0644 $(RECORDER_SRC) $(RECORDER_SRC_APPFILES) $(DESTDIR)$(RECORDER_TARGETDIR)/src
282
@echo $(BUILD_OPTIONS_DOT) > $(DESTDIR)$(RECORDER_TARGETDIR)/BUILD_OPTIONS
285
install -d $(DESTDIR)$(CONTROLLER_TARGETDIR)/priv
286
install -d $(DESTDIR)$(CONTROLLER_TARGETDIR)/ebin
287
install -d $(DESTDIR)$(CONTROLLER_TARGETDIR)/src
288
install -d $(DESTDIR)$(CONTROLLER_TARGETDIR)/include
289
install -m 0644 $(INC_FILES) $(DESTDIR)$(CONTROLLER_TARGETDIR)/include
290
install -m 0644 $(CONTROLLER_TARGET) $(DESTDIR)$(CONTROLLER_TARGETDIR)/ebin
292
install -m 0644 $(CONTROLLER_TGT_APPFILES_E) $(DESTDIR)$(CONTROLLER_TARGETDIR)/ebin
293
install -m 0644 $(CONTROLLER_TGT_APPFILES_P) $(DESTDIR)$(CONTROLLER_TARGETDIR)/priv
295
install -m 0644 $(CONTROLLER_SRC) $(CONTROLLER_SRC_APPFILES) $(DESTDIR)$(CONTROLLER_TARGETDIR)/src
296
@echo $(BUILD_OPTIONS_DOT) > $(DESTDIR)$(CONTROLLER_TARGETDIR)/BUILD_OPTIONS
299
rm -rf $(TARGETDIR) $(SCRIPT)
301
boot: tsung priv/tsung.boot priv/tsung_recorder.boot priv/tsung_controller.boot
303
priv/tsung.boot: builder.beam $(SRC_APPFILES)
304
# use builder to make boot file
306
@mkdir -p temp/lib/$(APPLICATION)-$(VERSION)/ebin
307
@cp $(TARGET) $(LIB_TARGET) temp/lib/$(APPLICATION)-$(VERSION)/ebin
308
@ln -sf $(PWD)/src/$(APPLICATION) temp/lib/$(APPLICATION)-$(VERSION)/src
309
@ln -sf $(PWD)/include temp/lib/$(APPLICATION)-$(VERSION)/include
310
@ln -sf $(PWD)/priv temp/lib/$(APPLICATION)-$(VERSION)/priv
311
@ln -sf $(PWD)/builder.beam temp/lib/$(APPLICATION)-$(VERSION)/
312
@ln -sf $(PWD) temp/lib/$(APPLICATION)-$(VERSION)
313
@echo -n "build main app boot script ... "
314
@(cd temp/lib/$(APPLICATION)-$(VERSION) \
315
&& echo $(BUILD_OPTIONS) > $(BUILD_OPTIONS_FILE) \
316
&& $(ERL) -noshell -s builder go -s init stop >> $(BUILDER_LOG) 2>&1 \
318
@cp temp/lib/$(APPLICATION)-$(VERSION)/ebin/*.app ebin
322
priv/tsung_controller.boot: builder.beam $(CONTROLLER_SRC_APPFILES)
323
# use builder to make boot file
325
@mkdir -p temp/lib/$(CONTROLLER_APPLICATION)-$(VERSION)/ebin
326
@cp $(CONTROLLER_TARGET) temp/lib/$(CONTROLLER_APPLICATION)-$(VERSION)/ebin
327
@ln -sf $(PWD)/src/$(CONTROLLER_APPLICATION) temp/lib/$(CONTROLLER_APPLICATION)-$(VERSION)/src
328
@ln -sf $(PWD)/include temp/lib/$(CONTROLLER_APPLICATION)-$(VERSION)/include
329
@ln -sf $(PWD)/priv temp/lib/$(CONTROLLER_APPLICATION)-$(VERSION)/priv
330
@ln -sf $(PWD)/builder.beam temp/lib/$(CONTROLLER_APPLICATION)-$(VERSION)/
331
@echo -n "build controller boot script ... "
332
@(cd temp/lib/$(CONTROLLER_APPLICATION)-$(VERSION) \
333
&& echo $(BUILD_OPTIONS) > $(BUILD_OPTIONS_FILE) \
334
&& $(ERL) -noshell -s builder go -s init stop >> $(BUILDER_LOG) 2>&1 \
336
@cp temp/lib/$(CONTROLLER_APPLICATION)-$(VERSION)/ebin/*.app ebin
340
priv/tsung_recorder.boot: builder.beam $(RECORDER_SRC_APPFILES)
341
# use builder to make boot file
343
@mkdir -p temp/lib/$(RECORDER_APPLICATION)-$(VERSION)/ebin
344
@cp $(RECORDER_TARGET) temp/lib/$(RECORDER_APPLICATION)-$(VERSION)/ebin
345
@ln -sf $(PWD)/src/$(RECORDER_APPLICATION) temp/lib/$(RECORDER_APPLICATION)-$(VERSION)/src
346
@ln -sf $(PWD)/include temp/lib/$(RECORDER_APPLICATION)-$(VERSION)/include
347
@ln -sf $(PWD)/priv temp/lib/$(RECORDER_APPLICATION)-$(VERSION)/priv
348
@ln -sf $(PWD)/builder.beam temp/lib/$(RECORDER_APPLICATION)-$(VERSION)/
349
@echo -n "build recorder boot script ... "
350
@(cd temp/lib/$(RECORDER_APPLICATION)-$(VERSION) \
351
&& echo $(BUILD_OPTIONS) > $(BUILD_OPTIONS_FILE) \
352
&& $(ERL) -noshell -s builder go -s init stop >> $(BUILDER_LOG) 2>&1 \
354
@cp temp/lib/$(RECORDER_APPLICATION)-$(VERSION)/ebin/*.app ebin
359
Makefile: Makefile.in config.status
360
@$(SHELL) ./config.status --file=$@
363
@$(SHELL) ./config.status --file=$@
366
@$(SHELL) ./config.status --file=$@
368
%.spec: %.spec.in vsn.mk
369
@$(SHELL) ./config.status --file=$@
372
@$(SHELL) ./config.status --file=$@
375
@$(SHELL) ./config.status --file=$@
377
%.app.src: %.app.src.in
378
@$(SHELL) ./config.status --file=$@
380
config.status: configure $(CONFIG_STATUS_DEPENDENCIES)
381
$(SHELL) ./config.status --recheck
384
configure: configure.in $(CONFIGURE_DEPENDENCIES)
385
@echo "running autoconf"
392
release: Makefile tsung.spec doc
395
tar zcf tmp.tgz $(SRC) $(SRC_APPFILES_IN) $(INC_FILES) $(LIBSRC) \
396
$(CONTROLLER_SRC) $(CONTROLLER_SRC_APPFILES_IN) $(TESTSRC) \
397
$(RECORDER_SRC_APPFILES_IN) \
398
$(RECORDER_SRC) $(RECORDER_SRC_APPFILES) $(TEMPLATES) \
399
doc/*.erl doc/*.txt doc/*.dia doc/*.png doc/Makefile doc/*.sgml doc/*.1 \
400
$(USERMANUAL) $(USERMANUAL_SRC) $(USERMANUAL_IMG) $(DTD) \
401
COPYING README LISEZMOI TODO $(CONFFILE_SRC) $(TEST_CONFFILE_SRC) \
402
priv/builder.erl tsung.sh.in vsn.mk src/test/*.csv src/test/*.txt \
404
$(DEBIAN) $(PERL_SCRIPTS_SRC) CONTRIBUTORS CHANGES \
405
$(TSPLOT_SRC) $(TSUNG_PLOTTER_CONF) $(TSUNG_PLOTTER_LIB)\
406
configure configure.in config.guess *.m4 config.sub Makefile.in \
407
install-sh tsung.spec.in tsung.spec tsung-recorder.sh.in
408
tar -C $(distdir) -zxf tmp.tgz
409
mkdir $(distdir)/ebin
410
tar zvcf $(distdir).tar.gz $(distdir)
415
$(MAKE) TYPE=snapshot release
417
builder.beam: priv/builder.erl
418
@$(CC) -W0 $(OPT) -I $(INC) $<
420
ebin/%.beam: src/test/%.erl $(INC_FILES)
421
@echo "Compiling test $< ... "
422
@$(CC) -W0 $(OPT) -I $(INC) -I $(ERLANG_XMERL_DIR) -o ebin $<
424
ebin/%.beam: src/lib/%.erl $(INC_FILES)
425
@echo "Compiling $< ... "
426
@$(CC) -W0 $(OPT) -I $(INC) -I $(ERLANG_XMERL_DIR) -o ebin $<
428
# to avoid circular dependency
429
ebin/ts_plugin.beam: src/$(APPLICATION)/ts_plugin.erl $(INC_FILES)
430
@echo "Compiling $< ... "
431
@$(CC) $(OPT) -I $(INC) -I $(ERLANG_XMERL_DIR) -pa ebin -o ebin $<
433
ebin/%.beam: src/$(APPLICATION)/%.erl $(INC_FILES) $(BEHAVIORS)
434
@echo "Compiling $< ... "
435
@$(CC) $(OPT) -I $(INC) -I $(ERLANG_XMERL_DIR) -pa ebin -o ebin $<
437
ebin/%.beam: src/$(RECORDER_APPLICATION)/%.erl $(INC_FILES) $(BEHAVIORS)
438
@echo "Compiling $< ... "
439
@$(CC) $(OPT) -I $(INC) -I $(ERLANG_XMERL_DIR) -pa ebin -o ebin $<
441
ebin/%.beam: src/$(CONTROLLER_APPLICATION)/%.erl $(INC_FILES) $(BEHAVIORS)
442
@echo "Compiling $< ... "
443
@$(CC) $(OPT) -I $(INC) -I $(ERLANG_XMERL_DIR) -pa ebin -o ebin $<
446
# Override makefile default implicit rule