Hi Ian,

> Go packages use build tags (see the section on Build Constraints at
> https://golang.org/pkg/go/build/) to select which files to build on
> specific systems.
>
> Previously the libgo Makefile explicitly listed the set of files to
> compile for each package.  For packages that use build tags, this
> required a lot of awkward automake conditionals in the Makefile.
>
> This patch changes the build to look at the build tags in the files.
> The new shell script libgo/match.sh does the matching.  This required
> adjusting a lot of build tags, and removing some files that are never
> used.  I verified that the exact same sets of files are compiled on
> x86_64-pc-linux-gnu.  I also tested the build on i386-sun-solaris
> (building for both 32-bit and 64-bit).
>
> Writing match.sh revealed some bugs in the build tag handling that
> already exists, in a slightly different form, in the gotest shell
> script.  This patch fixes those problems as well.
>
> The old code used automake conditionals to handle systems that were
> missing strerror_r and wait4.  Rather than deal with those in Go,
> those functions are now implemented in runtime/go-nosys.c when
> necessary, so the Go code can simply assume that they exist.
>
> The os testsuite looked for dir_unix.go, which was never built for
> gccgo and has now been removed.  I changed the testsuite to look for
> dir.go instead.
>
> Note that if you have an existing build directory, you will have to
> remove all the .dep files in TARGET/libgo after updating to this
> patch.  There isn't anything that will force them to update
> automatically.
>
> Bootstrapped on x86_64-pc-linux-gnu and i386-sun-solaris.  Ran Go
> testsuite on x86_64-pc-linux-gnu.  Committed to mainline.

this patch broke i386-pc-solaris2.12 and sparc-sun-solaris2.12
bootstrap, however: in both cases, the 64-bit build of os.lo fails like this:

/vol/gcc/src/hg/trunk/local/libgo/go/os/dir.go:82:8: error: reference to 
undefined name 'libc_readdir_r'
   i := libc_readdir_r(file.dirinfo.dir, entryDirent, pr)
        ^

Neither dir_largefile.go (which is correctly omitted, being 32-bit only)
nor dir_regfile.go (which is needed here) is included in the
compilation.

        Rainer

-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University

Reply via email to