CC=gcc
LD=gcc
CFLAGS += -g -Wall
override CFLAGS+= -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64

ifeq ($(OSTYPE), darwin)
NEED_ICONV_LIB = 1
endif

ifeq ($(OSTYPE),FreeBSD)
override CFLAGS += -I/usr/local/include
LDFLAGS += -L/usr/local/lib
NEED_ICONV_LIB = 1
endif

ifdef NEED_ICONV_LIB
LDFLAGS += -s -liconv
else
LDFLAGS += -s
endif

SBINDIR=/usr/local/sbin

all: fatsort

fatsort: fatsort.o FAT_fs.o fileio.o endianness.o signal.o entrylist.o errors.o options.o clusterchain.o sort.o misc.o natstrcmp.o Makefile
	${LD} ${LDFLAGS} *.o -o fatsort

fatsort.o: fatsort.c endianness.h signal.h FAT_fs.h options.h errors.h sort.h misc.h Makefile
	$(CC) ${CFLAGS} -c $< -o $@

FAT_fs.o: FAT_fs.c FAT_fs.h fileio.h endianness.h errors.h Makefile
	$(CC) ${CFLAGS} -c $< -o $@

fileio.o: fileio.c fileio.h Makefile
	$(CC) ${CFLAGS} -c $< -o $@

endianness.o: endianness.c endianness.h Makefile
	$(CC) ${CFLAGS} -c $< -o $@

signal.o: signal.c signal.h Makefile
	$(CC) ${CFLAGS} -c $< -o $@

entrylist.o: entrylist.c entrylist.h options.h errors.h FAT_fs.h natstrcmp.h Makefile
	$(CC) ${CFLAGS} -c $< -o $@

errors.o: errors.c errors.h Makefile
	$(CC) ${CFLAGS} -c $< -o $@

options.o: options.c options.h errors.h FAT_fs.h Makefile
	$(CC) ${CFLAGS} -c $< -o $@

clusterchain.o: clusterchain.c clusterchain.h errors.h Makefile
	$(CC) ${CFLAGS} -c $< -o $@

sort.o: sort.c sort.h options.h FAT_fs.h fileio.h entrylist.h errors.h endianness.h clusterchain.h signal.h misc.h platform.h Makefile
	$(CC) ${CFLAGS} -c $< -o $@

misc.o: misc.c misc.h options.h Makefile
	$(CC) ${CFLAGS} -c $< -o $@

natstrcmp.o: natstrcmp.c natstrcmp.h Makefile
	$(CC) ${CFLAGS} -c $< -o $@

install:
	install -m 0755 -p -D fatsort $(DESTDIR)$(SBINDIR)/fatsort

clean:
	rm -f *.o fatsort

.PHONY: all clean
