[indiana-discuss] XineramaGetState() vs different (un)patched vendor provided vers of lib

Martin Bochnig mb1x at gmx.com
Wed Oct 3 06:45:26 PDT 2007


The following is especially important to all "open/free" distros 
including Indiana, since those cannot ship with / depend on closed 
non-re-distributable libraries:

As I already had written in my 05:45AM message, dirtily working around 
the issue described below costed less than 20 minutes, here is the patch 
that gets all the gtk/gdk based X-clients (Gnome, FF, TB ... ) working 
again, with Xorg's libXext, instead of Sun's one:


bash-3.00$ pwd
/FOX/MERCURIAL_20070830thu/XXX__fox-gate/XW_NV/open-src/lib/libXext
bash-3.00$ ls -al *.patch
-rw-r--r--   1 bochnig  other       3069 Oct  3 15:11 
XineramaGetState_and_XineramaGetInfo__fake_libXext.patch
bash-3.00$ cat XineramaGetState_and_XineramaGetInfo__fake_libXext.patch
###############################################################################
#
# XineramaGetState_and_XineramaGetInfo__fake_libXext.patch 0.1
#
# @SEE http://www.opensolaris.org/jive/thread.jspa?threadID=41001&tstart=0
#
###############################################################################
#
# XineramaGetState_and_XineramaGetInfo__fake_libXext.patch 0.1
#
# Copyright 2007 Martin Bochnig, MartUX.org  All rights reserved.
# Use subject to license terms.
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, and/or sell copies of the Software, and to permit persons
# to whom the Software is furnished to do so, provided that the above
# copyright notice(s) and this permission notice appear in all copies of
# the Software and that both the above copyright notice(s) and this
# permission notice appear in supporting documentation.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
# OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
# HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL
# INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#
# Except as contained in this notice, the name of a copyright holder
# shall not be used in advertising or otherwise to promote the sale, use
# or other dealings in this Software without prior written authorization
# of the copyright holder.
#
# @(#)Makefile  0.1     07/10/03
#

--- src/Makefile.in     2006-10-13 22:09:51.000000000 +0200
+++ src/Makefile.in     2007-10-03 14:48:34.624660000 +0200
@@ -58,7 +58,7 @@
 libXext_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
 am_libXext_la_OBJECTS = DPMS.lo MITMisc.lo XAppgroup.lo XEVI.lo \
        XLbx.lo XMultibuf.lo XSecurity.lo XShape.lo XShm.lo XSync.lo \
-       XTestExt1.lo Xcup.lo Xdbe.lo extutil.lo globals.lo
+       XTestExt1.lo Xcup.lo Xdbe.lo extutil.lo globals.lo 
XineramaGetState_and_XineramaGetInfo__fake_libXext.lo
 libXext_la_OBJECTS = $(am_libXext_la_OBJECTS)
 DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/depcomp
@@ -217,7 +217,8 @@
        Xcup.c \
        Xdbe.c \
        extutil.c \
-       globals.c
+       globals.c \
+       XineramaGetState_and_XineramaGetInfo__fake_libXext.c

 all: all-am

--- src/XineramaGetState_and_XineramaGetInfo__fake_libXext.c    
1970-01-01 01:00:00.000000000 +0100
+++ src/XineramaGetState_and_XineramaGetInfo__fake_libXext.c    
2007-10-03 14:37:16.087893000 +0200
@@ -0,0 +1,10 @@
+void XineramaGetState(void *p)
+{
+       return;
+}
+
+void XineramaGetInfo(void *p)
+{
+        return;
+}
+


Regards,
%martin



On Wed Oct  3 06:09AM MEST 2007 Martin Bochnig wrote:

