Overview
Context
Changes
Modified win/README.txt
from [1544be4d83]
to [7ed97d2dfa].
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
+
-
-
+
+
-
-
+
-
-
-
+
-
-
-
-
+
-
-
-
-
-
-
-
+
-
-
+
-
-
+
-
-
-
-
-
+
-
-
-
+
+
-
+
-
+
+
-
+
+
-
+
+
-
+
-
-
-
+
+
+
|
Windows DLL Build instructions using nmake build system
2020-10-15 [email protected]
2023-08-22 Kevin Walzer ([email protected])
Properties:
- 32 bit DLL
- VisualStudio 2015
- 64 bit DLL
- VisualStudio 2019
Note: Visual C++ 6 does not build OpenSSL (long long syntax error)
- Cygwin32 (temporary helper, please help to replace by tclsh)
- WSL
- OpenSSL statically linked to TCLTLS DLL.
Note: Dynamic linking also works but results in a DLL dependeny on OPENSSL DLL's
- OpenSSL dynamically linked to TCLTLS DLL. We used a freely redistributable build of OpenSSL from https://www.firedaemon.com/firedaemon-openssl. Unzip and install OpenSSL in an accessible place (we used the lib subdirectory of our Tcl installation).
1) Build OpenSSL static libraries:
OpenSSL source distribtution unpacked in:
c:\test\tcltls\Openssl_1_1_1h
1. Visual Studio x86 native prompt. Update environmental variables for building Tcltls. Customize the below entries for your setup.
- 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
set PATH=%PATH%;C:\tcl-trunk\lib\openssl-3\x64\bin
-> Visual Studio x86 native prompt.
set INCLUDE=%INCLUDE%;C:\tcl-trunk\tcl\lib\openssl-3\x64\include\openssl
set Path=%PATH%;C:\Program Files (x86)\NASM;C:\Perl\perl\bin
set LIB=%LIB%;C:\tcl-trunk\tcl\lib\openssl-3\x64\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:
-> Unzip distribution on your system.
c:\test\tcltls\tcltls-1.8.0
-> start cygwin bash prompt
-> Start WSL.
-> cd /mnt/c/path/to/tcltls
cd /cygdrive/c/test/tcltls/tcltls-1.8.0
./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:path\to\tcltls\win
cd C:\test\tcltls\tcltls-1.8.0\win
Run the following commands (modify the flags to your specific installations).
nmake -f makefile.vc TCLDIR=c:\test\tcl8610 SSL_INSTALL_FOLDER=C:\test\tcltls\openssl
nmake -f makefile.vc TCLDIR=c:\users\wordt\tcl INSTALLDIR=c:\tcl-trunk\tcl\lib SSL_INSTALL_FOLDER=C:\tcl-trunk\tcl\lib\openssl-3\x64
nmake -f makefile.vc TCLDIR=c:\users\wordt\tcl INSTALLDIR=c:\tcl-trunk\tcl\lib SSL_INSTALL_FOLDER=C:\tcl-trunk\tcl\lib\openssl-3\x64 install
nmake -f makefile.vc install TCLDIR=c:\test\tcl8610 INSTALLDIR=c:\test\tcltls SSL_INSTALL_FOLDER=C:\test\tcltls\openssl
The resulting installation will include both the tcltls package and also have libcrypto.dll and libssl.dll copied into the same directory.
3) Test
Start tclsh or wish
Start tclsh
lappend auto_path {C:\test\tcltls\tls1.8.0}
package require tls
A small "1.8.0" showing up is hopefully the end of this long way...
package require http
http::register https 443 [list ::tls::socket -autoservername true]
set tok [http::data [http::geturl https://www.tcl-lang.org]]
|
Modified win/makefile.vc
from [77c38ff3cf]
to [a945692c7e].
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
+
+
+
+
+
-
+
+
-
+
-
+
+
+
|
# call nmake with additional parameter SSL_INSTALL_FOLDER= with the
# OpenSSL instalation folder following.
PROJECT=tls
DOTVERSION = 1.8.0
PRJLIBNAME = $(PROJECT)$(VERSION)$(SUFX).$(EXT)
PRJLIB = $(OUT_DIR)\$(PRJLIBNAME)
!include "rules-ext.vc"
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
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
install:
copy "$(SSL_INSTALL_FOLDER)\bin\libcrypto-3-x64.dll" "$(INSTALLDIR)\$(PROJECT)$(DOTVERSION)\libcrypto-3-x64.dll"
copy "$(SSL_INSTALL_FOLDER)\bin\libssl-3-x64.dll" "$(INSTALLDIR)\$(PROJECT)$(DOTVERSION)\libssl-3-x64.dll"
|