Support MSVC build system
authorPat Thoyts <patthoyts@users.sourceforge.net>
Fri, 11 May 2007 22:05:09 +0000 (22:05 +0000)
committerPat Thoyts <patthoyts@users.sourceforge.net>
Fri, 11 May 2007 22:05:09 +0000 (22:05 +0000)
git-svn-id: svn://svn.equi4.com/kitgen/trunk@1478 9e558909-932a-0410-a563-af77432da1eb

Makefile.vc [new file with mode: 0644]
setupvfs.tcl
tclkit.rc [new file with mode: 0644]

diff --git a/Makefile.vc b/Makefile.vc
new file mode 100644 (file)
index 0000000..396bfaa
--- /dev/null
@@ -0,0 +1,195 @@
+# -*- Makefile -*-\r
+#\r
+# This is an NMAKE file to be used to build tclkit using Microsoft Visual C++\r
+#\r
+# To make use of this build system create a build subdirectory \r
+# 8.4\kit-msvc or 8.5\kit-msvc and create a Makefile that contains only\r
+#  !include ..\..\Makefile.vc\r
+# Ensure that 8.4\tcl and 8.4\tk contain copies of the tcl and tk sources\r
+# (or 8.5\* if you are using this version)\r
+# Finally change to this build directory and build it all using \r
+#  nmake -f makefile.vc VERSION=84\r
+#\r
+# If you want to create a symbols/debug build then add SYMBOLS=1\r
+#\r
+#\r
+\r
+!ifndef VERSION\r
+!message *** You must specify the Tcl version. Set VERSION=84 or 85\r
+!message *** You may also specify SYMBOLS=0|1\r
+!error\r
+!else\r
+V=$(VERSION)\r
+!endif\r
+\r
+!ifndef SYMBOLS\r
+SYMBOLS=0\r
+!endif\r
+\r
+MAKE    = $(MAKE) -nologo\r
+CPY     = xcopy /i /y >NUL\r
+COPY    = copy /y >NUL\r
+RMDIR   = rmdir /s /q\r
+CC      = cl -nologo\r
+LINK    = link -nologo\r
+CFLAGS  = -W3 -D_WINDOWS -DWIN32 -DSTATIC_BUILD\r
+BUILD   = $(MAKEDIR)\build\r
+\r
+!if $V == 84\r
+PARTS   = vqtcl zlib vfs\r
+OPTS    = static,msvcrt\r
+X       = sx\r
+KITOPTS = \r
+LIBS    = user32.lib gdi32.lib comdlg32.lib comctl32.lib \\r
+         shell32.lib imm32.lib advapi32.lib\r
+!else\r
+PARTS   = vqtcl zlib vfs threaddyn\r
+OPTS    = static,msvcrt,threads\r
+X       = tsx\r
+KITOPTS = -t\r
+LIBS    = user32.lib gdi32.lib\r
+!endif\r
+\r
+!if $(SYMBOLS)\r
+X       = $(X:x=gx)\r
+OPTS    = $(OPTS),symbols\r
+CFLAGS  = -MDd -Od -Zi -D_DEBUG $(CFLAGS)\r
+LDFLAGS = -debug\r
+!else\r
+CFLAGS  = -MD -O2 -DNDEBUG $(CFLAGS)\r
+LDFLAGS = -release\r
+!endif\r
+\r
+CLIOBJS = $(BUILD)\pwb.obj $(BUILD)\rechan.obj \\r
+        $(BUILD)\zlib.obj $(BUILD)\tclAppInit.obj\r
+\r
+GUIOBJS = $(BUILD)\pwb.obj $(BUILD)\rechan.obj \\r
+        $(BUILD)\zlib.obj $(BUILD)\winMain.obj $(BUILD)\tclkit.res\r
+\r
+all: tclkit-cli tclkit-gui\r
+tclkit-cli: tclkit-cli.exe\r
+tclkit-gui: tclkit-gui.exe\r
+\r
+tclkit-cli.exe: kit-cli.exe tidy\r
+       @$(COPY) kit-cli.exe $@\r
+       -@upx -q9 $@ >NUL\r
+       kit-cli.exe -init- ../../setupvfs.tcl $(KITOPTS) $@ cli\r
+\r
+tclkit-gui.exe: kit-gui.exe tidy\r
+       @$(COPY) kit-gui.exe $@\r
+       -@upx -q9 $@ >NUL\r
+       kit-cli.exe -init- ../../setupvfs.tcl $(KITOPTS) $@ gui\r
+\r
+kit-cli.exe: setup tcl $(PARTS) files $(CLIOBJS)\r
+       @$(CC) $(CFLAGS) -I$(BUILD)/include -DKIT_LITE -DSTATIC_BUILD \\r
+         -c ../../kitInit.c -Fo$(BUILD)/kitInit.obj\r
+       @$(LINK) $(LDFLAGS) -subsystem:console -out:$@ $(CLIOBJS) \\r
+         $(BUILD)\kitInit.obj $(BUILD)\vfs.obj \\r
+         $(BUILD)\lib\vqtcl4.1\vqtcl4*.lib \\r
+         $(BUILD)\lib\zlib.lib \\r
+         $(BUILD)\lib\tcl$V*.lib \\r
+         $(BUILD)\lib\tcldde1*.lib \\r
+         $(BUILD)\lib\tclreg1*.lib $(LIBS)\r
+\r
+kit-gui.exe: setup tcl tk $(PARTS) files $(GUIOBJS)\r
+       @$(CC) $(CFLAGS) -I$(BUILD)/include -DKIT_LITE -DKIT_INCLUDES_TK \\r
+         -c ../../kitInit.c -Fo$(BUILD)/kitInit.obj\r
+       @$(LINK) $(LDFLAGS) -subsystem:windows -out:$@ $(GUIOBJS) \\r
+         $(BUILD)\kitInit.obj $(BUILD)\vfs.obj \\r
+         $(BUILD)\lib\vqtcl4.1\vqtcl4*.lib \\r
+         $(BUILD)\lib\zlib.lib \\r
+         $(BUILD)\lib\tcl$V*.lib \\r
+         $(BUILD)\lib\tk$V*.lib \\r
+         $(BUILD)\lib\tcldde1*.lib \\r
+         $(BUILD)\lib\tclreg1*.lib $(LIBS)\r
+\r
+tcl: $(BUILD)\lib\tcl$V$X.lib\r
+$(BUILD)\lib\tcl$V$X.lib:\r
+       pushd ..\tcl\win & $(MAKE) -f Makefile.vc INSTALLDIR=$(BUILD) \\r
+         OPTS=$(OPTS) TMP_DIR=$(BUILD)\tcl \\r
+         OUT_DIR=$(BUILD)\tcl release & \\r
+         $(MAKE) -f Makefile.vc INSTALLDIR=$(BUILD) \\r
+         OPTS=$(OPTS) TMP_DIR=$(BUILD)\tcl \\r
+         OUT_DIR=$(BUILD)\tcl install\r
+\r
+tk: $(BUILD)\lib\tk$V$X.lib\r
+$(BUILD)\lib\tk$V$X.lib:\r
+       pushd ..\tk\win & $(MAKE) -f Makefile.vc INSTALLDIR=$(BUILD) \\r
+         TCLDIR=$(BUILD)\..\..\tcl OPTS=$(OPTS) \\r
+         TMP_DIR=$(BUILD)\tk OUT_DIR=$(BUILD)\tk \\r
+         core $(BUILD)\tk\wish.res install-libraries\r
+       $(COPY) $(BUILD)\tk\tk$V$X.lib $(BUILD)\lib\r
+\r
+vqtcl: $(BUILD)\lib\vqtcl4.1\vqtcl41$X.lib\r
+$(BUILD)\lib\vqtcl4.1\vqtcl41$X.lib:\r
+       pushd ..\..\8.x\vqtcl\win & $(MAKE) -f Makefile.vc \\r
+         INSTALLDIR=$(BUILD) OPTS=$(OPTS) TMP_DIR=$(BUILD)\vqtcl \\r
+         OUT_DIR=$(BUILD)\vqtcl all install\r
+\r
+threaddyn: $(BUILD)\lib\threaddyn\thread26.dll\r
+$(BUILD)\lib\threaddyn\thread26.dll:\r
+       pushd ..\..\8.x\thread\win\vc & $(MAKE) -f Makefile.vc \\r
+         INSTALLDIR=$(BUILD) OPTS=none TMP_DIR=$(BUILD)\threaddyn \\r
+         OUT_DIR=$(BUILD)\threaddyn all install\r
+\r
+thread: $(BUILD)\lib\thread\thread26$(X:t=).lib\r
+$(BUILD)\lib\thread\thread26$(X:t=).lib:\r
+       pushd ..\..\8.x\thread\win\vc & $(MAKE) -f Makefile.vc \\r
+         INSTALLDIR=$(BUILD) OPTS=$(OPTS) TMP_DIR=$(BUILD)\thread \\r
+         OUT_DIR=$(BUILD)\thread all install\r
+\r
+vfs: $(BUILD)\vfs.obj\r
+$(BUILD)\vfs.obj:\r
+       $(CC) $(CFLAGS) -DSTATIC_BUILD -I..\tcl\generic -I..\tcl\win \\r
+         -I..\..\8.x\tclvfs\generic -c ..\..\8.x\tclvfs\generic\vfs.c \\r
+         -Fo$(BUILD)\vfs.obj\r
+       $(CPY) ..\..\8.x\tclvfs\library $(BUILD)\lib\vfs1.3^\\r
+\r
+zlib: $(BUILD)\lib\zlib.lib\r
+$(BUILD)\lib\zlib.lib:\r
+       pushd ..\..\8.x\zlib & $(MAKE) -f win32/makefile.msc zlib.lib \\r
+         & $(COPY) zlib.lib $(BUILD)\lib\zlib.lib\r
+\r
+$(BUILD)\pwb.obj: ..\..\pwb.c\r
+       $(CC) $(CFLAGS) -I$(BUILD)\include -Fo$@ -c $**\r
+\r
+$(BUILD)\rechan.obj: ..\..\rechan.c\r
+       $(CC) $(CFLAGS) -I$(BUILD)\include -Fo$@ -c $**\r
+\r
+$(BUILD)\zlib.obj: ..\..\zlib.c\r
+       $(CC) $(CFLAGS) -I$(BUILD)\include -I..\..\8.x\zlib -Fo$@ -c $**\r
+\r
+$(BUILD)\tclAppInit.obj: ..\tcl\win\tclAppInit.c\r
+       $(CC) $(CFLAGS) -I$(BUILD)\include \\r
+         -DTCL_LOCAL_APPINIT=TclKit_AppInit -Fo$@ -c $**\r
+\r
+$(BUILD)\winMain.obj: ..\tk\win\winMain.c\r
+       $(CC) $(CFLAGS) -I$(BUILD)\include -I..\tk\generic -I..\tk\win \\r
+         -DTK_LOCAL_APPINIT=TclKit_AppInit -Fo$@ -c $**\r
+\r
+$(BUILD)\tclkit.res: ..\..\tclkit.rc\r
+       $(COPY) $** $(BUILD)\tk\tclkit.rc\r
+       $(RC) -fo $@ -r -d STATIC_BUILD=1 -i $(BUILD)\include \\r
+         -i $(BUILD)\tk -i $(BUILD)\files -i ..\tk\win\rc \\r
+         $(BUILD)\tk\tclkit.rc\r
+\r
+.PHONY: setup files tidy clean\r
+\r
+files:\r
+       @$(CPY) ..\..\files $(BUILD)\files^\\r
+\r
+setup:\r
+       @if not exist $(BUILD) mkdir $(BUILD)\r
+\r
+tidy:\r
+       @if exist kit-cli.exp del kit-cli.exp\r
+       @if exist kit-cli.lib del kit-cli.lib\r
+       @if exist kit-gui.exp del kit-gui.exp\r
+       @if exist kit-gui.lib del kit-gui.lib\r
+\r
+clean: tidy\r
+       @if exist build\nul $(RMDIR) build\r
+       @if exist kit-cli.exe del kit-cli.exe\r
+       @if exist kit-gui.exe del kit-gui.exe\r
+\r
+#EOF\r
index 4c3113bcc94022a5eac3ad34f7018d7a7d539488..72dcb374ff87d673d062b3e39018b9e28bbd6ce2 100644 (file)
@@ -259,6 +259,19 @@ switch [info sharedlibext] {
   }
 }
 
