Well here's a nice ten-liner that will undo the recent damage to HPUX
32 bit builds using HP's compilers/linkers;

+ cc -b -Wl,-B,symbolic,+vnocompatwarnings,-z,+h,libssl.sl.0.9.7 -o
libssl.sl.0.9.7 -Wl,-Fl,libssl.a -ldld
chmod: can't access libssl.sl.0.9.7

WTF is it about?  Well, used to link using ld directly, now we are
passing through cc.  But without splitting -Wl,-Fl from libssl.a with
a space, therefore without libssl.a as a link input, cc says "ha!  nothing
to link" and -silently- goes away (leaving the user wondering, for hours,
what didn't just happen.)  Yes, of course there is no libssl.sl.0.9.7.

Secondly, once we remove the space, we crash out with

/usr/ccs/bin/ld: CODE_ONE_SYM fixup to non-code subspace in file
/opt/langtools/lib/crt0.o - shared library must be position
independent.  Use +z or +Z to recompile.

http://mail.gnome.org/archives/gtk-list/1999-March/msg00704.html reports
similar issues, with no resolution on how-to-exclude crt0.o from the 'cc'
flavor, so the patch proposes to go back to using ld as worked in 0.9.7e
and other releases.

Finally -b +s disappeared between 0.9.7e and 0.9.7i, for what reason I do
not know, but it certainly is needed on 32 bit builds.  Now if the flag
interferes with the 64 bit ld/link loader, then perhaps these can go into
their own set of 32-bit flavor flags?  immediately prior to -Fl?  Discussion
welcome, I'm happy to play with the 64 bit flavor in about 2-3 weeks when
I'm back from ApacheCon.

Bill

--- Makefile	21 Oct 2005 18:18:09 -0000
+++ Makefile	7 Dec 2005 00:35:44 -0000
@@ -516,11 +516,11 @@
 		shlib=lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR}; \
 	fi; \
 	[ -f $$shlib ] && rm -f $$shlib; \
-	ALLSYMSFLAGS='-Wl,-Fl'; \
-	expr $(PLATFORM) : 'hpux64' > /dev/null && ALLSYMSFLAGS='-Wl,+forceload'; \
-	( set -x; ${CC} ${SHARED_LDFLAGS} \
-		-Wl,-B,symbolic,+vnocompatwarnings,-z,+h,$$shlib \
-		-o $$shlib $$ALLSYMSFLAGS,lib$$i.a -ldld ) || exit 1; \
+	ALLSYMSFLAGS='-Fl'; \
+	expr $(PLATFORM) : 'hpux64' > /dev/null && ALLSYMSFLAGS='+forceload'; \
+	( set -x; /usr/ccs/bin/ld ${SHARED_LDFLAGS} \
+		-B symbolic +vnocompatwarnings -b -z +s +h $$shlib \
+		-o $$shlib $$ALLSYMSFLAGS lib$$i.a -ldld -lc ) || exit 1; \
 	chmod a=rx $$shlib; \
 	done
 
--- Makefile.org	21 Oct 2005 18:18:09 -0000
+++ Makefile.org	7 Dec 2005 00:35:44 -0000
@@ -516,11 +516,11 @@
 		shlib=lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR}; \
 	fi; \
 	[ -f $$shlib ] && rm -f $$shlib; \
-	ALLSYMSFLAGS='-Wl,-Fl'; \
-	expr $(PLATFORM) : 'hpux64' > /dev/null && ALLSYMSFLAGS='-Wl,+forceload'; \
-	( set -x; ${CC} ${SHARED_LDFLAGS} \
-		-Wl,-B,symbolic,+vnocompatwarnings,-z,+h,$$shlib \
-		-o $$shlib $$ALLSYMSFLAGS,lib$$i.a -ldld ) || exit 1; \
+	ALLSYMSFLAGS='-Fl'; \
+	expr $(PLATFORM) : 'hpux64' > /dev/null && ALLSYMSFLAGS='+forceload'; \
+	( set -x; /usr/ccs/bin/ld ${SHARED_LDFLAGS} \
+		-B symbolic +vnocompatwarnings -b -z +s +h $$shlib \
+		-o $$shlib $$ALLSYMSFLAGS lib$$i.a -ldld -lc ) || exit 1; \
 	chmod a=rx $$shlib; \
 	done
 

Reply via email to