liblttng-ctl is a LGPLv2.1 library should should not use GPLv2 code.
Introduce libcommon-lgpl as a static archive containing only LGPLv2.1
compatible code.
This also removes the dependency from liblttng-ctl to liburcu.
Include some source files in libcommon-lgpl.a which are indirectly needed
by source files required in libcommon-lgpl.a:
- endpoint.cpp,
- lttng-elf.cpp,
- lttng-elf.h.
Include some source files in libcommon-lgpl.a which are only needed to
link the lttng executable:
- domain.cpp,
- spawn-viewer.cpp, spawn-viewer.h.
Introduce the new source file hashtable/seed.cpp to move the
lttng_ht_seed symbol in a source file which does not require
liburcu-cds, so it can be present in libcommon-lgpl. This allows
building compile units which are needed in the lgpl common library which
also contain functions which directly refer to lttng_ht_seed.
Programs and libraries which use libhashtable.la are changed to use
libcommon-gpl.la instead. libhashtable becomes internal to libcommon.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I27d2acb823a6d951692a5da88ce32bbe6bafb072
lttng_consumerd_LDADD = \
$(top_builddir)/src/common/consumer/libconsumer.la \
- $(top_builddir)/src/common/sessiond-comm/libsessiond-comm.la \
$(top_builddir)/src/common/libcommon-gpl.la \
$(top_builddir)/src/common/index/libindex.la \
$(top_builddir)/src/common/health/libhealth.la \
lttng_relayd_LDADD = -lurcu-common -lurcu \
$(top_builddir)/src/common/libcommon-gpl.la \
$(top_builddir)/src/common/sessiond-comm/libsessiond-comm.la \
- $(top_builddir)/src/common/hashtable/libhashtable.la \
- $(top_builddir)/src/common/libcommon.la \
$(top_builddir)/src/common/compat/libcompat.la \
$(top_builddir)/src/common/index/libindex.la \
$(top_builddir)/src/common/health/libhealth.la \
$(top_builddir)/src/lib/lttng-ctl/liblttng-ctl.la \
$(top_builddir)/src/common/sessiond-comm/libsessiond-comm.la \
$(top_builddir)/src/common/kernel-ctl/libkernel-ctl.la \
- $(top_builddir)/src/common/hashtable/libhashtable.la \
$(top_builddir)/src/common/libcommon-gpl.la \
$(top_builddir)/src/common/compat/libcompat.la \
$(top_builddir)/src/common/relayd/librelayd.la \
fd-tracker
# Common library
-noinst_LTLIBRARIES = libcommon-gpl.la
+noinst_LTLIBRARIES = libcommon-lgpl.la libcommon-gpl.la
EXTRA_DIST = mi-lttng-4.0.xsd
-libcommon_gpl_la_SOURCES = \
+# The libcommon-lgpl static archive contains only LGPLv2.1 code. It is
+# meant to be used by LGPLv2.1 libraries such as liblttng-ctl. It also
+# contains libcommon-lgpl.la.
+libcommon_lgpl_la_SOURCES = \
action.c \
- buffer-usage.c \
buffer-view.h buffer-view.c \
- common.h \
- condition.c \
- context.c context.h \
+ buffer-usage.c \
credentials.h \
- daemonize.c daemonize.h \
+ condition.c \
defaults.c \
dynamic-array.c dynamic-array.h \
dynamic-buffer.c dynamic-buffer.h \
endpoint.c \
error.c error.h \
evaluation.c \
- event.c \
- filter.c filter.h \
- futex.c futex.h \
location.c \
mi-lttng.c mi-lttng.h \
notification.c \
notify.c \
- optional.h \
- pipe.c pipe.h \
readwrite.c readwrite.h \
runas.c runas.h \
session-consumed-size.c \
session-rotation.c \
spawn-viewer.c spawn-viewer.h \
time.c \
- trace-chunk.c trace-chunk.h \
- trace-chunk-registry.h \
+ tracker.c tracker.h \
trigger.c \
unix.c unix.h \
uri.c uri.h \
userspace-probe.c \
- utils.c utils.h \
- uuid.c uuid.h \
- tracker.c tracker.h \
- waiter.c waiter.h \
- fs-handle.h fs-handle-internal.h fs-handle.c
+ utils.c utils.h
if HAVE_ELF_H
-libcommon_gpl_la_SOURCES += \
+libcommon_lgpl_la_SOURCES += \
lttng-elf.c lttng-elf.h
endif
-libcommon_gpl_la_LIBADD = \
+libcommon_lgpl_la_LIBADD = \
$(top_builddir)/src/common/config/libconfig.la \
- $(top_builddir)/src/common/compat/libcompat.la \
- $(top_builddir)/src/common/hashtable/libhashtable.la \
+ $(top_builddir)/src/common/hashtable/libhashtable-lgpl.la
+
+# The libcommon-gpl static archive contains GPLv2 compatible code. It is
+# meant to be used by GPL executables.
+libcommon_gpl_la_SOURCES = \
+ common.h \
+ context.c context.h \
+ daemonize.c daemonize.h \
+ event.c \
+ filter.c filter.h \
+ fs-handle.c fs-handle.h fs-handle-internal.h \
+ futex.c futex.h \
+ optional.h \
+ pipe.c pipe.h \
+ trace-chunk.c trace-chunk.h \
+ trace-chunk-registry.h \
+ uuid.c uuid.h \
+ waiter.c waiter.h
+
+libcommon_gpl_la_LIBADD = \
+ -lurcu -lurcu-common \
+ libcommon-lgpl.la \
+ $(top_builddir)/src/common/hashtable/libhashtable-gpl.la \
$(top_builddir)/src/common/fd-tracker/libfd-tracker.la
if BUILD_LIB_COMPAT
SUBDIRS += compat
+libcommon_lgpl_la_LIBADD += \
+ $(top_builddir)/src/common/compat/libcompat.la
endif
if BUILD_LIB_HEALTH
libconsumer_la_LIBADD = \
$(top_builddir)/src/common/sessiond-comm/libsessiond-comm.la \
$(top_builddir)/src/common/kernel-consumer/libkernel-consumer.la \
- $(top_builddir)/src/common/hashtable/libhashtable.la \
- $(top_builddir)/src/common/compat/libcompat.la \
$(top_builddir)/src/common/relayd/librelayd.la
if HAVE_LIBLTTNG_UST_CTL
# SPDX-License-Identifier: GPL-2.0-only
-noinst_LTLIBRARIES = libhashtable.la
+noinst_LTLIBRARIES = libhashtable-gpl.la libhashtable-lgpl.la
-libhashtable_la_SOURCES = hashtable.c hashtable.h \
- utils.c utils.h \
- hashtable-symbols.h
+libhashtable_lgpl_la_SOURCES = \
+ seed.c \
+ utils.c \
+ utils.h
+
+libhashtable_gpl_la_LIBADD = -lurcu-common -lurcu -lurcu-cds
+libhashtable_gpl_la_SOURCES = \
+ hashtable.c \
+ hashtable.h \
+ hashtable-symbols.h
-libhashtable_la_LIBADD = -lurcu-common -lurcu -lurcu-cds
/* seed_lock protects both seed_init and lttng_ht_seed. */
static pthread_mutex_t seed_lock = PTHREAD_MUTEX_INITIALIZER;
static bool seed_init;
-unsigned long lttng_ht_seed;
static unsigned long min_hash_alloc_size = 1;
static unsigned long max_hash_buckets_size = 0;
--- /dev/null
+/*
+ * Copyright (C) 2021 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * SPDX-License-Identifier: LGPL-2.1-only
+ */
+
+#define _LGPL_SOURCE
+#include "hashtable.h"
+#include "utils.h"
+
+unsigned long lttng_ht_seed;
libkernel_consumer_la_SOURCES = kernel-consumer.c kernel-consumer.h
-libkernel_consumer_la_LIBADD = \
- $(top_builddir)/src/common/kernel-ctl/libkernel-ctl.la \
- $(top_builddir)/src/common/relayd/librelayd.la
+libkernel_consumer_la_LIBADD = $(top_builddir)/src/common/kernel-ctl/libkernel-ctl.la
libust_consumer_la_SOURCES = ust-consumer.c ust-consumer.h
-libust_consumer_la_LIBADD = \
- $(UST_CTL_LIBS) \
- $(top_builddir)/src/common/relayd/librelayd.la
+libust_consumer_la_LIBADD = $(UST_CTL_LIBS)
endif
liblttng_ctl_la_LIBADD = \
$(top_builddir)/src/common/sessiond-comm/libsessiond-comm.la \
- $(top_builddir)/src/common/libcommon-gpl.la \
+ $(top_builddir)/src/common/libcommon-lgpl.la \
$(top_builddir)/src/lib/lttng-ctl/filter/libfilter.la
pkgconfigdir = $(libdir)/pkgconfig
LIBCOMMON_GPL=$(top_builddir)/src/common/libcommon-gpl.la
LIBSESSIOND_COMM=$(top_builddir)/src/common/sessiond-comm/libsessiond-comm.la
-LIBHASHTABLE=$(top_builddir)/src/common/hashtable/libhashtable.la
+LIBHASHTABLE_GPL=$(top_builddir)/src/common/hashtable/libhashtable-gpl.la
LIBRELAYD=$(top_builddir)/src/common/relayd/librelayd.la
LIBHEALTH=$(top_builddir)/src/common/health/libhealth.la
LIBCOMPAT=$(top_builddir)/src/common/compat/libcompat.la
live_test_SOURCES = live_test.c
live_test_LDADD = $(LIBTAP) $(LIBCOMMON_GPL) $(LIBRELAYD) $(LIBSESSIOND_COMM) \
- $(LIBHASHTABLE) $(LIBHEALTH) $(DL_LIBS) $(LIBCOMPAT) -lrt
+ $(LIBHASHTABLE_GPL) $(LIBHEALTH) $(DL_LIBS) $(LIBCOMPAT) -lrt
live_test_LDADD += $(LIVE) \
$(top_builddir)/src/lib/lttng-ctl/liblttng-ctl.la
LIBSTRINGUTILS=$(top_builddir)/src/common/string-utils/libstring-utils.la
LIBFDTRACKER=$(top_builddir)/src/common/fd-tracker/libfd-tracker.la
LIBSESSIOND_COMM=$(top_builddir)/src/common/sessiond-comm/libsessiond-comm.la
-LIBHASHTABLE=$(top_builddir)/src/common/hashtable/libhashtable.la
LIBRELAYD=$(top_builddir)/src/common/relayd/librelayd.la
LIBLTTNG_CTL=$(top_builddir)/src/lib/lttng-ctl/liblttng-ctl.la
# URI unit tests
test_uri_SOURCES = test_uri.c
-test_uri_LDADD = $(LIBTAP) $(LIBCOMMON_GPL) $(LIBHASHTABLE) $(DL_LIBS)
+test_uri_LDADD = $(LIBTAP) $(LIBCOMMON_GPL) $(DL_LIBS)
# Sessiond objects
SESSIOND_OBJS = $(top_builddir)/src/bin/lttng-sessiond/buffer-registry.$(OBJEXT) \
$(top_builddir)/src/bin/lttng-sessiond/process-utils.$(OBJEXT) \
$(top_builddir)/src/bin/lttng-sessiond/thread.$(OBJEXT) \
$(top_builddir)/src/bin/lttng-sessiond/tracker.$(OBJEXT) \
- $(top_builddir)/src/common/libcommon.la \
+ $(top_builddir)/src/common/libcommon-gpl.la \
$(top_builddir)/src/common/testpoint/libtestpoint.la \
$(top_builddir)/src/common/compat/libcompat.la \
$(top_builddir)/src/common/health/libhealth.la \
# parse_size_suffix unit test
test_utils_parse_size_suffix_SOURCES = test_utils_parse_size_suffix.c
-test_utils_parse_size_suffix_LDADD = $(LIBTAP) $(LIBHASHTABLE) $(LIBCOMMON_GPL) $(DL_LIBS)
+test_utils_parse_size_suffix_LDADD = $(LIBTAP) $(LIBCOMMON_GPL) $(DL_LIBS)
# parse_time_suffix unit test
test_utils_parse_time_suffix_SOURCES = test_utils_parse_time_suffix.c
-test_utils_parse_time_suffix_LDADD = $(LIBTAP) $(LIBHASHTABLE) $(LIBCOMMON_GPL)
+test_utils_parse_time_suffix_LDADD = $(LIBTAP) $(LIBCOMMON_GPL)
# compat_poll unit test
test_utils_compat_poll_SOURCES = test_utils_compat_poll.c
-test_utils_compat_poll_LDADD = $(LIBTAP) $(LIBHASHTABLE) $(DL_LIBS) \
+test_utils_compat_poll_LDADD = $(LIBTAP) $(DL_LIBS) \
$(top_builddir)/src/common/compat/libcompat.la $(LIBCOMMON_GPL)
# expand_path unit test
test_utils_expand_path_SOURCES = test_utils_expand_path.c
-test_utils_expand_path_LDADD = $(LIBTAP) $(LIBHASHTABLE) $(LIBCOMMON_GPL) $(DL_LIBS)
+test_utils_expand_path_LDADD = $(LIBTAP) $(LIBCOMMON_GPL) $(DL_LIBS)
# directory handle unit test
test_directory_handle_SOURCES = test_directory_handle.c
-test_directory_handle_LDADD = $(LIBTAP) $(LIBHASHTABLE) $(LIBCOMMON_GPL) $(DL_LIBS)
+test_directory_handle_LDADD = $(LIBTAP) $(LIBCOMMON_GPL) $(DL_LIBS)
# string utilities unit test
test_string_utils_SOURCES = test_string_utils.c
# fd tracker unit test
test_fd_tracker_SOURCES = test_fd_tracker.c
-test_fd_tracker_LDADD = $(LIBTAP) $(LIBFDTRACKER) $(DL_LIBS) -lurcu $(LIBCOMMON_GPL) $(LIBHASHTABLE)
+test_fd_tracker_LDADD = $(LIBTAP) $(LIBFDTRACKER) $(DL_LIBS) -lurcu $(LIBCOMMON_GPL)
# uuid unit test
test_uuid_SOURCES = test_uuid.c
LIBTAP=$(top_builddir)/tests/utils/tap/libtap.la
LIBCOMMON_GPL=$(top_builddir)/src/common/libcommon-gpl.la
-LIBHASHTABLE=$(top_builddir)/src/common/hashtable/libhashtable.la
LIBLTTNG_CTL=$(top_builddir)/src/lib/lttng-ctl/liblttng-ctl.la
noinst_PROGRAMS = ini_config
EXTRA_DIST = test_ini_config sample.ini
ini_config_SOURCES = ini_config.c
-ini_config_LDADD = $(LIBTAP) $(LIBCOMMON_GPL) $(LIBLTTNG_CTL) $(LIBHASHTABLE)
-
+ini_config_LDADD = $(LIBTAP) $(LIBCOMMON_GPL) $(LIBLTTNG_CTL)
all-local:
@if [ x"$(srcdir)" != x"$(builddir)" ]; then \