1
0
Fork 0

Make -Wl,-z,now work on older systems

This commit is contained in:
Ilya Fedin 2021-11-01 04:08:01 +04:00 committed by John Preston
parent 13331633e5
commit d5237e224e
6 changed files with 80 additions and 0 deletions

View file

@ -5,6 +5,9 @@
# https://github.com/desktop-app/legal/blob/master/LEGAL
add_subdirectory(external)
if (LINUX AND NOT DESKTOP_APP_USE_PACKAGED)
add_subdirectory(linux_xcb_helper)
endif()
if (LINUX
AND NOT DESKTOP_APP_USE_PACKAGED
AND NOT DESKTOP_APP_DISABLE_WAYLAND_INTEGRATION)

View file

@ -290,6 +290,8 @@ else()
endif()
target_link_libraries(external_qt
INTERFACE
desktop-app::linux_xcb_helper
$<TARGET_FILE:desktop-app::linux_xcb_helper>
desktop-app::linux_gtk_helper
$<TARGET_FILE:desktop-app::linux_gtk_helper>
desktop-app::linux_glib_helper

View file

@ -264,6 +264,8 @@ else()
endif()
target_link_libraries(external_qt
INTERFACE
desktop-app::linux_xcb_helper
$<TARGET_FILE:desktop-app::linux_xcb_helper>
desktop-app::linux_gtk_helper
$<TARGET_FILE:desktop-app::linux_gtk_helper>
desktop-app::linux_glib_helper

View file

@ -0,0 +1,19 @@
# This file is part of Desktop App Toolkit,
# a set of libraries for developing nice desktop applications.
#
# For license and copyright information please follow this link:
# https://github.com/desktop-app/legal/blob/master/LEGAL
add_library(linux_xcb_helper STATIC)
init_target(linux_xcb_helper "(external)")
add_library(desktop-app::linux_xcb_helper ALIAS linux_xcb_helper)
nice_target_sources(linux_xcb_helper ${CMAKE_CURRENT_SOURCE_DIR}
PRIVATE
linux_xcb_helper.cpp
)
target_link_libraries(linux_xcb_helper
PUBLIC
${CMAKE_DL_LIBS}
)

View file

@ -0,0 +1,53 @@
// This file is part of Desktop App Toolkit,
// a set of libraries for developing nice desktop applications.
//
// For license and copyright information please follow this link:
// https://github.com/desktop-app/legal/blob/master/LEGAL
//
#include <dlfcn.h>
#include <stdlib.h>
#include <xcb/xcb.h>
#include <xcb/xcbext.h>
unsigned int xcb_send_request_with_fds(
xcb_connection_t *c,
int flags,
struct iovec *vector,
const xcb_protocol_request_t *req,
unsigned int num_fds,
int *fds) {
const auto send_request_with_fds = reinterpret_cast<unsigned int(*)(
xcb_connection_t*,
int,
struct iovec*,
const xcb_protocol_request_t*,
unsigned int,
int*)>(dlsym(RTLD_NEXT, "xcb_send_request_with_fds"));
if (!dlerror()) {
return send_request_with_fds(c, flags, vector, req, num_fds, fds);
}
const auto send_fd = reinterpret_cast<void(*)(xcb_connection_t*, int)>(
dlsym(RTLD_NEXT, "xcb_send_fd"));
if (dlerror()) {
abort();
}
const auto send_request = reinterpret_cast<unsigned int(*)(
xcb_connection_t*,
int,
struct iovec*,
const xcb_protocol_request_t*)>(dlsym(RTLD_NEXT, "xcb_send_request"));
if (dlerror()) {
abort();
}
for (int i = 0; i != num_fds; ++i) {
send_fd(c, fds[i]);
}
return send_request(c, flags, vector, req);
}

View file

@ -112,6 +112,7 @@ if (NOT DESKTOP_APP_USE_PACKAGED)
-rdynamic
-fwhole-program
-Wl,-z,relro
-Wl,-z,now
-pie
)
endif()