libtool-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [SCM] GNU Libtool branch, master, updated. v2.4.2-273-ge24f183


From: Peter Rosin
Subject: Re: [SCM] GNU Libtool branch, master, updated. v2.4.2-273-ge24f183
Date: Fri, 05 Oct 2012 16:42:41 +0200
User-agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20120907 Thunderbird/15.0.1

On 2012-10-05 13:15, Gary V. Vaughan wrote:
> This is an automated email from the git hooks/post-receive script. It was
> generated because a ref change was pushed to the repository containing
> the project "GNU Libtool".

ARRRGH!

I assume this is what you referred to when you talked about some stuff
stuck in the review queue? I can dig up this thread:

http://lists.gnu.org/archive/html/libtool-patches/2011-11/msg00160.html

but from here it looks like it ended with Chuck complaining with:

http://lists.gnu.org/archive/html/libtool-patches/2011-11/msg00184.html
http://lists.gnu.org/archive/html/libtool-patches/2011-11/msg00185.html

and then you went silent. Please tell me I'm missing something?


Here's the log from one of numerous failures on MinGW:

#                             -*- compilation -*-
33. demo.at:381: testing link against a preloaded static library ...
libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, `build-aux'.
libtoolize: linking file `build-aux/ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIR, `m4'.
libtoolize: linking file `m4/libtool.m4'
libtoolize: linking file `m4/ltoptions.m4'
libtoolize: linking file `m4/ltsugar.m4'
libtoolize: linking file `m4/ltversion.m4'
libtoolize: linking file `m4/lt~obsolete.m4'
../../libtool-msvc/tests/demo.at:385: $ACLOCAL -I m4
stderr:
stdout:
../../libtool-msvc/tests/demo.at:385: $AUTOHEADER 
stderr:
stdout:
../../libtool-msvc/tests/demo.at:385: $AUTOMAKE --add-missing
stderr:
configure.ac:7: installing `build-aux/config.guess'
configure.ac:7: installing `build-aux/config.sub'
configure.ac:4: installing `build-aux/install-sh'
configure.ac:4: installing `build-aux/missing'
stdout:
../../libtool-msvc/tests/demo.at:385: $AUTOCONF 
stderr:
stdout:
../../libtool-msvc/tests/demo.at:385: : ${CONFIG_SHELL=/bin/sh}; export 
CONFIG_SHELL;     $CONFIG_SHELL ./configure $configure_options 
--prefix="$prefixdir" --disable-shared
stderr:
stdout:
checking for a BSD-compatible install... /bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.exe
checking for suffix of executables... .exe
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for style of include used by make... GNU
checking dependency style of gcc... none
checking build system type... i686-pc-mingw32
checking host system type... i686-pc-mingw32
checking how to print strings... printf
checking for a sed that does not truncate output... /bin/sed
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for fgrep... /bin/grep -F
checking for ld used by gcc... c:/mingw/mingw32/bin/ld.exe
checking if the linker (c:/mingw/mingw32/bin/ld.exe) is GNU ld... yes
checking for BSD- or MS-compatible name lister (nm)... /mingw/bin/nm
checking the name lister (/mingw/bin/nm) interface... BSD nm
checking whether ln -s works... no, using cp -p
checking the maximum length of command line arguments... 8192
checking how to convert i686-pc-mingw32 file names to i686-pc-mingw32 format... 
(cached) func_convert_file_msys_to_w32
checking how to convert i686-pc-mingw32 file names to toolchain format... 
(cached) func_convert_file_msys_to_w32
checking for c:/mingw/mingw32/bin/ld.exe option to reload object files... -r
checking for objdump... objdump
checking how to recognize dependent libraries... file_magic ^x86 archive 
import|^x86 DLL
checking for dlltool... dlltool
checking how to associate runtime and link libraries... 
func_cygming_dll_for_implib
checking for archiver @FILE support... @
checking for strip... strip
checking for ranlib... ranlib
checking command to parse /mingw/bin/nm output from gcc object... ok
checking for sysroot... no
checking for mt... :
checking if : is a manifest tool... no
checking how to run the C preprocessor... gcc -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for dlfcn.h... no
checking for as... as
checking for dlltool... (cached) dlltool
checking for objdump... (cached) objdump
checking for objdir... .libs
checking if gcc supports -fno-rtti -fno-exceptions... no
checking for gcc option to produce PIC... -DDLL_EXPORT -DPIC
checking if gcc PIC flag -DDLL_EXPORT -DPIC works... yes
checking if gcc static flag -static works... yes
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (c:/mingw/mingw32/bin/ld.exe) supports shared 
libraries... yes
checking dynamic linker characteristics... Win32 ld.exe
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... no
checking whether to build static libraries... yes
checking for cos in -lm... yes
configure: creating ./config.status
config.status: creating Makefile
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing libtool commands
../../libtool-msvc/tests/demo.at:385: $EGREP '^build_old_libs=yes' libtool
stdout:
build_old_libs=yes
build_old_libs=yes
../../libtool-msvc/tests/demo.at:385: $EGREP '^build_libtool_libs=no' libtool
stdout:
build_libtool_libs=no
build_libtool_libs=no
../../libtool-msvc/tests/demo.at:387: $unset LIBTOOL LIBTOOLIZE; $MAKE $target 
stderr:
stdout:
make  all-am
make[1]: Entering directory 
`/c/Cygwin/home/peda/libtool/git/mingw/tests/testsuite.dir/033'
/bin/sh ./libtool  --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I.   
-DBUILDING_LIBHELLO   -g -O2 -c -o libhello_la-hello.lo `test -f 'hello.c' || 
echo './'`hello.c
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -DBUILDING_LIBHELLO -g -O2 -c 
hello.c -o libhello_la-hello.o
/bin/sh ./libtool  --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I.   
-DBUILDING_LIBHELLO   -g -O2 -c -o libhello_la-foo.lo `test -f 'foo.c' || echo 
'./'`foo.c
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -DBUILDING_LIBHELLO -g -O2 -c foo.c 
-o libhello_la-foo.o
/bin/sh ./libtool --tag=CC   --mode=link gcc  -g -O2 -no-undefined 
-version-info 3:12:1  -o libhello.la -rpath 
/c/Cygwin/home/peda/libtool/git/mingw/tests/testsuite.dir/033/_inst/lib 
libhello_la-hello.lo libhello_la-foo.lo -lm 
libtool: link: ar cru .libs/libhello.a  libhello_la-hello.o libhello_la-foo.o
libtool: link: ranlib .libs/libhello.a
libtool: link: ( cd ".libs" && rm -f "libhello.la" && cp -p "../libhello.la" 
"libhello.la" )
gcc -DHAVE_CONFIG_H -I.     -g -O2 -c main.c
/bin/sh ./libtool --tag=CC   --mode=link gcc  -g -O2   -o hell.exe main.o 
libhello.la 
libtool: link: gcc -g -O2 -o hell.exe main.o  ./.libs/libhello.a
/bin/sh ./libtool --tag=CC   --mode=link gcc  -g -O2 -static  -o 
hell_static.exe main.o libhello.la 
libtool: link: gcc -g -O2 -o hell_static.exe main.o  ./.libs/libhello.a
gcc -DHAVE_CONFIG_H -I.     -g -O2 -c dlmain.c
/bin/sh ./libtool --tag=CC   --mode=link gcc  -g -O2 -export-dynamic -dlpreopen 
libhello.la  -o helldl.exe dlmain.o  
libtool: link: rm -f .libs/helldl.exe.nm .libs/helldl.exe.nmS 
.libs/helldl.exe.nmT
libtool: link: (cd .libs && gcc -g -O2 -c -fno-builtin "helldl.exeS.c")
libtool: link: rm -f ".libs/helldl.exeS.c" ".libs/helldl.exe.nm" 
".libs/helldl.exe.nmS" ".libs/helldl.exe.nmT"
libtool: link: gcc -g -O2 .libs/helldl.exeS.o -o helldl.exe dlmain.o 
-Wl,--export-all-symbols  ./.libs/libhello.a
libtool: link: rm -f ".libs/helldl.exeS.o"
make[1]: Leaving directory 
`/c/Cygwin/home/peda/libtool/git/mingw/tests/testsuite.dir/033'
../../libtool-msvc/tests/demo.at:387: if "$lt_exe" ; then :; else lt_status=$?; 
           test "$lt_status" != 0 &&       test "X$host" != "X$build" && test 
