Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Perl: porters

perl build failures 5.14.2(SuSE), 5.16.0(SuSE & perlbrew)

 

 

Perl porters RSS feed   Index | Next | Previous | View Threaded


perl-diddler at tlinx

Jun 20, 2012, 9:19 PM

Post #1 of 13 (444 views)
Permalink
perl build failures 5.14.2(SuSE), 5.16.0(SuSE & perlbrew)

The failure to build on 5.14.2 I've traced to a faulty C file
DynaLoader.c has, at the end the file an invalid "#line" statement
on line #481. This causes the C preprocessor to emit a fatal
error in it's thread -- while another thread continued into
building the unicode tables -- making it look like it might have
been there -- but no error occurred there in 5.14.2 or 5.16 --



474 newXS("DynaLoader::dl_error", XS_DynaLoader_dl_error, file);
475 #if XSubPPtmpAAAA
476 newXS("DynaLoader::CLONE", XS_DynaLoader_CLONE, file);
477 #endif
478
479 /* Initialisation Section */
480
481 #line "DynaLoader.xs"
482 #line 157 "DynaLoader.xs"
483 (void)dl_private_init(aTHX);
484
485 #if XSubPPtmpAAAA
486 #endif
487 #line 488 "DynaLoader.c"
488
489 /* End of Initialisation Section */
490
491 #if (PERL_REVISION == 5 && PERL_VERSION >= 9)
492 if (PL_unitcheckav)
493 call_list(PL_scopestack_ix, PL_unitcheckav);
494 #endif
495 XSRETURN_YES;
496 }
497
---------------------------------------------------------------
Possibly of more interest, is the failure to build 5.16.0 in both the
suse rpmbuild method and the "perlbrew install 5.16.0 -- with VERY
different options, they fail in the same place -- in the build of the
cpan file "Encode.pm" in the 2nd-stage build (miniperl built without
showing this problem). The make file has a bad line:

MAKEMAKER =
/home/packages/build/perl-5.16.0/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm
MM_VERSION = 6.6302
MM_REVISION = 66302

# FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle).
# BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle)
# PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar)
# DLBASE = Basename part of dynamic library. May be just equal BASEEXT.
MAKE = <<<<<<<<<<<<<<<<------------<<<<<<<<<<
FULLEXT = Encode
BASEEXT = Encode
PARENT_NAME =
DLBASE = $(BASEEXT)
VERSION_FROM = Encode.pm
INC = -I./Encode
OBJECT = $(O_FILES)
LDFROM = $(OBJECT)
LINKTYPE = dynamic
BOOTDEP =
===========


The make=nothing line undefines MAKE (/usr/bin/make), so later on, at this
point:
# --- MakeMaker subdirs section:

# The default clean, realclean and test targets in this Makefile
# have automatically been given entries for each subdir.


subdirs ::
$(NOECHO) cd Byte && $(MAKE) $(USEMAKEFILE) $(FIRST_MAKEFILE) all
$(PASTHRU)

^^^
The make fails with the error:

make[1]: Leaving directory
`/home/packages/build/perl-5.16.0/cpan/Filter-Util-Call'
Making all in cpan/Filter-Util-Call
make all PERL_CORE=1 LIBPERL_A=libperl.so LINKTYPE=dynamic
make[1]: Entering directory
`/home/packages/build/perl-5.16.0/cpan/Filter-Util-Call'
/bin/sh: -f: command not found
<<<<<<<<<<<<<<<<<<<<<<<<<----------------------
make[1]: *** [subdirs] Error 127
make[1]: Leaving directory `/home/packages/build/perl-5.16.0/cpan/Encode'
Unsuccessful make(cpan/Encode): code=512 at make_ext.pl line 466.
make: *** [lib/auto/Encode/Encode.so] Error 25
make: *** Waiting for unfinished jobs....


'configure' issues the message that 'Make' sets MAKE to the binary -- and
miniperl builds ok,... but somehow the bad Makefile gets produced (I think)
from the Makefile.PL.

--------------------------------

the perlbrew was built as 'me', while I've tried both rpms (5.14.2
& 5.16.0) as myself and as root...

These failures do not appear to be happening at random.
Ideas?

(Trying to build a debug version in order to have a chance to debug
the other problem)....

FWIW, I ran the build with the job constrained to 1 processor -- ran
quite a bit slower, but failed in the same place, so it's not like to
be parallelism related.

Open to suggestions...should I file bugs on these as I know they have
to be specific to my config...(sigh)...


davem at iabyn

Jun 21, 2012, 9:07 AM

Post #2 of 13 (426 views)
Permalink
Re: perl build failures 5.14.2(SuSE), 5.16.0(SuSE & perlbrew) [In reply to]

On Wed, Jun 20, 2012 at 09:19:28PM -0700, Linda W wrote:
> 481 #line "DynaLoader.xs"
[snip]
> MAKE = <<<<<<<<<<<<<<<<------------<<<<<<<<<<

Since both of these are derived files (DynaLoader.c from DynaLoader.xs,
which is copied from one of the dl_*.xs files), and Makefile by running
perl againt Makefile.PL, is shopuld be fairly straightforward to
to work out how these lines are getting there.

Again, unless you have some extremely uncommon build options, its got to
be something in your system, environment or hardware that is causing the
problem.


--
Atheism is a religion like not collecting stamps is a hobby


doughera at lafayette

Jun 21, 2012, 11:17 AM

Post #3 of 13 (424 views)
Permalink
Re: perl build failures 5.14.2(SuSE), 5.16.0(SuSE & perlbrew) [In reply to]

On Wed, 20 Jun 2012, Linda W wrote:

> The failure to build on 5.14.2 I've traced to a faulty C file
> DynaLoader.c has, at the end the file an invalid "#line" statement
> on line #481. This causes the C preprocessor to emit a fatal
> error in it's thread -- while another thread continued into
> building the unicode tables -- making it look like it might have
> been there -- but no error occurred there in 5.14.2 or 5.16 --

Dynaloader.c is a generated file, normally generated with a command
something like this:

../../miniperl "-I../../lib" "-I../../lib" ../../lib/ExtUtils/xsubpp
-noprototypes -typemap ../../lib/ExtUtils/typemap DynaLoader.xs >
DynaLoader.xsc && mv DynaLoader.xsc DynaLoader.c

Obviously, that directive
> #line "DynaLoader.xs"
is wrong.

I can't reproduce this problem with a build from the perl-5.14.2.tar file.
Perhaps if we solve your 5.16.0 problem, it will turn out to fix the
5.14.2 problem as well, so let's look at that:

> ---------------------------------------------------------------
> Possibly of more interest, is the failure to build 5.16.0 in both the
> suse rpmbuild method and the "perlbrew install 5.16.0 -- with VERY
> different options, they fail in the same place -- in the build of the
> cpan file "Encode.pm" in the 2nd-stage build (miniperl built without
> showing this problem). The make file has a bad line:
>
> MAKEMAKER =
> /home/packages/build/perl-5.16.0/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm
> MM_VERSION = 6.6302
> MM_REVISION = 66302
>
> # FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle).
> # BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle)
> # PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar)
> # DLBASE = Basename part of dynamic library. May be just equal BASEEXT.
> MAKE = <<<<<<<<<<<<<<<<------------<<<<<<<<<<
> FULLEXT = Encode

Yes, your diagnosis is correct. That line should read 'MAKE = make'.


> the perlbrew was built as 'me', while I've tried both rpms (5.14.2
> & 5.16.0) as myself and as root...
>
> These failures do not appear to be happening at random.
> Ideas?

I am unable to reproduce this with the perl-5.16.0.tar distribution.
I don't know either rmpbuild or perlbrew, so in order to rule those out,
could you please try building from a clean perl distribution and report
how it goes? For ease of replication, it would be helpful to use the
simplest Configure invocation you can that still reproduces the problem.

The difficulties you are encountering are all in generated code, which
leads me to wonder if there's a problem with the generated miniperl.
If you still get build failures even with a plain build from source,
try running

make minitest

In the past with similar-looking errors, we've found that some of the
regex tests were failing under minitest, and addressing those errors
ultimately helped fix the build.

--
Andy Dougherty doughera [at] lafayette


perl-diddler at tlinx

Jun 21, 2012, 1:41 PM

Post #4 of 13 (425 views)
Permalink
Re: perl build failures 5.14.2(SuSE), 5.16.0(SuSE & perlbrew) [In reply to]

Andy Dougherty wrote:
> I am unable to reproduce this with the perl-5.16.0.tar distribution.
> I don't know either rmpbuild or perlbrew, so in order to rule those out,
> could you please try building from a clean perl distribution and report
> how it goes? For ease of replication, it would be helpful to use the
> simplest Configure invocation you can that still reproduces the problem.
>
----
How can I run Configure without user interaction...? -- i.e. I want
to just run a shell script and have the options be "fixed" as me typing
in options by hand is a poor way to get repeatable results...

-----------
Dave Mitchell wrote:
> On Wed, Jun 20, 2012 at 09:19:28PM -0700, Linda W wrote:
>
>> 481 #line "DynaLoader.xs"
>>
> Since both of these are derived files (DynaLoader.c from DynaLoader.xs,
> which is copied from one of the dl_*.xs files), and Makefile by running
> perl againt Makefile.PL, is shopuld be fairly straightforward to
> to work out how these lines are getting there.
>
---
Not ^^ that line, as it doesn't give a line number and the numbers around
it are not monotonically increasing.

> Again, unless you have some extremely uncommon build options, its got to
> be something in your system, environment or hardware that is causing the
> problem.
>
----
Well, That's why I tried to be specific mentioned what I used.
perlbrew is from CPAN, and the source rpms for suse's perl builds are
not difficult to find: 5.14.2 is part of the currently released version,
5.16 is still in 'factory'...but options and patches they use would be
in the rpm's:

http://download.opensuse.org/source/distribution/12.1/repo/oss/suse/src/perl-5.14.2-1.9.src.rpm
&
http://download.opensuse.org/repositories/devel:/languages:/perl/openSUSE_Factory/src/perl-5.16.0-59.5.src.rpm

I wanted to go from a "known set" of options...in trying to build.

You are right, undoubtedly, in that it is something screwy on my system
-- BUT
configure is supposed to catch those things. The whole purpose of
configure not
just going by "general configs" -- but testing everything, is to make
sure it works on the specific platform you are building on. That it
doesn't points
at a problem in configure (in not handling some unexpected situation on
my system).

I just finished(?) upgrading from OSuse 11.4->12.1. That's a cause of
quite a few problems right there (knocking them down as fast as I can
find them...)...


dmcbride at cpan

Jun 21, 2012, 1:47 PM

Post #5 of 13 (422 views)
Permalink
Re: perl build failures 5.14.2(SuSE), 5.16.0(SuSE & perlbrew) [In reply to]

On Thursday June 21 2012 1:41:27 PM Linda W wrote:
> How can I run Configure without user interaction...? -- i.e. I want
> to just run a shell script and have the options be "fixed" as me typing
> in options by hand is a poor way to get repeatable results...

http://www.perlmonks.org/index.pl?node_id=976457

Not a shell script, but a perl script. It's how I've been doing this. I also
find it a bit easier to tweak (adding keys, removing them). I also used
something based on this to do all my AIX testing earlier this year - compiling
AIX both 32- and 64-bit, with symlinks or not, etc., etc., as I could then use
Getopt::Long to parse parameters and then add extra parameters to the lists
easily enough before running it.
Attachments: signature.asc (0.19 KB)


doughera at lafayette

Jun 21, 2012, 2:27 PM

Post #6 of 13 (426 views)
Permalink
Re: perl build failures 5.14.2(SuSE), 5.16.0(SuSE & perlbrew) [In reply to]

On Thu, 21 Jun 2012, Linda W wrote:

> Andy Dougherty wrote:
> > I am unable to reproduce this with the perl-5.16.0.tar distribution.
> > I don't know either rmpbuild or perlbrew, so in order to rule those out,
> > could you please try building from a clean perl distribution and report
> > how it goes? For ease of replication, it would be helpful to use the
> > simplest Configure invocation you can that still reproduces the problem.
> >
> ----
> How can I run Configure without user interaction...? -- i.e. I want
> to just run a shell script and have the options be "fixed" as me typing
> in options by hand is a poor way to get repeatable results...

The simplest incantation is (taken from the top of the INSTALL file)

sh Configure -de
make
make test

It would be most useful to proceed this way -- i.e. remove perlbrew
and SUSE's rpm packaging from the mix. This will help others
reproduce it more readily and also help localize the problem.

> -----------
> Dave Mitchell wrote:
> > On Wed, Jun 20, 2012 at 09:19:28PM -0700, Linda W wrote:
> >
> >> 481 #line "DynaLoader.xs"
> >>
> > Since both of these are derived files (DynaLoader.c from DynaLoader.xs,
> > which is copied from one of the dl_*.xs files), and Makefile by running
> > perl againt Makefile.PL, is shopuld be fairly straightforward to
> > to work out how these lines are getting there.
> >
> ---
> Not ^^ that line, as it doesn't give a line number and the numbers around
> it are not monotonically increasing.
>
> > Again, unless you have some extremely uncommon build options, its got to
> > be something in your system, environment or hardware that is causing the
> > problem.
> >
> ----
> Well, That's why I tried to be specific mentioned what I used.
> perlbrew is from CPAN, and the source rpms for suse's perl builds are
> not difficult to find: 5.14.2 is part of the currently released version,
> 5.16 is still in 'factory'...but options and patches they use would be
> in the rpm's:
>
> http://download.opensuse.org/source/distribution/12.1/repo/oss/suse/src/perl-5.14.2-1.9.src.rpm
> &
> http://download.opensuse.org/repositories/devel:/languages:/perl/openSUSE_Factory/src/perl-5.16.0-59.5.src.rpm
>
> I wanted to go from a "known set" of options...in trying to build.

I appreciate that perlbrew is freely available and the suse's perl
builds are also freely available. I have also not used either, and
would prefer to use my time trying to solve your problem, not learning
two new build systems and not trying to sort out whatever patches they
may or may not apply.

It is easy to add in options to the recipe above. From the 'myconfig'
output on [perl #113720], looking cat config_args, I can deduce that
Configure was called like this:

sh Configure -ds -e -Dprefix=/usr -Dvendorprefix=/usr \
-Dinstallusrbinperl -Dusethreads -Di_db -Di_dbm -Di_ndbm \
-Di_gdbm -Dd_dbm_open -Duseshrplib=true \
-Doptimize='-fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g -Wall -pipe -Accflags=-DPERL_USE_SAFE_PUTENV' \
-Dotherlibdirs=/usr/lib/perl5/site_perl

> You are right, undoubtedly, in that it is something screwy on my system
> -- BUT
> configure is supposed to catch those things. The whole purpose of
> configure not
> just going by "general configs" -- but testing everything, is to make
> sure it works on the specific platform you are building on. That it
> doesn't points
> at a problem in configure (in not handling some unexpected situation on
> my system).

Yes, which I'm happy to look at. It will just be easier to debug if
there are fewer extraneous bits of software involved.

> I just finished(?) upgrading from OSuse 11.4->12.1. That's a cause of
> quite a few problems right there (knocking them down as fast as I can
> find them...)...

--
Andy Dougherty doughera [at] lafayette


perl-diddler at tlinx

Jun 21, 2012, 5:00 PM

Post #7 of 13 (420 views)
Permalink
Re: perl build failures 5.14.2(SuSE), 5.16.0(SuSE & perlbrew) [In reply to]

> sh Configure -de
> make
> make test
>
parallel building isn't supported?

(make -j test -- would perform make & test in one step, no?)


perl-diddler at tlinx

Jun 21, 2012, 5:09 PM

Post #8 of 13 (425 views)
Permalink
Re: perl build failures 5.14.2(SuSE), 5.16.0(SuSE & perlbrew) [In reply to]

Andy Dougherty wrote:
> First problems seen here:
>
> The simplest incantation is (taken from the top of the INSTALL file)
>
> sh Configure -de
>
End of configuration questions.

Stripping down executable paths...

Creating config.sh...
Configure: line 22748: -f: command not found
Configure: line 23838: -f: command not found
Configure: line 23844: -f: command not found

Doing variable substitutions on .SH files...
Extracting config.h (with variable substitutions)
Extracting cflags (with variable substitutions)
Not re-extracting config.h
Extracting makedepend (with variable substitutions)
Extracting Makefile (with variable substitutions)
./Makefile.SH: line 1600: -f: command not found
Extracting myconfig (with variable substitutions)
Extracting pod/Makefile (with variable substitutions)
Extracting Policy.sh (with variable substitutions)
./Policy_sh.SH: line 147: -d: command not found
./Policy_sh.SH: line 174: -d: command not found
Extracting runtests (with variable substitutions)
Extracting utils/Makefile (with variable substitutions)
Extracting x2p/cflags (with variable substitutions)
Extracting x2p/Makefile (with variable substitutions)
Run depend now? [y]
Configure: line 23924: depend: command not found
Configure: line 23937: -f: command not found
Configure: line 23947: -f: command not found
Configure: line 23953: -f: command not found
Configure: line 23954: -rf: command not found


doy at tozt

Jun 21, 2012, 5:18 PM

Post #9 of 13 (422 views)
Permalink
Re: perl build failures 5.14.2(SuSE), 5.16.0(SuSE & perlbrew) [In reply to]

On Thu, Jun 21, 2012 at 05:00:07PM -0700, Linda W wrote:
>
> > sh Configure -de
> > make
> > make test
> parallel building isn't supported?
>
> (make -j test -- would perform make & test in one step, no?)

"make -j9" works for building, and "TEST_JOBS=9 make test_harness" works
for testing.

-doy


doughera at lafayette

Jun 21, 2012, 5:24 PM

Post #10 of 13 (421 views)
Permalink
Re: perl build failures 5.14.2(SuSE), 5.16.0(SuSE & perlbrew) [In reply to]

On Thu, 21 Jun 2012, Linda W wrote:

>
> > sh Configure -de
> > make
> > make test
> >
> parallel building isn't supported?
>
> (make -j test -- would perform make & test in one step, no?)

Yes, parallel make is supported, and yes 'make test' should have all the
correct dependencies. However, since your system is clearly working
differently from expected, it makes sense to keep things as simple as
possible, hence my suggestion to do the simplest, most straightforward
test first. That way, if it doesn't work, there are fewer things to
fiddle with. Thus, even though parallel make might be quicker for an
individual run, the overall process would possibly be slower, as we have
to strip away complexity to isolate the problem.

--
Andy Dougherty doughera [at] lafayette


doughera at lafayette

Jun 21, 2012, 5:29 PM

Post #11 of 13 (422 views)
Permalink
Re: perl build failures 5.14.2(SuSE), 5.16.0(SuSE & perlbrew) [In reply to]

On Thu, 21 Jun 2012, Linda W wrote:

> Andy Dougherty wrote:
> First problems seen here:
>
> The simplest incantation is (taken from the top of the INSTALL file)
>
> sh Configure -de
>
>
> End of configuration questions.
>  
> Stripping down executable paths...
>  
> Creating config.sh...
> Configure: line 22748: -f: command not found
> Configure: line 23838: -f: command not found
> Configure: line 23844: -f: command not found

Ok, those are strange. Those are all places where Configure calls

$test -f

I would have expected Configure to have reported something like:

test is in /usr/bin/test
[ ... ]
Using the test build into your sh

Could you please send me (not the whole p5p list) the complete log and the
config.sh file? i.e., in clean checkout of 5.16.0, something like this
(for a /bin/sh-flavored shell).

sh Configure -de > config.log 2>&1

and then mail me the config.sh and config.log files.

Also, what shell do you have for /bin/sh ?

> Doing variable substitutions on .SH files...
> Extracting config.h (with variable substitutions)
> Extracting cflags (with variable substitutions)
> Not re-extracting config.h
> Extracting makedepend (with variable substitutions)
> Extracting Makefile (with variable substitutions)
> ./Makefile.SH: line 1600: -f: command not found
> Extracting myconfig (with variable substitutions)
> Extracting pod/Makefile (with variable substitutions)
> Extracting Policy.sh (with variable substitutions)
> ./Policy_sh.SH: line 147: -d: command not found
> ./Policy_sh.SH: line 174: -d: command not found
> Extracting runtests (with variable substitutions)
> Extracting utils/Makefile (with variable substitutions)
> Extracting x2p/cflags (with variable substitutions)
> Extracting x2p/Makefile (with variable substitutions)
> Run  depend now? [y] 
> Configure: line 23924: depend: command not found
> Configure: line 23937: -f: command not found
> Configure: line 23947: -f: command not found
> Configure: line 23953: -f: command not found
> Configure: line 23954: -rf: command not found

That last one is saying $rm is empty. That's truly odd.

--
Andy Dougherty doughera [at] lafayette


perl-diddler at tlinx

Jun 21, 2012, 5:30 PM

Post #12 of 13 (421 views)
Permalink
Re: perl build failures 5.14.2(SuSE), 5.16.0(SuSE & perlbrew) [In reply to]

Andy Dougherty wrote:
> On Thu, 21 Jun 2012, Linda W wrote:
>
>
>>> sh Configure -de
>>> make
>>> make test
>>>
>>>
>> parallel building isn't supported?
>>

Seems like $test is != test in configure toward the end.

the statements they are failing on are things like
$test -f <file>...
test -f works, but $test doesn't appear to point to test...
(still working on pulling things out of my environment...)
bashenv, bashrc (gone)...
removing things a bit at a time...


perl-diddler at tlinx

Jun 21, 2012, 5:46 PM

Post #13 of 13 (425 views)
Permalink
Re: perl build failures 5.14.2(SuSE), 5.16.0(SuSE & perlbrew) [In reply to]

...

weirder and weirder...

env -i /bin/dash or /bin/sh(a ->/bin/bash)
allows the Config to work/complete...but then the make instantly fails:

[end of configure]
make[1]: Entering directory `/home/tools/perl/perl-5.16.0'
echo Makefile.SH cflags.SH config_h.SH makedepend.SH myconfig.SH
pod/Makefile.SH | tr ' ' '\n' >.shlist
make[1]: Leaving directory `/home/tools/perl/perl-5.16.0'
Updating makefile...
cd x2p; make depend
make[1]: Entering directory `/home/tools/perl/perl-5.16.0/x2p'
sh ../makedepend MAKE=make
make[2]: Entering directory `/home/tools/perl/perl-5.16.0/x2p'
echo hash.c str.c util.c walk.c | tr ' ' '\n' >.clist
make[2]: Leaving directory `/home/tools/perl/perl-5.16.0/x2p'
Finding dependencies for hash.o.
Finding dependencies for str.o.
Finding dependencies for util.o.
Finding dependencies for walk.o.
make[2]: Entering directory `/home/tools/perl/perl-5.16.0/x2p'
echo Makefile.SH cflags.SH | tr ' ' '\n' >.shlist
make[2]: Leaving directory `/home/tools/perl/perl-5.16.0/x2p'
Updating makefile...
make[1]: Leaving directory `/home/tools/perl/perl-5.16.0/x2p'
Now you must run 'make'.

If you compile perl5 on a different machine or from a different object
directory, copy the Policy.sh file from this object directory to the
new one before you run Configure -- this will help you with most of
the policy defaults.

sh-4.2$ make
`sh cflags "optimize='-O2'" perlmini.o` -DPERL_IS_MINIPERL
-DPERL_EXTERNAL_GLOB perlmini.c
CCCMD = cc -DPERL_CORE -c -fno-strict-aliasing -pipe
-fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE
-D_FILE_OFFSET_BITS=64 -std=c89 -O2 -Wall -ansi -W -Wextra
-Wdeclaration-after-statement -Wendif-labels -Wc++-compat -Wwrite-strings
cc: error trying to exec 'cc1': execvp: No such file or directory
make: *** [perlmini.o] Error 1
sh-4.2$
----

This may take a while....will peep if I get stuck...

Perl porters RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.