build: Split Makefile.in.
authorAndre Noll <maan@systemlinux.org>
Sun, 15 Sep 2013 02:39:11 +0000 (02:39 +0000)
committerAndre Noll <maan@systemlinux.org>
Sun, 1 Dec 2013 11:01:01 +0000 (12:01 +0100)
This trims down Makefile.in to contain only the initializations of
Make variables with their autoconf counterpart. The new Makefile.real
contains the second part, including all recipes.

With this commit, Makefile.in needs to be changed only when
configure.ac introduces new variables. In this case a full
autoconf, configure, make cycle is necessary anyway. However, if
only Makefile.real changes, a simple make run should be enough to
update everything.

Makefile.in
Makefile.real [new file with mode: 0644]

index f453ed0..1967992 100644 (file)
@@ -62,308 +62,4 @@ nsl_ldflags := @nsl_ldflags@
 curses_ldflags := @curses_ldflags@
 core_audio_ldflags := @core_audio_ldflags@
 
-VARDIR := /var/paraslash
-MANDIR := $(datarootdir)/man/man1
-STRIP := $(CROSS_COMPILE)strip
-HOSTCC ?= cc
-MKDIR_P := mkdir -p
-prefixed_executables := $(addprefix para_, $(executables))
-
-build_date := $(shell date)
-uname_s := $(shell uname -s 2>/dev/null || echo "UNKNOWN_OS")
-uname_rs := $(shell uname -rs)
-cc_version := $(shell $(CC) --version | head -n 1)
-GIT_VERSION := $(shell ./GIT-VERSION-GEN git-version.h)
-
-m4_ggo_dir := m4/gengetopt
-test_dir := t
-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
-m4depdir := $(build_dir)/m4deps
-help2man_dir := $(build_dir)/help2man
-hostbin_dir := $(build_dir)/host/bin
-
-# sort removes duplicate words, which is all we need here
-all_objs := $(sort $(recv_objs) $(filter_objs) $(client_objs) $(gui_objs) \
-       $(audiod_objs) $(audioc_objs) $(fade_objs) $(server_objs) \
-       $(write_objs) $(afh_objs) $(play_objs))
-deps := $(addprefix $(dep_dir)/, $(all_objs:.o=.d))
-m4_deps := $(addprefix $(m4depdir)/, $(addsuffix .m4d, $(executables)))
-
-# now prefix all objects with object dir
-recv_objs := $(addprefix $(object_dir)/, $(recv_objs))
-filter_objs := $(addprefix $(object_dir)/, $(filter_objs))
-client_objs := $(addprefix $(object_dir)/, $(client_objs))
-gui_objs := $(addprefix $(object_dir)/, $(gui_objs))
-audiod_objs := $(addprefix $(object_dir)/, $(audiod_objs))
-audioc_objs := $(addprefix $(object_dir)/, $(audioc_objs))
-fade_objs := $(addprefix $(object_dir)/, $(fade_objs))
-server_objs := $(addprefix $(object_dir)/, $(server_objs))
-write_objs := $(addprefix $(object_dir)/, $(write_objs))
-afh_objs := $(addprefix $(object_dir)/, $(afh_objs))
-play_objs := $(addprefix $(object_dir)/, $(play_objs))
-
-
-DEBUG_CPPFLAGS += -g -Wunused -Wundef -W
-DEBUG_CPPFLAGS += -Wredundant-decls
-DEBUG_CPPFLAGS += -Wall -Wno-sign-compare -Wno-unknown-pragmas
-DEBUG_CPPFLAGS += -Wformat-security
-DEBUG_CPPFLAGS += -Wmissing-format-attribute
-
-ifeq ($(uname_s),Linux)
-       CPPFLAGS += -fdata-sections -ffunction-sections
-       LDFLAGS += -Wl,--gc-sections
-       CPPFLAGS += -Wstrict-prototypes
-       CPPFLAGS += -Wshadow
-       # causes warnings on *BSD for the feature test macros
-       CPPFLAGS += -Wunused-macros
-endif
-CPPFLAGS += -Os
-CPPFLAGS += -Wuninitialized
-CPPFLAGS += -Wchar-subscripts
-CPPFLAGS += -DBINDIR='"$(BINDIR)"'
-CPPFLAGS += -DBUILD_DATE='"$(build_date)"'
-CPPFLAGS += -DUNAME_RS='"$(uname_rs)"'
-CPPFLAGS += -DCC_VERSION='"$(cc_version)"'
-CPPFLAGS += -Werror-implicit-function-declaration
-CPPFLAGS += -Wmissing-noreturn
-CPPFLAGS += -Wbad-function-cast
-CPPFLAGS += -fno-strict-aliasing
-CPPFLAGS += -DMAIN_INPUT_FILE_IS_$(*F)
-CPPFLAGS += $(arch_cppflags)
-CPPFLAGS += -I/usr/local/include
-CPPFLAGS += -I$(cmdline_dir)
-CPPFLAGS += $(osl_cppflags)
-
-LDFLAGS += $(clock_gettime_ldflags)
-
-man_pages := $(patsubst %, $(man_dir)/%.1, $(prefixed_executables))
-
-autocrap := config.h.in configure
-tarball_pfx := $(PACKAGE_TARNAME)-$(PACKAGE_VERSION)
-tarball_delete := $(addprefix $(tarball_pfx)/,\
-       web .changelog_before_cvs .changelog_cvs .gitignore)
-tarball := $(tarball_pfx).tar.bz2
-
-# To put more focus on warnings, be less verbose as default
-# Use 'make V=1' to see the full commands
-ifeq ("$(origin V)", "command line")
-       Q :=
-else
-       Q := @
-endif
-
-.PHONY: dep all clean distclean maintainer-clean install man tarball
-all: dep $(prefixed_executables) $(man_pages)
-dep: $(deps)
-man: $(man_pages)
-tarball: $(tarball)
-
-$(object_dir) $(man_dir) $(ggo_dir) $(cmdline_dir) $(dep_dir) $(m4depdir) \
-               $(help2man_dir) $(hostbin_dir):
-       $(Q) $(MKDIR_P) $@
-
--include $(m4_ggo_dir)/makefile
-
-# When in doubt, use brute force (Ken Thompson)
-TOUPPER = \
-$(subst a,A,$(subst b,B,$(subst c,C,$(subst d,D,$(subst e,E,\
-$(subst f,F,$(subst g,G,$(subst h,H,$(subst i,I,$(subst j,J,\
-$(subst k,K,$(subst l,L,$(subst m,M,$(subst n,N,$(subst o,O,\
-$(subst p,P,$(subst q,Q,$(subst r,R,$(subst s,S,$(subst t,T,\
-$(subst u,U,$(subst v,V,$(subst w,W,$(subst x,X,$(subst y,Y,\
-$(subst z,Z,$1))))))))))))))))))))))))))
-
-%_command_list.h: %.cmd %.c
-       @[ -z "$(Q)" ] || echo 'GEN $@'
-       $(Q) ./command_util.sh h < $< >$@
-%_command_list.man: %.cmd %.c
-       @[ -z "$(Q)" ] || echo 'GEN $@'
-       $(Q) ./command_util.sh man < $< > $@
-%_completion.h: %.cmd %.c
-       @[ -z "$(Q)" ] || echo 'GEN $@'
-       $(Q) ./command_util.sh compl $(strip $(call TOUPPER,$(*F)))_COMPLETERS \
-               $(strip $(call TOUPPER,$(*F)))_COMMANDS < $< > $@
-
-server_command_list.h server_command_list.man server_completion.h: command.c
-afs_command_list.h afs_command_list.man afs_completion.h: afs.c aft.c attribute.c
-audiod_command_list.h audiod_command_list.man audiod_completion.h: audiod_command.c
-
-server_command_lists_man = server_command_list.man afs_command_list.man
-$(man_dir)/para_server.1: $(help2man_dir)/para_server $(server_command_lists_man) | $(man_dir)
-       @[ -z "$(Q)" ] || echo 'MAN $<'
-       $(Q) opts="`for i in $(server_command_lists_man); do printf "%s\n" "-i $$i"; done`"; \
-       $(HELP2MAN) $$opts ./$< > $@
-
-$(man_dir)/para_audiod.1: $(help2man_dir)/para_audiod audiod_command_list.man | $(man_dir)
-       @[ -z "$(Q)" ] || echo 'MAN $<'
-       $(Q) $(HELP2MAN) -N -i audiod_command_list.man ./$< > $@
-
-$(man_dir)/para_play.1: $(help2man_dir)/para_play play_command_list.man | $(man_dir)
-       @[ -z "$(Q)" ] || echo 'MAN $<'
-       $(Q) $(HELP2MAN) -N -i play_command_list.man ./$< > $@
-
-$(man_dir)/%.1: $(help2man_dir)/% | $(man_dir)
-       @[ -z "$(Q)" ] || echo 'MAN $<'
-       $(Q) $(HELP2MAN) -N ./$< > $@
-
-$(hostbin_dir)/error2: error2.c | $(hostbin_dir)
-       @[ -z "$(Q)" ] || echo 'HCC $<'
-       $(Q) $(HOSTCC) -o $@ $<
-error2.h: $(hostbin_dir)/error2
-       @[ -z "$(Q)" ] || echo 'ER2 $<'
-       @echo "$(object_executable_matrix)" | $< > $@
-
-$(object_dir)/%.o: %.c | $(object_dir)
-$(object_dir)/opus%.o: CPPFLAGS += $(opus_cppflags)
-$(object_dir)/gui%.o: CPPFLAGS += $(curses_cppflags)
-$(object_dir)/spx%.o: CPPFLAGS += $(speex_cppflags)
-$(object_dir)/%.cmdline.o: CPPFLAGS += -Wno-unused-function
-
-$(object_dir)/mp3_afh.o: CPPFLAGS += $(id3tag_cppflags)
-$(object_dir)/crypt.o: CPPFLAGS += $(openssl_cppflags)
-$(object_dir)/mp3dec_filter.o: CPPFLAGS += $(mad_cppflags)
-$(object_dir)/compress_filter.o: CPPFLAGS += -O3
-$(object_dir)/ao_write.o: CPPFLAGS += $(ao_cppflags)
-
-$(object_dir)/aacdec_filter.o \
-$(object_dir)/aac_common.o \
-$(object_dir)/aac_afh.o \
-: CPPFLAGS += $(faad_cppflags)
-
-$(object_dir)/spx_common.o \
-$(object_dir)/spxdec_filter.o \
-$(object_dir)/spx_afh.o \
-$(object_dir)/oggdec_filter.o \
-$(object_dir)/ogg_afh.o \
-$(object_dir)/ogg_afh_common.o \
-: CPPFLAGS += $(ogg_cppflags)
-
-$(object_dir)/%.o: %.c | $(object_dir)
-       @[ -z "$(Q)" ] || echo 'CC $<'
-       $(Q) $(CC) -c -o $@ $(CPPFLAGS) $(DEBUG_CPPFLAGS) $<
-
-$(object_dir)/%.cmdline.o: $(cmdline_dir)/%.cmdline.c $(cmdline_dir)/%.cmdline.h | $(object_dir)
-       @[ -z "$(Q)" ] || echo 'CC $<'
-       $(Q) $(CC) -c $(CPPFLAGS) -Wno-unused-function -o $@ $<
-
-$(object_dir)/%.o: %.c | $(object_dir)
-       @[ -z "$(Q)" ] || echo 'CC $<'
-       $(Q) $(CC) -c -o $@ $(CPPFLAGS) $(DEBUG_CPPFLAGS) $<
-
-$(dep_dir)/%.cmdline.d: $(cmdline_dir)/%.cmdline.c | $(dep_dir)
-       @[ -z "$(Q)" ] || echo 'DEP $<'
-       $(Q) ./depend.sh $(dep_dir) $(object_dir) $(cmdline_dir) \
-               $(CPPFLAGS) $< > $@
-
-$(dep_dir)/%.d: %.c | $(dep_dir)
-       @[ -z "$(Q)" ] || echo 'DEP $<'
-       $(Q) ./depend.sh $(dep_dir) $(object_dir) $(cmdline_dir) \
-               $(CPPFLAGS) $< > $@
-
-ifeq ($(findstring clean, $(MAKECMDGOALS)),)
--include $(deps)
--include $(m4_deps)
-endif
-
-para_recv para_afh para_play para_server: LDFLAGS += $(id3tag_ldflags)
-para_write para_play para_audiod: LDFLAGS += $(ao_ldflags) $(core_audio_ldflags)
-para_client para_audioc para_play : LDFLAGS += $(readline_ldflags)
-para_server: LDFLAGS += $(osl_ldflags)
-para_gui: LDFLAGS += $(curses_ldflags)
-para_server \
-para_client \
-para_audiod \
-:LDFLAGS += \
-       $(openssl_ldflags) \
-       $(gcrypt_ldflags)
-
-para_audiod \
-para_filter \
-para_play \
-: LDFLAGS += \
-       $(mad_ldflags) \
-       $(samplerate_ldflags) \
-       -lm
-
-para_write \
-para_play \
-para_audiod \
-para_fade \
-: LDFLAGS += \
-       $(oss_ldflags) \
-       $(alsa_ldflags)
-
-para_server \
-para_filter \
-para_audiod \
-para_play \
-para_afh \
-para_recv \
-: LDFLAGS += \
-       $(ogg_ldflags) \
-       $(vorbis_ldflags) \
-       $(speex_ldflags) \
-       $(opus_ldflags) \
-       $(faad_ldflags) \
-       $(flac_ldflags)
-
-para_server \
-para_client \
-para_audioc \
-para_audiod \
-para_recv \
-: LDFLAGS += \
-       $(socket_ldflags) $(nsl_ldflags)
-
-$(foreach exe,$(executables),$(eval para_$(exe): $$($(exe)_objs)))
-$(prefixed_executables):
-       @[ -z "$(Q)" ] || echo 'LD $@'
-       $(Q) $(CC) $^ -o $@ $(LDFLAGS)
-
-clean:
-       @[ -z "$(Q)" ] || echo 'CLEAN'
-       $(Q) rm -f $(prefixed_executables)
-       $(Q) rm -rf $(object_dir)
-
-clean2: clean
-       @[ -z "$(Q)" ] || echo 'CLEAN2'
-       $(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
-       $(Q) rm -f GPATH GRTAGS GSYMS GTAGS
-
-maintainer-clean: distclean
-       rm -f *.tar.bz2 config.h configure config.h.in
-       rm -rf web_sync
-
-install: all man
-       $(MKDIR_P) $(BINDIR) $(MANDIR)
-       $(INSTALL) -s --strip-program $(STRIP) -m 755 \
-               $(prefixed_executables) $(BINDIR)
-       $(INSTALL) -m 644 $(man_pages) $(MANDIR)
-       $(MKDIR_P) $(VARDIR) >/dev/null 2>&1 || true # not fatal, so don't complain
-
-$(tarball):
-       rm -rf $(tarball_pfx).tar.bz2 $(tarball_pfx)
-       git archive --format=tar --prefix=$(tarball_pfx)/ HEAD \
-               | tar --delete $(tarball_delete) > $(tarball_pfx).tar
-       $(MKDIR_P) $(tarball_pfx)
-       ./GIT-VERSION-GEN > $(tarball_pfx)/VERSION
-       cp -r $(autocrap) $(tarball_pfx)
-       tar rf $(tarball_pfx).tar $(tarball_pfx)/*
-       bzip2 -9 $(tarball_pfx).tar
-       ls -l $(tarball_pfx).tar.bz2
-       rm -rf $(tarball_pfx)
-include $(test_dir)/makefile.test
+include Makefile.real
diff --git a/Makefile.real b/Makefile.real
new file mode 100644 (file)
index 0000000..b02a5f4
--- /dev/null
@@ -0,0 +1,301 @@
+VARDIR := /var/paraslash
+MANDIR := $(datarootdir)/man/man1
+STRIP := $(CROSS_COMPILE)strip
+HOSTCC ?= cc
+MKDIR_P := mkdir -p
+prefixed_executables := $(addprefix para_, $(executables))
+
+build_date := $(shell date)
+uname_s := $(shell uname -s 2>/dev/null || echo "UNKNOWN_OS")
+uname_rs := $(shell uname -rs)
+cc_version := $(shell $(CC) --version | head -n 1)
+GIT_VERSION := $(shell ./GIT-VERSION-GEN git-version.h)
+
+m4_ggo_dir := m4/gengetopt
+test_dir := t
+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
+m4depdir := $(build_dir)/m4deps
+help2man_dir := $(build_dir)/help2man
+hostbin_dir := $(build_dir)/host/bin
+
+# sort removes duplicate words, which is all we need here
+all_objs := $(sort $(recv_objs) $(filter_objs) $(client_objs) $(gui_objs) \
+       $(audiod_objs) $(audioc_objs) $(fade_objs) $(server_objs) \
+       $(write_objs) $(afh_objs) $(play_objs))
+deps := $(addprefix $(dep_dir)/, $(all_objs:.o=.d))
+m4_deps := $(addprefix $(m4depdir)/, $(addsuffix .m4d, $(executables)))
+
+# now prefix all objects with object dir
+recv_objs := $(addprefix $(object_dir)/, $(recv_objs))
+filter_objs := $(addprefix $(object_dir)/, $(filter_objs))
+client_objs := $(addprefix $(object_dir)/, $(client_objs))
+gui_objs := $(addprefix $(object_dir)/, $(gui_objs))
+audiod_objs := $(addprefix $(object_dir)/, $(audiod_objs))
+audioc_objs := $(addprefix $(object_dir)/, $(audioc_objs))
+fade_objs := $(addprefix $(object_dir)/, $(fade_objs))
+server_objs := $(addprefix $(object_dir)/, $(server_objs))
+write_objs := $(addprefix $(object_dir)/, $(write_objs))
+afh_objs := $(addprefix $(object_dir)/, $(afh_objs))
+play_objs := $(addprefix $(object_dir)/, $(play_objs))
+
+
+DEBUG_CPPFLAGS += -g -Wunused -Wundef -W
+DEBUG_CPPFLAGS += -Wredundant-decls
+DEBUG_CPPFLAGS += -Wall -Wno-sign-compare -Wno-unknown-pragmas
+DEBUG_CPPFLAGS += -Wformat-security
+DEBUG_CPPFLAGS += -Wmissing-format-attribute
+
+ifeq ($(uname_s),Linux)
+       CPPFLAGS += -fdata-sections -ffunction-sections
+       LDFLAGS += -Wl,--gc-sections
+       CPPFLAGS += -Wstrict-prototypes
+       CPPFLAGS += -Wshadow
+       # causes warnings on *BSD for the feature test macros
+       CPPFLAGS += -Wunused-macros
+endif
+CPPFLAGS += -Os
+CPPFLAGS += -Wuninitialized
+CPPFLAGS += -Wchar-subscripts
+CPPFLAGS += -DBINDIR='"$(BINDIR)"'
+CPPFLAGS += -DBUILD_DATE='"$(build_date)"'
+CPPFLAGS += -DUNAME_RS='"$(uname_rs)"'
+CPPFLAGS += -DCC_VERSION='"$(cc_version)"'
+CPPFLAGS += -Werror-implicit-function-declaration
+CPPFLAGS += -Wmissing-noreturn
+CPPFLAGS += -Wbad-function-cast
+CPPFLAGS += -fno-strict-aliasing
+CPPFLAGS += -DMAIN_INPUT_FILE_IS_$(*F)
+CPPFLAGS += $(arch_cppflags)
+CPPFLAGS += -I/usr/local/include
+CPPFLAGS += -I$(cmdline_dir)
+CPPFLAGS += $(osl_cppflags)
+
+LDFLAGS += $(clock_gettime_ldflags)
+
+man_pages := $(patsubst %, $(man_dir)/%.1, $(prefixed_executables))
+
+autocrap := config.h.in configure
+tarball_pfx := $(PACKAGE_TARNAME)-$(PACKAGE_VERSION)
+tarball_delete := $(addprefix $(tarball_pfx)/,\
+       web .changelog_before_cvs .changelog_cvs .gitignore)
+tarball := $(tarball_pfx).tar.bz2
+
+# To put more focus on warnings, be less verbose as default
+# Use 'make V=1' to see the full commands
+ifeq ("$(origin V)", "command line")
+       Q :=
+else
+       Q := @
+endif
+
+.PHONY: dep all clean distclean maintainer-clean install man tarball
+all: dep $(prefixed_executables) $(man_pages)
+dep: $(deps)
+man: $(man_pages)
+tarball: $(tarball)
+
+$(object_dir) $(man_dir) $(ggo_dir) $(cmdline_dir) $(dep_dir) $(m4depdir) \
+               $(help2man_dir) $(hostbin_dir):
+       $(Q) $(MKDIR_P) $@
+
+-include $(m4_ggo_dir)/makefile
+
+# When in doubt, use brute force (Ken Thompson)
+TOUPPER = \
+$(subst a,A,$(subst b,B,$(subst c,C,$(subst d,D,$(subst e,E,\
+$(subst f,F,$(subst g,G,$(subst h,H,$(subst i,I,$(subst j,J,\
+$(subst k,K,$(subst l,L,$(subst m,M,$(subst n,N,$(subst o,O,\
+$(subst p,P,$(subst q,Q,$(subst r,R,$(subst s,S,$(subst t,T,\
+$(subst u,U,$(subst v,V,$(subst w,W,$(subst x,X,$(subst y,Y,\
+$(subst z,Z,$1))))))))))))))))))))))))))
+
+%_command_list.h: %.cmd %.c
+       @[ -z "$(Q)" ] || echo 'GEN $@'
+       $(Q) ./command_util.sh h < $< >$@
+%_command_list.man: %.cmd %.c
+       @[ -z "$(Q)" ] || echo 'GEN $@'
+       $(Q) ./command_util.sh man < $< > $@
+%_completion.h: %.cmd %.c
+       @[ -z "$(Q)" ] || echo 'GEN $@'
+       $(Q) ./command_util.sh compl $(strip $(call TOUPPER,$(*F)))_COMPLETERS \
+               $(strip $(call TOUPPER,$(*F)))_COMMANDS < $< > $@
+
+server_command_list.h server_command_list.man server_completion.h: command.c
+afs_command_list.h afs_command_list.man afs_completion.h: afs.c aft.c attribute.c
+audiod_command_list.h audiod_command_list.man audiod_completion.h: audiod_command.c
+
+server_command_lists_man = server_command_list.man afs_command_list.man
+$(man_dir)/para_server.1: $(help2man_dir)/para_server $(server_command_lists_man) | $(man_dir)
+       @[ -z "$(Q)" ] || echo 'MAN $<'
+       $(Q) opts="`for i in $(server_command_lists_man); do printf "%s\n" "-i $$i"; done`"; \
+       $(HELP2MAN) $$opts ./$< > $@
+
+$(man_dir)/para_audiod.1: $(help2man_dir)/para_audiod audiod_command_list.man | $(man_dir)
+       @[ -z "$(Q)" ] || echo 'MAN $<'
+       $(Q) $(HELP2MAN) -N -i audiod_command_list.man ./$< > $@
+
+$(man_dir)/para_play.1: $(help2man_dir)/para_play play_command_list.man | $(man_dir)
+       @[ -z "$(Q)" ] || echo 'MAN $<'
+       $(Q) $(HELP2MAN) -N -i play_command_list.man ./$< > $@
+
+$(man_dir)/%.1: $(help2man_dir)/% | $(man_dir)
+       @[ -z "$(Q)" ] || echo 'MAN $<'
+       $(Q) $(HELP2MAN) -N ./$< > $@
+
+$(hostbin_dir)/error2: error2.c | $(hostbin_dir)
+       @[ -z "$(Q)" ] || echo 'HCC $<'
+       $(Q) $(HOSTCC) -o $@ $<
+error2.h: $(hostbin_dir)/error2
+       @[ -z "$(Q)" ] || echo 'ER2 $<'
+       @echo "$(object_executable_matrix)" | $< > $@
+
+$(object_dir)/%.o: %.c | $(object_dir)
+$(object_dir)/opus%.o: CPPFLAGS += $(opus_cppflags)
+$(object_dir)/gui%.o: CPPFLAGS += $(curses_cppflags)
+$(object_dir)/spx%.o: CPPFLAGS += $(speex_cppflags)
+$(object_dir)/%.cmdline.o: CPPFLAGS += -Wno-unused-function
+
+$(object_dir)/mp3_afh.o: CPPFLAGS += $(id3tag_cppflags)
+$(object_dir)/crypt.o: CPPFLAGS += $(openssl_cppflags)
+$(object_dir)/mp3dec_filter.o: CPPFLAGS += $(mad_cppflags)
+$(object_dir)/compress_filter.o: CPPFLAGS += -O3
+$(object_dir)/ao_write.o: CPPFLAGS += $(ao_cppflags)
+
+$(object_dir)/aacdec_filter.o \
+$(object_dir)/aac_common.o \
+$(object_dir)/aac_afh.o \
+: CPPFLAGS += $(faad_cppflags)
+
+$(object_dir)/spx_common.o \
+$(object_dir)/spxdec_filter.o \
+$(object_dir)/spx_afh.o \
+$(object_dir)/oggdec_filter.o \
+$(object_dir)/ogg_afh.o \
+$(object_dir)/ogg_afh_common.o \
+: CPPFLAGS += $(ogg_cppflags)
+
+$(object_dir)/%.o: %.c | $(object_dir)
+       @[ -z "$(Q)" ] || echo 'CC $<'
+       $(Q) $(CC) -c -o $@ $(CPPFLAGS) $(DEBUG_CPPFLAGS) $<
+
+$(object_dir)/%.cmdline.o: $(cmdline_dir)/%.cmdline.c $(cmdline_dir)/%.cmdline.h | $(object_dir)
+       @[ -z "$(Q)" ] || echo 'CC $<'
+       $(Q) $(CC) -c $(CPPFLAGS) -Wno-unused-function -o $@ $<
+
+$(dep_dir)/%.cmdline.d: $(cmdline_dir)/%.cmdline.c error2.h | $(dep_dir)
+       @[ -z "$(Q)" ] || echo 'DEP $<'
+       $(Q) ./depend.sh $(dep_dir) $(object_dir) $(cmdline_dir) \
+               $(CPPFLAGS) $< > $@
+
+$(dep_dir)/%.d: %.c error2.h | $(dep_dir)
+       @[ -z "$(Q)" ] || echo 'DEP $<'
+       $(Q) ./depend.sh $(dep_dir) $(object_dir) $(cmdline_dir) \
+               $(CPPFLAGS) $< > $@
+
+ifeq ($(findstring clean, $(MAKECMDGOALS)),)
+-include $(deps)
+-include $(m4_deps)
+endif
+
+para_recv para_afh para_play para_server: LDFLAGS += $(id3tag_ldflags)
+para_write para_play para_audiod: LDFLAGS += $(ao_ldflags) $(core_audio_ldflags)
+para_client para_audioc para_play : LDFLAGS += $(readline_ldflags)
+para_server: LDFLAGS += $(osl_ldflags)
+para_gui: LDFLAGS += $(curses_ldflags)
+para_server \
+para_client \
+para_audiod \
+:LDFLAGS += \
+       $(openssl_ldflags) \
+       $(gcrypt_ldflags)
+
+para_audiod \
+para_filter \
+para_play \
+: LDFLAGS += \
+       $(mad_ldflags) \
+       $(samplerate_ldflags) \
+       -lm
+
+para_write \
+para_play \
+para_audiod \
+para_fade \
+: LDFLAGS += \
+       $(oss_ldflags) \
+       $(alsa_ldflags)
+
+para_server \
+para_filter \
+para_audiod \
+para_play \
+para_afh \
+para_recv \
+: LDFLAGS += \
+       $(ogg_ldflags) \
+       $(vorbis_ldflags) \
+       $(speex_ldflags) \
+       $(opus_ldflags) \
+       $(faad_ldflags) \
+       $(flac_ldflags)
+
+para_server \
+para_client \
+para_audioc \
+para_audiod \
+para_recv \
+: LDFLAGS += \
+       $(socket_ldflags) $(nsl_ldflags)
+
+$(foreach exe,$(executables),$(eval para_$(exe): $$($(exe)_objs)))
+$(prefixed_executables):
+       @[ -z "$(Q)" ] || echo 'LD $@'
+       $(Q) $(CC) $^ -o $@ $(LDFLAGS)
+
+clean:
+       @[ -z "$(Q)" ] || echo 'CLEAN'
+       $(Q) rm -f $(prefixed_executables)
+       $(Q) rm -rf $(object_dir)
+
+clean2: clean
+       @[ -z "$(Q)" ] || echo 'CLEAN2'
+       $(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 error2.h
+       $(Q) rm -rf autom4te.cache
+       $(Q) rm -f GPATH GRTAGS GSYMS GTAGS
+
+maintainer-clean: distclean
+       rm -f *.tar.bz2 config.h configure config.h.in
+       rm -rf web_sync
+
+install: all man
+       $(MKDIR_P) $(BINDIR) $(MANDIR)
+       $(INSTALL) -s --strip-program $(STRIP) -m 755 \
+               $(prefixed_executables) $(BINDIR)
+       $(INSTALL) -m 644 $(man_pages) $(MANDIR)
+       $(MKDIR_P) $(VARDIR) >/dev/null 2>&1 || true # not fatal, so don't complain
+
+$(tarball):
+       rm -rf $(tarball_pfx).tar.bz2 $(tarball_pfx)
+       git archive --format=tar --prefix=$(tarball_pfx)/ HEAD \
+               | tar --delete $(tarball_delete) > $(tarball_pfx).tar
+       $(MKDIR_P) $(tarball_pfx)
+       ./GIT-VERSION-GEN > $(tarball_pfx)/VERSION
+       cp -r $(autocrap) $(tarball_pfx)
+       tar rf $(tarball_pfx).tar $(tarball_pfx)/*
+       bzip2 -9 $(tarball_pfx).tar
+       ls -l $(tarball_pfx).tar.bz2
+       rm -rf $(tarball_pfx)
+include $(test_dir)/makefile.test