Hi,

  Attached is a possible patch to enable compiling the XServer
and modules with hidden symbols by default. Please comment :-)

  The patch allows using the "--disable-visibility" option, and
variants to disable compilation with hidden symbols (or one could
go wild and change the xorg-server.pc :-)

  This patch probably is better then the one I had posted in
the bugzilla some time ago, as this one doesn't require changes
to modules, neither editing Makefile.am by Makefile.am to choose
if want hidden or public symbols; if the X Server works with
hidden symbols, so should the modules.

  I am also attaching a slightly modified version of the original
script I used to search for undefined symbols. To test it, run
% xorg-symbols.pl | less
to use the default prefix of /usr and module path of
/usr/lib/xorg/modules, or run it with the arguments -? or -h for
the available options.

  Right now, I am running today's git master, compiling the XServer
with the attached patch, and the recent patches I added.
  I am also using the vesa driver now; other modules requires more
patches, not yet added to avoid too much changes at a time...

Thanks,
Paulo
diff --git a/configure.ac b/configure.ac
index ea3d0fa..9beeca1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -504,6 +504,9 @@ AC_ARG_ENABLE(builtin-fonts,  AS_HELP_STRING([--enable-builtin-fonts], [Use only
 AC_ARG_ENABLE(null-root-cursor, AS_HELP_STRING([--enable-null-root-cursor], [Use an empty root cursor (default: use core cursor)]),
                                  [NULL_ROOT_CURSOR=$enableval],
                                  [NULL_ROOT_CURSOR=no])
+AC_ARG_ENABLE(visibility,     AC_HELP_STRING([--enable-visibility], [Enable symbol visibility (default: auto)]),
+				[SYMBOL_VISIBILITY=$enableval],
+				[SYMBOL_VISIBILITY=auto])
 
 dnl GLX build options
 AC_ARG_WITH(mesa-source,     AS_HELP_STRING([--with-mesa-source=MESA_SOURCE], [Path to Mesa source tree]),
@@ -1229,6 +1232,46 @@ if test "x$XORG" = xyes; then
 	XORG_CFLAGS="$XORGSERVER_CFLAGS -DHAVE_XORG_CONFIG_H"
 	XORG_LIBS="$COMPOSITE_LIB $FIXES_LIB $XEXTXORG_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $SELINUX_LIB"
 
+	dnl ==================================================================
+	dnl symbol visibility
+	symbol_visibility=
+	have_visibility=disabled
+	if test x$SYMBOL_VISIBILITY != xno; then
+	    AC_MSG_CHECKING(for symbol visibility support)
+	    if test x$GCC = xyes; then
+		VISIBILITY_CFLAGS="-fvisibility=hidden"
+	    else
+		AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"])
+		if test x$SUNCC = xyes; then
+		    VISIBILITY_CFLAGS="-xldscope=hidden"
+		else
+		    have_visibility=no
+		fi
+	    fi
+	    if test x$have_visibility != xno; then
+		save_CFLAGS="$CFLAGS"
+		CFLAGS="$CFLAGS $VISIBILITY_CFLAGS"
+		AC_TRY_COMPILE(
+		    [#include <X11/Xfuncproto.h>
+		     extern _X_HIDDEN int hidden_int;
+		     extern _X_EXPORT int public_int;
+		     extern _X_HIDDEN int hidden_int_func(void);
+		     extern _X_EXPORT int public_int_func(void);],
+		    [],
+		    have_visibility=yes,
+		    have_visibility=no)
+		CFLAGS=$save_CFLAGS
+	    fi
+	    AC_MSG_RESULT([$have_visibility])
+	    if test x$have_visibility != xno; then
+		symbol_visibility=$VISIBILITY_CFLAGS
+		XORG_CFLAGS="$XORG_CFLAGS $VISIBILITY_CFLAGS"
+	    fi
+	fi
+	dnl added to xorg-server.pc
+	AC_SUBST([symbol_visibility])
+	dnl ===================================================================
+
 	PKG_CHECK_MODULES([PCIACCESS], [pciaccess >= 0.8.0])
 	SAVE_LIBS=$LIBS
 	SAVE_CFLAGS=$CFLAGS
diff --git a/xorg-server.pc.in b/xorg-server.pc.in
index 139adf4..7547aa3 100644
--- a/xorg-server.pc.in
+++ b/xorg-server.pc.in
@@ -15,5 +15,5 @@ Name: xorg-server
 Description: Modular X.Org X Server
 Version: @PACKAGE_VERSION@
 Requires: pixman-1 pciaccess
-Cflags: -I${sdkdir}
+Cflags: -I${sdkdir} @symbol_visibility@
 Libs: -L${libdir}

Attachment: xorg-symbols.pl
Description: Perl program

_______________________________________________
xorg mailing list
xorg@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/xorg

Reply via email to