265 lines
7.3 KiB
Plaintext
265 lines
7.3 KiB
Plaintext
# 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
|