]> Dogcows Code - chaz/yoink/blobdiff - Makefile
use only triangles; no quads
[chaz/yoink] / Makefile
index 0ca002bb5f83e3bf44be6818d82d517e70531833..5809c575cb5d2adfb53dd344afbaf0cd909bb646 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -4,42 +4,50 @@
 # Use this file with make to compile and install Yoink.
 #
 # This makefile supports these targets:
-#   all, install, clean, cleandist, run, debug
+#   all, install, clean, distclean, run, debug, dist, dist-gzip, dist-bzip2
 #
 # This build system incorporates the ideas written by Emile van Bergen:
 # http://www.xs4all.nl/~evbergen/nonrecursive-make.html
 #
 
-#
-# Define some options.
-#
+# Set this to `true' to echo each build command in full.
+verbose                := false
 
-# Set this to `yes' to echo each build command.
-verbose := no
+# Set this to `false' to avoid installing manual pages.
+install_man    := true
 
 
 #
 # Include the configuration file, config.mk.
 #
 
+SHELL          := /bin/sh
+
 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
+$(error You must run the configure script before you can make anything)
 endif
 
 
 #
-# Some standard stuff.
+# Declare the default targets and implicit rules.
 #
 
+.PHONY: all
+all: all_
+
 .SUFFIXES:
-.SUFFIXES: .a .c .cc .cpp .o .rc
+.SUFFIXES: .a .c .cc .cpp .in .o .rc
+
+
+#
+# Define some useful functions.
+#
 
-all: targets
+add_exe_suffix  = $(addsuffix $(EXEEXT),$1)
+remove_silencer = $(1:@%=%)
 
 
 #
@@ -60,28 +68,64 @@ include $(dir)/rules.mk
 # Define some common rules.
 #
 
-CC_WRAPPER  = ./build/compile.sh $(CC)
-CXX_WRAPPER = ./build/compile.sh $(CXX)
+ifeq ($(DEP_TRACKING),true)
+COMPILE                = ./tools/compile.lua
+endif
 
-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 ($(DEP_MINIMIZING),true)
+LINK           = ./tools/link.lua
 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 $<
+INSTALL                = ./tools/install.lua
+
+# Include current directory to allow sources to #include "config.h".
+CFLAGS            += -I.
+CXXFLAGS          += -I.
+
+COMMAND_CC         = $(COMPILE) $(CC)  $(CFLAGS)    $(CF_TGT) -o $@ -c $<
+COMMAND_CXX        = $(COMPILE) $(CXX) $(CXXFLAGS)  $(CF_TGT) -o $@ -c $<
+COMMAND_LD         = $(LINK)    $(CC)  $(LDFLAGS)   $(LF_TGT) -o $@ $^ $(LL_TGT) $(LIBS)
+COMMAND_LDX        = $(LINK)    $(CXX) $(LDFLAGS)   $(LF_TGT) -o $@ $^ $(LL_TGT) $(LIBS)
+COMMAND_CCLD       = $(COMPILE) $(CC)  $(CFLAGS)    $(CF_TGT) $(LDFLAGS) $(LF_TGT) -o $@ $< $(LL_TGT) $(LIBS)
+COMMAND_CXXLD      = $(COMPILE) $(CXX) $(CXXFLAGS)  $(CF_TGT) $(LDFLAGS) $(LF_TGT) -o $@ $< $(LL_TGT) $(LIBS)
+COMMAND_AR         = $(AR) rcs $@ $^;  $(RANLIB)    $@
+COMMAND_RC         = $(WINDRES)        -I.          $(DF_TGT) -o $@ -i $<
+COMMAND_INSTALL    = $(INSTALL) -m $1 $2 $3/
+COMMAND_RM         = rm -f $1
+COMMAND_IN         = sed -f config.sed <"$1" >"$2"
+
+ifeq ($(verbose),true)
+DO_CC              = $(COMMAND_CC)
+DO_CXX             = $(COMMAND_CXX)
+DO_LD              = $(COMMAND_LD)
+DO_LDX             = $(COMMAND_LDX)
+DO_CCLD            = $(COMMAND_CCLD)
+DO_CXXLD           = $(COMMAND_CXXLD)
+DO_AR              = $(COMMAND_AR)
+DO_RC              = $(COMMAND_RC)
+DO_INSTALL         = $(COMMAND_INSTALL)
+DO_RM              = $(COMMAND_RM)
+DO_IN              = $(COMMAND_IN)
+SHELL_LINE_PREFIX  =
+else
+DO_CC              = @echo " CC     $@"; $(COMMAND_CC)
+DO_CXX             = @echo " CXX    $@"; $(COMMAND_CXX)
+DO_LD              = @echo " LINK   $@"; $(COMMAND_LD)
+DO_LDX             = @echo " LINK   $@"; $(COMMAND_LDX)
+DO_CCLD            = @echo " LINK   $@"; $(COMMAND_CCLD)
+DO_CXXLD           = @echo " LINK   $@"; $(COMMAND_CXXLD)
+DO_AR              = @echo " AR     $@"; $(COMMAND_AR)
+DO_RC              = @echo " RC     $@"; $(COMMAND_RC)
+DO_INSTALL         = @echo " CP     $2"; $(COMMAND_INSTALL)
+DO_RM              = @echo " RM     $1"; $(COMMAND_RM)
+DO_IN              = @echo " GEN    $2"; $(COMMAND_IN)
+SHELL_LINE_PREFIX  = @
+endif
+
+
+#
+# Define the implicit rules.
+#
 
 %.o: %.c
        $(DO_CC)
