diff --git a/src/launcherlib/CMakeLists.txt b/src/launcherlib/CMakeLists.txt index c11a4c1..c794ca2 100644 --- a/src/launcherlib/CMakeLists.txt +++ b/src/launcherlib/CMakeLists.txt @@ -19,7 +19,7 @@ set(HEADERS appdata.h booster.h boosterfactory.h boosterpluginregistry.h # Set libraries to be linked. Shared libraries to be preloaded are not linked in anymore, # but dlopen():ed and listed in src/launcher/preload.h instead. -link_libraries(${LIBDL} ${X11_LIBRARIES}) +link_libraries(${LIBDL} ${X11_LIBRARIES} "-L/lib -lsystemd-daemon") # Set executable add_library(applauncherd MODULE ${SRC} ${MOC_SRC}) diff --git a/src/launcherlib/daemon.cpp b/src/launcherlib/daemon.cpp index d0165be..d82a801 100644 --- a/src/launcherlib/daemon.cpp +++ b/src/launcherlib/daemon.cpp @@ -41,6 +41,7 @@ #include #include #include +#include #include "coverage.h" @@ -60,7 +61,8 @@ Daemon::Daemon(int & argc, char * argv[]) : m_bootMode(false), m_socketManager(new SocketManager), m_singleInstance(new SingleInstance), - m_reExec(false) + m_reExec(false), + m_notifySystemd(false) { if (!Daemon::m_instance) { @@ -195,6 +197,12 @@ void Daemon::run() forkBoosters(); } + // Notify systemd that init is done + if (m_notifySystemd) { + Logger::logDebug("Daemon: initialization done. Notify systemd\n"); + sd_notify(0, "READY=1"); + } + // Main loop while (true) { @@ -721,6 +729,10 @@ void Daemon::parseArgs(const ArgVect & args) { m_reExec = true; } + else if ((*i) == "--systemd") + { + m_notifySystemd = true; + } else { if ((*i).find_first_not_of(' ') != string::npos) @@ -743,6 +755,7 @@ void Daemon::usage(int status) " Boot mode can be activated also by sending SIGUSR2\n" " to the launcher.\n" " -d, --daemon Run as %s a daemon.\n" + " --systemd Notify systemd when initialization is done\n" " --debug Enable debug messages and log everything also to stdout.\n" " -h, --help Print this help.\n\n", PROG_NAME_LAUNCHER, PROG_NAME_LAUNCHER, PROG_NAME_LAUNCHER); diff --git a/src/launcherlib/daemon.h b/src/launcherlib/daemon.h index c506f28..5250437 100644 --- a/src/launcherlib/daemon.h +++ b/src/launcherlib/daemon.h @@ -240,6 +240,9 @@ private: //! True if re-execing bool m_reExec; + //! True if systemd needs to be notified + bool m_notifySystemd; + //! Name of the state saving directory and file static const std::string m_stateDir; static const std::string m_stateFile; diff --git a/tests/common/unittests/ut_connection/CMakeLists.txt b/tests/common/unittests/ut_connection/CMakeLists.txt index c9e6d58..c6ff8d6 100644 --- a/tests/common/unittests/ut_connection/CMakeLists.txt +++ b/tests/common/unittests/ut_connection/CMakeLists.txt @@ -20,7 +20,7 @@ set(QT_USE_QTTEST TRUE) # Set include paths include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_HOME_DIRECTORY}/src/common ${LAUNCHER}) -link_libraries(${QT_QTCORE_LIBRARY} ${QT_QTTEST_LIBRARY} ${X11_LIBRARIES} -ldl) +link_libraries(${QT_QTCORE_LIBRARY} ${QT_QTTEST_LIBRARY} ${X11_LIBRARIES} -ldl "-L/lib -lsystemd-daemon") # Enable Qt (may not be needed, because already defined on higher level) include(${QT_USE_FILE}) diff --git a/tests/common/unittests/ut_daemon/CMakeLists.txt b/tests/common/unittests/ut_daemon/CMakeLists.txt index 2d63ea5..c04a42a 100644 --- a/tests/common/unittests/ut_daemon/CMakeLists.txt +++ b/tests/common/unittests/ut_daemon/CMakeLists.txt @@ -20,7 +20,7 @@ set(QT_USE_QTTEST TRUE) # Set include paths include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_HOME_DIRECTORY}/src/common ${LAUNCHER}) -link_libraries(${QT_QTCORE_LIBRARY} ${QT_QTTEST_LIBRARY} ${X11_LIBRARIES} -ldl) +link_libraries(${QT_QTCORE_LIBRARY} ${QT_QTTEST_LIBRARY} ${X11_LIBRARIES} -ldl "-L/lib -lsystemd-daemon") # Enable Qt (may not be needed, because already defined on higher level) include(${QT_USE_FILE}) diff --git a/tests/common/unittests/ut_socketmanager/CMakeLists.txt b/tests/common/unittests/ut_socketmanager/CMakeLists.txt index 99a28b1..6bb027a 100644 --- a/tests/common/unittests/ut_socketmanager/CMakeLists.txt +++ b/tests/common/unittests/ut_socketmanager/CMakeLists.txt @@ -17,7 +17,7 @@ set(QT_USE_QTTEST TRUE) # Set include paths include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_HOME_DIRECTORY}/src/common ${LAUNCHER}) -link_libraries(${QT_QTCORE_LIBRARY} ${QT_QTTEST_LIBRARY}) +link_libraries(${QT_QTCORE_LIBRARY} ${QT_QTTEST_LIBRARY} "-L/lib -lsystemd-daemon") # Enable Qt (may not be needed, because already defined on higher level) include(${QT_USE_FILE})