Hi DRC,
The attached patches maybe seem a bit self-serving, but my main thought
in posting them is that given the number of companies/distros shipping
their own VirtualGL builds it is a good thing to encourage vendor
VirtualGL builds to be distinguished from your official builds, reducing
end user confusion and potential support pain.
Thoughts?
-Nathan
>From 26c1fb9648c63e9737ccba45a07c7d3eba741ef6 Mon Sep 17 00:00:00 2001
From: Nathan Kidd <nk...@opentext.com>
Date: Thu, 12 Mar 2015 10:15:54 -0400
Subject: [PATCH 1/3] Support custom BUILD string via VENDOR_BUILD cmake define
---
CMakeLists.txt | 3 +++
1 file changed, 3 insertions(+)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 66916c9..0bb1362 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -34,6 +34,9 @@ else()
message(FATAL_ERROR "Platform not supported.")
endif()
string(REGEX REPLACE "\n" "" BUILD ${BUILD})
+if (VENDOR_BUILD)
+ set(BUILD ${VENDOR_BUILD})
+endif()
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
--
1.9.1
>From 0f349e7eecbd9930c9806143c15380bf8de681a5 Mon Sep 17 00:00:00 2001
From: Nathan Kidd <nk...@opentext.com>
Date: Tue, 30 Apr 2013 21:29:05 -0400
Subject: [PATCH 2/3] Make debug build version string more noticable
Custom build strings mean a single "d" may be hard to notice.
---
CMakeLists.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0bb1362..6ecd4ee 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -51,7 +51,7 @@ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
# This only works if building from the command line. There is currently no way
# to set a variable's value based on the build type when using the MSVC IDE.
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
- set(BUILD "${BUILD}d")
+ set(BUILD "${BUILD} (debug)")
endif()
message(STATUS "VERSION = ${VERSION}, BUILD = ${BUILD}")
--
1.9.1
>From b153ac210d58c5e0bbb61838240bd31c77f4ee02 Mon Sep 17 00:00:00 2001
From: Nathan Kidd <nk...@opentext.com>
Date: Tue, 3 Mar 2015 17:50:49 -0500
Subject: [PATCH 3/3] Support custom vendor lib names
To set custom library names use:
cmake -DRRFAKER_BASE_NAME=vendorrrfaker \
-DDLFAKER_BASE_NAME=vendordlfaker \
-DGLFAKER_BASE_NAME=vendorglfaker
This increases reliability, working around problems where
it is too easy to load another vendor's lib because of the app startup
scripts modifying LD_LIBRARY_PATH order, etc..
Files in release/ are left unchanged since they specify package names and
installation dirs specific to the VirtualGL.org release, and vendors
should thus use their own packaging scripts.
---
CMakeLists.txt | 16 ++++++++++++++++
server/CMakeLists.txt | 28 ++++++++++++++--------------
server/dlfaker.c | 29 ++++++++++++++++++++++-------
3 files changed, 52 insertions(+), 21 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6ecd4ee..3c2f441 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -290,6 +290,22 @@ option(VGL_BUILDSERVER "Build VirtualGL server components"
if(VGL_BUILDSERVER)
message(STATUS "Building VirtualGL server components")
+ if (NOT DEFINED RRFAKER_BASE_NAME)
+ set(RRFAKER_BASE_NAME "rrfaker")
+ set(RRFAKER_LIB_NAME "librrfaker.so")
+ endif()
+ if (NOT DEFINED DEFAKER_BASE_NAME)
+ set(DEFAKER_BASE_NAME "defaker")
+ set(DEFAKER_LIB_NAME "libdefaker.so")
+ endif()
+ if (NOT DEFINED GEFAKER_BASE_NAME)
+ set(GEFAKER_BASE_NAME "gefaker")
+ set(GEFAKER_LIB_NAME "libgefaker.so")
+ endif()
+ message(STATUS "RRFAKER_LIB_NAME = ${RRFAKER_LIB_NAME}")
+ message(STATUS "DLFAKER_LIB_NAME = ${DLFAKER_LIB_NAME}")
+ message(STATUS "GEFAKER_LIB_NAME = ${GEFAKER_LIB_NAME}")
+
if("${CMAKE_INSTALL_PREFIX}" STREQUAL "/opt/VirtualGL")
set(DEFAULT_VGL_FAKELIBDIR ${CMAKE_INSTALL_PREFIX}/fakelib${BITS})
set(DEFAULT_VGL_LIBDIR ${CMAKE_INSTALL_PREFIX}/lib${BITS})
diff --git a/server/CMakeLists.txt b/server/CMakeLists.txt
index d4669fc..4512240 100644
--- a/server/CMakeLists.txt
+++ b/server/CMakeLists.txt
@@ -67,40 +67,40 @@ set(RRFAKER_SOURCES
if(VGL_USEXV)
set(RRFAKER_SOURCES ${RRFAKER_SOURCES};XVTrans.cpp)
endif()
-add_library(rrfaker SHARED ${RRFAKER_SOURCES})
+add_library(${RRFAKER_BASE_NAME} SHARED ${RRFAKER_SOURCES})
if(MAPFLAG)
set_source_files_properties(faker-sym.cpp PROPERTIES
OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/faker-mapfile)
- set_target_properties(rrfaker PROPERTIES
+ set_target_properties(${RRFAKER_BASE_NAME} PROPERTIES
LINK_FLAGS "-z defs ${MAPFLAG}${CMAKE_CURRENT_BINARY_DIR}/faker-mapfile")
else()
- set_target_properties(rrfaker PROPERTIES LINK_FLAGS "-z defs")
+ set_target_properties(${RRFAKER_BASE_NAME} PROPERTIES LINK_FLAGS "-z defs")
endif()
if(VGL_FAKEXCB)
set(LIBXCB xcb xcb-glx xcb-keysyms X11-xcb)
endif()
-target_link_libraries(rrfaker vglcommon ${FBXFAKERLIB} vglsocket m
+target_link_libraries(${RRFAKER_BASE_NAME} vglcommon ${FBXFAKERLIB} vglsocket m
${OPENGL_gl_LIBRARY} ${LIBDL} ${LIBXCB})
if(CMAKE_SYSTEM_NAME STREQUAL "SunOS" AND CMAKE_COMPILER_IS_GNUCXX)
# For some reason, on SunOS/GCC CMake tries to use the C compiler to link
# C++ shared libs. Grrr...
- target_link_libraries(rrfaker stdc++)
+ target_link_libraries(${RRFAKER_BASE_NAME} stdc++)
endif()
-install(TARGETS rrfaker DESTINATION ${VGL_LIBDIR})
+install(TARGETS ${RRFAKER_BASE_NAME} DESTINATION ${VGL_LIBDIR})
install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory
\$ENV{DESTDIR}${VGL_FAKELIBDIR})")
install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink
- ${VGL_LIBDIR}/librrfaker.so
+ ${VGL_LIBDIR}/${RRFAKER_LIB_NAME}
\$ENV{DESTDIR}${VGL_FAKELIBDIR}/libGL.so)")
-add_library(dlfaker SHARED dlfaker.c)
-target_link_libraries(dlfaker ${LIBDL})
-install(TARGETS dlfaker DESTINATION ${VGL_LIBDIR})
+add_library(${DLFAKER_BASE_NAME} SHARED dlfaker.c)
+target_link_libraries(${DLFAKER_BASE_NAME} ${LIBDL})
+install(TARGETS ${DLFAKER_BASE_NAME} DESTINATION ${VGL_LIBDIR})
-add_library(gefaker SHARED gefaker.c)
-set_target_properties(gefaker PROPERTIES LINK_FLAGS "-z defs")
-target_link_libraries(gefaker ${LIBDL})
-install(TARGETS gefaker DESTINATION ${VGL_LIBDIR})
+add_library(${GEFAKER_BASE_NAME} SHARED gefaker.c)
+set_target_properties(${GEFAKER_BASE_NAME} PROPERTIES LINK_FLAGS "-z defs")
+target_link_libraries(${GEFAKER_BASE_NAME} ${LIBDL})
+install(TARGETS ${GEFAKER_BASE_NAME} DESTINATION ${VGL_LIBDIR})
set(HEADERS ../common/rr.h rrtransport.h)
install(FILES ${HEADERS} DESTINATION ${VGL_INCDIR})
diff --git a/server/dlfaker.c b/server/dlfaker.c
index f3e7fed..6f3e5da 100644
--- a/server/dlfaker.c
+++ b/server/dlfaker.c
@@ -20,6 +20,21 @@
extern void *_vgl_dlopen(const char *, int);
+const char *rrfakerlibname=
+#ifdef RRFAKER_LIB_NAME
+RRFAKER_LIB_NAME
+#else
+"librrfaker.so"
+#endif
+;
+
+const char *dlfakerlibname=
+#ifdef DLFAKER_BASE_NAME
+DLFAKER_LIB_NAME
+#else
+"libdlfaker.so"
+#endif
+;
/* If an application uses dlopen()/dlsym() to load functions from libGL or
libX11, this bypasses the LD_PRELOAD mechanism. Thus, VirtualGL has to
@@ -49,8 +64,8 @@ void *dlopen(const char *filename, int flag)
filename? filename:"NULL", flag);
}
- if((env=getenv(envname))==NULL || strlen(env)<1)
- env="librrfaker.so";
+ if((env=getenv(envname))!=NULL && strlen(env)>0)
+ rrfakerlibname=env;
if(filename &&
(!strncmp(filename, "libGL.", 6) || strstr(filename, "/libGL.")
|| !strncmp(filename, "libX11.", 7) || strstr(filename, "/libX11.")
@@ -61,16 +76,16 @@ void *dlopen(const char *filename, int flag)
if(verbose)
fprintf(stderr,
"[VGL] NOTICE: Replacing dlopen(\"%s\") with dlopen(\"%s\")\n",
- filename? filename:"NULL", env? env:"NULL");
- retval=_vgl_dlopen(env, flag);
+ filename? filename:"NULL", rrfakerlibname);
+ retval=_vgl_dlopen(rrfakerlibname, flag);
}
else if(filename && (!strncmp(filename, "libdl.", 6)
|| strstr(filename, "/libdl.")))
{
if(verbose)
- fprintf(stderr, "[VGL] NOTICE: Replacing dlopen(\"%s\") with dlopen(\"libdlfaker.so\")\n",
- filename? filename:"NULL");
- retval=_vgl_dlopen("libdlfaker.so", flag);
+ fprintf(stderr, "[VGL] NOTICE: Replacing dlopen(\"%s\") with dlopen(\"%s\")\n",
+ filename? filename:"NULL", dlfakerlibname);
+ retval=_vgl_dlopen(dlfakerlibname, flag);
}
else retval=_vgl_dlopen(filename, flag);
--
1.9.1
------------------------------------------------------------------------------
Dive into the World of Parallel Programming The Go Parallel Website, sponsored
by Intel and developed in partnership with Slashdot Media, is your hub for all
things parallel software development, from weekly thought leadership blogs to
news, videos, case studies, tutorials and more. Take a look and join the
conversation now. http://goparallel.sourceforge.net/
_______________________________________________
VirtualGL-Devel mailing list
VirtualGL-Devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/virtualgl-devel