diff mbox

[libgo] Support Solaris 8/9

Message ID ydd1v1wbh9q.fsf@manam.CeBiTec.Uni-Bielefeld.DE
State New
Headers show

Commit Message

Rainer Orth March 24, 2011, 4:44 p.m. UTC
When I tried to build libgo on Solaris 9/x86 with native tools, I ran
into a couple of issues:

* To correctly build sysinfo.go, one needs a different set of flags to
  compile sysinfo.c that conflict with the onces needed on Solaris 10+.
  Since there seems to be no easy way to autoconf this knowledge, I'm
  hardcoding it in configure.ac (OSCFLAGS) and pass it to mksysinfo.sh.

* As documented in the Autoconf manual, the native grep cannot handle
  \|.  One needs to use egrep for that instead.  I've only updated the
  affected invocations, but one may want (or need) to either do this
  wholesale and/or replace the hardcoded egrep by autoconfed $EGREP.

* Similarly, native sed cannot handle \?, so I'm substituting both
  alternatives in sequence.

* For native TLS to work, libgo needs to be linked with -pthread, so
  libthread.so is included in the link.  On Solaris 8, -pthread takes
  care of even more contortions necessary to get the proper thread
  library.  In order for that to happen, I've introduced
  libgo_la_LDFLAGS.

With those changes (and the strerror_r replacement since Solaris 8 and 9
also lack that function), I could successfully build and test libgo,
with relatively decent results:

FAIL: fmt
Can't open -n
grep: can't open -n
grep: can't open -n
mallocs per Sprintf(""): 1
mallocs per Sprintf("xxx"): 1
mallocs per Sprintf("%x"): 3
mallocs per Sprintf("%x %x"): 4
/vol/gcc/src/hg/trunk/local/libgo/testsuite/gotest[325]: 22734 Segmentation Fault
make: *** [fmt/check] Error 1

FAIL: archive/zip
Can't open -n
grep: can't open -n
grep: can't open -n
--- FAIL: zip.TestReader (0.0 seconds)
	error=open testdata/dd.zip: No such file or directory, want <nil>
FAIL
make: *** [archive/zip/check] Error 1

FAIL: crypto/rand
Can't open -n
grep: can't open -n
grep: can't open -n
--- FAIL: rand.TestRead (0.0 seconds)
	Read(buf) = 1040, %!s(<nil>)
FAIL
make: *** [crypto/rand/check] Error 1

FAIL: image/png
Can't open -n
grep: can't open -n
grep: can't open -n
--- FAIL: png.TestReader (1.0 seconds)
	basn0g01-30 open testdata/pngsuite/basn0g01-30.png: No such file or directory
	basn0g02-29 open testdata/pngsuite/basn0g02-29.png: No such file or directory
	basn0g04-31 open testdata/pngsuite/basn0g04-31.png: No such file or directory
--- FAIL: png.TestWriter (0.2 seconds)
	basn0g01-30 open testdata/pngsuite/basn0g01-30.png: No such file or directory
	basn0g02-29 open testdata/pngsuite/basn0g02-29.png: No such file or directory
	basn0g04-31 open testdata/pngsuite/basn0g04-31.png: No such file or directory
FAIL
make: *** [image/png/check] Error 1

I'll be running make check-go shortly.

	Rainer


2011-03-24  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	* configure.ac (OSCFLAGS): Define.
	* Makefile.am (s-sysinfo): Use it.
	(libgo_la_LDFLAGS): Define.
	* mksysinfo.sh (sysinfo.c) [__sun__ && __svr4__]: Remove.
	Replace \| in grep REs with egrep and |.
	Replace \? in sed REs with two variants.
	* Makefile.in: Regenerate.
	* configure: Regenerate.

Comments

Ian Lance Taylor March 24, 2011, 5:46 p.m. UTC | #1
Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> writes:

> FAIL: image/png
> Can't open -n
> grep: can't open -n
> grep: can't open -n
> --- FAIL: png.TestReader (1.0 seconds)
> 	basn0g01-30 open testdata/pngsuite/basn0g01-30.png: No such file or directory
> 	basn0g02-29 open testdata/pngsuite/basn0g02-29.png: No such file or directory
> 	basn0g04-31 open testdata/pngsuite/basn0g04-31.png: No such file or directory
> --- FAIL: png.TestWriter (0.2 seconds)
> 	basn0g01-30 open testdata/pngsuite/basn0g01-30.png: No such file or directory
> 	basn0g02-29 open testdata/pngsuite/basn0g02-29.png: No such file or directory
> 	basn0g04-31 open testdata/pngsuite/basn0g04-31.png: No such file or directory
> FAIL
> make: *** [image/png/check] Error 1

Just a quick note that I committed patches yesterday which should fix at
least some of those problems.  I failed to commit some of the test data
the last time I updated the library.

Ian
Rainer Orth March 24, 2011, 5:47 p.m. UTC | #2
Ian Lance Taylor <iant@google.com> writes:

> Just a quick note that I committed patches yesterday which should fix at
> least some of those problems.  I failed to commit some of the test data
> the last time I updated the library.

Fine, I'll give it another try tonight or over the weekend.

	Rainer
Ian Lance Taylor April 1, 2011, 5:11 a.m. UTC | #3
On Thu, Mar 24, 2011 at 9:44 AM, Rainer Orth
<ro@cebitec.uni-bielefeld.de> wrote:

> 2011-03-24  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
>
>        * configure.ac (OSCFLAGS): Define.
>        * Makefile.am (s-sysinfo): Use it.
>        (libgo_la_LDFLAGS): Define.
>        * mksysinfo.sh (sysinfo.c) [__sun__ && __svr4__]: Remove.
>        Replace \| in grep REs with egrep and |.
>        Replace \? in sed REs with two variants.
>        * Makefile.in: Regenerate.
>        * configure: Regenerate.

