]> Dogcows Code - chaz/yoink/blobdiff - Makefile
remove some unused stlplus modules
[chaz/yoink] / Makefile
index 0ca002bb5f83e3bf44be6818d82d517e70531833..a0c754b694dbf64e9d42fc277ec02fcacfcbd9a7 100644 (file)
--- a/Makefile
+++ b/Makefile
 
 #
 # Yoink
-# Use this file with make to compile and install Yoink.
-#
-# This makefile supports these targets:
-#   all, install, clean, cleandist, run, debug
-#
-# This build system incorporates the ideas written by Emile van Bergen:
-# http://www.xs4all.nl/~evbergen/nonrecursive-make.html
+# Use this file with GNU make to compile and install Yoink.
 #
 
-#
-# Define some options.
-#
+# Set V to `1' to echo each build command in full.  The default behavior
+# will keep output minimal.
+V      = 0
 
-# Set this to `yes' to echo each build command.
-verbose := no
+SHELL  = /bin/sh
 
 
-#
-# Include the configuration file, config.mk.
-#
+ifeq (menuconfig,$(MAKECMDGOALS))
+menuconfig:
+       ./configure --interactive
+.PHONY: menuconfig
+else
+
+config.h: config.mk
+       $(Q)$(configure) --export-header=$@
+
+config.sed: config.mk
+       $(Q)$(configure) --export-terms=$@
+
+config.mk:
+       $(Q)$(configure) --interactive --print-instructions=no
 
-have_config := $(wildcard config.mk)
-ifneq ($(strip $(have_config)),)
 include config.mk
-else
-no_config:
-       @echo "You must run the configure script before you can make anything."
-       @exit 1
-endif
 
 
 #
-# Some standard stuff.
+# Define some useful functions.
 #
 
-.SUFFIXES:
-.SUFFIXES: .a .c .cc .cpp .o .rc
+DATA_TARGETS   :=
+EXEC_TARGETS   :=
+SUBDIRS                :=
 
-all: targets
+define include_func =
+ifeq (,$$d)
+dir    := $1
+else
+dir    := $$d/$1
+endif
+sp     := $$(sp).x
+dirstack_$$(sp)        := $$d
+datstack_$$(sp) := $$(data)
+exestack_$$(sp) := $$(exec)
+d      := $$(dir)
+data   :=
+exec   :=
+include $$(dir)/rules.mk
+SUBDIRS += $$d $$b
+data   := $$(sort $$(data) $$(appdir_$$b) $$(mandir_$$b) $$(pkgdatadir_$$b) $$(desktop_$$b))
+exec   := $$(sort $$(exec) $$(bindir_$$b) $$(libdir_$$b))
+deps   := $$(filter %.d,$$(exec:%.o=%.d))
+clean   := $$(clean) $$(deps) $$(exec) $$(data)
+DEPFILE := $$(DEPFILE) $$(deps)
+DATA_TARGETS += $$(data)
+EXEC_TARGETS += $$(exec)
+d      := $$(dirstack_$$(sp))
+data   := $$(datstack_$$(sp))
+exec   := $$(exestack_$$(sp))
+sp     := $$(basename $$(sp))
+endef
+include        = $(foreach i,$1,$(eval $(call include_func,$i)))
+
+targets                = $(EXEC_TARGETS) $(DATA_TARGETS)
+builddir       = build/obj
+b              = $(builddir)/$(d)
+this           = $(d)/rules.mk
+
+ifeq (gzip,$(manCompression))
+MANEXT=.gz
+else
+ifeq (bzip2,$(manCompression))
+MANEXT=.bz2
+endif
+endif
 
 
 #
 # Include the subdirectories--order is not important.
 #
 
-dir := src
-include $(dir)/rules.mk
-
-dir := data
-include $(dir)/rules.mk
-
-dir := doc
-include $(dir)/rules.mk
+$(call include,src data doc)
+-include build/arch/$(platform)/rules.mk
 
 
 #
 # Define some common rules.
 #
 
