| Ticket Hash: | 604bb68b5c25a5c670b2f89dba68b92f7c57cb62 | ||
| Title: | How to build Tcl tls on Windows 64 bit (VisualStudio 12) from scratch? | ||
| Status: | Closed | Type: | Build Problem |
| Severity: | Important | Priority: | Immediate |
| Subsystem: | Resolution: | Fixed | |
| Last Modified: |
2021-01-14 13:01:59 4.79 years ago |
Created: |
2019-05-22 08:17:11 6.44 years ago |
| Version Found In: | 1.7.16 | ||
| User Comments: | ||||
anonymous added on 2019-05-22 08:17:11:
no ./win folder with makefile.vc does exist. Any idea ? anonymous (claiming to be R. J. Mathar) added on 2019-09-26 14:36:00:
See also ticket 740a7ac60d of 2017-05-03. oehhar added on 2020-10-15 10:40:53:
I have build-up a fist sketch of an nmake build system. I have prepared a branch [bug-604bb68b5c-nmake] with commit [2babef91c5]. Unfortunately, user "oehhar" has no write access to the repository, so it did not commit. May I ask for commit rights for oehhar or do you prefer a patch ? Thank you, Harald oehhar added on 2020-10-20 16:11:58:
Here is the patch starting from checkin [9c32a526ed] for your convenience. Enjoy, Harald
Index: tls.c
==================================================================
--- tls.c
+++ tls.c
@@ -1774,11 +1774,11 @@
* create the ssl command, initialise ssl context
*
*-------------------------------------------------------------------
*/
-int Tls_Init(Tcl_Interp *interp) {
+DLLEXPORT int Tls_Init(Tcl_Interp *interp) {
const char tlsTclInitScript[] = {
#include "tls.tcl.h"
0x00
};
@@ -1834,11 +1834,11 @@
* A standard Tcl error code.
*
*------------------------------------------------------*
*/
-int Tls_SafeInit(Tcl_Interp *interp) {
+DLLEXPORT int Tls_SafeInit(Tcl_Interp *interp) {
dprintf("Called");
return(Tls_Init(interp));
}
/*
Index: tls.h
==================================================================
--- tls.h
+++ tls.h
@@ -21,9 +21,9 @@
#include <tcl.h>
/*
* Initialization routines -- our entire public C API.
*/
-int Tls_Init(Tcl_Interp *interp);
-int Tls_SafeInit(Tcl_Interp *interp);
+DLLEXPORT int Tls_Init(Tcl_Interp *interp);
+DLLEXPORT int Tls_SafeInit(Tcl_Interp *interp);
#endif /* _TLS_H */
ADDED win/README.txt
Index: win/README.txt
==================================================================
--- win/README.txt
+++ win/README.txt
@@ -0,0 +1,66 @@
+ Windows DLL Build instructions using nmake build system
+ 2020-10-15 Harald.Oehlmann@elmicron.de
+
+Properties:
+- 32 bit DLL
+- VisualStudio 2015
+Note: Vuisual C++ 6 does not build OpenSSL (long long syntax error)
+- Cygwin32 (temporary helper, please help to replace by tclsh)
+- OpenSSL statically linked to TCLTLS DLL.
+Note: Dynamic linking also works but results in a DLL dependeny on OPENSSL DLL's
+
+1) Build OpenSSL static libraries:
+
+OpenSSL source distribtution unpacked in:
+c:\test\tcltls\Openssl_1_1_1h
+
+- Install Perl from http://strawberryperl.com/download/5.32.0.1/strawberry-perl-5.32.0.1-32bit.msi
+ to C:\perl
+ (ActivePerl failed due to missing 32 bit console module)
+- Install NASM Assembler:
+
+https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/win32/nasm-2.15.05-installer-x86.exe
+ to C:\Program Files (x86)\NASM
+
+-> Visual Studio x86 native prompt.
+
+set Path=%PATH%;C:\Program Files (x86)\NASM;C:\Perl\perl\bin
+
+perl Configure VC-WIN32 --prefix=c:\test\tcltls\openssl --openssldir=c:\test\tcltls\openssldir no-shared no-filenames threads
+
+nmake
+nmake test
+namke install
+
+2) Build TCLTLS
+
+Unzip distribution in:
+c:\test\tcltls\tcltls-1.7.22
+
+-> start cygwin bash prompt
+
+cd /cygdrive/c/test/tcltls/tcltls-1.7.22
+./gen_dh_params > dh_params.h
+
+od -A n -v -t xC < 'tls.tcl' > tls.tcl.h.new.1
+sed 's@[^0-9A-Fa-f]@@g;s@..@0x&, @g' < tls.tcl.h.new.1 > tls.tcl.h
+rm -f tls.tcl.h.new.1
+
+-> Visual Studio x86 native prompt.
+
+cd C:\test\tcltls\tcltls-1.7.22\win
+
+nmake -f makefile.vc TCLDIR=c:\test\tcl8610 SSL_INSTALL_FOLDER=C:\test\tcltls\openssl
+
+nmake -f makefile.vc install TCLDIR=c:\test\tcl8610 INSTALLDIR=c:\test\tcltls SSL_INSTALL_FOLDER=C:\test\tcltls\openssl
+
+tls.c:
+Lines 1779, 1839: replace
+int Tls_Init by
+DLLEXPORT int Tls_Init
+
+tls.h: same change
+
+lappend auto_path {C:\test\tcltls\tls1.7.22}
+package require tls
+
ADDED win/makefile.vc
Index: win/makefile.vc
==================================================================
--- win/makefile.vc
+++ win/makefile.vc
@@ -0,0 +1,24 @@
+# call nmake with additional parameter SSL_INSTALL_FOLDER= with the
+# OpenSSL instalation folder following.
+
+PROJECT=tls
+DOTVERSION = 1.7.22
+
+PRJ_INCLUDES = -I"$(SSL_INSTALL_FOLDER)\include"
+PRJ_DEFINES = -D NO_SSL2 -D NO_SSL3 -D _CRT_SECURE_NO_WARNINGS
+
+PRJ_LIBS = \
+ "$(SSL_INSTALL_FOLDER)\lib\libssl.lib" \
+ "$(SSL_INSTALL_FOLDER)\lib\libcrypto.lib" \
+ WS2_32.LIB GDI32.LIB ADVAPI32.LIB CRYPT32.LIB USER32.LIB
+
+PRJ_OBJS = $(TMP_DIR)\tls.obj \
+ $(TMP_DIR)\tlsBIO.obj \
+ $(TMP_DIR)\tlsIO.obj \
+ $(TMP_DIR)\tlsX509.obj
+
+!include "rules-ext.vc"
+!include "targets.vc"
+
+pkgindex: default-pkgindex
+
ADDED win/targets.vc
Index: win/targets.vc
==================================================================
--- win/targets.vc
+++ win/targets.vc
@@ -0,0 +1,98 @@
+#------------------------------------------------------------- -*- makefile -*-
+# targets.vc --
+#
+# Part of the nmake based build system for Tcl and its extensions.
+# This file defines some standard targets for the convenience of extensions
+# and can be optionally included by the extension makefile.
+# See TIP 477 (https://core.tcl-lang.org/tips/doc/trunk/tip/477.md) for docs.
+
+$(PROJECT): setup pkgindex $(PRJLIB)
+
+!ifdef PRJ_STUBOBJS
+$(PROJECT): $(PRJSTUBLIB)
+$(PRJSTUBLIB): $(PRJ_STUBOBJS)
+ $(LIBCMD) $**
+
+$(PRJ_STUBOBJS):
+ $(CCSTUBSCMD) %s
+!endif # PRJ_STUBOBJS
+
+!ifdef PRJ_MANIFEST
+$(PROJECT): $(PRJLIB).manifest
+$(PRJLIB).manifest: $(PRJ_MANIFEST)
+ @nmakehlp -s << $** >$@
+@MACHINE@ $(MACHINE:IX86=X86)
+<<
+!endif
+
+!if "$(PROJECT)" != "tcl" && "$(PROJECT)" != "tk"
+$(PRJLIB): $(PRJ_OBJS) $(RESFILE)
+!if $(STATIC_BUILD)
+ $(LIBCMD) $**
+!else
+ $(DLLCMD) $**
+ $(_VC_MANIFEST_EMBED_DLL)
+!endif
+ -@del $*.exp
+!endif
+
+!if "$(PRJ_HEADERS)" != "" && "$(PRJ_OBJS)" != ""
+$(PRJ_OBJS): $(PRJ_HEADERS)
+!endif
+
+# If parent makefile has defined stub objects, add their installation
+# to the default install
+!if "$(PRJ_STUBOBJS)" != ""
+default-install: default-install-stubs
+!endif
+
+# Unlike the other default targets, these cannot be in rules.vc because
+# the executed command depends on existence of macro PRJ_HEADERS_PUBLIC
+# that the parent makefile will not define until after including rules-ext.vc
+!if "$(PRJ_HEADERS_PUBLIC)" != ""
+default-install: default-install-headers
+default-install-headers:
+ @echo Installing headers to '$(INCLUDE_INSTALL_DIR)'
+ @for %f in ($(PRJ_HEADERS_PUBLIC)) do @$(COPY) %f "$(INCLUDE_INSTALL_DIR)"
+!endif
+
+!if "$(DISABLE_STANDARD_TARGETS)" == ""
+DISABLE_STANDARD_TARGETS = 0
+!endif
+
+!if "$(DISABLE_TARGET_setup)" == ""
+DISABLE_TARGET_setup = 0
+!endif
+!if "$(DISABLE_TARGET_install)" == ""
+DISABLE_TARGET_install = 0
+!endif
+!if "$(DISABLE_TARGET_clean)" == ""
+DISABLE_TARGET_clean = 0
+!endif
+!if "$(DISABLE_TARGET_test)" == ""
+DISABLE_TARGET_test = 0
+!endif
+!if "$(DISABLE_TARGET_shell)" == ""
+DISABLE_TARGET_shell = 0
+!endif
+
+!if !$(DISABLE_STANDARD_TARGETS)
+!if !$(DISABLE_TARGET_setup)
+setup: default-setup
+!endif
+!if !$(DISABLE_TARGET_install)
+install: default-install
+!endif
+!if !$(DISABLE_TARGET_clean)
+clean: default-clean
+realclean: hose
+hose: default-hose
+distclean: realclean default-distclean
+!endif
+!if !$(DISABLE_TARGET_test)
+test: default-test
+!endif
+!if !$(DISABLE_TARGET_shell)
+shell: default-shell
+!endif
+!endif # DISABLE_STANDARD_TARGETS
oehhar added on 2021-01-14 12:18:20:
Thank you, Kevin. The sync passed now. Thanks, Harald oehhar added on 2021-01-14 13:01:59:
Merged by commit [b5c41cdeb6]. The build requires cygwin or linux to prepare the build. Alex and/or Christian may care to solve those dependencies by working on a TEA build. Bug closed. Thank you, Harald | ||||