tcl errors when updating sqlite
(1) By curmudgeon on 2024-08-02 09:12:40 [source]
In response to bash script containing cd ~/sqlite if [[ "$(fossil update trunk)" =~ .*Already\ up-to-date$ ]] && [[ $# -eq 0 ]]; then # [[ $# -eq 0 ]] => supply any param to force sqlite update [[ $dir/extra_init.c -ot /bin/sqlite3 ]] && exit 0; else echo updating sqlite ... { ./configure make make sqlite3_analyzer sqldiff sudo mv sqldiff /bin sudo mv sqlite3_analyzer /usr/local/bin } > nul fi I get the following gcc: warning: @TCL_INCLUDE_SPEC@: linker input file unused because linking not done gcc: error: @TCL_INCLUDE_SPEC@: linker input file not found: No such file or directory make: *** [Makefile:849: sqlite3.lo] Error 1 /usr/sbin/ld: cannot find @TCL_INCLUDE_SPEC@: No such file or directory collect2: error: ld returned 1 exit status First difficulty I've encountered with same script for years. I did notice in the timeline Richard was changing some tcl.
(2) By brickviking on 2024-08-02 11:31:30 in reply to 1 [link] [source]
I'm also having much the same results when I simply do configure --enable-all. I've got Fedoro 36, with TCL 8.6 (and -devel) installed from RPM packages.
Here's some configure output:
sqlite$ mkdir bld
sqlite$ cd bld
sqlite/bld$ ../configure --enable-all
[... output elided ...]
checking for tclsh8.6... tclsh8.6
using tclsh at "tclsh8.6"
tclsh8.6 recommends the tclConfig.sh at /usr/lib64
loading TCL configuration from /usr/lib64/tclConfig.sh
configure: Version set to 3.47
configure: Release set to 3.47.0
[... more output elided ...]
configure: creating ./config.status
config.status: creating Makefile
config.status: creating sqlite3.pc
config.status: creating sqlite_cfg.h
config.status: executing libtool commands
sqlite/bld$
That seems to work fine so far. The make output follows (lines broken weirdly here):
sqlite/bld$ make
gcc -g -O2 -o mksourceid /home/viking/src/c/sqlite/sqlite/bld/../tool/mksourceid.c
sh /home/viking/src/c/sqlite/sqlite/bld/../tool/cktclsh.sh 8.4 tclsh8.6
touch has_tclsh84
tclsh8.6 /home/viking/src/c/sqlite/sqlite/bld/../tool/mksqlite3h.tcl /home/viking/src/c/sqlite/sqlite/bld/.. >sqlite3.h
gcc -g -O2 -o mkkeywordhash -DSQLITE_ENABLE_MATH_FUNCTIONS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_GEOPOLY -DSQLITE_ENABLE_RTREE -DSQLITE_ENABLE_SESSION -DSQLITE_ENABLE_PREUPDATE_HOOK /home/viking/src/c/sqlite/sqlite/bld/../tool/mkkeywordhash.c
./mkkeywordhash >keywordhash.h
gcc -g -O2 -o lemon /home/viking/src/c/sqlite/sqlite/bld/../tool/lemon.c
cp /home/viking/src/c/sqlite/sqlite/bld/../tool/lempar.c .
cp /home/viking/src/c/sqlite/sqlite/bld/../src/parse.y .
./lemon -DSQLITE_ENABLE_MATH_FUNCTIONS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_GEOPOLY -DSQLITE_ENABLE_RTREE -DSQLITE_ENABLE_SESSION -DSQLITE_ENABLE_PREUPDATE_HOOK -S parse.y
cat parse.h /home/viking/src/c/sqlite/sqlite/bld/../src/vdbe.c | tclsh8.6 /home/viking/src/c/sqlite/sqlite/bld/../tool/mkopcodeh.tcl >opcodes.h
tclsh8.6 /home/viking/src/c/sqlite/sqlite/bld/../tool/mkopcodec.tcl opcodes.h >opcodes.c
tclsh8.6 /home/viking/src/c/sqlite/sqlite/bld/../tool/mkshellc.tcl >shell.c
cp /home/viking/src/c/sqlite/sqlite/bld/../ext/fts5/fts5parse.y .
rm -f fts5parse.h
./lemon -S fts5parse.y
tclsh8.6 /home/viking/src/c/sqlite/sqlite/bld/../ext/fts5/tool/mkfts5c.tcl
cp /home/viking/src/c/sqlite/sqlite/bld/../ext/fts5/fts5.h .
rm -rf tsrc
mkdir tsrc
cp -f /home/viking/src/c/sqlite/sqlite/bld/../src/alter.c /home/viking/src/c/sqlite/sqlite/bld/../src/analyze.c /home/viking/src/c/sqlite/sqlite/bld/../src/attach.c /home/viking/src/c/sqlite/sqlite/bld/../src/auth.c /home/viking/src/c/sqlite/sqlite/bld/../src/backup.c /home/viking/src/c/sqlite/sqlite/bld/../src/bitvec.c /home/viking/src/c/sqlite/sqlite/bld/../src/btmutex.c /home/viking/src/c/sqlite/sqlite/bld/../src/btree.c /home/viking/src/c/sqlite/sqlite/bld/../src/btree.h /home/viking/src/c/sqlite/sqlite/bld/../src/btreeInt.h /home/viking/src/c/sqlite/sqlite/bld/../src/build.c /home/viking/src/c/sqlite/sqlite/bld/../src/callback.c /home/viking/src/c/sqlite/sqlite/bld/../src/complete.c /home/viking/src/c/sqlite/sqlite/bld/../src/ctime.c /home/viking/src/c/sqlite/sqlite/bld/../src/date.c /home/viking/src/c/sqlite/sqlite/bld/../src/dbpage.c /home/viking/src/c/sqlite/sqlite/bld/../src/dbstat.c /home/viking/src/c/sqlite/sqlite/bld/../src/delete.c /home/viking/src/c/sqlite/sqlite/bld/../src/expr.c /home/viking/src/c/sqlite/sqlite/bld/../src/fault.c /home/viking/src/c/sqlite/sqlite/bld/../src/fkey.c /home/viking/src/c/sqlite/sqlite/bld/../src/func.c /home/viking/src/c/sqlite/sqlite/bld/../src/global.c /home/viking/src/c/sqlite/sqlite/bld/../src/hash.c /home/viking/src/c/sqlite/sqlite/bld/../src/hash.h /home/viking/src/c/sqlite/sqlite/bld/../src/hwtime.h /home/viking/src/c/sqlite/sqlite/bld/../src/insert.c /home/viking/src/c/sqlite/sqlite/bld/../src/json.c /home/viking/src/c/sqlite/sqlite/bld/../src/legacy.c /home/viking/src/c/sqlite/sqlite/bld/../src/loadext.c /home/viking/src/c/sqlite/sqlite/bld/../src/main.c /home/viking/src/c/sqlite/sqlite/bld/../src/malloc.c /home/viking/src/c/sqlite/sqlite/bld/../src/mem0.c /home/viking/src/c/sqlite/sqlite/bld/../src/mem1.c /home/viking/src/c/sqlite/sqlite/bld/../src/mem2.c /home/viking/src/c/sqlite/sqlite/bld/../src/mem3.c /home/viking/src/c/sqlite/sqlite/bld/../src/mem5.c /home/viking/src/c/sqlite/sqlite/bld/../src/memdb.c /home/viking/src/c/sqlite/sqlite/bld/../src/memjournal.c /home/viking/src/c/sqlite/sqlite/bld/../src/msvc.h /home/viking/src/c/sqlite/sqlite/bld/../src/mutex.c /home/viking/src/c/sqlite/sqlite/bld/../src/mutex.h /home/viking/src/c/sqlite/sqlite/bld/../src/mutex_noop.c /home/viking/src/c/sqlite/sqlite/bld/../src/mutex_unix.c /home/viking/src/c/sqlite/sqlite/bld/../src/mutex_w32.c /home/viking/src/c/sqlite/sqlite/bld/../src/notify.c /home/viking/src/c/sqlite/sqlite/bld/../src/os.c /home/viking/src/c/sqlite/sqlite/bld/../src/os.h /home/viking/src/c/sqlite/sqlite/bld/../src/os_common.h /home/viking/src/c/sqlite/sqlite/bld/../src/os_setup.h /home/viking/src/c/sqlite/sqlite/bld/../src/os_kv.c /home/viking/src/c/sqlite/sqlite/bld/../src/os_unix.c /home/viking/src/c/sqlite/sqlite/bld/../src/os_win.c /home/viking/src/c/sqlite/sqlite/bld/../src/os_win.h /home/viking/src/c/sqlite/sqlite/bld/../src/pager.c /home/viking/src/c/sqlite/sqlite/bld/../src/pager.h /home/viking/src/c/sqlite/sqlite/bld/../src/parse.y /home/viking/src/c/sqlite/sqlite/bld/../src/pcache.c /home/viking/src/c/sqlite/sqlite/bld/../src/pcache.h /home/viking/src/c/sqlite/sqlite/bld/../src/pcache1.c /home/viking/src/c/sqlite/sqlite/bld/../src/pragma.c /home/viking/src/c/sqlite/sqlite/bld/../src/pragma.h /home/viking/src/c/sqlite/sqlite/bld/../src/prepare.c /home/viking/src/c/sqlite/sqlite/bld/../src/printf.c /home/viking/src/c/sqlite/sqlite/bld/../src/random.c /home/viking/src/c/sqlite/sqlite/bld/../src/resolve.c /home/viking/src/c/sqlite/sqlite/bld/../src/rowset.c /home/viking/src/c/sqlite/sqlite/bld/../src/select.c /home/viking/src/c/sqlite/sqlite/bld/../src/status.c /home/viking/src/c/sqlite/sqlite/bld/../src/shell.c.in /home/viking/src/c/sqlite/sqlite/bld/../src/sqlite.h.in /home/viking/src/c/sqlite/sqlite/bld/../src/sqlite3ext.h /home/viking/src/c/sqlite/sqlite/bld/../src/sqliteInt.h /home/viking/src/c/sqlite/sqlite/bld/../src/sqliteLimit.h /home/viking/src/c/sqlite/sqlite/bld/../src/table.c /home/viking/src/c/sqlite/sqlite/bld/../src/tclsqlite.c /home/viking/src/c/sqlite/sqlite/bld/../src/threads.c /home/viking/src/c/sqlite/sqlite/bld/../src/tokenize.c /home/viking/src/c/sqlite/sqlite/bld/../src/treeview.c /home/viking/src/c/sqlite/sqlite/bld/../src/trigger.c /home/viking/src/c/sqlite/sqlite/bld/../src/utf.c /home/viking/src/c/sqlite/sqlite/bld/../src/update.c /home/viking/src/c/sqlite/sqlite/bld/../src/upsert.c /home/viking/src/c/sqlite/sqlite/bld/../src/util.c /home/viking/src/c/sqlite/sqlite/bld/../src/vacuum.c /home/viking/src/c/sqlite/sqlite/bld/../src/vdbe.c /home/viking/src/c/sqlite/sqlite/bld/../src/vdbe.h /home/viking/src/c/sqlite/sqlite/bld/../src/vdbeapi.c /home/viking/src/c/sqlite/sqlite/bld/../src/vdbeaux.c /home/viking/src/c/sqlite/sqlite/bld/../src/vdbeblob.c /home/viking/src/c/sqlite/sqlite/bld/../src/vdbemem.c /home/viking/src/c/sqlite/sqlite/bld/../src/vdbesort.c /home/viking/src/c/sqlite/sqlite/bld/../src/vdbetrace.c /home/viking/src/c/sqlite/sqlite/bld/../src/vdbevtab.c /home/viking/src/c/sqlite/sqlite/bld/../src/vdbeInt.h /home/viking/src/c/sqlite/sqlite/bld/../src/vtab.c /home/viking/src/c/sqlite/sqlite/bld/../src/vxworks.h /home/viking/src/c/sqlite/sqlite/bld/../src/wal.c /home/viking/src/c/sqlite/sqlite/bld/../src/wal.h /home/viking/src/c/sqlite/sqlite/bld/../src/walker.c /home/viking/src/c/sqlite/sqlite/bld/../src/where.c /home/viking/src/c/sqlite/sqlite/bld/../src/wherecode.c /home/viking/src/c/sqlite/sqlite/bld/../src/whereexpr.c /home/viking/src/c/sqlite/sqlite/bld/../src/whereInt.h /home/viking/src/c/sqlite/sqlite/bld/../src/window.c /home/viking/src/c/sqlite/sqlite/bld/../ext/fts3/fts3.c /home/viking/src/c/sqlite/sqlite/bld/../ext/fts3/fts3.h /home/viking/src/c/sqlite/sqlite/bld/../ext/fts3/fts3Int.h /home/viking/src/c/sqlite/sqlite/bld/../ext/fts3/fts3_aux.c /home/viking/src/c/sqlite/sqlite/bld/../ext/fts3/fts3_expr.c /home/viking/src/c/sqlite/sqlite/bld/../ext/fts3/fts3_hash.c /home/viking/src/c/sqlite/sqlite/bld/../ext/fts3/fts3_hash.h /home/viking/src/c/sqlite/sqlite/bld/../ext/fts3/fts3_icu.c /home/viking/src/c/sqlite/sqlite/bld/../ext/fts3/fts3_porter.c /home/viking/src/c/sqlite/sqlite/bld/../ext/fts3/fts3_snippet.c /home/viking/src/c/sqlite/sqlite/bld/../ext/fts3/fts3_tokenizer.h /home/viking/src/c/sqlite/sqlite/bld/../ext/fts3/fts3_tokenizer.c /home/viking/src/c/sqlite/sqlite/bld/../ext/fts3/fts3_tokenizer1.c /home/viking/src/c/sqlite/sqlite/bld/../ext/fts3/fts3_tokenize_vtab.c /home/viking/src/c/sqlite/sqlite/bld/../ext/fts3/fts3_unicode.c /home/viking/src/c/sqlite/sqlite/bld/../ext/fts3/fts3_unicode2.c /home/viking/src/c/sqlite/sqlite/bld/../ext/fts3/fts3_write.c /home/viking/src/c/sqlite/sqlite/bld/../ext/icu/sqliteicu.h /home/viking/src/c/sqlite/sqlite/bld/../ext/icu/icu.c /home/viking/src/c/sqlite/sqlite/bld/../ext/rtree/rtree.h /home/viking/src/c/sqlite/sqlite/bld/../ext/rtree/rtree.c /home/viking/src/c/sqlite/sqlite/bld/../ext/rtree/geopoly.c /home/viking/src/c/sqlite/sqlite/bld/../ext/session/sqlite3session.c /home/viking/src/c/sqlite/sqlite/bld/../ext/session/sqlite3session.h /home/viking/src/c/sqlite/sqlite/bld/../ext/userauth/userauth.c /home/viking/src/c/sqlite/sqlite/bld/../ext/userauth/sqlite3userauth.h /home/viking/src/c/sqlite/sqlite/bld/../ext/rbu/sqlite3rbu.h /home/viking/src/c/sqlite/sqlite/bld/../ext/rbu/sqlite3rbu.c /home/viking/src/c/sqlite/sqlite/bld/../ext/misc/stmt.c keywordhash.h opcodes.c opcodes.h parse.c parse.h sqlite_cfg.h shell.c sqlite3.h tsrc
rm tsrc/sqlite.h.in tsrc/parse.y
tclsh8.6 /home/viking/src/c/sqlite/sqlite/bld/../tool/vdbe-compress.tcl <tsrc/vdbe.c >vdbe.new
mv vdbe.new tsrc/vdbe.c
cp fts5.c fts5.h tsrc
touch .target_source
gcc -g -O2 -o src-verify /home/viking/src/c/sqlite/sqlite/bld/../tool/src-verify.c
tclsh8.6 /home/viking/src/c/sqlite/sqlite/bld/../tool/mksqlite3c.tcl --linemacros=0
cp tsrc/sqlite3ext.h .
cp /home/viking/src/c/sqlite/sqlite/bld/../ext/session/sqlite3session.h .
./libtool --mode=compile --tag=CC gcc -g -O2 -DSQLITE_OS_UNIX=1 -I. -I/home/viking/src/c/sqlite/sqlite/bld/../src -I/home/viking/src/c/sqlite/sqlite/bld/../ext/rtree -I/home/viking/src/c/sqlite/sqlite/bld/../ext/icu -I/home/viking/src/c/sqlite/sqlite/bld/../ext/fts3 -I/home/viking/src/c/sqlite/sqlite/bld/../ext/async -I/home/viking/src/c/sqlite/sqlite/bld/../ext/session -I/home/viking/src/c/sqlite/sqlite/bld/../ext/userauth -D_HAVE_SQLITE_CONFIG_H -DBUILD_sqlite -DNDEBUG @TCL_INCLUDE_SPEC@ -DSQLITE_THREADSAFE=1 -DSQLITE_ENABLE_MATH_FUNCTIONS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_GEOPOLY -DSQLITE_ENABLE_RTREE -DSQLITE_ENABLE_SESSION -DSQLITE_ENABLE_PREUPDATE_HOOK -DSQLITE_HAVE_ZLIB=1 -DSQLITE_TEMP_STORE=1 -c sqlite3.c
libtool: compile: gcc -g -O2 -DSQLITE_OS_UNIX=1 -I. -I/home/viking/src/c/sqlite/sqlite/bld/../src -I/home/viking/src/c/sqlite/sqlite/bld/../ext/rtree -I/home/viking/src/c/sqlite/sqlite/bld/../ext/icu -I/home/viking/src/c/sqlite/sqlite/bld/../ext/fts3 -I/home/viking/src/c/sqlite/sqlite/bld/../ext/async -I/home/viking/src/c/sqlite/sqlite/bld/../ext/session -I/home/viking/src/c/sqlite/sqlite/bld/../ext/userauth -D_HAVE_SQLITE_CONFIG_H -DBUILD_sqlite -DNDEBUG @TCL_INCLUDE_SPEC@ -DSQLITE_THREADSAFE=1 -DSQLITE_ENABLE_MATH_FUNCTIONS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_GEOPOLY -DSQLITE_ENABLE_RTREE -DSQLITE_ENABLE_SESSION -DSQLITE_ENABLE_PREUPDATE_HOOK -DSQLITE_HAVE_ZLIB=1 -DSQLITE_TEMP_STORE=1 -c sqlite3.c -fPIC -DPIC -o .libs/sqlite3.o
gcc: warning: @TCL_INCLUDE_SPEC@: linker input file unused because linking not done
gcc: error: @TCL_INCLUDE_SPEC@: linker input file not found: No such file or directory
make: *** [Makefile:849: sqlite3.lo] Error 1
I'm scratching my head as to what's supposed to go into the @TCL_INCLUDE_SPEC@ slot in the makefile. Do I need to rerun autoconf or something along those lines?
Regards, brickviking
(Post 21)
(4) By brickviking on 2024-08-02 11:37:01 in reply to 2 [link] [source]
Incidentally, I've just poked around inside my system's tclConfig.sh, and it includes the following:
...
TCL_INCLUDE_SPEC='-I/usr/include/'
...
Somehow that's not getting propagated from Makefile.in and tclConfig.sh.
Regards again, brickviking
(Post 22)
(3) By Richard Hipp (drh) on 2024-08-02 11:32:58 in reply to 1 [link] [source]
Should be fixed by the latest trunk check-in.
(5) By brickviking on 2024-08-02 11:41:36 in reply to 3 [link] [source]
Thanks for the quick fix, it's appreciated. Sorry about the wall of text from earlier.
Cheers
(Post 23)
(6) By curmudgeon on 2024-08-02 11:44:37 in reply to 3 [link] [source]
Thanks Richard. Working fine now.
(7) By brickviking on 2024-08-02 23:14:07 in reply to 3 [link] [source]
Okay, one more problem to fix. When I go make install
in the bld directory, it spits out the following:
sqlite/bld$ sudo make install
/usr/bin/install -c -d /usr/local/lib
./libtool --mode=install /usr/bin/install -c libsqlite3.la /usr/local/lib
libtool: install: /usr/bin/install -c .libs/libsqlite3.so.0.8.6 /usr/local/lib/libsqlite3.so.0.8.6
libtool: install: (cd /usr/local/lib && { ln -s -f libsqlite3.so.0.8.6 libsqlite3.so.0 || { rm -f libsqlite3.so.0 && ln -s libsqlite3.so.0.8.6 libsqlite3.so.0; }; })
libtool: install: (cd /usr/local/lib && { ln -s -f libsqlite3.so.0.8.6 libsqlite3.so || { rm -f libsqlite3.so && ln -s libsqlite3.so.0.8.6 libsqlite3.so; }; })
libtool: install: /usr/bin/install -c .libs/libsqlite3.lai /usr/local/lib/libsqlite3.la
libtool: install: /usr/bin/install -c .libs/libsqlite3.a /usr/local/lib/libsqlite3.a
libtool: install: chmod 644 /usr/local/lib/libsqlite3.a
libtool: install: ranlib /usr/local/lib/libsqlite3.a
libtool: finish: PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/sbin" ldconfig -n /usr/local/lib
----------------------------------------------------------------------
Libraries have been installed in:
/usr/local/lib
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the `LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the `LD_RUN_PATH' environment variable
during linking
- use the `-Wl,-rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to `/etc/ld.so.conf'
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
make: *** No rule to make target 'tcl_install', needed by 'install'. Stop.
Is this just a case of PEBKAC, or is there something else I've missed?
Thanks again and sorry about the flood of messages recently.
Regards, brickviking
(Post 24)
(8) By anonymous on 2024-08-03 17:36:48 in reply to 7 [link] [source]
I'm running into this same problem now, any advice would be greatly appreciated.
(9) By Richard Hipp (drh) on 2024-08-03 23:11:34 in reply to 7 [link] [source]
I do not understand what the problem is. There were a lot of words in the previous post. But I never found a concise description of what the problem is. I think you are assuming that I understand autoconf and libtool and what standard practices are running configure/make. That is not a correct assumption. Please show me in baby-steps what is going wrong.
- What you want to accomplish
- What SQLite is doing now
- What SQLite ought to be doing
- (Bonus points!) Suggested patches against configure.ac
(10) By brickviking on 2024-08-04 04:50:17 in reply to 9 [link] [source]
I decided to find out when the tcl_install target had been removed from the Makefile.in file, which is what my problem was. It happened in checkin 534f8344ab, and in return, provided a tclextension_install, which has the note that it "appears" to work under Linux.
I had originally thought to modify the install Makefile target, to update to tclextension-install, but that causes some other issues of its own. I don't have a valid fix for that yet (as in, what changes I've attempted haven't worked well for me), so I won't provide any patches yet.
Regards, brickviking
(Post 25)
(11) By JFMcLuggage (mccon01) on 2024-08-04 12:34:29 in reply to 9 [link] [source]
This (drh's 4 bullet points) is a brilliant and succinct outline for any bug report or feature request.
(12) By brickviking on 2024-08-06 07:02:36 in reply to 11 [link] [source]
Yes, and I wholeheartedly agree with the approach, but where I was striking out was in the assumptions I was making about the install of the libtclsqlite3.so library for TCL, which I had previously been able to compile and install. I found that I couldn't do so this time around, and I was getting stalled at the stage that Dr Hipp had removed; presumably because he had intended on putting matching functionality back, but in a different way.
The recent "fix" which has put tcl_install back, has solved the immediate problem for me, though I don't know what Dr Hipp will do in the near future regarding non-Windows libtclsqlite installs. I guess I'll keep an eye out.
Meanwhile, if it isn't too forward of me, could you perhaps put some of the existing logic for tcl_install into a "if $windows ... then install libtclsqlite3.dll; else install libtclsqlite3.so; endif". I could hack up a patch myself, but someone with experience in TCL would be far better. My last TCL programming was way back in the very very early 2000s and was the equivalent of hello world.
Thank you again, Dr Hipp and the others here.
Regards, brickviking
(Post 26)