CC = gcc 

INSTALL = install
LN_SF = /bin/ln -sf
MKDIR = mkdir -p

DESTDIR=
PREFIX=/usr
LIBDIR=$(PREFIX)/lib
INCDIR=$(PREFIX)/include/nmea

BIN = lib/libnmea.a 
MODULES = generate generator parse parser tok context time info gmath sentence  
SAMPLES = generate generator parse parse_file math
 
OBJ = $(MODULES:%=build/nmea_gcc/%.o) 
LINKOBJ = $(OBJ) $(RES)

SMPLS = $(SAMPLES:%=samples_%)
SMPLOBJ = $(SAMPLES:%=samples/%/main.o)

CFLAGS=-O2 -pipe -fPIC -ggdb
SONAME_OPT=-Wl,-soname,
LIB_NAME = libnmea.so
LIB_VERSION = 0
RELEASE = 0.0
LIBTAG = $(LIB_VERSION).$(RELEASE)

INCS = -I include 
LIBS = -lm -Llib -lnmea

.PHONY: all all-before all-after clean clean-custom doc
 
all: all-before $(BIN) samples all-after shared-lib

shared-lib: $(LIB_NAME) $(LIB_NAME).$(LIBTAG)

all-before:
	mkdir -p build/nmea_gcc

clean: clean-custom 
	rm -f $(LINKOBJ) $(BIN) $(SMPLOBJ) $(SMPLS) $(LIB_NAME) $(LIB_NAME).$(LIBTAG)
	rm -rf build/nmea_gcc

doc:
	$(MAKE) -C doc

$(LIB_NAME): $(BIN) $(LINKOBJ)
	$(CC) $(LDFLAGS) -shared $(SONAME_OPT)$(LIB_NAME).$(LIB_VERSION) -o $@ $(LINKOBJ) -lm

$(LIB_NAME).$(LIBTAG): $(LIB_NAME)
	cp $(LIB_NAME) $(LIB_NAME).$(LIBTAG)

install: all
	$(INSTALL) -d -m 755 $(DESTDIR)$(PREFIX)
	$(INSTALL) -d -m 755 $(DESTDIR)$(LIBDIR)
	$(INSTALL) -d -m 755 $(DESTDIR)$(INCDIR)

	$(INSTALL) include/nmea/*.h -m 644 $(DESTDIR)$(INCDIR)

	$(INSTALL) $(BIN) -m 644 $(DESTDIR)$(LIBDIR)
	$(INSTALL) -m 755 $(LIB_NAME).$(LIBTAG) $(DESTDIR)$(LIBDIR)

	$(LN_SF) $(LIB_NAME).$(LIBTAG) $(DESTDIR)$(LIBDIR)/$(LIB_NAME).$(LIB_VERSION)
	$(LN_SF) $(LIB_NAME).$(LIB_VERSION) $(DESTDIR)$(LIBDIR)/$(LIB_NAME)
	
remake: clean all

$(BIN): $(LINKOBJ)
	ar rsc $@ $^
	ranlib $@

build/nmea_gcc/%.o: src/%.c 
	$(CC) $(CFLAGS) $(INCS) -c $< -o $@

samples: $(SMPLS)

samples_%: samples/%/main.o
	$(CC) $< $(LIBS) -o build/$@

samples/%/main.o: samples/%/main.c
	$(CC) $(INCS) -c $< -o $@
