GIT_VERSION := $(shell ./GIT-VERSION-GEN git-version.h)
m4_ggo_dir := m4/gengetopt
-ggo_dir := ggo
-object_dir := objects
-man_dir := man/man1
test_dir := t
-cmdline_dir := cmdline
+ifeq ("$(origin O)", "command line")
+ build_dir := $(O)
+else
+ build_dir := build
+endif
+ggo_dir := $(build_dir)/ggo
+object_dir := $(build_dir)/objects
+dep_dir := $(build_dir)/deps
+man_dir := $(build_dir)/man/man1
+cmdline_dir := $(build_dir)/cmdline
DEBUG_CPPFLAGS += -g -Wunused -Wundef -W
DEBUG_CPPFLAGS += -Wredundant-decls
# To put more focus on warnings, be less verbose as default
# Use 'make V=1' to see the full commands
-ifdef V
- ifeq ("$(origin V)", "command line")
- BUILD_VERBOSE = $(V)
- endif
-endif
-ifndef BUILD_VERBOSE
- BUILD_VERBOSE = 0
-endif
-ifeq ($(BUILD_VERBOSE),0)
- Q = @
+ifeq ("$(origin V)", "command line")
+ Q :=
else
- Q =
+ Q := @
endif
.PHONY: dep all clean distclean maintainer-clean install man tarball
man: $(man_pages)
tarball: $(tarball)
-$(object_dir) $(man_dir) $(ggo_dir) $(cmdline_dir):
+$(object_dir) $(man_dir) $(ggo_dir) $(cmdline_dir) $(dep_dir):
$(Q) $(MKDIR_P) $@
-include $(m4_ggo_dir)/makefile
@[ -z "$(Q)" ] || echo 'CC $<'
$(Q) $(CC) -c -o $@ $(CPPFLAGS) $(DEBUG_CPPFLAGS) $<
-$(object_dir)/%.cmdline.d: $(cmdline_dir)/%.cmdline.c | $(object_dir)
+$(dep_dir)/%.cmdline.d: $(cmdline_dir)/%.cmdline.c | $(dep_dir)
@[ -z "$(Q)" ] || echo 'DEP $<'
- $(Q) ./depend.sh $(object_dir) $(cmdline_dir) $(CPPFLAGS) $< > $@
+ $(Q) ./depend.sh $(dep_dir) $(object_dir) $(cmdline_dir) \
+ $(CPPFLAGS) $< > $@
-$(object_dir)/%.d: %.c | $(object_dir)
+$(dep_dir)/%.d: %.c | $(dep_dir)
@[ -z "$(Q)" ] || echo 'DEP $<'
- $(Q) ./depend.sh $(object_dir) $(cmdline_dir) $(CPPFLAGS) $< > $@
+ $(Q) ./depend.sh $(dep_dir) $(object_dir) $(cmdline_dir) \
+ $(CPPFLAGS) $< > $@
+all_objs := @recv_objs@ @filter_objs@ @client_objs@ @gui_objs@ \
+ @audiod_objs@ @audioc_objs@ @fade_objs@ @server_objs@ \
+ @write_objs@ @afh_objs@
+deps := $(addprefix $(dep_dir)/, $(all_objs:.o=.d))
recv_objs := $(addprefix $(object_dir)/, @recv_objs@)
filter_objs := $(addprefix $(object_dir)/, @filter_objs@)
write_objs := $(addprefix $(object_dir)/, @write_objs@)
afh_objs := $(addprefix $(object_dir)/, @afh_objs@)
-all_objs := $(recv_objs) $(filter_objs) $(client_objs) $(gui_objs) \
- $(audiod_objs) $(audioc_objs) $(fade_objs) $(server_objs) \
- $(write_objs) $(afh_objs)
-
-deps := $(all_objs:.o=.d)
-
ifeq ($(findstring clean, $(MAKECMDGOALS)),)
-include $(deps)
endif
clean:
@[ -z "$(Q)" ] || echo 'CLEAN'
- $(Q) rm -f @executables@ $(object_dir)/*.o
+ $(Q) rm -f @executables@
+ $(Q) rm -rf $(object_dir)
clean2: clean
@[ -z "$(Q)" ] || echo 'CLEAN2'
- $(Q) rm -rf $(man_dir) $(object_dir) $(cmdline_dir) $(ggo_dir)
$(Q) rm -f *_command_list.* *_completion.h
+ $(Q) rm -rf $(build_dir)
distclean: clean2 test-clean
@[ -z "$(Q)" ] || echo 'DISTCLEAN'
$(Q) rm -f Makefile autoscan.log config.status config.log
- $(Q) rm -rf autom4te.cache aclocal.m4
+ $(Q) rm -rf autom4te.cache
$(Q) rm -f GPATH GRTAGS GSYMS GTAGS
maintainer-clean: distclean