
# ------------------------------------------------------------------------
# 	Makefile for BLT library using VC++.
# ------------------------------------------------------------------------

include	      d:/src/blt/win/makedefs

TOOLS32       =	c:/Program\ Files/Microsoft\ Visual\ Studio/Vc98
AR            =	lib.exe
LD            =	link.exe
CC            =	cl.exe
rc32          =	rc.exe

ifeq ($(WITH_JPEG),0)
EXTRA_DEFINES =
endif
ifeq ($(WITH_JPEG),1)
EXTRA_DEFINES = -DHAVE_JPEGLIB_H=1
JPEGDIR       =	$(srcdir)/../../jpeg-6b
JPEGLIB =	$(JPEGDIR)/libjpeg.lib
JPEGINC	      = $(JPEGDIR)
endif
ifeq ($(WITH_JPEG),2)
EXTRA_DEFINES = -DHAVE_IJL_H=1 
JPEGDIR       =	c:/Program\ Files/Intel/IJL
JPEGLIB	      =	$(JPEGDIR)/lib/ijl15l.lib
JPEGINC	      = $(JPEGDIR)/Include
endif

# ------------------------------------------------------------------------
# 	C Compiler options 
# ------------------------------------------------------------------------

DEFINES       =	-D_X86_=1 -D__STDC__ -DWIN32 -DCONSOLE -D_MT \
		$(DEBUG_DEFINES) $(SHLIB_DEFINES) $(EXTRA_DEFINES) 

ifeq ($(SHARED),1)
SHLIB_DEFINES =	
SHLIB_TARGET  =	build-dll
LIBS          =	$(COMMON_LIBS) 
else
SHLIB_DEFINES =	-D_CTYPE_DISABLE_MACROS
LIBS          =	$(COMMON_LIBS) $(EXTRA_LIBS)
endif

ifeq ($(DEBUG),1)
CFLAGS        =	-MT -ZI -Od -wd4996
DEBUG_LDFLAGS = /debug
DEBUG_DEFINES = -DUSE_TCLALLOC=0
TK_LIB        =	$(TKDIR)/win/Debug_$(VCVER)/tk$(v2)tg.lib  
TCL_LIB       =	$(TCLDIR)/win/Debug_$(VCVER)/tcl$(v2)tg.lib 
else
CFLAGS        =	-MT -Ox -wd4996 -DNDEBUG
DEBUG_LDFLAGS = 
TK_LIB        =	$(TKDIR)/win/Release_$(VCVER)/tk$(v2)t.lib  
TCL_LIB       =	$(TCLDIR)/win/Release_$(VCVER)/tcl$(v2)t.lib 
endif

EXTRA_CFLAGS  =	-nologo -W3 

# ------------------------------------------------------------------------
# 	Linker flags and options 
# ------------------------------------------------------------------------

COMMON_LDFLAGS = -release -nologo $(DEBUG_LDFLAGS)

DLLENTRY      =	@12
SHLIB_LDFLAGS = $(COMMON_LDFLAGS) \
		-subsystem:console -entry:mainCRTStartup \
		-subsystem:windows -entry:WinMainCRTStartup \
		-entry:_DllMainCRTStartup$(DLLENTRY) -dll  

LDFLAGS       =	$(COMMON_LDFLAGS) \
		-fixed:NO -stack:2300000 

COMMON_LIBS   =	$(TK_LIB) $(TCL_LIB) \
		kernel32.lib user32.lib 

EXTRA_LIBS    =	$(OLELIB) \
		$(JPEGLIB) \
		gdi32.lib \
		oldnames.lib \
		advapi32.lib \
		winspool.lib \
		comdlg32.lib

TCL_ONLY_LIBS = $(TCL_LIB) kernel32.lib user32.lib advapi32.lib 


# ------------------------------------------------------------------------
# 	Source and target installation directories 
# ------------------------------------------------------------------------

srcdir        =	.
instdirs      =	$(prefix) $(exec_prefix) $(bindir) $(libdir) \
			$(includedir)
instdirs      =	$(exec_prefix) $(prefix) $(libdir)

# ------------------------------------------------------------------------
# 	Directories containing Tcl and Tk include files and libraries
# ------------------------------------------------------------------------

TCLDIR        =	$(srcdir)/../../tcl$(v3)
TKDIR         =	$(srcdir)/../../tk$(v3)
INCLUDES      =	-I. -I$(srcdir) \
		-I$(TOOLS32)/include \
		-I$(JPEGINC) \
		-I$(TCLDIR)/win -I$(TCLDIR)/generic \
		-I$(TKDIR)/win -I$(TKDIR)/generic -I$(TKDIR)/xlib \

