X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=Makefile.real;h=5df27bad934a58f04b4b6407e868e8898ded4002;hp=2973637e517692bad60d1773e8feee5feb1c48f2;hb=ac1f19d550a81c8408c8fce2e237996c950253ab;hpb=08ae151a088d1a1bc5442d8ee95960353a7a5782 diff --git a/Makefile.real b/Makefile.real index 2973637e..5df27bad 100644 --- a/Makefile.real +++ b/Makefile.real @@ -1,7 +1,15 @@ -VARDIR := /var/paraslash -MANDIR := $(datarootdir)/man/man1 -STRIP := $(CROSS_COMPILE)strip -HOSTCC ?= cc +# Implicit rules are implemented in make as suffix rules. The following rule +# empties the suffix list to disable the predefined implicit rules. This +# increases performance and avoids hard-to-debug behaviour. +.SUFFIXES: +MAKEFLAGS += -Rr +ifeq ("$(origin CC)", "default") + CC := cc +endif + +LOGLEVELS := LL_DEBUG,LL_INFO,LL_NOTICE,LL_WARNING,LL_ERROR,LL_CRIT,LL_EMERG +vardir := /var/paraslash +mandir := $(datarootdir)/man/man1 MKDIR_P := mkdir -p prefixed_executables := $(addprefix para_, $(executables)) @@ -10,29 +18,53 @@ 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) +COPYRIGHT_YEAR := 2019 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 -m4_ggo_dir := m4/gengetopt +lls_suite_dir := $(build_dir)/lls +lls_m4_dir := m4/lls test_dir := t +yy_src_dir = yy +yy_build_dir = $(build_dir)/yy # 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) \ + $(audiod_objs) $(audioc_objs) $(mixer_objs) $(server_objs) \ $(write_objs) $(afh_objs) $(play_objs)) deps := $(addprefix $(dep_dir)/, $(all_objs:.o=.d)) -m4_deps := $(addprefix $(m4depdir)/, $(addsuffix .m4d, $(executables))) +deps += $(addprefix $(dep_dir)/, mp.bison.d mp.flex.d) + +afh_objs += afh.lsg.o +audioc_objs += audioc.lsg.o +audiod_objs += $(addsuffix _cmd.lsg.o, recv filter audiod write) \ + client.lsg.o audiod.lsg.o +client_objs += client.lsg.o +mixer_objs += mixer.lsg.o +filter_objs += filter_cmd.lsg.o filter.lsg.o +gui_objs += gui.lsg.o +play_objs += $(addsuffix _cmd.lsg.o, recv filter play write) play.lsg.o +recv_objs += recv_cmd.lsg.o recv.lsg.o +server_objs += server_cmd.lsg.o server.lsg.o +write_objs += write_cmd.lsg.o write.lsg.o + +cmd_suites := $(addsuffix _cmd, audiod server play recv filter write) +suites := $(addprefix $(lls_suite_dir)/, $(cmd_suites) $(executables)) +m4_lls_deps := $(addsuffix .m4d, $(suites)) +lsg_h := $(addsuffix .lsg.h, $(suites)) + +# flex/bison objects and headers are only needed if para_server is built +ifeq ("$(findstring server, $(executables))", "server") + server_objs += mp.flex.o mp.bison.o + yy_h := $(yy_build_dir)/mp.bison.h +endif # now prefix all objects with object dir recv_objs := $(addprefix $(object_dir)/, $(recv_objs)) @@ -41,7 +73,7 @@ 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)) +mixer_objs := $(addprefix $(object_dir)/, $(mixer_objs)) server_objs := $(addprefix $(object_dir)/, $(server_objs)) write_objs := $(addprefix $(object_dir)/, $(write_objs)) afh_objs := $(addprefix $(object_dir)/, $(afh_objs)) @@ -50,69 +82,68 @@ play_objs := $(addprefix $(object_dir)/, $(play_objs)) man_pages := $(patsubst %, $(man_dir)/%.1, $(prefixed_executables)) autocrap := config.h.in configure -tarball_pfx := $(PACKAGE_TARNAME)-$(PACKAGE_VERSION) +tarball_pfx := $(PACKAGE_TARNAME)-$(GIT_VERSION) tarball_delete := $(addprefix $(tarball_pfx)/, web .gitignore) -tarball := $(tarball_pfx).tar.bz2 +tarball := $(tarball_pfx).tar.xz + +all: $(prefixed_executables) $(man_pages) +.PHONY: all mostlyclean clean distclean maintainer-clean install \ + install-strip man dist tarball -.PHONY: dep all clean clean2 distclean maintainer-clean install man tarball -all: dep $(prefixed_executables) $(man_pages) -dep: $(deps) man: $(man_pages) -tarball: $(tarball) -include $(m4_ggo_dir)/makefile +include $(lls_m4_dir)/makefile include $(test_dir)/makefile.test +include $(yy_src_dir)/makefile ifeq ($(findstring clean, $(MAKECMDGOALS)),) -include $(deps) --include $(m4_deps) +-include $(m4_lls_deps) endif -$(object_dir) $(man_dir) $(ggo_dir) $(cmdline_dir) $(dep_dir) $(m4depdir) \ - $(help2man_dir) $(hostbin_dir): +$(object_dir) $(man_dir) $(dep_dir) $(m4depdir) $(lls_suite_dir) \ + $(yy_build_dir): $(Q) $(MKDIR_P) $@ -# 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)))))))))))))))))))))))))) - - -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 +CPPFLAGS += -DBINDIR='"$(bindir)"' +CPPFLAGS += -DCOPYRIGHT_YEAR='"$(COPYRIGHT_YEAR)"' +CPPFLAGS += -DBUILD_DATE='"$(build_date)"' +CPPFLAGS += -DLOGLEVELS='$(LOGLEVELS)' +CPPFLAGS += -DUNAME_RS='"$(uname_rs)"' +CPPFLAGS += -DCC_VERSION='"$(cc_version)"' +CPPFLAGS += -I$(lls_suite_dir) +CPPFLAGS += -I$(yy_build_dir) +CPPFLAGS += $(lopsub_cppflags) + +STRICT_CFLAGS += -fno-strict-aliasing +STRICT_CFLAGS += -g +STRICT_CFLAGS += -Os +STRICT_CFLAGS += -Wundef -W -Wuninitialized +STRICT_CFLAGS += -Wchar-subscripts +STRICT_CFLAGS += -Werror-implicit-function-declaration +STRICT_CFLAGS += -Wmissing-noreturn +STRICT_CFLAGS += -Wbad-function-cast +STRICT_CFLAGS += -Wredundant-decls +STRICT_CFLAGS += -Wno-sign-compare -Wno-unknown-pragmas +STRICT_CFLAGS += -Wdeclaration-after-statement +STRICT_CFLAGS += -Wformat -Wformat-security -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 + # these cause warnings on *BSD CPPFLAGS += -Wunused-macros + STRICT_CFLAGS += -fdata-sections -ffunction-sections + STRICT_CFLAGS += -Wstrict-prototypes + STRICT_CFLAGS += -Wshadow + STRICT_CFLAGS += -Wunused -Wall + LDFLAGS += -Wl,--gc-sections 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) + +cc-option = $(shell \ + $(CC) $(1) -Werror -c -x c /dev/null -o /dev/null > /dev/null 2>&1 \ + && echo "$(1)" \ +) + +STRICT_CFLAGS += $(call cc-option, -Wformat-signedness) +STRICT_CFLAGS += $(call cc-option, -Wdiscarded-qualifiers) # To put more focus on warnings, be less verbose as default # Use 'make V=1' to see the full commands @@ -122,99 +153,107 @@ else Q := @ endif -%_command_list.h: %.cmd %.c - @[ -z "$(Q)" ] || echo 'GEN $@' - $(Q) ./command_util.bash h < $< >$@ -%_command_list.man: %.cmd %.c - @[ -z "$(Q)" ] || echo 'GEN $@' - $(Q) ./command_util.bash man < $< > $@ -%_completion.h: %.cmd %.c - @[ -z "$(Q)" ] || echo 'GEN $@' - $(Q) ./command_util.bash 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 := server_command_list.man afs_command_list.man -audiod_command_lists := audiod_command_list.man -play_command_lists := play_command_list.man - -$(man_dir)/para_server.1: $(server_command_lists) -$(man_dir)/para_audiod.1: $(audiod_command_lists) -$(man_dir)/para_play.1: $(play_command_lists) - -$(man_dir)/para_server.1: man_util_command_lists := $(server_command_lists) -$(man_dir)/para_audiod.1: man_util_command_lists := $(audiod_command_lists) -$(man_dir)/para_play.1: man_util_command_lists := $(play_command_lists) - -$(man_dir)/para_%.1: $(ggo_dir)/%.ggo man_util.bash | $(man_dir) $(help2man_dir) - @[ -z "$(Q)" ] || echo 'MAN $<' - $(Q) \ - COMMAND_LISTS="$(man_util_command_lists)" \ - FILTERS="$(filters)" \ - GENGETOPT=$(GENGETOPT) \ - GGO_DIR=$(ggo_dir) \ - HELP2MAN=$(HELP2MAN) \ - HELP2MAN_DIR=$(help2man_dir) \ - RECEIVERS="$(receivers)" \ - VERSION="$(GIT_VERSION)" \ - WRITERS="$(writers)" \ - ./man_util.bash $@ - -$(hostbin_dir)/error2: error2.c | $(hostbin_dir) - @[ -z "$(Q)" ] || echo 'HCC $<' - $(Q) $(HOSTCC) -o $@ $< -error2.h: $(hostbin_dir)/error2 Makefile - @[ -z "$(Q)" ] || echo 'ER2 $<' - @echo "$(object_executable_matrix)" | $< > $@ +audiod_commands := $(addprefix $(lls_suite_dir)/, \ + $(addsuffix _cmd.lsg.man, audiod recv filter write)) +filter_commands := $(lls_suite_dir)/filter_cmd.lsg.man +play_commands := $(lls_suite_dir)/play_cmd.lsg.man +recv_commands := $(lls_suite_dir)/recv_cmd.lsg.man +server_commands := $(lls_suite_dir)/server_cmd.lsg.man +write_commands := $(lls_suite_dir)/write_cmd.lsg.man + +$(man_dir)/para_audiod.1: $(audiod_commands) +$(man_dir)/para_filter.1: $(filter_commands) +$(man_dir)/para_play.1: $(play_commands) +$(man_dir)/para_recv.1: $(recv_commands) +$(man_dir)/para_server.1: $(server_commands) +$(man_dir)/para_write.1: $(write_commands) + +$(man_dir)/para_audiod.1: all_commands := $(audiod_commands) +$(man_dir)/para_filter.1: all_commands := $(filter_commands) +$(man_dir)/para_play.1: all_commands := $(play_commands) +$(man_dir)/para_recv.1: all_commands := $(recv_commands) +$(man_dir)/para_server.1: all_commands := $(server_commands) +$(man_dir)/para_write.1: all_commands := $(write_commands) + +$(man_dir)/para_%.1: $(lls_suite_dir)/%.lsg.man \ + $(lls_m4_dir)/copyright.m4 | $(man_dir) + @[ -z "$(Q)" ] || echo 'LLSMAN $<' + $(Q) cat $< $(all_commands) > $@ + $(Q) $(M4) -D COPYRIGHT_YEAR=$(COPYRIGHT_YEAR) $(lls_m4_dir)/copyright.m4 >> $@ $(object_dir)/%.o: %.c | $(object_dir) + $(object_dir)/opus%.o: CPPFLAGS += $(opus_cppflags) -$(object_dir)/gui%.o: CPPFLAGS += $(curses_cppflags) +$(object_dir)/gui.o $(object_dir)/gui%.o \ +: CPPFLAGS += $(curses_cppflags) $(object_dir)/spx%.o: CPPFLAGS += $(speex_cppflags) -$(object_dir)/%.cmdline.o: CPPFLAGS += -Wno-unused-function +$(object_dir)/flac%.o: CPPFLAGS += $(flac_cppflags) $(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)/openssl.o: CPPFLAGS += $(openssl_cppflags) +$(object_dir)/gcrypt.o: CPPFLAGS += $(gcrypt_cppflags) $(object_dir)/ao_write.o: CPPFLAGS += $(ao_cppflags) +$(object_dir)/alsa%.o: CPPFLAGS += $(alsa_cppflags) + +$(object_dir)/interactive.o \ +: CPPFLAGS += $(readline_cppflags) + +$(object_dir)/resample_filter.o \ +: CPPFLAGS += $(samplerate_cppflags) + +$(object_dir)/oss_write.o \ +: CPPFLAGS += $(oss_cppflags) + +$(object_dir)/ao_write.o \ +: CPPFLAGS += $(ao_cppflags) $(pthread_cppflags) + +$(object_dir)/mp3dec_filter.o \ +: CPPFLAGS += $(mad_cppflags) $(object_dir)/aacdec_filter.o \ -$(object_dir)/aac_common.o \ $(object_dir)/aac_afh.o \ : CPPFLAGS += $(faad_cppflags) +$(object_dir)/ogg_afh.o \ +$(object_dir)/oggdec_filter.o \ +: CPPFLAGS += $(vorbis_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 \ +$(object_dir)/opus%.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) +$(object_dir)/afs.o \ +$(object_dir)/aft.o \ +$(object_dir)/attribute.o \ +$(object_dir)/blob.o \ +$(object_dir)/mood.o \ +$(object_dir)/playlist.o \ +$(object_dir)/score.o \ +$(object_dir)/server.o \ +$(object_dir)/vss.o \ +$(object_dir)/command.o \ +$(object_dir)/http_send.o \ +$(object_dir)/dccp_send.o \ +$(object_dir)/udp_send.o \ +$(object_dir)/send_common.o \ +$(object_dir)/mm.o \ +: CPPFLAGS += $(osl_cppflags) + +$(object_dir)/compress_filter.o: CFLAGS += -O3 + +$(object_dir)/%.o: %.c | $(object_dir) $(dep_dir) $(lsg_h) $(yy_h) @[ -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) $< > $@ + $(Q) $(CC) -c -o $@ -MMD -MF $(dep_dir)/$(*F).d -MT $@ $(CPPFLAGS) \ + $(STRICT_CFLAGS) $(CFLAGS) $< para_recv para_afh para_play para_server: LDFLAGS += $(id3tag_ldflags) -para_write para_play para_audiod: LDFLAGS += $(ao_ldflags) $(core_audio_ldflags) +para_write para_play para_audiod \ +: LDFLAGS += $(ao_ldflags) $(pthread_ldflags) para_client para_audioc para_play : LDFLAGS += $(readline_ldflags) para_server: LDFLAGS += $(osl_ldflags) para_gui: LDFLAGS += $(curses_ldflags) @@ -222,25 +261,40 @@ para_server \ para_client \ para_audiod \ :LDFLAGS += \ - $(openssl_ldflags) \ - $(gcrypt_ldflags) + $(crypto_ldflags) para_audiod \ para_filter \ para_play \ : LDFLAGS += \ $(mad_ldflags) \ + $(faad_ldflags) \ $(samplerate_ldflags) \ -lm +para_mixer: LDFLAGS += -lm + para_write \ para_play \ para_audiod \ -para_fade \ +para_mixer \ : LDFLAGS += \ $(oss_ldflags) \ $(alsa_ldflags) +para_afh \ +para_audioc \ +para_audiod \ +para_client \ +para_mixer \ +para_filter \ +para_gui \ +para_play \ +para_recv \ +para_server \ +para_write \ +: LDFLAGS += $(lopsub_ldflags) + para_server \ para_filter \ para_audiod \ @@ -255,53 +309,51 @@ para_recv \ $(faad_ldflags) \ $(flac_ldflags) -para_server \ -para_client \ -para_audioc \ -para_audiod \ -para_recv \ -: LDFLAGS += \ - $(socket_ldflags) $(nsl_ldflags) +para_afh para_recv para_server para_play: LDFLAGS += $(iconv_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) +mostlyclean: + @[ -z "$(Q)" ] || echo 'MOSTLYCLEAN' + $(Q) rm -f para_* $(Q) rm -rf $(object_dir) - -clean2: clean - @[ -z "$(Q)" ] || echo 'CLEAN2' - $(Q) rm -f *_command_list.* *_completion.h +clean: mostlyclean + @[ -z "$(Q)" ] || echo 'CLEAN' $(Q) rm -rf $(build_dir) -distclean: clean2 test-clean +distclean: 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 Makefile autoscan.log config.status config.log + $(Q) rm -f config.h configure config.h.in +maintainer-clean: distclean + @[ -z "$(Q)" ] || echo 'MAINTAINER-CLEAN' + $(Q) rm -f *.tar.bz2 *.tar.xz $(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 \ +INSTALL ?= install +INSTALL_PROGRAM ?= $(INSTALL) +INSTALL_DATA ?= $(INSTALL) -m 644 +ifneq ($(findstring strip, $(MAKECMDGOALS)),) + strip_option := -s +endif + +install install-strip: all man + $(MKDIR_P) $(DESTDIR)$(bindir) $(DESTDIR)$(mandir) + $(INSTALL) $(strip_option) $(prefixed_executables) $(DESTDIR)$(bindir) + $(INSTALL_DATA) $(man_pages) $(DESTDIR)$(mandir) + $(MKDIR_P) $(DESTDIR)$(vardir) >/dev/null 2>&1 || true # not fatal, so don't complain + +$(tarball) dist tarball: + $(Q) rm -rf $(tarball) $(tarball_pfx) + $(Q) 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) + $(Q) $(MKDIR_P) $(tarball_pfx) + $(Q) ./GIT-VERSION-GEN > $(tarball_pfx)/VERSION + $(Q) cp $(autocrap) $(tarball_pfx) + $(Q) tar rf $(tarball_pfx).tar $(tarball_pfx)/* + $(Q) xz -9 $(tarball_pfx).tar + $(Q) ls -l $(tarball) + $(Q) ln -sf $(tarball) paraslash-git.tar.xz + $(Q) rm -rf $(tarball_pfx)