Thanks.  Committed.

Ian
diff mbox

Patch

diff -r 75d0e839ffe1 libgo/Makefile.am
--- a/libgo/Makefile.am	Thu Mar 24 13:22:54 2011 +0100
+++ b/libgo/Makefile.am	Thu Mar 24 16:45:53 2011 +0100
@@ -1459,6 +1459,8 @@ 
 
 libgo_la_SOURCES = $(runtime_files)
 
+libgo_la_LDFLAGS = $(PTHREAD_CFLAGS)
+
 libgo_la_LIBADD = \
 	$(libgo_go_objs) $(LIBFFI) $(PTHREAD_LIBS) $(MATH_LIBS) $(NET_LIBS)
 
@@ -2512,7 +2514,7 @@ 
 
 sysinfo.go: s-sysinfo; @true
 s-sysinfo: $(srcdir)/mksysinfo.sh config.h
-	CC="$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS)" $(SHELL) $(srcdir)/mksysinfo.sh
+	CC="$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(OSCFLAGS)" $(SHELL) $(srcdir)/mksysinfo.sh
 	$(SHELL) $(srcdir)/../move-if-change tmp-sysinfo.go sysinfo.go
 	$(STAMP) $@
 
diff -r 75d0e839ffe1 libgo/configure.ac
--- a/libgo/configure.ac	Thu Mar 24 13:22:54 2011 +0100
+++ b/libgo/configure.ac	Thu Mar 24 16:45:53 2011 +0100
@@ -229,6 +229,22 @@ 
 fi
 AC_SUBST(GO_DEBUG_PROC_REGS_OS_ARCH_FILE)
 
+dnl Some targets need special flags to build sysinfo.go.
+case "$target" in
+    *-*-solaris2.[[89]])
+	# Solaris 8/9 need this so struct msghdr gets the msg_control
+	# etc. fields in <sys/socket.h> (_XPG4_2).
+	OSCFLAGS='-D_XOPEN_SOURCE=500 -D_XOPEN_SOURCE_EXTENDED -D__EXTENSIONS__'
+	;;
+    *-*-solaris2.1[[01]])
+	# Solaris 10+ needs this so struct msghdr gets the msg_control
+	# etc. fields in <sys/socket.h> (_XPG4_2).  _XOPEN_SOURCE=500 as
+	# above doesn't work with C99.
+	OSCFLAGS='-D_XOPEN_SOURCE=600 -D__EXTENSIONS__'
+	;;
+esac
+AC_SUBST(OSCFLAGS)
+
 dnl Use -fsplit-stack when compiling C code if available.
 AC_CACHE_CHECK([whether -fsplit-stack is supported],
 [libgo_cv_c_split_stack_supported],
diff -r 75d0e839ffe1 libgo/mksysinfo.sh
--- a/libgo/mksysinfo.sh	Thu Mar 24 13:22:54 2011 +0100
+++ b/libgo/mksysinfo.sh	Thu Mar 24 16:45:53 2011 +0100
@@ -29,12 +29,6 @@ 
 #define _LARGEFILE_SOURCE
 #define _FILE_OFFSET_BITS 64
 
-#if defined(__sun__) && defined(__svr4__)
-/* Needed by Solaris header files.  */
-#define _XOPEN_SOURCE 600
-#define __EXTENSIONS__
-#endif
-
 #include <sys/types.h>
 #include <dirent.h>
 #include <errno.h>
@@ -96,7 +90,7 @@ 
   sed -e 's/^\(const \)_\(E[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
 
 # The O_xxx flags.
-grep '^const _\(O\|F\|FD\)_' gen-sysinfo.go | \
+egrep '^const _(O|F|FD)_' gen-sysinfo.go | \
   sed -e 's/^\(const \)_\([^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
 if ! grep '^const O_ASYNC' ${OUT} >/dev/null 2>&1; then
   echo "const O_ASYNC = 0" >> ${OUT}
@@ -139,7 +133,7 @@ 
 fi
 
 # Networking constants.
-grep '^const _\(AF\|SOCK\|SOL\|SO\|IPPROTO\|TCP\|IP\|IPV6\)_' gen-sysinfo.go |
+egrep '^const _(AF|SOCK|SOL|SO|IPPROTO|TCP|IP|IPV6)_' gen-sysinfo.go |
   sed -e 's/^\(const \)_\([^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
 grep '^const _SOMAXCONN' gen-sysinfo.go |
   sed -e 's/^\(const \)_\(SOMAXCONN[^= ]*\)\(.*\)$/\1\2 = _\2/' \
@@ -318,7 +312,8 @@ 
   grep '^type _stat64 ' gen-sysinfo.go
 else
   grep '^type _stat ' gen-sysinfo.go
-fi | sed -e 's/type _stat\(64\)\?/type Stat_t/' \
+fi | sed -e 's/type _stat64/type Stat_t/' \
+         -e 's/type _stat/type Stat_t/' \
          -e 's/st_dev/Dev/' \
          -e 's/st_ino/Ino/g' \
          -e 's/st_nlink/Nlink/' \
@@ -344,7 +339,8 @@ 
   grep '^type _dirent64 ' gen-sysinfo.go
 else
   grep '^type _dirent ' gen-sysinfo.go
-fi | sed -e 's/type _dirent\(64\)\?/type Dirent/' \
+fi | sed -e 's/type _dirent64/type Dirent/' \
+         -e 's/type _dirent/type Dirent/' \
          -e 's/d_name \[0+1\]/d_name [0+256]/' \
          -e 's/d_name/Name/' \
          -e 's/]int8/]byte/' \