#-I$(TCLROOT)/include

SHLIB_LD_LIBS =	$(COMMON_LIBS) $(EXTRA_LIBS)

# ------------------------------------------------------------------------
# 	You don't need to edit anything beyond this point
# ------------------------------------------------------------------------

N_OBJS       =	bltTed.o
V3_OBJS       =	bltTri.o bltGrMt.o 

TK_OBJS       =	tkButton.o tkFrame.o tkScrollbar.o 

GRAPH_OBJS =	bltGrAxis.o \
		bltGrBar.o \
		bltGrElem.o \
		bltGrGrid.o \
		bltGrHairs.o \
		bltGrLegd.o \
		bltGrLine.o \
		bltGrMarker.o \
		bltGrMisc.o \
		bltGrPen.o \
		bltGrPs.o \
		bltGraph.o 

TCL_ONLY_OBJS =	bltAlloc.o \
		bltArrayObj.o \
		bltBgexec.o \
		bltChain.o \
		bltDebug.o \
		bltHash.o \
		bltList.o \
		bltNsUtil.o \
		bltParse.o \
		bltPool.o \
		bltSpline.o \
		bltSwitch.o \
		bltTree.o \
		bltTreeCmd.o \
		bltUtil.o \
		bltVecCmd.o \
		bltVecMath.o \
		bltVecObjCmd.o \
		bltVector.o \
		bltWatch.o  \
		bltWinPipe.o \
		bltWinUtil.o \
		bltWinDde.o \
		pure_api.o

DEMO_OBJS     =	tkConsole.o bltWinMain.o

OBJS =		$(GRAPH_OBJS) \
		$(TCL_ONLY_OBJS) \
		bltBeep.o \
		bltBind.o \
		bltBitmap.o \
		bltBusy.o \
		bltCanvEps.o \
		bltConfig.o \
		bltContainer.o \
		bltDragdrop.o \
		bltHierbox.o \
		bltHtext.o \
		bltImage.o \
		bltWinImage.o \
		bltPs.o \
		bltTable.o \
		bltTabnotebook.o \
		bltTabset.o \
		bltText.o \
		bltTile.o \
		bltTreeView.o \
		bltTreeViewCmd.o \
		bltTreeViewEdit.o \
		bltTreeViewColumn.o \
		bltTreeViewStyle.o \
		bltWinDraw.o \
		bltWinPrnt.o \
		bltWindow.o \
		bltObjConfig.o \
		bltWinop.o \
		$(TK_OBJS) $(N_OBJS) 

NOT_YET       =	bltContainer.o bltCutBuffer.o bltColor.o

HEADERS       =	blt.h bltChain.h bltVector.h bltTree.h bltPool.h bltHash.h

# GNU Make-specific macro
SRCS          =	$(patsubst %.o,$(srcdir)/%.c,$(OBJS)) 

shell_name    = bltwish
version       =	$(BLT_MAJOR_VERSION)$(BLT_MINOR_VERSION)
bltwish =	bltwish.exe
bltsh =		bltsh.exe
bltwish2 =	bltwish$(version).exe
bltsh2 =	bltsh$(version).exe

lib_name =	BLT$(version)
lib_a =		BLT$(version).lib
lib_so =	BLT$(version).dll		
tcl_only_lib_a = BLTlite$(version).lib
tcl_only_lib_so = BLTlite$(version).dll		

CC_SWITCHES   =	$(CFLAGS) $(EXTRA_CFLAGS) $(DEFINES) $(INCLUDES)
VPATH         =	$(srcdir)

all: build-library $(SHLIB_TARGET) build-demos

install: all install-dirs install-headers install-binaries install-demos

build-demos: $(SHLIB_TARGET) $(bltwish) $(bltsh)

build-library: $(lib_a) $(tcl_only_lib_a)

build-dll: build-library $(lib_so) $(tcl_only_lib_so)

$(bltwish): $(lib_a) tkConsole.o  bltWinMain.c
	$(RM) $(bltwish) 
	$(CC) -c $(CC_SWITCHES) -DTCLLIBPATH=\"$(TCLLIBPATH)\" \
		-FobltWinMain.o $(srcdir)/bltWinMain.c
	$(LD) $(LDFLAGS) tkConsole.o bltWinMain.o -out:$(bltwish) \
		$(lib_a) $(LIBS) 

