#
# Makefile for Tcl threads
#

prefix =	$(INSTALL_TOP)
exec_prefix =	$(INSTALL_TOP)

# --- Should not need to modify anything below this line

SO_VERSION = 1

OBJS = tcl_thread.o synch.o proc.o
PIC_OBJS = tcl_thread.pic synch.pic proc.pic

TK_OBJS = $(OBJS) tk_thread.o
TK_PIC_OBJS = $(PIC_OBJS) tk_thread.pic

BIN_DIR = $(exec_prefix)/bin
LIB_DIR = $(exec_prefix)/lib
H_DIR = $(prefix)/include

CINCL = -I$(TCL_DIR) -I$(TK_DIR) -I$(X_DIR)/include
CDEBUGFLAGS = -g $(MT_FLAGS)
MT_FLAGS = -D_REENTRANT
MT_LIBS = -lthread
CFLAGS = $(MTFLAGS) $(CDEBUGFLAGS) $(CINCL)
CC_SWITCHES = $(CFLAGS)
SO_DEPEND_LIBS = -L$(TCL_DIR) -ltcl

LDFLAGS =

TCLSH_LIBS = -L$(TCL_BIN_DIR) $(B_STATIC) -ltcl $(B_DYNAMIC) -lm $(MT_LIBS)
WISH_LIBS = -L$(TCL_BIN_DIR) -L$(TK_BIN_DIR) -L$(X_DIR)/lib \
	-ltk $(B_STATIC) -ltcl $(B_DYNAMIC) -lX11 -lsocket -lnsl -lm $(MT_LIBS)

all: libtcl_thread.a libtcl_thread.so.$(SO_VERSION) mttclsh \
	libtk_thread.a libtk_thread.so.$(SO_VERSION) mtwish

recursive: all

libtcl_thread.a: $(OBJS)
	@rm -f $@
	$(AR) cq $@ $(OBJS)

libtcl_thread.so.$(SO_VERSION): Pic $(PIC_OBJS)
	$(CC) -G -o $@ -h $@ $(PIC_OBJS) $(SO_DEPEND_LIBS) $(TCL_RUNPATH)
	@rm -f libtcl_thread.so
	ln -s libtcl_thread.so.$(SO_VERSION) libtcl_thread.so

libtk_thread.a: $(TK_OBJS)
	@rm -f $@
	$(AR) cq $@ $(TK_OBJS)

libtk_thread.so.$(SO_VERSION): Pic $(TK_PIC_OBJS)
	$(CC) -G -o $@ -h $@ $(TK_PIC_OBJS) $(SO_DEPEND_LIBS) $(TCL_RUNPATH) $(TK_RUNPATH)
	@rm -f libtk_thread.so
	ln -s libtk_thread.so.$(SO_VERSION) libtk_thread.so

mttclsh: mttclsh.o $(OBJS)
	$(CC) $(LDFLAGS) mttclsh.o $(OBJS) -o mttclsh $(TCLSH_LIBS) $(TCL_RUNPATH)

mtwish: mtwish.o $(TK_OBJS)
	$(CC) $(LDFLAGS) mtwish.o $(TK_OBJS) -o mtwish $(WISH_LIBS) $(TCL_RUNPATH) $(TK_RUNPATH)
 
clean:
	rm -f libt*.s* *.a mttclsh mtwish *.o core *.pic
	rm -rf Pic

install: all
	@for i in $(LIB_DIR) $(BIN_DIR) $(H_DIR) ; \
	    do \
	    if [ ! -d $$i ] ; then \
		echo "Making directory $$i"; \
		mkdir $$i; \
		chmod 755 $$i; \
		else true; \
		fi; \
	    done;
	@rm -f $(H_DIR)/tcl_thread.h
	cp tcl_thread.h $(H_DIR)
	@chmod 444 tcl_thread.h
	@rm -f $(BIN_DIR)/mttclsh $(BIN_DIR)/mtwish
	cp mttclsh $(BIN_DIR)
	@rm -f $(LIB_DIR)/libtcl_thread.a
	cp libtcl_thread.a $(LIB_DIR)
	@rm -f $(LIB_DIR)/libtcl_thread.so.$(SO_VERSION)
	cp libtcl_thread.so.$(SO_VERSION) $(LIB_DIR)
	@cd $(LIB_DIR) ; \
	rm -f libtcl_thread.so ; \
	ln -s libtcl_thread.so.$(SO_VERSION) libtcl_thread.so
	cp mtwish $(BIN_DIR)
	@rm -f $(LIB_DIR)/libtk_thread.a
	cp libtk_thread.a $(LIB_DIR)
	@rm -f $(LIB_DIR)/libtk_thread.so.$(SO_VERSION)
	cp libtk_thread.so.$(SO_VERSION) $(LIB_DIR)
	@cd $(LIB_DIR) ; \
	rm -f libtk_thread.so ; \
	ln -s libtk_thread.so.$(SO_VERSION) libtk_thread.so

.SUFFIXES: .pic $(SUFFIXES)
.c.pic:
	$(CC) -c $(CC_SWITCHES) -Kpic -o Pic/$*.o $<
	@echo ln -s Pic/$*.o $@ ; rm -f $@ ; ln -s Pic/$*.o $@
 
Pic:
	@mkdir -p Pic

#
# MTtcl external release rules
#

release: release_dir release_copy
 
release_dir:
	@mkdir -p $(RELEASE_DIR)/tcl_thread
 
release_copy:
	@for f in `cat release.files` ; do \
	    echo tcl_thread/$$f ; \
	    rm -f $(RELEASE_DIR)/tcl_thread/$$f ; \
	    cp -p $$f $(RELEASE_DIR)/tcl_thread ; \
	done;
	(cd $(RELEASE_DIR)/tcl_thread ; chmod 444 `cat $(MTTCL_WS)/mttcl/tcl_thread/release.files` ; chmod u+w Makefile)

.KEEP_STATE:
