2021-01-14
| ||
13:01 | • Closed ticket [604bb68b5c]: How to build Tcl tls on Windows 64 bit (VisualStudio 12) from scratch? plus 5 other changes artifact: 07b6b5a31e user: oehhar | |
12:56 | Ticket [604bb68b5c] : rudimentary nmake build system check-in: b5c41cdeb6 user: oehhar tags: trunk | |
12:18 | • Ticket [604bb68b5c] How to build Tcl tls on Windows 64 bit (VisualStudio 12) from scratch? status still Open with 4 other changes artifact: 55a6899182 user: oehhar | |
2020-10-20
| ||
16:11 | • Ticket [604bb68b5c]: 4 changes artifact: 321d35e5f7 user: oehhar | |
2020-10-15
| ||
10:40 | • Ticket [604bb68b5c]: 4 changes artifact: b2b6ac0b93 user: oehhar | |
10:36 | Ticket [604bb68b5c]. Add first sketch of a nmake build. check-in: 2babef91c5 user: oehhar tags: bug-604bb68b5c-nmake | |
2019-09-26
| ||
14:36 | • Ticket [604bb68b5c] How to build Tcl tls on Windows 64 bit (VisualStudio 12) from scratch? status still Open with 6 other changes artifact: b15c73c62c user: anonymous | |
2019-05-22
| ||
08:17 | • New ticket [604bb68b5c]. artifact: bc36d8b739 user: anonymous | |
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 | |||
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 |