+# Create package index files for the static extensions.
+# verq registry dde and vfs are handled above or using files/*
+set exts {zlib rechan}
+if {[package vcompare [package provide Tcl] 8.4] == 0} { lappend exts pwb }
+foreach ext $exts {
+    load {} $ext
+    set extdir [file join $vfs lib $ext]
+    file mkdir $extdir
+    set f [open $extdir/pkgIndex.tcl w]
+    puts $f "package ifneeded $ext [package provide $ext] {load {} $ext}"
+    close $f
+}
+
 switch [lindex $argv 1] {
   cli {
     vfscopy $clifiles
diff --git a/tclkit.rc b/tclkit.rc
new file mode 100644 (file)
index 0000000..cf5f42b
--- /dev/null
+++ b/tclkit.rc
@@ -0,0 +1,81 @@
+// RCS: @(#) $Id: tclkit.rc,v 1.2 2006/01/12 09:00:23 jcw Exp $\r
+//\r
+// Version Resource Script\r
+//\r
+\r
+#include <windows.h>\r
+\r
+#define RESOURCE_INCLUDED\r
+#include <tk.h>\r
+\r
+#define STRINGIFY1(x)      #x\r
+#define STRINGIFY(x)       STRINGIFY1(x) \r
+\r
+\r
+//\r
+// build-up the name suffix that defines the type of build this is.\r
+//\r
+#ifdef TCL_THREADS\r
+#define SUFFIX_THREADS     "t"\r
+#else\r
+#define SUFFIX_THREADS     ""\r
+#endif\r
+\r
+#ifdef DEBUG\r
+#define SUFFIX_DEBUG       "d"\r
+#else\r
+#define SUFFIX_DEBUG       ""\r
+#endif\r
+\r
+#define SUFFIX             SUFFIX_THREADS SUFFIX_DEBUG\r
+\r
+\r
+VS_VERSION_INFO        VERSIONINFO\r
+ FILEVERSION   TK_MAJOR_VERSION,TK_MINOR_VERSION,TK_RELEASE_LEVEL,TK_RELEASE_SERIAL\r
+ PRODUCTVERSION        TK_MAJOR_VERSION,TK_MINOR_VERSION,TK_RELEASE_LEVEL,TK_RELEASE_SERIAL\r
+ FILEFLAGSMASK 0x3fL\r
+#ifdef DEBUG\r
+ FILEFLAGS     VS_FF_DEBUG\r
+#else\r
+ FILEFLAGS     0x0L\r
+#endif\r
+ FILEOS                VOS__WINDOWS32\r
+ FILETYPE      VFT_DLL\r
+ FILESUBTYPE   0x0L\r
+BEGIN\r
+    BLOCK "StringFileInfo"\r
+    BEGIN\r
+        BLOCK "040904b0"\r
+        BEGIN\r
+            VALUE "FileDescription", "Tclkit, a standalone runtime for Tcl/Tk\0"\r
+            VALUE "OriginalFilename", "tclkit.exe\0"\r
+            VALUE "CompanyName", "Equi4 Software\0"\r
+            VALUE "FileVersion", TK_PATCH_LEVEL\r
+            VALUE "LegalCopyright", "Copyright \251 1989-2003 by J.Ousterhout et al.\0"\r
+            VALUE "ProductName", "Tclkit " TK_VERSION " for Windows\0"\r
+            VALUE "ProductVersion", TK_PATCH_LEVEL\r
+        END\r
+    END\r
+    BLOCK "VarFileInfo"\r
+    BEGIN\r
+        VALUE "Translation", 0x409, 1200\r
+    END\r
+END\r
+\r
+//\r
+//  Include the base resources.\r
+//\r
+\r
+#include "tk_base.rc"\r
+\r
+//\r
+// This enables themed scrollbars in XP by trying to use comctl32 v6.\r
+//\r
+\r
+#ifndef RT_MANIFEST\r
+#define RT_MANIFEST     24\r
+#endif\r
+#ifndef CREATEPROCESS_MANIFEST_RESOURCE_ID\r
+#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1\r
+#endif\r
+CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "wish.exe.manifest"\r