Kart-Public/tools/libwad/Makefile

200 lines
4.0 KiB
Makefile

#!/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