-CC_WRAPPER  = ./build/compile.sh $(CC)
-CXX_WRAPPER = ./build/compile.sh $(CXX)
-
-ifeq ($(verbose),no)
-DO_CC    = @echo "  CC    $@";
-DO_CXX   = @echo "  CXX   $@";
-DO_LD    = @echo "  LD    $@";
-DO_LDX   = @echo "  LD    $@";
-DO_CCLD  = @echo "  CCLD  $@";
-DO_CXXLD = @echo "  CXXLD $@";
-DO_AR    = @echo "  AR    $@";
-DO_RC    = @echo "  RC    $@";
+ifeq (true,$(tracking))
+PKG_CFLAGS     += -MD -MP -MF $(@:%.o=%.d) -MT $@
+-include $(DEPFILE)
 endif
 
-DO_CC    += $(CC_WRAPPER)  $(CFLAGS)   $(CF_TGT) -o $@ -c $<
-DO_CXX   += $(CXX_WRAPPER) $(CXXFLAGS) $(CF_TGT) -o $@ -c $<
-DO_LD    += $(CC_WRAPPER)  $(LDFLAGS)  $(LF_TGT) -o $@ $^ $(LL_TGT) $(LIBS)
-DO_LDX   += $(CXX_WRAPPER) $(LDFLAGS)  $(LF_TGT) -o $@ $^ $(LL_TGT) $(LIBS)
-DO_CCLD  += $(CC_WRAPPER)  $(CFLAGS)   $(CF_TGT) $(LDFLAGS) $(LF_TGT) -o $@ $< $(LL_TGT) $(LIBS)
-DO_CXXLD += $(CXX_WRAPPER) $(CXXFLAGS) $(CF_TGT) $(LDFLAGS) $(LF_TGT) -o $@ $< $(LL_TGT) $(LIBS)
-DO_AR    += $(AR) rcs $@ $^; $(RANLIB) $@
-DO_RC    += $(WINDRES)     $(DDEFINES) $(DF_TGT) -o $@ -i $<
-
-%.o: %.c
-       $(DO_CC)
-%.o: %.cc
-       $(DO_CXX)
-%.o: %.cpp
-       $(DO_CXX)
-%.o: %.rc
-       $(DO_RC)
-%: %.o
-       $(DO_LD)
-%: %.c
-       $(DO_CCLD)
-%: %.cc
-       $(DO_CXXLD)
-%: %.cpp
-       $(DO_CXXLD)
-%.a: %.o
-       $(DO_AR)
+# Include current directory to allow sources to include config.h.
+override CPPFLAGS      += -I. -DHAVE_CONFIG_H=1
+TGT_CXXFLAGS           = $(TGT_CFLAGS)
+ARFLAGS                = rc
+INSTALL                = install
+
+tarname                = $(TARNAME)-$(VERSION)
+
+cmd_compile_c  = $(CC) $(PKG_CFLAGS) $(TGT_CFLAGS) $(CFLAGS) $(CPPFLAGS) \
+                 $(TARGET_ARCH) -c $(OUTPUT_OPTION) $<
+cmd_compile_cc = $(CXX) $(PKG_CXXFLAGS) $(TGT_CXXFLAGS) $(CXXFLAGS) $(CPPFLAGS) \
+                 $(TARGET_ARCH) -c $(OUTPUT_OPTION) $<
+cmd_link_c     = $(CC) $(PKG_CFLAGS) $(TGT_CFLAGS) $(CFLAGS) $(CPPFLAGS) \
+                 $(PKG_LDFLAGS) $(TGT_LDFLAGS) $(LDFLAGS) \
+                 $(TARGET_ARCH) $^ $(LOADLIBES) $(PKG_LDLIBS) $(TGT_LDLIBS) $(LDLIBS) -o $@
+cmd_link_cc    = $(CXX) $(PKG_CXXFLAGS) $(TGT_CXXFLAGS) $(CXXFLAGS) $(CPPFLAGS) \
+                 $(PKG_LDFLAGS) $(TGT_LDFLAGS) $(LDFLAGS) \
+                 $(TARGET_ARCH) $^ $(LOADLIBES) $(PKG_LDLIBS) $(TGT_LDLIBS) $(LDLIBS) -o $@
+cmd_ar         = $(AR) $(ARFLAGS) $@ $^; $(RANLIB) $@
+cmd_compile_rc = $(WINDRES) $(CPPFLAGS) $(TARGET_ARCH) $(OUTPUT_OPTION) -i $<
+cmd_sed                = sed -f config.sed <$< >$@
+cmd_gzip       = gzip -c $< >$@
+cmd_bzip2      = bzip2 -c $< >$@
+cmd_xxd                = id=$(subst .,_,$(notdir $<)); \
+                 printf "\#include <stddef.h>\nsize_t\tdata_%s_size = %d;\nchar\tdata_%s[] = {\n" \
+                 $$id $$(wc -c <$<) $$id >$@; \
+                 xxd -i <$< >>$@; \
+                 printf ", 0x00\n};\n" >>$@
+cmd_configure  = ./configure
+func_install   = mkdir -p $(DESTDIR)$3 && $(INSTALL) -m $1 $2 $(DESTDIR)$3
+func_remove    = rm -f $1
+func_dist      = git archive HEAD --prefix='$(tarname)/' | $1 >"$(tarname).tar.$2" && \
+                 (md5 "$(tarname).tar.$2" 2>/dev/null || md5sum "$(tarname).tar.$2")
+
+compile_c      = $(call func_print,CC,$@) $(cmd_compile_c)
+compile_cc     = $(call func_print,CXX,$@) $(cmd_compile_cc)
+compile_rc     = $(call func_print,RC,$@) $(cmd_compile_rc)
+link_c         = $(call func_print,LINK,$@) $(cmd_link_c)
+link_cc                = $(call func_print,LINK,$@) $(cmd_link_cc)
+ar             = $(call func_print,AR,$@) $(cmd_ar)
+sed            = $(call func_print,SED,$@) $(cmd_sed)
+gzip           = $(call func_print,GZIP,$@) $(cmd_gzip)
+bzip2          = $(call func_print,BZIP2,$@) $(cmd_bzip2)
+xxd            = $(call func_print,XXD,$@) $(cmd_xxd)
+configure      = $(call func_print,MAKE,$@) $(cmd_configure)
+dist           = $(call func_print,DIST,$1) $(func_dist)
+install                = $(call func_print,CP,$(DESTDIR:%/=%)$(3:%/=%)/$(notdir $2)) $(func_install)
+remove         = $(call func_print,RM,$1) $(func_remove)
+
+ifeq (1,$V)
+Q              =
+func_print     =
+else
+Q              = @
+func_print     = printf "\x20\x20$1\t%s\n" $2;
+endif
 
 
 #
