Are there problems with the latest glib on other UNIXen - Solaris et al.? On IRIX, compilation fails with: libtool: compile: cc -DHAVE_CONFIG_H -I. -I.. -DG_LOG_DOMAIN=\"GLib-GIO\" -I.. -I.. -I../glib -I../gmodule -DG_DISABLE_CAST_CHECKS -DG_DISABLE_DEPRECATED -DGIO_COMPILATION -DGIO_MODULE_DIR=\"/opt/gentoo/usr/lib32/gio/modules\" -I/opt/gentoo/usr/include -DG_DISABLE_SINGLE_INCLUDES -D_REENTRANT -c99 -O2 -n32 -mips4 -r14000 -float_const -use_readonly_const -TARG:isa=mips4:platform=ip30:processor=r14000 -TENV:zeroinit_in_bss=ON -OPT:fast_io=ON:Olimit=8192:reorg_common=ON:swp=ON -LNO:auto_dist=ON:fusion_peeling_limit=8:gather_scatter=2 -diag_error 1035,1999,3333 -woff 1174,1183,1185,1552,3968,3970 -c ginetaddress.c -Wp,-MD,.deps/ginetaddress.TPlo -DPIC -o .libs/ginetaddress.o cc-1047 cc: WARNING File = /usr/include/sys/param.h, Line = 371 Macro "MIN" (declared at line 194 of "../glib/gmacros.h") has an incompatible redefinition. #define MIN(a,b) (((a)<(b))?(a):(b)) ^ cc-1047 cc: WARNING File = /usr/include/sys/param.h, Line = 372 Macro "MAX" (declared at line 191 of "../glib/gmacros.h") has an incompatible redefinition. #define MAX(a,b) (((a)>(b))?(a):(b)) ^ cc-1018 cc: ERROR File = gnetworkingprivate.h, Line = 76 An unmatched left parentheses "(" appears in an expression. gsize *sa_len); ^ 1 error detected in the compilation of "ginetaddress.c". make[4]: *** [ginetaddress.lo] Error 1 make[4]: Leaving directory `/usr/opt/gentoo/var/tmp/portage/dev-libs/glib-2.22.2/work/glib-2.22.2/gio' make[3]: *** [all-recursive] Error 1 make[3]: Leaving directory `/usr/opt/gentoo/var/tmp/portage/dev-libs/glib-2.22.2/work/glib-2.22.2/gio' make[2]: *** [all] Error 2 make[2]: Leaving directory `/usr/opt/gentoo/var/tmp/portage/dev-libs/glib-2.22.2/work/glib-2.22.2/gio' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/usr/opt/gentoo/var/tmp/portage/dev-libs/glib-2.22.2/work/glib-2.22.2' make: *** [all] Error 2 * ERROR: dev-libs/glib-2.22.2 failed: * emake failed * * Call stack: * ebuild.sh, line 51: Called call-ebuildshell 'src_compile' * environment, line 612: Called src_compile * environment, line 3227: Called _eapi2_src_compile * ebuild.sh, line 678: Called die * The specific snippet of code: * emake || die "emake failed" ... which I *think* is because sa_len is a macro. <sys/socket.h> declares: struct sockaddr { union { struct { #undef _HAVE_SA_LEN /* marker for some places to change */ #ifdef _HAVE_SA_LEN /* when we have sin_len */ u_char sa_len2; /* total length */ u_char sa_family2; /* address family */ #else sa_family_t sa_family2; /* address family */ #endif char sa_data2[14]; /* up to 14 bytes of direct address */ } sa_generic; int sa_align; } sa_union; }; #define sa_len sa_union.sa_generic.sa_len2 #define sa_family sa_union.sa_generic.sa_family2 #define sa_data sa_union.sa_generic.sa_data2 ... and I'm not sure that *sa_union.sa_generic.sa_len2 is what was intended - or whether it even exists with the _HAVE_SA_LEN under a couple of lines above. In any case, how does the compiler read an opening round bracket?? There don't seem to be any conditional checks for the presence or absence of sa_len, and sa_len doesn't even seem to exist under Linux. At the same time, gio/gnetworkingprivate.h and ginetaddress.c don't seem to be auto-generated, yet they don't exist in previous glib versions in portage, so I can't compare this version to the last-known-good version. I'm confused...
Mentioned here: https://bugzilla.gnome.org/show_bug.cgi?id=604875 - might be fixed in glib-2.22.4?
Should be fixed in 2.24.1