Sujet : Re: Can't build TclTLS 2.0b1
De : brian199 (at) *nospam* comcast.net (Brian)
Groupes : comp.lang.tclDate : 06. Jul 2025, 20:35:47
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <104ej6j$2d4at$1@dont-email.me>
References : 1 2 3 4
User-Agent : Mozilla Thunderbird
On 7/6/25 12:35 PM, Alan Grunwald wrote:
On 06/07/2025 14:22, Alan Grunwald wrote:
On 06/07/2025 02:09, Brian wrote:
Usually this means it found an older version of OpenSSL. Check which version of OpenSSL you have on your system. You need 1.1.1 or later. On the command line:
>
openssl --version
>
>
Also you mixed 9.0.1 and 9.0.2. in your paths. When you run the configure script, check the configure output to see what it found. A blank means it will use the default path. The key is that it says it found the ssl.h file. For example:
>
...
checking for Tcl configuration... found /opt/tcl9/lib64/tcl/tclConfig.sh
...
checking for Tcl public headers... /opt/tcl9/include
...
checking for OpenSSL directory... /usr
checking for OpenSSL include directory... /usr/include
checking for ssl.h... yes
checking for OpenSSL lib directory... /usr/lib64
checking for OpenSSL pkgconfig...
checking for tclsh... /opt/tcl9/bin/tclsh9.0
>
>
If the OpenSSL is installed in /usr, then the command line args aren't needed. You also don't need them if you have pkgconfig on your system configured. However if you want to be sure to use the right version, here's what I use on OpenSuSe:
>
./configure --enable-64bit --prefix=/opt/tcl9 --exec-prefix=/opt/tcl9 --libdir=/opt/tcl9/lib64/tcl --with-openssl-dir=/usr --with-openssl- includedir=/usr/include --with-openssl-libdir=/usr/lib64
>
>
>
>
On 7/4/25 5:40 PM, Alan Grunwald wrote:
I replied to the announcement of this release back in February to say that I couldn't build it, but I seem to have given up after a couple of very useful suggestions from the author.
>
After seeing the announcement of Tcl 9.0.2 earlier this week, I am trying again...
>
I'm running Linux Mint, 64-bit. I have built Tcl 9.0.2 in /opt/ tcl9.0.2 and it seems to be working fine, so it's just(?!) a question of rebuilding the external and homebrew packages that the half-dozen scripts I use regularly rely on.
>
I've downloaded tcltls-2.0b1.tar.gz (to Downloads) and untarred it (to Downloads/tcltls-2.0b1)
>
Using my preferred workflow, I'm sitting in my home directory (the parent of Downloads) and have typed
>
(cd Downloads/tcltls-2.0b1; ./configure --enable-64bit --prefix=/ opt/ tcl9.0.2 --with-tcl=/opt/tcl9.0.1/lib --with-openssl- includedir=/usr/ include)
>
followed by
>
(cd Downloads/tcltls-2.0b1; make)
>
This fails quickly with a compilation error:
>
./generic/tlsBIO.c: In function ‘BioOutput’:
./generic/tlsBIO.c:117:32: error: ‘BIO_FLAGS_IN_EOF’ undeclared (first use in this function); did you mean ‘BIO_FLAGS_READ’?
117 | BIO_set_flags(bio, BIO_FLAGS_IN_EOF);
| ^~~~~~~~~~~~~~~~
>
The compilation command was
>
gcc -DPACKAGE_NAME=\"tls\" -DPACKAGE_TARNAME=\"tls\" - DPACKAGE_VERSION=\"2.0b1\" -DPACKAGE_STRING=\"tls\ 2.0b1\" - DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DBUILD_tls=/\*\*/ - DHAVE_STDIO_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 - DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_STRINGS_H=1 - DHAVE_SYS_STAT_H=1 - DHAVE_SYS_TYPES_H=1 -DHAVE_UNISTD_H=1 - DSTDC_HEADERS=1 - DUSE_THREAD_ALLOC=1 -D_REENTRANT=1 - D_THREAD_SAFE=1 -DTCL_THREADS=1 - DUSE_TCL_STUBS=1 - DUSE_TCLOO_STUBS=1 -DMODULE_SCOPE=extern\ __attribute__\(\(__visibility__\(\"hidden\"\)\)\) -DHAVE_HIDDEN=1 - DHAVE_CAST_TO_UNION=1 -DHAVE_STDBOOL_H=1 -DTCL_WIDE_INT_IS_LONG=1 - DTCL_CFG_OPTIMIZED=1 -DUSE_TCL_STUBS=1 -DNO_SSL3=1 - D_FORTIFY_SOURCE=2 - fstack-protector-all -fno-strict-overflow -I/ usr/include -Wno- deprecated-declarations -I/usr/include -I"/opt/ tcl9.0.2/include" -I. -O2 -fomit-frame-pointer -DNDEBUG -Wall -fPIC -pipe -m64 -O2 -fomit- frame-pointer -DNDEBUG -Wall -fPIC -c `echo ./generic/tlsBIO.c` -o tlsBIO.o
>
Now, line 30 of Downloads/tcltls-2.0b1/generic/tlsBIO.c is
>
#include <openssl/bio.h>
>
and line 209 of /usr/include/openssl/bio.h is
>
# define BIO_FLAGS_IN_EOF 0x800
>
What's going on?
>
Following the advice in February, I believe I am now putting the right value on the --with-openssl-includedir flag to configure (I no longer include /openssl). I'm suspicious that make includes
>
-I/usr/include
>
twice in the compile command but I don't think it's causing a problem.
>
Help!
>
Alan
>
Brian,
>
Thanks for spotting that I've mixed 9.0.1 and 9.0.2. Not clever :-(.
>
I've corrected that, but maybe unsurprisingly it made no difference.
>
openssl --version returns a syntax error, but
>
$ openssl version
OpenSSL 1.1.1 11 Sep 2018
>
>
I looked at the extract from the configure output you posted, and while mine does find ssl.h, it doesn't say anything about the SSL directory:
>
checking for enable hardening... yes
checking for static linking of openSSL libraries... no
checking for OpenSSL directory...
checking for OpenSSL include directory... /usr/include
checking for ssl.h... yes
checking for OpenSSL lib directory...
checking for OpenSSL pkgconfig...
>
relevant lines from config.log:
>
configure:9440: checking for static linking of openSSL libraries
configure:9442: result: no
configure:9461: checking for OpenSSL directory
configure:9463: result:
configure:9485: checking for OpenSSL include directory
configure:9487: result: /usr/include
configure:9491: checking for ssl.h
configure:9496: result: yes
configure:9528: checking for OpenSSL lib directory
configure:9530: result:
configure:9567: checking for OpenSSL pkgconfig
configure:9569: result:
>
and lines 9461-3 of configure are
>
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for OpenSSL directory" >&5
printf %s "checking for OpenSSL directory... " >&6; }
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $openssldir" >&5
printf "%s\n" "$openssldir" >&6; }
>
It seems that configure isn't setting 'openssl' properly which is likely to be a bad thing.
>
>
I regret I don't remember installing OpenSSL so can't say where it is,
>
$ which openssl
/usr/local/bin/openssl
>
What files are you pointing to with --libdir, --with-openssl-dir and --with-openssl-libdir? I can searhc for them and specify the flags appropriately.
>
Alan
>
Sorry, ...isn't setting 'openssldir' ...
So the configure script worked exactly as you specified. You only provided the --with-openssl-includedir option, so only that path was overridden from the default. The default is a blank which means find it in the default paths.
However, I don't think that's your issue. The issue is you don't know where you installed OpenSSL. From your emails it could be the default one in /usr and your email today suggests it could be in /usr/local. You need to find where the openssl executable, ssl.h, and libssl.so are located, then use the 3 options to point to those locations. Make sure not to include /openssl in the include path since its in the #include already. My example provided the location where these are in OpenSUSE. The README.txt file has more info on all of the options.
I'd also suggest doing a 'make clean' and 'make distclean' to remove any temp files with old path config info. I also suggest using all of the TCL options to point to the TCL 9.0.2 directory so it doesn't accidentally find the TCL 8.6 install. The tcl.m4 file is configured to be very aggressive about using wherever is in the default paths.