X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=Makefile;fp=Makefile;h=0ca002bb5f83e3bf44be6818d82d517e70531833;hp=0000000000000000000000000000000000000000;hb=6b0a0d0efafe34d48ab344fca3b479553bd4e62c;hpb=85783316365181491a3e3c0c63659972477cebba diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..0ca002b --- /dev/null +++ b/Makefile @@ -0,0 +1,149 @@ + +# +# 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 +# + +# +# Define some options. +# + +# Set this to `yes' to echo each build command. +verbose := no + + +# +# Include the configuration file, config.mk. +# + +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. +# + +.SUFFIXES: +.SUFFIXES: .a .c .cc .cpp .o .rc + +all: targets + + +# +# 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 + + +# +# 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 $@"; +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) + + +# +# Stuff. +# + +#TGT_BIN := $(addsuffix $(EXEEXT),$(TGT_BIN)) + + +# +# 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 + +.PHONY: distclean +distclean: clean +ifeq ($(verbose),yes) + rm -f config.mk +else + @rm -f config.mk +endif + +.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) + + +# +# Prevent make from removing any build targets. +# + +.SECONDARY: $(CLEAN) +