> Just to be clear: Setting LD_RUN_PATH (build host) and/or LD_LIBRARY_PATH_32 (on the [build host {bad} or] client) to "/usr/openwin/lib" is not the "solution" I am looking for, nor is using any libtool- or ld-flags.
>
> I rather would like to see both of the following two things:
>
> #0.) Desktop/JDS should no longer depend on any deprecated call
> #1.) *Solely* for the sake of backwards compatibility: An open-up Sun's proprietary libXext, so that we can add proprietary functionality to Xorg's default version of libXext (de facto standard since 6.8), via automatically patching the diffs in before each src tree generation.
>
> What do you think?
>
> %martin
>
> p.s. Did you already hear some info from g11n regarding where SUNWxorg-xkb has gone?
>   
>>> On Wed Oct  3 05:51AM MEST 2007 Martin Bochnig wrote:
>> I just found Moinak has asked the same question already:
>> http://www.opensolaris.org/jive/thread.jspa?messageID=153375
>>
>> %m
>>> On Wed Oct  3 05:45AM MEST 2007 Martin Bochnig wrote:
>>> Modern (gtk/gdk based) desktop applications shipping as part of SXCR are linked against /usr/lib/libgdk-x11-2.0.so.0, which in turn still depends on the deprecated libXext-function XineramaGetState(), which gets reported as missing symbol, whenever an (unpatched default) libXext is found/used by the runtime linker, before the Sun-provided historic /usr/openwin/lib/libXext.so.0 would be found/used.
>>> This has led to one of the issues, that prevented me from calling 
>>> http://www.martux.org/xorg/fox-gate/20070930sun/bin_pkgadd/Xorg7.2.0_opensol_sparc_snv70_binary_pkgadd__fox-gate_20070930.tar.gz
>>> a more_mature_than_alpha-release. Because the previous release 
>>> http://www.martux.org/xorg/OLD/20070503__7.2.0/bin_pkgadd_packages/
>>> had not shipped with libXext at all, no problems arised when replacing Xsun: Gnome could be started, so coud firefox, thunderbird et al. Because the first flavour of libXext that would have been found would always be the very version, /usr/lib/libgdk-x11-2.0.so.0 once had been linked against. Now that I have added libXext to the fox-gate framework (encouraged by/derived from Moinak's work) the default unpatched version at /usr/X11/lib/libXext.so.0.0.0 would be found first, attempted to use, and then the default error handling mechanism of exit()'ing would be gone, printing that nice message to stderr:
>>>
>>> ld.so.1: gnome-session: fatal: relocation error: file /usr/lib/libgdk-x11-2.0.so.0: symbol XineramaGetState: referenced symbol not found
>>>
>>> It is naturally a question of a few minutes to either add such a symbol to /FOX/MERCURIAL_20070830thu/XXX__fox-gate/XW_NV/open-src/lib/libXext/libXext.patch and change the Makefile to alawys apply that patch (and let that function do nothing, but make the linker's symbol table happy). Or to add such a symbol to an almost empty fake-lib (and LD_PRELOAD it, or link against that).
>>>
>>> But those are only hacks/workarounds.
>>> Are there plans to open up Sun's version of libXext, or does it even exist for download already, somewhere? One could then go and make Xorg's new libXext backward compatible to Sun-provided X-clients in a properly engineered manner. Don't know.
>>>
>>> References:
>>>
>>> Even SGI listed XineramaGetState(3X11) as 
>>> "This API call is deprecated by the new call,
>>>           XineramaActive(3X11). Only run-time backward compatibility
>>>           is provided. For compilation, use the API proposed by Xorg."
>>> Years ago!
>>> (Then I don't quite understand why state of the art JDS stuff is still depending on it, on the latest versions of SX[C-D]R ?)
>>>
>>> http://docs.sgi.com/library/tpl/cgi-bin/getdoc.cgi?coll=0650&db=man&fname=/usr/share/catman/p_man/cat3/Xext/XineramaGetState.z
>>> http://blogs.sun.com/alanc/date/20050602
>>> http://www.google.com/search?hl=en&q=%22XineramaGetState%3A%22&btnG=Search
>>>
>>> --
>>> %martin
>>>  



More information about the indiana-discuss mailing list