@@ -91,54 +135,83 @@ DO_RC    += $(WINDRES)     $(DDEFINES) $(DF_TGT) -o $@ -i $<
        $(DO_CXX)
 %.o: %.rc
        $(DO_RC)
-%: %.o
+%$(EXEEXT): %.o
        $(DO_LD)
-%: %.c
+%$(EXEEXT): %.c
        $(DO_CCLD)
-%: %.cc
+%$(EXEEXT): %.cc
        $(DO_CXXLD)
-%: %.cpp
+%$(EXEEXT): %.cpp
        $(DO_CXXLD)
 %.a: %.o
        $(DO_AR)
-
-
-#
-# Stuff.
-#
-
-#TGT_BIN := $(addsuffix $(EXEEXT),$(TGT_BIN))
+%: %.in config.sed
+       $(call DO_IN,$<,$@)
 
 
 #
 # Define the phony targets.
 #
 
-.PHONY: targets
-targets: $(TGT_BIN) $(TGT_LIB)
-
 .PHONY: clean
 clean:
-ifeq ($(verbose),yes)
-       rm -f $(CLEAN)
-else
-       @echo "  CLEAN"; rm -f $(CLEAN)
-endif
+       $(SHELL_LINE_PREFIX)files='$(CLEAN)'; for file in $$files; \
+       do \
+               $(call remove_silencer,$(call DO_RM,$$file)); \
+       done
 
 .PHONY: distclean
 distclean: clean
-ifeq ($(verbose),yes)
-       rm -f config.mk
-else
-       @rm -f config.mk
-endif
+       $(call DO_RM,config.h)
+       $(call DO_RM,config.mk)
+       $(call DO_RM,config.sed)
+
+.PHONY: all_
+all_: $(BINARIES) $(MANPAGES)
 
 .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: all
+       $(SHELL_LINE_PREFIX)files='$(DATAFILES)'; for file in $$files; \
+       do \
+               full=`echo "$$file" | cut -d\; -f1`; \
+               base=`echo "$$file" | cut -d\; -f2`; \
+               $(call remove_silencer,$(call DO_INSTALL,644,$$full,$(DESTDIR)$(datadir)$$base)); \
+       done
+       $(SHELL_LINE_PREFIX)files='$(BINARIES)'; for file in $$files; \
+       do \
+               $(call remove_silencer,$(call DO_INSTALL,755,$$file,$(DESTDIR)$(bindir))); \
+       done
+ifeq ($(install_man),true)
+       $(SHELL_LINE_PREFIX)files='$(MANPAGES)'; for file in $$files; \
+       do \
+               $(call remove_silencer,$(call DO_INSTALL,644,$$file,$(DESTDIR)$(mandir))); \
+       done
+endif
+
+.PHONY: uninstall
+uninstall:
+       $(SHELL_LINE_PREFIX)files='$(BINARIES)'; for file in $$files; \
+       do \
+               base="/`basename $$file`"; \
+               $(call remove_silencer,$(call DO_RM,$(DESTDIR)$(bindir)$$base)); \
+       done
+       $(SHELL_LINE_PREFIX)files='$(DATAFILES)'; for file in $$files; \
+       do \
+               full="`echo "$$file" | cut -d\; -f1`"; \
+               base="`echo "$$file" | cut -d\; -f2`/`basename $$full`"; \
+               $(call remove_silencer,$(call DO_RM,$(DESTDIR)$(datadir)$$base)); \
+       done
+
+.PHONY: dist-bzip2
+dist-bzip2:
+       $(SHELL_LINE_PREFIX)git archive HEAD --prefix='$(TARNAME)/' | bzip2 > "$(TARNAME).tar.bz2"
+
+.PHONY: dist-gzip
+dist-gzip:
+       $(SHELL_LINE_PREFIX)git archive HEAD --prefix='$(TARNAME)/' | gzip > "$(TARNAME).tar.gz"
+
+.PHONY: dist
+dist: dist-bzip2
 
 
 #
This page took 0.02162 seconds and 4 git commands to generate.