-x "$lt_exe" && exit 77;     exit $lt_status; fi
--- expout      2012-10-05 15:09:21 +0200
+++ 
/c/Cygwin/home/peda/libtool/git/mingw/tests/testsuite.dir/at-groups/33/stdout   
    2012-10-05 15:09:48 +0200
@@ -1,3 +1,3 @@
-Welcome to GNU Hell!
-cos (0.0) = 1
-** This is not GNU Hello. There is no built-in mail reader. **
+Welcome to GNU Hell!
+cos (0.0) = 1
+** This is not GNU Hello. There is no built-in mail reader. **
33. demo.at:381: 33. link against a preloaded static library (demo.at:381): 
FAILED (demo.at:387)




The above looks just like a classic Windows failure. I.e. a line
ending mismatch between the expout file created by the posixy
shell (\n) and the Win32 program (\r\n) and I would guess that
this is a problem that caused failures for Chuck last year as
well.

I think you need to use LT_AT_HOST_DATA instead of AT_DATA, where
appropriate.




Also, the old quote.test was fine, but libtool.at fails like this
on both Cygwin and MinGW:

#                             -*- compilation -*-
28. libtool.at:60: testing quote shell meta-characters in filenames ...
/home/peda/libtool/git/cygwin/libtool -n --mode=compile gcc -c "-DVAR=:test" 
foo.c
../../libtool-msvc/tests/libtool.at:99: $LIBTOOL -n --mode=$mode $preargs 
$preflag"$flag:test" $postargs
stdout:
libtool: compile:  gcc -c -DVAR=:test foo.c  -DDLL_EXPORT -DPIC -o .libs/foo.o
libtool: compile:  gcc -c -DVAR=:test foo.c -o foo.o >/dev/null 2>&1
/usr/bin/grep -E "compile:.*-DVAR=:test " stdout
../../libtool-msvc/tests/libtool.at:104: $EGREP 
"$mode:.*$match_preflag$flag:test " stdout
stdout:
libtool: compile:  gcc -c -DVAR=:test foo.c  -DDLL_EXPORT -DPIC -o .libs/foo.o
libtool: compile:  gcc -c -DVAR=:test foo.c -o foo.o >/dev/null 2>&1
/home/peda/libtool/git/cygwin/libtool -n --mode=compile gcc -c "-DVAR=":test"" 
foo.c
../../libtool-msvc/tests/libtool.at:108: $LIBTOOL -n --mode=$mode $preargs 
$preflag"$flag$mchar:test$mchar" $postargs
stdout:
libtool: compile:  gcc -c -DVAR=\":test\" foo.c  -DDLL_EXPORT -DPIC -o 
.libs/foo.o
libtool: compile:  gcc -c -DVAR=\":test\" foo.c -o foo.o >/dev/null 2>&1
/usr/bin/grep -E "compile:.*\"?-DVAR=\\\\\\":test\\\\\\"\"? " stdout
../../libtool-msvc/tests/libtool.at:110: $EGREP 
"$mode:.*$match_preflag\"?$flag\\\\\\$mchar:test\\\\\\$mchar\"? " stdout
stdout:
libtool: compile:  gcc -c -DVAR=\":test\" foo.c  -DDLL_EXPORT -DPIC -o 
.libs/foo.o
libtool: compile:  gcc -c -DVAR=\":test\" foo.c -o foo.o >/dev/null 2>&1
/home/peda/libtool/git/cygwin/libtool -n --mode=compile gcc -c "-DVAR=`:test`" 
foo.c
../../libtool-msvc/tests/libtool.at:108: $LIBTOOL -n --mode=$mode $preargs 
$preflag"$flag$mchar:test$mchar" $postargs
stdout:
libtool: compile:  gcc -c -DVAR=\`:test\` foo.c  -DDLL_EXPORT -DPIC -o 
.libs/foo.o
libtool: compile:  gcc -c -DVAR=\`:test\` foo.c -o foo.o >/dev/null 2>&1
/usr/bin/grep -E "compile:.*\"?-DVAR=\\\\\\`:test\\\\\\`\"? " stdout
../../libtool-msvc/tests/libtool.at:110: $EGREP 
"$mode:.*$match_preflag\"?$flag\\\\\\$mchar:test\\\\\\$mchar\"? " stdout
stdout:
../../libtool-msvc/tests/libtool.at:110: exit code was 1, expected 0
28. libtool.at:60: 28. quote shell meta-characters in filenames 
(libtool.at:60): FAILED (libtool.at:110)



I haven't looked at the log from all failing MinGW tests, but
given that the testsuite seems in pretty good shape on Cygwin
(only #28 failing) one can hope that the difference is all about
line ending issues.


Here's the testsuite output from MinGW. Ping me for testsuite.log
if you need it.


Shell option parser generator.

  1: fallback short option splitting                 ok
  2: enhanced short option splitting                 ok
  3: fallback long option splitting                  ok
  4: enhanced long option splitting                  ok
  5: fallback option appending                       ok
  6: enhanced option appending                       ok
  7: fallback arithmetic                             ok
  8: enhanced arithmetic                             ok
  9: fallback path slicing                           ok
 10: enhanced path slicing                           ok

Libtoolize operation.

 11: libtoolize macro installation                   ok
 12: libtoolize macro directory mismatch error       ok
 13: libtoolize macro serial update                  ok
 14: libtoolize config files serial update           ok
 15: diagnose missing LT_CONFIG_LTDL_DIR             ok
 16: copy ltdl.m4 with shared macro directory        ok
 17: correctly parse LTDL_INIT from configure.ac     ok
 18: diagnose missing LTDL_INIT invocation           ok
 19: upgrading verbatim style aclocal.m4             ok
 20: verbatim aclocal.m4 w/o AC_CONFIG_MACRO_DIR     ok
 21: nonrecursive ltdl with AC_CONFIG_MACRO_DIR      ok
 22: subproject ltdl with unconventional layout      ok
 23: Subproject ltdl without GNU M4                  ok
 24: LIBTOOLIZE_OPTIONS                              ok
 25: cleanup old installation                        ok

Basic libtool operation.

 26: check help output                               ok
 27: diagnose no mode specified                      ok
 28: quote shell meta-characters in filenames        FAILED (libtool.at:110)
 29: transform source suffices                       ok
 30: check link mode operation                       ok
 31: check objectlist file operation                 ok
 32: test LT_SUPPORTED_TAG interface                 ok

Linking and loading.

 33: link against a preloaded static library         FAILED (demo.at:387)
 34: build and dynamically load a module             FAILED (demo.at:404)
 35: preload static and dynamic module               FAILED (demo.at:421)
 36: deplibs_check_method                            FAILED (demo.at:467)
 37: disable fast install                            FAILED (demo.at:483)
 38: force PIC objects                               FAILED (demo.at:499)
 39: force non-PIC objects                           FAILED (demo.at:537)
 40: hardcoding library path                         FAILED (demo.at:610)
 41: binary relinking at install time                FAILED (demo.at:718)
 42: uninstalled libraries have priority             FAILED (demo.at:789)
 43: linking with long file names                    FAILED (demo.at:916)
 44: override pic_flag at configure time             skipped (pic_flag.at:39)
 45: test --with-pic                                 skipped (with-pic.at:39)

Convenience libraries.

 46: build and link against a static library         FAILED (cdemo.at:141)
 47: build and link against a dynamic library        FAILED (cdemo.at:156)
 48: build both static and dynamic                   FAILED (cdemo.at:171)
 49: allow_undefined_flag                            FAILED (cdemo.at:191)
 50: C convenience archives                          ok
 51: C++ convenience archives                        ok
 52: F77 convenience archives                        ok
 53: FC convenience archives                         ok
 54: Java convenience archives                       skipped 
(convenience.at:230)

Library interdependencies.

 55: static library interdependencies                FAILED (depdemo.at:291)
 56: shared library interdependencies                FAILED (depdemo.at:308)
 57: shared and static interdependencies             FAILED (depdemo.at:325)
 58: disable fast install                            FAILED (depdemo.at:343)
 59: binary relinking at install time                FAILED (depdemo.at:360)

Testing libtool functions.

 60: standard command line options                   ok
 61: mode short-hands                                ok
 62: debug tracing                                   ok
 63: duplicate members in archive tests              ok
 64: duplicate convenience archive names             ok
 65: preserve duplicate convenience deps             expected failure 
(duplicate_deps.at:72)
 66: passing CC flags through libtool                ok
 67: passing CXX flags through libtool               ok
 68: passing F77 flags through libtool               ok
 69: passing FC flags through libtool                ok
 70: passing GCJ flags through libtool               skipped (flags.at:24)
 71: inherited_linker_flags                          ok
 72: Link order test                                 ok
 73: Link order of deplibs                           ok
 74: Failure tests                                   ok
 75: shlibpath_overrides_runpath                     skipped (shlibpath.at:54)
 76: Runpath in libtool library files                ok
 77: static linking flags for programs               ok
 78: ccache -all-static                              ok
 79: Export test                                     ok
 80: sys_lib_search_path                             skipped (search-path.at:56)
 81: sys_lib_search_path on w32                      ok
 82: indirect convenience                            ok
 83: indirect uninstalled                            ok
 84: static library contains static library          expected failure 
(archive-in-archive.at:56)
 85: both of -o prog and -o prog$EXEEXT work         ok
 86: execute mode                                    ok
 87: bindir basic lib test                           ok
 88: bindir install tests                            ok
 89: cwrapper for uninstalled executables            ok
 90: cwrapper string length                          ok
 91: cwrapper and installed shared libraries         ok
 92: deplib in subdir                                ok
 93: inferred tag                                    ok
 94: CXX inferred tag                                ok
 95: F77 inferred tag                                ok
 96: FC inferred tag                                 ok
 97: GCJ inferred tag                                skipped (infer-tag.at:84)
 98: localized compiler messages                     ok
 99: nocase library search                           ok
100: Install tests                                   ok
101: versioning                                      ok

DESTDIR tests

102: Simple DESTDIR install                          ok
103: DESTDIR with in-package deplibs                 ok

Support for older m4 interface.

104: AM_PROG_LIBTOOL                                 ok
105: AC_WITH_LTDL                                    ok

Support for older libltdl interfaces.

106: Makefile.inc                                    ok

Libtool subdir-objects support.

107: C subdir-objects                                ok
108: C++ subdir-objects                              ok

Libltdl functionality.

109: lt_dlexit unloading libs                        ok
110: lt_dlopenadvise library loading                 ok
111: lt_dlopen error messages                        skipped (lt_dlopen.at:31)
112: lt_dlopen archive                               skipped (lt_dlopen_a.at:95)
113: lt_dlopenext error messages                     ok
114: libdir of installed modules                     ok
115: ltdl API                                        ok
116: dlloader API                                    ok
117: loadlibrary error messages                      ok
118: syntax of .la files                             expected failure 
(lalib-syntax.at:133)
119: resident modules                                ok
120: SList functionality                             ok
121: enforced lib prefix                             ok

Dynamic ltdl runtime loading.

122: dynamically ltdl preload static modules         FAILED (mdemo.at:646)
123: dynamically ltdl load a shared module           FAILED (mdemo.at:663)
124: ltdl load shared and static modules             FAILED (mdemo.at:680)
125: ltdl dryrun                                     FAILED (mdemo.at:745)
126: link with library that loads ltdl modules       FAILED (mdemo.at:856)

Standalone Libltdl.

127: compiling softlinked libltdl                    ok
128: compiling copied libltdl                        ok
129: installable libltdl                             ok
130: linking libltdl without autotools               ok

Subproject Libltdl.

131: compiling softlinked libltdl                    ok
132: compiling copied libltdl                        ok
133: installable libltdl                             ok
134: linking libltdl without autotools               ok

Nonrecursive Automake Libltdl.

135: compiling softlinked libltdl                    ok
136: compiling copied libltdl                        ok
137: installable libltdl                             ok

Recursive Automake Libltdl.

138: compiling softlinked libltdl                    ok
139: compiling copied libltdl                        ok
140: installable libltdl                             ok

C++ language support.

141: static library                                  FAILED (tagdemo.at:344)
142: shared library                                  FAILED (tagdemo.at:359)
143: shared and static together                      FAILED (tagdemo.at:374)
144: allow_undefined_flag                            FAILED (tagdemo.at:392)

C++ template tests.

145: simple template test                            ok
146: template test with subdirs                      ok

Constructors.

147: C++ static constructors                         ok
148: C++ exception handling                          ok

libtool script generation.

149: config.status                                   ok
150: config.lt                                       ok

Libtool usage in GCC

151: AC_NO_EXECUTABLES                               ok

Detecting identical deplibs.

152: build tree relpaths                             expected failure 
(deplibs-ident.at:69)

configure interface to libltdl.

153: installable libltdl                             ok
154: --with-ltdl-include/lib                         ok
155: --with-included-ltdl                            ok
156: convenience libltdl                             ok

Libtool stress test.

157: Link option thorough search test                ok
158: Run tests with low max_cmd_len                  FAILED (cmdline_wrap.at:43)

F77 language support.

159: static library                                  FAILED (f77demo.at:308)
160: shared library                                  FAILED (f77demo.at:323)
161: shared and static together                      FAILED (f77demo.at:338)

Fortran language support.

162: static library                                  FAILED (fcdemo.at:310)
163: shared library                                  FAILED (fcdemo.at:325)
164: shared and static together                      FAILED (fcdemo.at:340)

Mac OS X tests

165: darwin fat compile                              skipped (darwin.at:42)
166: darwin concurrent library extraction            ok
167: darwin gdb debug information                    ok
168: darwin ld warnings changing configure results   ok
169: darwin can lt_dlopen .dylib and .so files       skipped (darwin.at:249)

Windows tests.

170: dumpbin -symbols section hiding                 skipped 
(dumpbin-symbols.at:42)
171: deplibs without file command                    skipped 
(deplibs-mingw.at:79)

sysroot tests

172: -L=.../lib -l                                   skipped (sysroot.at:203)
173: -L SYSROOT/.../lib -l                           skipped (sysroot.at:204)
174: SYSROOT/.../*.la                                skipped (sysroot.at:205)

## ------------- ##
## Test results. ##
## ------------- ##

ERROR: 158 tests were run,
41 failed (4 expected failures).
16 tests were skipped.
## -------------------------- ##
## testsuite.log was created. ##
## -------------------------- ##

Please send `tests/testsuite.log' and all information you think might help:

   To: <address@hidden>
   Subject: [GNU Libtool 2.4.2.273-e24f1-dirty] testsuite: 28 33 34 35 36 37 38 
39 40 41 42 43 46 47 48 49 55 56 57 58 59 122 123 124 125 126 141 142 143 144 
158 159 160 161 162 163 164 failed

You may investigate any problem if you feel able to do so, in which
case the test suite provides a good starting point.  Its output may
be found below `tests/testsuite.dir'.


Cheers,
Peter




reply via email to

[Prev in Thread] Current Thread [Next in Thread]