diff --git a/CMakeLists.txt b/CMakeLists.txt index f6c2ddce8..19b3a316a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,6 +41,7 @@ option(ENABLE_EMOJI "Enable emoji module" On) option(ENABLE_LIBUUID "Use libuuid for uuid generation" On) option(BUILD_SPELL_DICT "Build en_dict.fscd for English spell check" On) option(BUILD_SHARED_LIBS "Build library as shared libs" On) +option(ENABLE_DL "Enable dynamic loading addons" On) option(USE_SYSTEM_YOGA "Use system installed yoga library" Off) set(NO_PREEDIT_APPS "gvim.*,wps.*,wpp.*,et.*" CACHE STRING "Disable preedit for following app by default.") set(EVENT_LOOP_BACKEND "auto" CACHE STRING "Set the underlying event loop implementation, valid values are auto,systemd,libuv,none") @@ -119,7 +120,10 @@ endif() if(${CMAKE_SYSTEM_NAME} MATCHES "BSD|DragonFly") find_package(LibKVM REQUIRED) endif() -find_package(DL REQUIRED) + +if (ENABLE_DL) + find_package(DL REQUIRED) +endif() if (NOT TARGET LibIntl::LibIntl) find_package(LibIntl REQUIRED) diff --git a/src/lib/fcitx-utils/CMakeLists.txt b/src/lib/fcitx-utils/CMakeLists.txt index fe71b8f88..6e57ece60 100644 --- a/src/lib/fcitx-utils/CMakeLists.txt +++ b/src/lib/fcitx-utils/CMakeLists.txt @@ -54,7 +54,6 @@ list(APPEND FCITX_UTILS_SOURCES color.cpp i18nstring.cpp eventdispatcher.cpp - library.cpp fs.cpp fs_deprecated.cpp standardpath.cpp @@ -90,7 +89,6 @@ set(FCITX_UTILS_HEADERS event.h eventloopinterface.h eventdispatcher.h - library.h cutf8.h fs.h standardpath.h @@ -125,6 +123,11 @@ set(FCITX_UTILS_HEADERS ${CMAKE_CURRENT_BINARY_DIR}/fcitxutils_export.h ) +if (ENABLE_DL) + list(APPEND FCITX_UTILS_SOURCES library.cpp) + list(APPEND FCITX_UTILS_HEADERS library.h) +endif() + set(FCITX_UTILS_DBUS_HEADERS dbus/message.h dbus/objectvtable.h @@ -150,10 +153,13 @@ target_include_directories(Fcitx5Utils PUBLIC $ $ $) -target_link_libraries(Fcitx5Utils PRIVATE DL::DL LibIntl::LibIntl Pthread::Pthread) +target_link_libraries(Fcitx5Utils PRIVATE LibIntl::LibIntl Pthread::Pthread) if(LIBKVM_FOUND) target_link_libraries(Fcitx5Utils PRIVATE LibKVM::LibKVM) endif() +if (ENABLE_DL) + target_link_libraries(Fcitx5Utils PRIVATE DL::DL) +endif() target_link_libraries(Fcitx5Utils PRIVATE ${FCITX_UTILS_DEPS}) configure_file(Fcitx5Utils.pc.in ${CMAKE_CURRENT_BINARY_DIR}/Fcitx5Utils.pc @ONLY) diff --git a/src/lib/fcitx/CMakeLists.txt b/src/lib/fcitx/CMakeLists.txt index 0cf004fec..304177a8d 100644 --- a/src/lib/fcitx/CMakeLists.txt +++ b/src/lib/fcitx/CMakeLists.txt @@ -88,6 +88,10 @@ if (ENABLE_LIBUUID) target_link_libraries(Fcitx5Core PRIVATE LibUUID::LibUUID) endif() +if (NOT ENABLE_DL) + target_compile_definitions(Fcitx5Core PRIVATE -DFCITX_NO_DL) +endif() + configure_file(Fcitx5Core.pc.in ${CMAKE_CURRENT_BINARY_DIR}/Fcitx5Core.pc @ONLY) install(TARGETS Fcitx5Core EXPORT Fcitx5CoreTargets LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") diff --git a/src/lib/fcitx/addonloader.cpp b/src/lib/fcitx/addonloader.cpp index 20a6e6169..ee4d9634d 100644 --- a/src/lib/fcitx/addonloader.cpp +++ b/src/lib/fcitx/addonloader.cpp @@ -14,7 +14,9 @@ #include #include #include "fcitx-utils/flags.h" +#ifndef FCITX_NO_DL #include "fcitx-utils/library.h" +#endif #include "fcitx-utils/log.h" #include "fcitx-utils/standardpaths.h" #include "fcitx-utils/stringutils.h" @@ -27,6 +29,7 @@ namespace fcitx { AddonLoader::~AddonLoader() {} +#ifndef FCITX_NO_DL SharedLibraryLoader::~SharedLibraryLoader() {} AddonInstance *SharedLibraryLoader::load(const AddonInfo &info, @@ -100,6 +103,7 @@ AddonInstance *SharedLibraryLoader::load(const AddonInfo &info, } return nullptr; } +#endif StaticLibraryLoader::StaticLibraryLoader(StaticAddonRegistry *registry_) : registry(registry_) {} diff --git a/src/lib/fcitx/addonloader_p.h b/src/lib/fcitx/addonloader_p.h index 6c0ca9cf5..ce9ada1c6 100644 --- a/src/lib/fcitx/addonloader_p.h +++ b/src/lib/fcitx/addonloader_p.h @@ -13,7 +13,9 @@ #include #include #include +#ifndef FCITX_NO_DL #include +#endif #include #include #include @@ -27,6 +29,7 @@ namespace { constexpr char FCITX_ADDON_FACTORY_ENTRY[] = "fcitx_addon_factory_instance"; } +#ifndef FCITX_NO_DL class SharedLibraryFactory { public: SharedLibraryFactory(const AddonInfo &info, std::vector libraries) @@ -71,6 +74,7 @@ class SharedLibraryLoader : public AddonLoader { std::unordered_map> registry_; }; +#endif class StaticLibraryLoader : public AddonLoader { public: diff --git a/src/lib/fcitx/addonmanager.cpp b/src/lib/fcitx/addonmanager.cpp index ab4e36f40..f77bb7a11 100644 --- a/src/lib/fcitx/addonmanager.cpp +++ b/src/lib/fcitx/addonmanager.cpp @@ -249,7 +249,9 @@ void AddonManager::unregisterLoader(const std::string &name) { } void AddonManager::registerDefaultLoader(StaticAddonRegistry *registry) { +#ifndef FCITX_NO_DL registerLoader(std::make_unique()); +#endif if (registry) { registerLoader(std::make_unique(registry)); }