remove PRIMUS_LOAD_GLOBAL HACK
authorAndreas Beckmann <anbe@debian.org>
Thu, 23 Jul 2020 21:15:02 +0000 (22:15 +0100)
committerAndreas Beckmann <anbe@debian.org>
Thu, 23 Jul 2020 21:15:02 +0000 (22:15 +0100)
and link against libglapi.so.0 instead

Gbp-Pq: Name no-PRIMUS_LOAD_GLOBAL.patch

Makefile
libglfork.cpp
primusrun

index a83e4659075a2d6c78d9c15235f9f85dce1a883e..e450f17aa01e58af14981c60c19b08028e128605 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -14,7 +14,6 @@ PRIMUS_VERBOSE     ?= 1
 PRIMUS_UPLOAD      ?= 0
 PRIMUS_SLEEP       ?= 90
 PRIMUS_DISPLAY     ?= :8
-PRIMUS_LOAD_GLOBAL ?= libglapi.so.0
 PRIMUS_libGLa      ?= /usr/$$LIB/nvidia/libGL.so.1
 PRIMUS_libGLd      ?= /usr/$$LIB/libGL.so.1
 
@@ -24,10 +23,9 @@ CXXFLAGS += -DPRIMUS_VERBOSE='"$(PRIMUS_VERBOSE)"'
 CXXFLAGS += -DPRIMUS_UPLOAD='"$(PRIMUS_UPLOAD)"'
 CXXFLAGS += -DPRIMUS_SLEEP='"$(PRIMUS_SLEEP)"'
 CXXFLAGS += -DPRIMUS_DISPLAY='"$(PRIMUS_DISPLAY)"'
-CXXFLAGS += -DPRIMUS_LOAD_GLOBAL='"$(PRIMUS_LOAD_GLOBAL)"'
 CXXFLAGS += -DPRIMUS_libGLa='"$(PRIMUS_libGLa)"'
 CXXFLAGS += -DPRIMUS_libGLd='"$(PRIMUS_libGLd)"'
 
 $(LIBDIR)/libGL.so.1: libglfork.cpp
        mkdir -p $(LIBDIR)
-       $(CXX) $(CPPFLAGS) $(CXXFLAGS) -fvisibility=hidden -fPIC -shared -Wl,-Bsymbolic -o $@ $< $(LDFLAGS) -lX11 -lpthread -lrt
+       $(CXX) $(CPPFLAGS) $(CXXFLAGS) -fvisibility=hidden -fPIC -shared -Wl,-Bsymbolic -o $@ $< $(LDFLAGS) -lX11 -lpthread -lrt -Wl,--no-as-needed /usr/lib/$(DEB_HOST_MULTIARCH)/libglapi.so.0
index 270918e21eb71718b8f8b991244dd67416b08554..213779aabff5b22e8e749a053a678683eb9dcdaa 100644 (file)
@@ -233,9 +233,6 @@ static struct PrimusInfo {
   // The "displaying" X display. The same as the application is using, but
   // primus opens its own connection.
   Display *ddpy;
-  // An artifact: primus needs to make symbols from libglapi.so globally
-  // visible before loading Mesa
-  const void *needed_global;
   CapturedFns afns;
   CapturedFns dfns;
   // FIXME: there are race conditions in accesses to these
@@ -252,13 +249,11 @@ static struct PrimusInfo {
     autosleep(atoi(getconf(PRIMUS_SLEEP))),
     adpy(XOpenDisplay(adpy_str)),
     ddpy(XOpenDisplay(NULL)),
-    needed_global(dlopen(getconf(PRIMUS_LOAD_GLOBAL), RTLD_LAZY | RTLD_GLOBAL)),
     afns(libgla_str),
     dfns(getconf(PRIMUS_libGLd))
   {
     die_if(!adpy, "failed to open secondary X display\n");
     die_if(!ddpy, "failed to open main X display\n");
-    die_if(!needed_global, "failed to load PRIMUS_LOAD_GLOBAL\n");
   }
 } primus;
 
index 91b22d9e4594f6b968137e36a2dc6c413c933a8b..75e943b05faf8e5600073a24be83a3e46b3a2735 100755 (executable)
--- a/primusrun
+++ b/primusrun
@@ -33,9 +33,6 @@ PRIMUS_libGL=${PRIMUS_libGL:-/usr/lib/x86_64-linux-gnu/primus:/usr/lib/i386-linu
 # in default search paths.  Add its path manually after the primus library
 # PRIMUS_libGL=${PRIMUS_libGL}:/usr/lib/nvidia-current:/usr/lib32/nvidia-current
 
-# Mesa drivers need a few symbols to be visible
-# export PRIMUS_LOAD_GLOBAL=${PRIMUS_LOAD_GLOBAL:-'libglapi.so.0'}
-
 # Need functions from primus libGL to take precedence
 export LD_LIBRARY_PATH=${PRIMUS_libGL}${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}