$(bltsh): $(tcl_only_lib_a) bltWinMain.c
	$(RM) $(bltsh) 
	$(CC) -c $(CC_SWITCHES) -DTCL_ONLY \
		-DTCLLIBPATH=\"$(TCLLIBPATH)\" \
		-FobltWinMain.o $(srcdir)/bltWinMain.c
	$(LD) $(LDFLAGS) bltWinMain.o -out:$(bltsh) \
		$(tcl_only_lib_a) $(TCL_ONLY_LIBS) 

$(lib_a):  bltHash.h $(OBJS) bltInit.c
	$(RM) bltInit.o
	$(CC) -c $(CC_SWITCHES)  -DBLT_LIBRARY=\"$(BLT_LIBRARY)\" \
		-FobltInit.o $(srcdir)/bltInit.c
	$(RM) $@
	$(AR) -out:$@ bltInit.o $(OBJS)

$(lib_so): $(lib_a) $(OBJS) bltInit.c
	$(RM) bltInit.o
	$(CC) -c $(CC_SWITCHES) -DBLT_LIBRARY=\"$(BLT_LIBRARY)\" \
		-FobltInit.o $(srcdir)/bltInit.c
	$(RM) $@
	$(LD) $(SHLIB_LDFLAGS) -out:$@ bltInit.o $(OBJS) $(SHLIB_LD_LIBS)

$(tcl_only_lib_a):  bltHash.h $(TCL_ONLY_OBJS) bltInit.c
	$(RM) bltInit.o
	$(CC) -c $(CC_SWITCHES) -DTCL_ONLY -DBLT_LIBRARY=\"$(BLT_LIBRARY)\" \
		-FobltInit.o $(srcdir)/bltInit.c
	$(RM) $@
	$(AR) -out:$@ bltInit.o $(TCL_ONLY_OBJS) 

$(tcl_only_lib_so): $(tcl_only_lib_a) $(TCL_ONLY_OBJS) bltInit.c
	$(RM) bltInit.o
	$(CC) -c $(CC_SWITCHES) -DTCL_ONLY -DBLT_LIBRARY=\"$(BLT_LIBRARY)\" \
		-FobltInit.o $(srcdir)/bltInit.c
	$(RM) $@
	$(LD) $(SHLIB_LDFLAGS) -out:$@ bltInit.o $(TCL_ONLY_OBJS) \
		$(TCL_ONLY_LIBS) 

bltHash.h: bltHash.h.in
	sed -e "s/@SIZEOF_VOID_P@/4/" \
	    -e "s/@SIZEOF_INT@/4/" \
	    -e "s/@SIZEOF_LONG@/4/" \
	    -e "s/@SIZEOF_LONG_LONG@/8/" \
	    -e "s/@HAVE_INTTYPES_H@/0/" \
	    bltHash.h.in > bltHash.h

install-dirs:
	@for i in $(instdirs) ; do \
	    if test ! -d "$$i" ; then \
		echo " mkdir $$i" ; \
		mkdir "$$i" ; \
	    fi ; \
        done

install-binaries: install-lib install-demos 

install-demos: build-demos
	$(INSTALL) $(bltwish) $(bindir)/$(bltwish)
	$(INSTALL) $(bltwish) $(bindir)/$(bltwish2)
	$(INSTALL) $(bltsh) $(bindir)/$(bltsh)
	$(INSTALL) $(bltsh) $(bindir)/$(bltsh2)

install-lib: $(lib_so) $(lib_a) 
	$(INSTALL_DATA) $(lib_so) $(bindir)
	$(INSTALL_DATA) $(lib_a) $(libdir)
	$(INSTALL_DATA) $(tcl_only_lib_so) $(bindir)
	$(INSTALL_DATA) $(tcl_only_lib_a) $(libdir)

install-headers:
	for i in $(HEADERS) ; do \
	    $(INSTALL_DATA) "$(srcdir)/$$i" $(includedir) ; \
	done

lint:
	$(LINT) $(LINTFLAGS) $(DEFINES) $(INCLUDES) $(SRCS)

clean:
	$(RM) *.o *.pdb *.exp \
		$(lib_a) $(lib_so) $(tcl_only_lib_a) $(tcl_only_lib_so) \
		$(bltwish) $(bltsh) $(bltwish2) $(bltsh2)
	$(RM) $(srcdir)/*.bak $(srcdir)/*\~ $(srcdir)/"#"*  

distclean: clean
	$(RM) Makefile

.c.o:
	$(CC) -c $(CC_SWITCHES) -Fo$*.o $<

