# --- begin Makefile ---
#
# Makefile to build and install shared library 
# and Maple archive for ListToolBox

pkg := ListToolBox
shared_lib := lib$(pkg).so
archive := $(pkg).mla

# Maple tty executable
maple := maple

MAPLE_ROOT := $(shell $(maple) -q -c 'printf("%A\n",kernelopts(mapledir))' -cdone)
MAPLE_BIN  := $(shell $(maple) -q -c 'printf("%A\n",kernelopts(bindir))' -cdone)

BIN_SYS := $(notdir $(MAPLE_BIN))

# Compile
CC        := gcc
CPPFLAGS  := -I . -I $(MAPLE_ROOT)/extern/include
CCOPT     := -O
CCDEBUG   := 
CCSHFLAGS := -fPIC
CFLAGS    := $(CPPFLAGS) $(CCDEBUG) $(CCOPT)

%.o: %.c
	$(CC) -c $(CCSHFLAGS) $(CFLAGS) $+ -lmaplec -L$(MAPLE_BIN)

# Link
LD        := ld
LDSHFLAGS := -shared
LDFLAGS   :=
LDLIBS    := --library=maplec
OUTPUT    := -o
LIBS      := -L $(MAPLE_BIN)
DSO       := $(shared_lib)

lib%.so: %.o
	$(LD) $(LDSHFLAGS) $(LDFLAGS) $(OUTPUT) $(DSO) $+ $(LIBS) $(LDLIBS) 

default: $(archive) $(shared_lib)

install_dir := ${HOME}/maple/toolbox/$(pkg)

installed_so  := $(install_dir)/$(BIN_SYS)/$(shared_lib)
installed_mla := $(install_dir)/lib/$(archive)

install: $(installed_so) $(installed_mla)

$(installed_so): $(shared_lib)
	$(RM) $@
	install -d $(dir $@)
	install -t $(dir $@) $+

$(archive): $(pkg).mpl
	$(RM) $@
	$(maple) -q $+

$(installed_mla): $(archive)
	install -d $(dir $@)
	install -t $(dir $@) $+

# Clean up
clean:
	$(RM) $(pkg).o

cleanall: clean
	$(RM) $(shared_lib) $(archive) $(installed_so) $(installed_mla)

uninstall: cleanall
	 $(RM) -r $(install_dir)

.phony: clean cleanall check-syntax default install uninstall zip

check-syntax:
	$(CC) -o nul -S ${CHK_SOURCES}

zip:
	zip $(pkg).zip $(pkg).c $(pkg).mpl test.mpl Makefile

# --- end Makefile ---