-# Stuff.
+# Define the implicit rules.
 #
 
-#TGT_BIN := $(addsuffix $(EXEEXT),$(TGT_BIN))
+%.o: %.cc
+       $(Q)$(compile_cc)
+%.o: %.cpp
+       $(Q)$(compile_cc)
+%.o: %.c
+       $(Q)$(compile_c)
+%.o: %.rc
+       $(Q)$(compile_rc)
+%: %.in
+       $(Q)$(sed)
+%.gz: %
+       $(Q)$(gzip)
+%.bz2: %
+       $(Q)$(bzip2)
+
+$(builddir)/%.o: %.cc
+       $(Q)$(compile_cc)
+$(builddir)/%.o: %.cpp
+       $(Q)$(compile_cc)
+$(builddir)/%.o: %.c
+       $(Q)$(compile_c)
+$(builddir)/%.o: %.rc
+       $(Q)$(compile_rc)
+$(builddir)/%: %.in
+       $(Q)$(sed)
+$(builddir)/%.gz: %
+       $(Q)$(gzip)
+$(builddir)/%.bz2: %
+       $(Q)$(bzip2)
+$(builddir)/%: %
+       $(Q)if [ -d $< ]; then mkdir -p $@; elif [ -f $< ]; then cp -f $< $@; fi
 
 
 #
 # Define the phony targets.
 #
 
