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