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 = $(URCU_LIBS) \
$(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/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 \
argpar-utils
# Common library
-noinst_LTLIBRARIES = libcommon-gpl.la
+noinst_LTLIBRARIES = libcommon-lgpl.la libcommon-gpl.la
EXTRA_DIST = mi-lttng-4.1.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 = \
actions/action.cpp \
actions/list.cpp \
actions/notify.cpp \
actions/stop-session.cpp \
actions/rate-policy.cpp \
buffer-view.h buffer-view.cpp \
- common.h \
conditions/buffer-usage.cpp \
conditions/condition.cpp \
conditions/event-rule-matches.cpp \
conditions/session-consumed-size.cpp \
conditions/session-rotation.cpp \
- context.cpp context.h \
credentials.cpp credentials.h \
- daemonize.cpp daemonize.h \
defaults.cpp \
domain.cpp \
dynamic-array.cpp dynamic-array.h \
error.cpp error.h \
error-query.cpp \
evaluation.cpp \
- event.cpp \
event-expr/event-expr.cpp \
event-field-value.cpp \
event-rule/event-rule.cpp \
event-rule/log4j-logging.cpp \
event-rule/jul-logging.cpp \
event-rule/python-logging.cpp \
- filter.cpp filter.h \
fd-handle.cpp fd-handle.h \
- fs-handle.cpp fs-handle.h fs-handle-internal.h \
- futex.cpp futex.h \
kernel-probe.cpp \
- index-allocator.cpp index-allocator.h \
location.cpp \
log-level-rule.cpp \
mi-lttng.cpp mi-lttng.h \
notification.cpp \
- optional.h \
payload.cpp payload.h \
payload-view.cpp payload-view.h \
- pipe.cpp pipe.h \
readwrite.cpp readwrite.h \
runas.cpp runas.h \
- shm.cpp shm.h \
session-descriptor.cpp \
snapshot.cpp snapshot.h \
spawn-viewer.cpp spawn-viewer.h \
+ thread.cpp thread.h \
time.cpp \
- trace-chunk.cpp trace-chunk.h \
- trace-chunk-registry.h \
+ tracker.cpp tracker.h \
trigger.cpp \
unix.cpp unix.h \
uri.cpp uri.h \
userspace-probe.cpp \
- utils.cpp utils.h \
- uuid.cpp uuid.h \
- thread.cpp thread.h \
- tracker.cpp tracker.h \
- waiter.cpp waiter.h
+ utils.cpp utils.h
if HAVE_ELF_H
-libcommon_gpl_la_SOURCES += \
+libcommon_lgpl_la_SOURCES += \
lttng-elf.cpp lttng-elf.h
endif
-libcommon_gpl_la_LIBADD = \
+libcommon_lgpl_la_LIBADD = \
$(top_builddir)/src/common/bytecode/libbytecode.la \
- $(top_builddir)/src/common/config/libconfig.la \
- $(top_builddir)/src/common/ini-config/libini-config.la \
$(top_builddir)/src/common/compat/libcompat.la \
- $(top_builddir)/src/common/hashtable/libhashtable.la \
- $(top_builddir)/src/common/fd-tracker/libfd-tracker.la \
+ $(top_builddir)/src/common/config/libconfig.la \
$(top_builddir)/src/common/filter/libfilter.la \
+ $(top_builddir)/src/common/hashtable/libhashtable-lgpl.la \
$(top_builddir)/src/vendor/msgpack/libmsgpack.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.cpp context.h \
+ daemonize.cpp daemonize.h \
+ event.cpp \
+ filter.cpp filter.h \
+ fs-handle.cpp fs-handle.h fs-handle-internal.h \
+ futex.cpp futex.h \
+ index-allocator.cpp index-allocator.h \
+ optional.h \
+ pipe.cpp pipe.h \
+ shm.cpp shm.h \
+ trace-chunk.cpp trace-chunk.h \
+ trace-chunk-registry.h \
+ uuid.cpp uuid.h \
+ waiter.cpp waiter.h
+
+libcommon_gpl_la_LIBADD = \
+ libcommon-lgpl.la \
+ $(top_builddir)/src/common/ini-config/libini-config.la \
+ $(top_builddir)/src/common/hashtable/libhashtable-gpl.la \
+ $(top_builddir)/src/common/fd-tracker/libfd-tracker.la
+
if BUILD_LIB_HEALTH
SUBDIRS += health
endif
noinst_PROGRAMS = filter-grammar-test
filter_grammar_test_SOURCES = filter-grammar-test.cpp
-filter_grammar_test_LDADD = \
- libcommon-gpl.la
+filter_grammar_test_LDADD = libcommon-gpl.la
all-local:
@if [ x"$(srcdir)" != x"$(builddir)" ]; then \
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 = \
+libhashtable_lgpl_la_SOURCES = \
+ seed.cpp \
+ utils.cpp \
+ utils.h
+
+libhashtable_gpl_la_SOURCES = \
hashtable.cpp \
hashtable.h \
- hashtable-symbols.h \
- utils.cpp \
- utils.h
+ hashtable-symbols.h
-libhashtable_la_LIBADD = $(URCU_LIBS) $(URCU_CDS_LIBS)
+libhashtable_gpl_la_LIBADD = \
+ $(URCU_LIBS) \
+ $(URCU_CDS_LIBS)
/* 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;
kernel-consumer.cpp \
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
ust-consumer.cpp \
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
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = lttng-ctl.pc
AM_CPPFLAGS += -I$(top_srcdir)/tests/utils/ -I$(srcdir)
LIBTAP=$(top_builddir)/tests/utils/tap/libtap.la
-
-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
-LIBRELAYD=$(top_builddir)/src/common/relayd/librelayd.la
-LIBHEALTH=$(top_builddir)/src/common/health/libhealth.la
-LIBCOMPAT=$(top_builddir)/src/common/compat/libcompat.la
LIBLTTNG_SESSIOND_COMMON=$(top_builddir)/src/bin/lttng-sessiond/liblttng-sessiond-common.la
noinst_PROGRAMS = live_test
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
LIBLTTNG_SESSIOND_COMMON=$(top_builddir)/src/bin/lttng-sessiond/liblttng-sessiond-common.la
# URI unit tests
test_uri_SOURCES = test_uri.cpp
-test_uri_LDADD = $(LIBTAP) $(LIBCOMMON_GPL) $(LIBHASHTABLE) $(DL_LIBS)
+test_uri_LDADD = $(LIBTAP) $(LIBCOMMON_GPL) $(DL_LIBS)
RELAYD_OBJS = $(top_builddir)/src/bin/lttng-relayd/backward-compatibility-group-by.$(OBJEXT)
# parse_size_suffix unit test
test_utils_parse_size_suffix_SOURCES = test_utils_parse_size_suffix.cpp
-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.cpp
-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.cpp
-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)
# compat_pthread unit test
# expand_path unit test
test_utils_expand_path_SOURCES = test_utils_expand_path.cpp
-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.cpp
-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.cpp
# fd tracker unit test
test_fd_tracker_SOURCES = test_fd_tracker.cpp
-test_fd_tracker_LDADD = $(LIBTAP) $(LIBFDTRACKER) $(DL_LIBS) $(URCU_LIBS) $(LIBCOMMON_GPL) $(LIBHASHTABLE)
+test_fd_tracker_LDADD = $(LIBTAP) $(LIBFDTRACKER) $(DL_LIBS) $(URCU_LIBS) $(LIBCOMMON_GPL)
# uuid unit test
test_uuid_SOURCES = test_uuid.cpp
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
noinst_PROGRAMS = ini_config
EXTRA_DIST = test_ini_config sample.ini
ini_config_SOURCES = ini_config.cpp
-ini_config_LDADD = $(LIBTAP) $(LIBCOMMON_GPL) $(LIBHASHTABLE)
+ini_config_LDADD = $(LIBTAP) $(LIBCOMMON_GPL)
all-local:
@if [ x"$(srcdir)" != x"$(builddir)" ]; then \