summaryrefslogtreecommitdiffstats
path: root/win/makefile.vc
diff options
context:
space:
mode:
Diffstat (limited to 'win/makefile.vc')
-rw-r--r--win/makefile.vc264
1 files changed, 264 insertions, 0 deletions
diff --git a/win/makefile.vc b/win/makefile.vc
new file mode 100644
index 0000000..55f3244
--- /dev/null
+++ b/win/makefile.vc
@@ -0,0 +1,264 @@
+# Makefile.vc
+#
+# This makefile builds Tktable.dll, a table widget as a dynamically
+# loadable Tk extension. This makefile is suitable for use with VC++ 5+.
+#
+# TkTable assumes that Tcl/Tk has already been installed on Windows.
+#
+# This does not provide support for static builds on Windows
+#
+
+# Set this to the appropriate value of /MACHINE: for your platform
+# Choices: IX86, IA64
+MACHINE = IX86
+
+PROJECT = Tktable
+TBL_COMMAND = table
+TBL_RUNTIME = tkTable.tcl
+
+# Project directories -- these may need to be customized for your site
+#
+# ROOT -- location of the source files.
+# TMP_DIR -- location for .obj files.
+# TOOLS32 -- location of VC++ compiler installation.
+# DEST_DIR -- location of Tcl/Tk installation hierarchy
+# DEST_DIRU -- same as above with "/" as path separator
+#
+
+ROOT = ..
+TMP_DIR = .
+
+!if "$(MACHINE)" == "IA64"
+
+# This assumes "-64" suffixes your Win64 build
+v3 = 84-64
+
+# IA64 support is based on the standard setup with v2 of the
+# Microsoft SDK for XP, RC1
+
+TOOLS32 = C:/Progra~1/Microsoft SDK
+
+CC = "$(TOOLS32)/bin/Win64/cl.exe"
+LD = "$(TOOLS32)/bin/Win64/link.exe"
+libpath32 = /LIBPATH:"$(TOOLS32)/lib/IA64" \
+ /LIBPATH:"$(TOOLS32)/lib/Prerelease/IA64"
+include32 = -I"$(TOOLS32)/Include/prerelease" \
+ -I"$(TOOLS32)/Include/Win64/crt" \
+ -I"$(TOOLS32)/Include/Win64/crt/sys" \
+ -I"$(TOOLS32)/Include"
+
+!else
+
+# Visual Studio 5 default
+#TOOLS32 = C:/Progra~1/devstudio/vc
+
+# Visual Studio 6 default
+TOOLS32 = C:/Progra~1/Microsoft Visual Studio/VC98
+
+CC = "$(TOOLS32)/bin/cl.exe"
+LD = "$(TOOLS32)/bin/link.exe" -link50compat
+libpath32 = /LIBPATH:"$(TOOLS32)/lib"
+include32 = -I"$(TOOLS32)/include"
+
+!endif
+
+DEST_DIR = C:\Tcl
+DEST_DIRU = C:/Tcl
+
+WIN_DIR = $(ROOT)\win
+GENERIC_DIR = $(ROOT)\generic
+VPATH = $(GENERIC_DIR):$(WIN_DIR)
+
+#Get version info (this is in Makefile and C format)
+!include "$(GENERIC_DIR)\version.h"
+
+# Set your version of Tcl
+
+TCL_VERSION = 8.4
+TCL_VER = 84
+
+INST_RUNTIME = $(DEST_DIR)\lib\$(PROJECT)$(VERSION)
+INST_RUNTIMEU = $(DEST_DIRU)/lib/$(PROJECT)$(VERSION)
+
+# NO_EMBEDDED_RUNTIME means that the tkTable.tcl file will not be embedded
+# into the executable, thus the default tkTable.tcl library file will not
+# be available when the library is loaded.
+# If this is defined, the tkTable.tcl file must be available in a
+# predefined set of directories (see docs).
+#TBL_CFLAGS += -DNO_EMBEDDED_RUNTIME
+
+# change the following line to compile with symbols
+DEBUG = 0
+
+CP = copy
+RM = del
+
+######################################################################
+# Project specific targets
+######################################################################
+
+TBL_LIB_DIR = $(ROOT)\library
+# Assume that WISH is already INSTALLED
+TCLSH = $(DEST_DIR)\bin\tclsh$(TCL_VER)
+WISH = $(DEST_DIR)\bin\wish$(TCL_VER)
+WIN_LIBS = gdi32.lib user32.lib
+LIBS = $(DEST_DIR)\lib\tclstub$(TCL_VER).lib \
+ $(DEST_DIR)\lib\tkstub$(TCL_VER).lib $(WIN_LIBS)
+LIBS = C:\build\tcl84-64\tclstub$(TCL_VER).lib \
+ C:\build\tk84-64\tkstub$(TCL_VER).lib $(WIN_LIBS)
+INCLUDES = -I"$(DEST_DIR)\include" -I. $(include32)
+
+DEFINES = -DDLL_BUILD -DBUILD_Tktable $(TBL_CFLAGS) \
+ -DPACKAGE_VERSION=\"$(VERSION)\" \
+ -DTBL_COMMAND=\"$(TBL_COMMAND)\" \
+ -DTBL_RUNTIME="\"$(TBL_RUNTIME)\"" \
+ -DTBL_RUNTIME_DIR="\"$(INST_RUNTIMEU)\""
+
+## Define this if you want to use STUBS
+## This only works for the dynamic library
+##
+DEFINES = $(DEFINES) -DUSE_TCL_STUBS -DUSE_TK_STUBS
+
+CC_SWITCHES = $(CFLAGS) $(EXTRA_CFLAGS) $(DEFINES) $(INCLUDES)
+
+#---------------------------------------------------------------------
+# Compile flags
+#---------------------------------------------------------------------
+
+!if !$(DEBUG)
+# This cranks the optimization level to maximize speed
+cdebug = -O2 -Gs
+!else if "$(MACHINE)" == "IA64"
+cdebug = -Od -Zi
+!else
+cdebug = -Z7 -Od -WX
+DBGX = d
+!endif
+
+# declarations common to all compiler options
+cflags = -c -W3 -nologo -Fp$(TMP_DIR)\ -YX -MT$(DBGX)
+
+#---------------------------------------------------------------------
+# Link flags
+#---------------------------------------------------------------------
+
+!if $(DEBUG)
+ldebug = -debug:full -debugtype:cv
+!else
+ldebug = -release
+!endif
+
+# declarations common to all linker options
+lflags = -nologo -machine:$(MACHINE) -warn:3 $(libpath32)
+
+# declarations for use on Intel i386, i486, and Pentium systems
+!IF "$(MACHINE)" == "IX86"
+DLLENTRY = @12
+dlllflags = $(lflags) -entry:_DllMainCRTStartup$(DLLENTRY) -dll
+!ELSE IF "$(MACHINE)" == "IA64"
+dlllflags = $(lflags) -dll
+!ELSE
+dlllflags = $(lflags) -entry:_DllMainCRTStartup$(DLLENTRY) -dll
+!ENDIF
+
+conlflags = $(lflags) -subsystem:console -entry:mainCRTStartup
+guilflags = $(lflags) -subsystem:windows -entry:WinMainCRTStartup
+
+#
+# Global makefile settings
+#
+DLLOBJS = $(TMP_DIR)\tkTable.obj \
+ $(TMP_DIR)\tkTableWin.obj \
+ $(TMP_DIR)\tkTableTag.obj \
+ $(TMP_DIR)\tkTableEdit.obj \
+ $(TMP_DIR)\tkTableCell.obj \
+ $(TMP_DIR)\tkTableCellSort.obj \
+ $(TMP_DIR)\tkTableCmds.obj \
+ $(TMP_DIR)\tkTableUtil.obj
+# $(TMP_DIR)\tkTablePs.obj
+
+DLL=$(PROJECT).dll
+
+#
+# Targets
+#
+all: pkgIndex.tcl
+
+test: pkgIndex.tcl
+ @"$(WISH)" <<
+ lappend auto_path $(ROOT)
+ set code [catch {
+ package require $(PROJECT)
+ pack [$(TBL_COMMAND) .t]
+ } msg]
+ if {$$code != 0} {
+ tk_messageBox -type ok -message\
+ "$(PROJECT) failed to load and run: $$msg"
+ } else {
+ tk_messageBox -type ok -message\
+ "everything seems OK for 'package require $(PROJECT)'"
+ }
+ exit $$code
+<<
+
+pkgIndex.tcl: $(DLL)
+ "$(TCLSH)" << pkgIndex.tcl
+ set out [open [lindex $$argv 0] w]
+ puts $$out {if {[catch {package require Tcl 8.2}]} return}
+ puts -nonewline $$out {package ifneeded $(PROJECT) $(VERSION) }
+ puts -nonewline $$out {"package require Tk 8.2; }
+ puts $$out {[list load [file join $$dir $(DLL)] $(PROJECT)]"}
+ close $$out
+<<
+
+pkgIndex.tcl-NOSTUBS: $(DLL)
+ "$(TCLSH)" << pkgIndex.tcl
+ set out [open [lindex $$argv 0] w]
+ puts $$out {if {[catch {package require Tcl $(TCL_VERSION)}]} return}
+ puts -nonewline $$out {package ifneeded $(PROJECT) $(VERSION) }
+ puts -nonewline $$out {"package require Tk $(TCL_VERSION); }
+ puts $$out {[list load [file join $$dir $(DLL)] $(PROJECT)]"}
+ close $$out
+<<
+
+$(DLL): tkTable.tcl.h $(DLLOBJS)
+ $(LD) $(linkdebug) $(dlllflags) $(LIBS) \
+ $(guilibsdll) -out:$@ $(DLLOBJS)
+
+tkTable.tcl.h: $(TBL_LIB_DIR)\tkTable.tcl
+ "$(TCLSH)" << $(TBL_LIB_DIR)\tkTable.tcl >$(TMP_DIR)\tkTable.tcl.h
+ set in [open [lindex $$argv 0] r]
+ while {[gets $$in line] != -1} {
+ switch -regexp -- $$line "^$$" - {^#} continue
+ regsub -all {\\} $$line {\\\\} line
+ regsub -all {"} $$line {\"} line
+ puts "\"$$line\\n\""
+ }
+<<
+
+# Implicit Targets
+
+{$(WIN_DIR)}.c{$(TMP_DIR)}.obj:
+ $(CC) $(CC_SWITCHES) $(cdebug) $(cflags) $(cvarsdll) -Fo$(TMP_DIR)\ $<
+
+{$(GENERIC_DIR)}.c{$(TMP_DIR)}.obj:
+ $(CC) $(CC_SWITCHES) $(cdebug) $(cflags) $(cvarsdll) -Fo$(TMP_DIR)\ $<
+
+install: pkgIndex.tcl $(DLL)
+ if not exist "$(INST_RUNTIME)\" mkdir "$(INST_RUNTIME)"
+ copy "$(TBL_LIB_DIR)\tkTable.tcl" "$(INST_RUNTIME)"
+ copy "$(DLL)" "$(INST_RUNTIME)"
+ copy pkgIndex.tcl "$(INST_RUNTIME)"
+
+uninstall:
+ -$(RM) "$(INST_RUNTIME)\tkTable.tcl"
+ -$(RM) "$(INST_RUNTIME)\$(DLL)"
+ -$(RM) "$(INST_RUNTIME)\pkgIndex.tcl"
+
+clean:
+ -$(RM) $(TMP_DIR)\*.obj 2>nul
+ -$(RM) $(TMP_DIR)\$(DLL) 2>nul
+ -$(RM) $(TMP_DIR)\$(PROJECT).lib 2>nul
+ -$(RM) $(TMP_DIR)\$(PROJECT).exp 2>nul
+ -$(RM) $(TMP_DIR)\pkgIndex.tcl 2>nul
+ -$(RM) $(TMP_DIR)\tkTable.tcl.h 2>nul