# Tools
CC = gcc
CROSS ?= 
RANLIB ?= $(CROSS)ranlib
AR ?= $(CROSS)ar

# Configuration

jim_libtype := static
SH_CFLAGS ?= -fPIC
SH_LDFLAGS ?= -shared
SHOBJ_CFLAGS ?= -fPIC
SHOBJ_LDFLAGS ?= -shared -nostartfiles
CFLAGS = -I/usr/local/include -L/usr/local/lib
LDFLAGS = 
LDLIBS += 
exec_prefix ?= ${prefix}
prefix ?= /mnt/stuff/tmp/swd/target
DESTDIR ?= $(prefix)

# Set an initial, default library and auto_path
CPPFLAGS += -DTCL_LIBRARY=\"${exec_prefix}/lib/jim\"

CPPFLAGS += -DTCL_PLATFORM_OS=\"FreeBSD\" -DTCL_PLATFORM_PLATFORM=\"unix\"
CPPFLAGS += -DJIM_REFERENCES -D_GNU_SOURCE

CPPFLAGS += -Wall $(OPTIM) -I.././jimtcl -I.  -Djim_ext_load -Djim_ext_package -Djim_ext_readdir -Djim_ext_array -Djim_ext_clock -Djim_ext_exec -Djim_ext_file -Djim_ext_posix -Djim_ext_regexp -Djim_ext_signal -Djim_ext_aio -Djim_ext_eventloop -Djim_ext_syslog -Djim_ext_nvp -Djim_ext_stdlib -Djim_ext_glob -Djim_ext_tclcompat
VPATH := .././jimtcl

ifeq ($(jim_libtype),static)
	LIBJIM := libjim.a
else
	LIBJIM := libjim.so
	SH_LIBJIM := $(LIBJIM)
	CPPFLAGS += $(SH_CFLAGS)
endif

.EXPORT_ALL_VARIABLES:

OBJS := jim-subcmd.o jim-interactive.o jim-format.o jim.o utf8.o jimregexp.o 

JIMSH := jimsh

EXTENSION_OBJS := $(patsubst %,jim-%.o, load package readdir array clock exec file posix regexp signal aio eventloop syslog nvp stdlib glob tclcompat)
EXTENSION_MODS := $(patsubst %,%.so,)
EXTENSION_TCL := $(patsubst %,%.tcl,)

.PRECIOUS: jim-%.c

# Create C extensions from pure Tcl extensions
jim-%.c: %.tcl
	echo $@ >>.clean
	sh .././jimtcl/make-c-ext.sh $< >$@

OBJS += jim-load-static-exts.o

all: $(JIMSH) $(EXTENSION_MODS)

docs: Tcl.html

$(JIMSH): $(LIBJIM) jimsh.o
	$(CC) $(CFLAGS) -rdynamic $(LDFLAGS) -o $@ jimsh.o $(LIBJIM) $(LDLIBS) -lm

install: all docs $(EXTENSION_TCL)
	install -d $(DESTDIR)/bin
	install $(JIMSH) $(DESTDIR)/bin
	install -d $(DESTDIR)/lib/jim
	install $(LIBJIM) $(DESTDIR)/lib
	install .././jimtcl/README.extensions $(EXTENSION_MODS) $(EXTENSION_TCL) $(DESTDIR)/lib/jim
	install -d $(DESTDIR)/include
	install .././jimtcl/jim.h .././jimtcl/jim-eventloop.h .././jimtcl/jim-nvp.h .././jimtcl/jim-signal.h \
		.././jimtcl/jim-subcmd.h .././jimtcl/jim-win32compat.h $(DESTDIR)/include
	install jim-config.h $(DESTDIR)/include
	install -d $(DESTDIR)/doc/jim
	install Tcl.html $(DESTDIR)/doc/jim

test:
	$(MAKE) jimsh=$(shell pwd)/jimsh -C tests

$(OBJS) $(EXTENSION_OBJS): Makefile

# Generate the unicode case mapping
utf8.o: unicode_mapping.c

unicode_mapping.c: .././jimtcl/UnicodeData.txt .././jimtcl/parse-unidata.tcl
	tclsh .././jimtcl/parse-unidata.tcl .././jimtcl/UnicodeData.txt >$@

ifeq ($(jim_libtype),static)
$(LIBJIM): $(OBJS) $(EXTENSION_OBJS)
	$(AR) cr $@ $^
	$(RANLIB) $@
else
$(LIBJIM): $(OBJS) $(EXTENSION_OBJS)
	$(CC) $(CFLAGS) $(LDFLAGS) $(SH_LDFLAGS) -o $@ $^ $(LDLIBS)
endif

%.so: jim-%.c
	$(CC) $(CFLAGS) $(CPPFLAGS) $(SHOBJ_CFLAGS) -c -o $*.o $^
	$(CC) $(CFLAGS) $(LDFLAGS) $(SHOBJ_LDFLAGS) -o $@ $*.o $(SH_LIBJIM) $(LDLIBS)

Tcl.html: jim_tcl.txt
	tclsh .././jimtcl/make-index $^ | asciidoc -o $@ -d manpage - || cp .././jimtcl/Tcl_shipped.html Tcl.html

clean:
	rm -f *.o *.so lib*.a $(JIMSH) Tcl.html unicode_mapping.c
	if [ -f .clean ]; then rm -f `cat .clean` .clean; fi

distclean: clean
	rm -f jimautoconf.h jim-config.h Makefile config.status config.log
	rm -rf autom4te.cache

ship: Tcl.html
	cp Tcl.html Tcl_shipped.html
	autoconf && autoheader

# automake compatibility. do nothing for all these targets
EMPTY_AUTOMAKE_TARGETS := dvi pdf ps info html tags ctags mostlyclean maintainer-clean check installcheck installdirs \
 install-pdf install-ps install-info install-html -install-dvi uninstall install-exec install-data distdir
.PHONY: $(EMPTY_AUTOMAKE_TARGETS)
$(EMPTY_AUTOMAKE_TARGETS):

