# Run configure to generate Makefile from Makefile.in on
# any system supported by GNU autoconf.  For all other
# systems, use this file as a template to create a
# working Makefile.

CC = @CC@
CFLAGS = @CFLAGS@ -Wall

LIBS = @LIBS@ -lm

AR = @AR@
RANLIB = @RANLIB@
srcdir=@srcdir@

INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
MKDIR_P = @MKDIR_P@

prefix = @prefix@
exec_prefix = @exec_prefix@
includedir = @includedir@
libdir = @libdir@

OBJS = \
	src/resample.c.o \
	src/resamplesubs.c.o \
	src/filterkit.c.o

TARGETS = @TARGETS@
DIRS=tests

all: $(TARGETS)

libresample.a: $(OBJS) Makefile
	$(AR) ruv libresample.a $(OBJS)
	ranlib libresample.a

tests/testresample: libresample.a $(srcdir)/tests/testresample.c $(DIRS)
	$(CC) -o tests/testresample \
		$(CFLAGS) $(srcdir)/tests/testresample.c \
		libresample.a $(LIBS)

tests/compareresample: libresample.a $(srcdir)/tests/compareresample.c $(DIRS)
	$(CC) -o tests/compareresample \
		$(CFLAGS) $(srcdir)/tests/compareresample.c \
		libresample.a -lsamplerate $(LIBS)

tests/resample-sndfile: libresample.a $(srcdir)/tests/resample-sndfile.c $(DIRS)
	$(CC) -o tests/resample-sndfile \
		$(CFLAGS) $(srcdir)/tests/resample-sndfile.c \
		libresample.a -lsndfile $(LIBS)

$(DIRS):
	mkdir $(DIRS)

clean:
	rm -f $(TARGETS) $(OBJS)

dist: clean
	rm -f Makefile
	rm -f config.status config.cache config.log src/config.h
	rm -f *~ src/*~ tests/*~ include/*~

$(OBJS): %.c.o: $(srcdir)/%.c Makefile $(srcdir)/include/libresample.h \
	$(srcdir)/src/resample_defs.h $(srcdir)/src/filterkit.h $(srcdir)/src/config.h
	$(CC) -c $(CFLAGS) $< -o $@

install: $(TARGETS)
	$(MKDIR_P) $(DESTDIR)$(includedir)/libresample
	$(INSTALL_DATA) include/*.h $(DESTDIR)$(includedir)/libresample/
	$(MKDIR_P) $(DESTDIR)$(libdir)
	$(INSTALL_DATA) libresample.a $(DESTDIR)$(libdir)/