-.PHONY: targets
-targets: $(TGT_BIN) $(TGT_LIB)
+.DEFAULT_GOAL :=
+all: $(targets)
 
-.PHONY: clean
 clean:
-ifeq ($(verbose),yes)
-       rm -f $(CLEAN)
-else
-       @echo "  CLEAN"; rm -f $(CLEAN)
-endif
+       $(Q)$(foreach f,$(clean),$(call remove,$f);)
+       $(Q)if [ -d $(builddir) ]; then find $(builddir) -type d -empty -delete; fi
 
-.PHONY: distclean
 distclean: clean
-ifeq ($(verbose),yes)
-       rm -f config.mk
-else
-       @rm -f config.mk
-endif
+       $(Q)cd build && $(MAKE) clean
+       $(Q)$(call remove,config.h);$(call remove,config.mk);$(call remove,config.sed)
+
+
+install: install-data install-exec
 
-.PHONY: install
-install: targets 
-       $(INSTALL) $(TGT_BIN)  -m 755 -d $(DESTDIR)$(bindir)
-       $(INSTALL) $(TGT_DATA) -m 644 -d $(DESTDIR)$(datadir)
-       $(INSTALL) $(TGT_LIB)  -m 750 -d $(DESTDIR)$(libdir)
-       $(INSTALL) $(TGT_MAN)  -m 644 -d $(DESTDIR)$(mandir)
+install-data: $(DATA_TARGETS)
+       $(Q)$(foreach d,$(SUBDIRS),$(foreach f,$(pkgdatadir_$d),\
+               $(call install,644,$f,$(dir $(f:$d%=$(pkgdatadir)%)));))
+       $(Q)$(foreach d,$(SUBDIRS),$(foreach f,$(mandir_$d),\
+               $(call install,644,$f,\
+               $(dir $(f:$d%=$(mandir)/man$(shell echo "$f" | sed 's/[^.]*\.\([^.]*\).*/\1/')%)));))
+
+install-exec: $(EXEC_TARGETS)
+       $(Q)$(foreach d,$(SUBDIRS),$(foreach f,$(bindir_$d),\
+               $(call install,755,$f,$(dir $(f:$d%=$(bindir)%)));))
+
+install-desktop-entry: $(DATA_TARGETS)
+       $(Q)$(foreach d,$(SUBDIRS),$(foreach f,$(desktop_$d),\
+               $(call install,644,$f,/usr/share/applications);))
+
+
+dist-all: dist-bzip2 dist-gzip dist-lzma dist-xz
+
+dist-bzip2:
+       $(Q)$(call dist,bzip2,bz2)
+
+dist-gzip:
+       $(Q)$(call dist,gzip,gz)
+
+dist-lzma:
+       $(Q)$(call dist,lzma,lzma)
+
+dist-xz:
+       $(Q)$(call dist,xz,xz)
+
+dist: dist-$(archiveFormat)
 
 
 #
 # Prevent make from removing any build targets.
 #
 
-.SECONDARY:    $(CLEAN)
+.SECONDARY: $(clean)
+
+.PHONY: all clean distclean install install-data install-exec
+.PHONY: install-desktop-entry
+.PHONY: dist dist-all dist-gzip dist-bzip2 dist-xz dist-lzma
+
+endif  # menuconfig
 
This page took 0.023684 seconds and 4 git commands to generate.