Index: Makefile
===================================================================
--- Makefile (nonexistent)
+++ Makefile (revision 5)
@@ -0,0 +1,189 @@
+VERSION = 0.2.0
+
+API_MAJOR = 0
+API_MINOR = 1
+API_PATCH = 0
+
+CFLAGS += -std=gnu99 -D_FILE_OFFSET_BITS=64 -Wall -Wextra -O2 -ffast-math -g -MMD
+
+PREFIX ?= /usr/local
+BINDIR ?= $(PREFIX)/bin
+LIBDIR ?= $(PREFIX)/lib
+INCLUDEDIR ?= $(PREFIX)/include
+
+SRC_DIR := $(realpath $(dir $(lastword $(MAKEFILE_LIST))))
+vpath %.c $(SRC_DIR)
+vpath %.h $(SRC_DIR)
+vpath %.pc.in $(SRC_DIR)
+
+-include .config
+
+ifdef CONFIG_DEBUG
+ CFLAGS += -D_DEBUG
+else
+ CFLAGS += -DNDEBUG
+endif
+
+ifdef CONFIG_WINDOWS
+ EXESUF ?= .exe
+ DLLSUF ?= .dll
+ LIBSUF ?= .a
+else
+ DLLSUF ?= .so
+ LIBSUF ?= .a
+ LIBS ?= -lm
+ ifdef CONFIG_SHARED
+ SONAMESUF ?= .$(API_MAJOR).$(API_MINOR).$(API_PATCH)
+ SONAMESUF_MAJOR ?= .$(API_MAJOR)
+ SONAME ?= libdcadec$(DLLSUF)$(SONAMESUF_MAJOR)
+ endif
+endif
+
+ifdef CONFIG_SHARED
+ OUT_LIB ?= libdcadec/libdcadec$(DLLSUF)$(SONAMESUF)
+else
+ OUT_LIB ?= libdcadec/libdcadec$(LIBSUF)
+endif
+
+OUT_DEC ?= dcadec$(EXESUF)
+OUT_CUT ?= dcacut$(EXESUF)
+
+OUT_DEV ?= test/stddev$(EXESUF)
+SRC_DEV ?= test/stddev.c
+CFLAGS_DEV ?= -O2 -Wall -Wextra
+
+SRC_LIB = \
+libdcadec/bitstream.c \
+libdcadec/core_decoder.c \
+libdcadec/dca_context.c \
+libdcadec/dmix_tables.c \
+libdcadec/exss_parser.c \
+libdcadec/idct_fixed.c \
+libdcadec/idct_float.c \
+libdcadec/interpolator.c \
+libdcadec/interpolator_fixed.c \
+libdcadec/interpolator_float.c \
+libdcadec/ta.c \
+libdcadec/xll_decoder.c
+INC_LIB = \
+libdcadec/dca_context.h
+
+ifndef CONFIG_SMALL
+SRC_LIB += libdcadec/dca_frame.c
+SRC_LIB += libdcadec/dca_stream.c
+SRC_LIB += libdcadec/dca_waveout.c
+INC_LIB += libdcadec/dca_frame.h
+INC_LIB += libdcadec/dca_stream.h
+INC_LIB += libdcadec/dca_waveout.h
+endif
+
+OBJ_LIB = $(SRC_LIB:.c=.o)
+DEP_LIB = $(SRC_LIB:.c=.d)
+
+SRC_DEC = dcadec.c
+OBJ_DEC = $(SRC_DEC:.c=.o)
+DEP_DEC = $(SRC_DEC:.c=.d)
+
+SRC_CUT = dcacut.c
+OBJ_CUT = $(SRC_CUT:.c=.o)
+DEP_CUT = $(SRC_CUT:.c=.d)
+
+default: $(OUT_LIB) $(OUT_DEC)
+
+lib: $(OUT_LIB)
+
+all: $(OUT_LIB) $(OUT_DEC) $(OUT_CUT)
+
+-include $(DEP_LIB) $(DEP_DEC) $(DEP_CUT)
+
+$(OBJ_LIB): | objdir
+$(OBJ_DEC): | objdir
+$(OBJ_CUT): | objdir
+
+objdir:
+ mkdir -p libdcadec
+
+ifdef CONFIG_SHARED
+ CFLAGS_DLL = $(CFLAGS) -DDCADEC_SHARED -DDCADEC_INTERNAL
+ LDFLAGS_DLL = $(LDFLAGS) -shared
+
+ ifdef CONFIG_WINDOWS
+ IMP_LIB = libdcadec/libdcadec$(DLLSUF)$(LIBSUF)
+ IMP_DEF = libdcadec/libdcadec.def
+ EXTRA_LIB = $(IMP_LIB) $(IMP_DEF)
+ LDFLAGS_DLL += -static-libgcc
+ LDFLAGS_DLL += -Wl,--nxcompat,--dynamicbase
+ LDFLAGS_DLL += -Wl,--output-def,$(IMP_DEF)
+ LDFLAGS_DLL += -Wl,--out-implib,$(IMP_LIB)
+ else
+ CFLAGS_DLL += -fPIC -fvisibility=hidden
+ ifdef SONAME
+ LDFLAGS_DLL += -Wl,-soname,$(SONAME)
+ EXTRA_LIB += libdcadec/libdcadec$(DLLSUF)
+ EXTRA_LIB += libdcadec/libdcadec$(DLLSUF)$(SONAMESUF_MAJOR)
+ endif
+ IMP_LIB = -Llibdcadec -ldcadec
+ endif
+
+libdcadec/%.o: libdcadec/%.c
+ $(CC) -c $(CFLAGS_DLL) -o $@ $<
+
+$(OUT_LIB): $(OBJ_LIB)
+ $(CC) $(LDFLAGS_DLL) -o $@ $(OBJ_LIB) $(LIBS)
+ifdef SONAME
+ ln -sf $(@F) libdcadec/libdcadec$(DLLSUF)
+ ln -sf $(@F) libdcadec/libdcadec$(DLLSUF)$(SONAMESUF_MAJOR)
+endif
+
+$(OUT_DEC): $(OBJ_DEC) $(OUT_LIB)
+ $(CC) $(LDFLAGS) -o $@ $(OBJ_DEC) $(IMP_LIB) $(LIBS)
+
+$(OUT_CUT): $(OBJ_CUT) $(OUT_LIB)
+ $(CC) $(LDFLAGS) -o $@ $(OBJ_CUT) $(IMP_LIB) $(LIBS)
+
+else
+
+$(OUT_LIB): $(OBJ_LIB)
+ $(AR) crsu $@ $(OBJ_LIB)
+
+$(OUT_DEC): $(OBJ_DEC) $(OUT_LIB)
+ $(CC) $(LDFLAGS) -o $@ $(OBJ_DEC) $(OUT_LIB) $(LIBS)
+
+$(OUT_CUT): $(OBJ_CUT) $(OUT_LIB)
+ $(CC) $(LDFLAGS) -o $@ $(OBJ_CUT) $(OUT_LIB) $(LIBS)
+
+endif
+
+$(OUT_DEV): $(SRC_DEV)
+ $(CC) $(LDFLAGS) -o $@ $(CFLAGS_DEV) $< $(LIBS)
+
+check: $(OUT_DEC) $(OUT_DEV)
+ cd test && ./test.sh
+
+clean:
+ $(RM) $(OUT_LIB) $(OBJ_LIB) $(DEP_LIB) $(EXTRA_LIB)
+ $(RM) $(OUT_DEC) $(OBJ_DEC) $(DEP_DEC)
+ $(RM) $(OUT_CUT) $(OBJ_CUT) $(DEP_CUT)
+ $(RM) dcadec.pc
+ $(RM) $(OUT_DEV)
+ $(RM) -r test/decoded
+
+.PHONY: dcadec.pc
+dcadec.pc: dcadec.pc.in
+ sed 's,%PREFIX%,$(PREFIX),;s,%LIBDIR%,$(LIBDIR),;s,%INCLUDEDIR%,$(INCLUDEDIR),;s,%VERSION%,$(VERSION),' $< > $@
+
+install-lib: $(OUT_LIB) dcadec.pc
+ install -d -m 755 $(DESTDIR)$(LIBDIR) $(DESTDIR)$(LIBDIR)/pkgconfig $(DESTDIR)$(INCLUDEDIR)/libdcadec
+ install -m 644 $(OUT_LIB) $(DESTDIR)$(LIBDIR)
+ install -m 644 $(addprefix $(SRC_DIR)/, $(INC_LIB)) $(DESTDIR)$(INCLUDEDIR)/libdcadec
+ install -m 644 dcadec.pc $(DESTDIR)$(LIBDIR)/pkgconfig
+ifdef SONAME
+ ln -sf libdcadec$(DLLSUF)$(SONAMESUF) $(DESTDIR)$(LIBDIR)/libdcadec$(DLLSUF)
+ ln -sf libdcadec$(DLLSUF)$(SONAMESUF) $(DESTDIR)$(LIBDIR)/libdcadec$(DLLSUF)$(SONAMESUF_MAJOR)
+endif
+
+install-dec: $(OUT_DEC)
+ install -d -m 755 $(DESTDIR)$(BINDIR)
+ install -m 755 $(OUT_DEC) $(DESTDIR)$(BINDIR)
+
+install: install-lib install-dec