On Thu, Aug 11, 2016 at 8:15 AM, Rainer Orth wrote: > >> 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. Sorry, I don't know what I messed up in my testing. I committed the appended patch, which should fix the problem. Ian