#!/usr/bin/env make -f ## libwad: Doom WAD format interface library. ## Copyright (C) 2011 by Callum Dickinson. # ## This program is free software; you can redistribute it and/or ## modify it under the terms of the GNU General Public License ## as published by the Free Software Foundation; either version 2 ## of the License, or (at your option) any later version. # ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. # Library name. LIBNAME = wad # Library version. LIBVERM = 1 LIBVER = $(LIBVERM).0.0 # Library default options. CPPFLAGS += -DLIBNAME="$(LIBNAME)" -DLIBVER="$(LIBVER)" # Source files and directory. SRCDIR = src SRC = $(SRCDIR)/wad.c $(SRCDIR)/lump.c $(SRCDIR)/wad_static.c # Compiled files directory. BINDIR = bin INCDIR = include # ## Variables that shouldn't be edited unless ## you know what you are doing start here. # # Makefile pretty text output variables. PRAR = AR PRCC = CC PRINSTALL = INSTALL PRCLEAN = CLEAN # Library name prefix. LIBPFX = lib # Library installation directory. PREFIX ?= /usr/local LIBDIR := $(PREFIX)/lib INCLUDE := $(PREFIX)/include # Variables created during compilation. OBJ = $(SRC:.c=.o) DEP = $(BINDIR)/$(LIBPFX)$(LIBNAME).d ifdef MINGW DEFN = $(LIBNAME).def LIBN = $(LIBPFX)$(LIBNAME).lib BIN = $(BINDIR)/$(LIBPFX)$(LIBNAME)-$(LIBVERM).dll else SONAME = $(LIBPFX)$(LIBNAME).so.$(LIBVERM) BIN = $(BINDIR)/$(LIBPFX)$(LIBNAME).so.$(LIBVER) endif STABIN = $(BINDIR)/$(LIBPFX)$(LIBNAME).a # Compilation programs. ECHO := echo RM := $(RM) -r FIND := find GREP := grep INSTALL := install -m 644 MKDIR := mkdir -p FOR := for SED := sed AR := $(CROSS_COMPILE)$(AR) CC := $(CROSS_COMPILE)$(CC) # Shell programs. SHECHO := $(ECHO) SHFIND := $(FIND) SHGREP := $(GREP) SHINSTALL := $(INSTALL) SHSED := $(SED) SHCC := $(CC) # Quiet compiling programs during pretty text output. ECHO := @$(ECHO) ifndef V RM := @$(RM) LDCONFIG := @$(LDCONFIG) FIND := @$(FIND) GREP := @$(GREP) INSTALL := @$(INSTALL) MKDIR := @$(MKDIR) FOR := @$(FOR) SED := @$(SED) AR := @$(AR) CC := @$(CC) endif LIBS = $(BIN) $(STABIN) HEADERS = $(shell $(SHFIND) $(CURDIR) | $(SHGREP) -e "$(INCDIR)/.*.h" | $(SHGREP) -v ".svn" | $(SHSED) "s:$(CURDIR)/::") # Compiler default flags. ifndef MINGW CFLAGS += -fPIC LDFLAGS += -fPIC endif ifdef DEBUG CFLAGS += -g $(M5) -O0 -Wall endif # Linker flags. LDFLAGS += -shared ifdef MINGW LDFLAGS += -Wl,--output-def,$(DEFN),--out-implib,$(LIBN) else LDFLAGS += -Wl,-soname,$(SONAME) endif # ## Makefile targets. # # all is dependent on $(BIN) to be complete all: $(DEP) $(BIN) $(STABIN) # $(EXE) is dependent on all of the files in $(OBJ) to exist $(DEP): $(SRC) ifndef V $(ECHO) " $(PRCC)$@" endif -$(MKDIR) $(BINDIR) > /dev/null 2>&1 -$(RM) $@ $(FOR) f in $(SRC); do \ $(SHCC) $(CPPFLAGS) $(CFLAGS) -MM $$f >> $@; \ done -include $@ %.o: %.c ifndef V $(ECHO) " $(PRCC)$@" endif $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@ $(BIN): $(OBJ) ifndef V $(ECHO) " $(PRCC)$@" endif $(CC) $(LDFLAGS) -o $@ $(OBJ) $(LIB) $(STABIN): $(OBJ) ifndef V $(ECHO) " $(PRAR)$@" endif $(AR) rcs $@ $(OBJ) install: all install-libs install-headers install-libs: $(MKDIR) $(LIBDIR) ifndef V $(FOR) f in $(LIBS); do \ $(SHECHO) " $(PRINSTALL)$$f"; \ $(SHINSTALL) $$f $(LIBDIR); \ done else $(FOR) f in $(LIBS); do \ $(SHINSTALL) $$f $(LIBDIR); \ done endif $(LDCONFIG) install-headers: $(MKDIR) $(INCLUDE) ifndef V $(FOR) f in $(HEADERS); do \ $(SHECHO) " $(PRINSTALL)$$f"; \ $(SHINSTALL) $$f $(INCLUDE); \ done else $(FOR) f in $(HEADERS); do \ $(SHINSTALL) $$f $(INCLUDE); \ done endif clean: ifndef V $(ECHO) " $(PRCLEAN)$(OBJ) $(LIBS)" endif -$(RM) $(OBJ) $(LIBS) distclean: ifndef V $(ECHO) " $(PRCLEAN)$(BINDIR)" endif -$(RM) $(BINDIR) .PHONY : all install install-libs install-headers clean