library integration : build all backends at one time 88/87988/5
authorKichan Kwon <k_c.kwon@samsung.com>
Mon, 12 Sep 2016 07:42:40 +0000 (16:42 +0900)
committerKichan Kwon <k_c.kwon@samsung.com>
Thu, 22 Sep 2016 04:30:12 +0000 (13:30 +0900)
- Backend is selected by installing dlogbackend-BACKEND
- If any dlogbackend-BACKEND isn't installed, pipe backend is selected

Change-Id: I44a4bfc146de0a042c16bea2d6ede3a249075908
Signed-off-by: Kichan Kwon <k_c.kwon@samsung.com>
Makefile.am
configure.ac
packaging/dlog.spec
packaging/dlog_logger.service
packaging/dlogbackend-kmsg.manifest [new file with mode: 0755]
packaging/dlogbackend-logger.manifest [new file with mode: 0755]
src/libdlog/log.c
src/libdlog/log_android.c
src/libdlog/log_kmsg.c
src/libdlog/log_pipe.c

index 3871c01..e4709b3 100755 (executable)
@@ -24,22 +24,10 @@ libdlog_la_SOURCES =  \
        src/shared/logconfig.c \
        include/logconfig.h \
        src/libdlog/loglimiter.c \
-       include/loglimiter.h
-
-if WITH_PIPE
-libdlog_la_SOURCES += \
-       src/libdlog/log_pipe.c
-endif
-
-if WITH_ANDROID_LOGGER
-libdlog_la_SOURCES += \
-       src/libdlog/log_android.c
-endif
-
-if WITH_KMSG
-libdlog_la_SOURCES += \
+       include/loglimiter.h \
+       src/libdlog/log_pipe.c \
+       src/libdlog/log_android.c \
        src/libdlog/log_kmsg.c
-endif
 
 libdlog_la_LIBADD = -lpthread \
        $(CAPI_BASE_COMMON_LIBS)
@@ -90,7 +78,6 @@ dlog_logger_SOURCES = \
        include/log_file.h \
        include/logprint.h
 
-if WITH_KMSG
 sbin_PROGRAMS = dloginit
 dloginit_CFLAGS =  \
        $(AM_CFLAGS) \
@@ -108,7 +95,6 @@ dloginit_SOURCES = \
        src/shared/logcommon.c \
        include/logcommon.h \
        include/dlog.h
-endif
 
 bin_PROGRAMS += dlogctrl
 dlogctrl_CFLAGS =  \
@@ -124,29 +110,7 @@ dlogctrl_SOURCES = \
        src/logctrl/logctrl.c \
        include/logconfig.h
 
-# conf files
-
-.PHONY: dlog.conf
-
-if WITH_KMSG
-dlog.conf: configs/dlog.conf.kmsg
-       cp configs/dlog.conf.kmsg dlog.conf
-endif
-if WITH_ANDROID_LOGGER
-dlog.conf: configs/dlog.conf.logger
-       cp configs/dlog.conf.logger dlog.conf
-endif
-if WITH_PIPE
-dlog.conf: configs/dlog.conf.pipe
-       cp configs/dlog.conf.pipe dlog.conf
-endif
-
-optetcdir = /opt/etc
-optetc_DATA = dlog.conf
-
-upgradedir = /usr/share/upgrade/data
-upgrade_DATA = dlog.conf
-
+# conf file
 usrlibtmpfilesddir = /usr/lib/tmpfiles.d
 usrlibtmpfilesd_DATA = configs/dlog-run.conf
 
index 4622fe5..7a51174 100755 (executable)
@@ -14,39 +14,6 @@ AC_PROG_CC
 AC_PROG_GCC_TRADITIONAL
 AC_PROG_LIBTOOL
 
-__dlog_backends_selected=0
-
-# backend: pipe
-AC_ARG_ENABLE(pipe, AS_HELP_STRING([--enable-pipe], [enable pipe (log to pipe fd received via unix socket)]),
-       [with_pipe=yes],
-       with_pipe=no)
-if test "x$with_pipe" = "xyes"; then
-       __dlog_backends_selected=$(($__dlog_backends_selected + 1))
-fi
-AM_CONDITIONAL(WITH_PIPE, [test "x$with_pipe" = "xyes"])
-
-# backend: kmsg (requires kernel patch)
-AC_ARG_ENABLE(kmsg, AS_HELP_STRING([--enable-kmsg], [enable kmsg (requires kmsg extension patch)]),
-       [with_kmsg=yes],
-       with_kmsg=no)
-if test "x$with_kmsg" = "xyes"; then
-       __dlog_backends_selected=$(($__dlog_backends_selected + 1))
-fi
-AM_CONDITIONAL(WITH_KMSG, [test "x$with_kmsg" = "xyes"])
-
-# backend: android logger (requires kernel's CONFIG_ANDROID_LOGGER)
-AC_ARG_ENABLE(android_logger, AS_HELP_STRING([--enable-android-logger], [enable android logger (kernels CONFIG_ANDROID_LOGGER)]),
-       [with_android_logger=yes],
-       with_android_logger=no)
-if test "x$with_android_logger" = "xyes"; then
-       __dlog_backends_selected=$(($__dlog_backends_selected + 1))
-fi
-AM_CONDITIONAL(WITH_ANDROID_LOGGER, [test "x$with_android_logger" = "xyes"])
-
-if test $__dlog_backends_selected -ne 1; then
-       AC_MSG_ERROR([Exactly one backend needs to be selected.])
-fi
-
 # check binary type for dlog debug mode
 AC_ARG_ENABLE([debug_mode],
        AS_HELP_STRING([--enable-debug_mode Turn on debug_mode]),
index add849a..9c6fcb2 100755 (executable)
@@ -7,30 +7,13 @@ License:    Apache-2.0
 Source0:    %{name}-%{version}.tar.gz
 Source101:  packaging/dlogutil.manifest
 Source102:  packaging/libdlog.manifest
+Source103:     packaging/dlogbackend-kmsg.manifest
+Source104:     packaging/dlogbackend-logger.manifest
 Source301:  packaging/dlog_logger.service
 Source302:  packaging/dlog_logger.path
 Source401:  packaging/dloginit.service
 Source501:  packaging/01-dlog.rules
 
-# Choose dlog backend log device
-# Warning : MUST be only one "ON" in below three switches
-%define backend_kmsg   OFF
-%define backend_logger OFF
-%define backend_pipe   ON
-
-# Do NOT touch switches below
-%if "%{?tizen_target_name}" == "TM1"
-%define backend_kmsg   ON
-%define backend_logger OFF
-%define backend_pipe   OFF
-%endif
-
-%if "%{?profile}" == "wearable" || "%{?_with_emulator}" == "1"
-%define backend_kmsg   OFF
-%define backend_logger ON
-%define backend_pipe   OFF
-%endif
-
 %define upgrade_file_path /usr/share/upgrade
 
 BuildRequires: autoconf
@@ -52,7 +35,7 @@ Summary:    Logging service dlog API
 Group:      Development/Libraries
 
 %description -n libdlog
-dlog API library
+dlog API library. If dlogbackend isn't installed, pipe backend is selected.
 
 %package -n libdlog-devel
 Summary:    Logging service dlog API
@@ -62,6 +45,21 @@ Requires:   lib%{name} = %{?epoch:%{epoch}:}%{version}-%{release}
 %description -n libdlog-devel
 dlog API library
 
+%package -n dlogbackend-kmsg
+Summary:       kmsg backend selection for dlog
+Requires:      lib%{name} = %{?epoch:%{epoch}:}%{version}-%{release}
+Conflicts:     dlogbackend-logger
+
+%description -n dlogbackend-kmsg
+Change dlog backend to kmsg backend. Require kernel support (multiple kmsg)
+
+%package -n dlogbackend-logger
+Summary:       Android-logger backend selection for dlog
+Requires:      lib%{name} = %{?epoch:%{epoch}:}%{version}-%{release}
+Conflicts:     dlogbackend-kmsg
+
+%description -n dlogbackend-logger
+Change dlog backend to logger backend. Require kernel support (Android-logger)
 
 %package -n dlogutil
 Summary:    print log data to the screen
@@ -82,17 +80,10 @@ Utilities for print log data
 
 cp %{SOURCE101} .
 cp %{SOURCE102} .
+cp %{SOURCE103} .
+cp %{SOURCE104} .
 %autogen --disable-static
 %configure --disable-static \
-               %if %{?backend_pipe} == ON
-                       --enable-pipe \
-               %endif
-               %if %{?backend_kmsg} == ON
-                       --enable-kmsg \
-               %endif
-               %if %{?backend_logger} == ON
-                       --enable-android-logger \
-               %endif
                        --enable-debug_mode \
                        TZ_SYS_ETC=%{TZ_SYS_ETC}
 make %{?jobs:-j%jobs} \
@@ -105,21 +96,19 @@ rm -rf %{buildroot}
 mkdir -p %{buildroot}/usr/bin/
 
 mkdir -p %{buildroot}%{TZ_SYS_ETC}
+install -m 0644 configs/dlog.conf.pipe %{buildroot}%{TZ_SYS_ETC}/dlog.conf.pipe
+install -m 0644 configs/dlog.conf.kmsg %{buildroot}%{TZ_SYS_ETC}/dlog.conf.kmsg
+install -m 0644 configs/dlog.conf.logger %{buildroot}%{TZ_SYS_ETC}/dlog.conf.logger
 
 mkdir -p %{buildroot}%{_unitdir}/multi-user.target.wants/
 install -m 0644 %SOURCE301 %{buildroot}%{_unitdir}
 
 install -m 0644 %SOURCE302 %{buildroot}%{_unitdir}/dlog_logger.path
 ln -s ../dlog_logger.service %{buildroot}%{_unitdir}/multi-user.target.wants/dlog_logger.service
-%if %{?backend_pipe} == ON
-sed -e '/^Nice=/ d' -i %{buildroot}%{_unitdir}/dlog_logger.service
-%endif
 
-%if %{?backend_kmsg} == ON
 mkdir -p %{buildroot}%{_unitdir}/sysinit.target.wants/
 install -m 0644 %SOURCE401 %{buildroot}%{_unitdir}
 ln -s ../dloginit.service %{buildroot}%{_unitdir}/sysinit.target.wants/dloginit.service
-%endif
 
 mkdir -p %{buildroot}%{_udevrulesdir}
 install -m 0644 %SOURCE501 %{buildroot}%{_udevrulesdir}/01-dlog.rules
@@ -132,6 +121,10 @@ cp LICENSE.Apache-2.0 %{buildroot}/usr/share/license/dlogutil
 mkdir -p %{buildroot}/var/log/dlog
 
 install -D scripts/dlog_upgrade.sh %{buildroot}%{upgrade_file_path}/scripts/dlog_upgrade.sh
+mkdir -p %{buildroot}%{upgrade_file_path}/data
+install -m 0644 configs/dlog.conf.pipe %{buildroot}%{upgrade_file_path}/data/dlog.conf.pipe
+install -m 0644 configs/dlog.conf.kmsg %{buildroot}%{upgrade_file_path}/data/dlog.conf.kmsg
+install -m 0644 configs/dlog.conf.logger %{buildroot}%{upgrade_file_path}/data/dlog.conf.logger
 
 %post
 systemctl daemon-reload
@@ -145,9 +138,41 @@ systemctl daemon-reload
 %post -n libdlog
 /sbin/ldconfig
 chsmack -a System /var/log/dlog
+ln -s %{TZ_SYS_ETC}/dlog.conf.pipe %{TZ_SYS_ETC}/dlog.conf
+ln %{upgrade_file_path}/data/dlog.conf.pipe %{upgrade_file_path}/data/dlog.conf
 
 %postun -n libdlog
 /sbin/ldconfig
+rm %{TZ_SYS_ETC}/dlog.conf
+rm %{upgrade_file_path}/data/dlog.conf
+
+%pre -n dlogbackend-kmsg
+rm %{TZ_SYS_ETC}/dlog.conf
+rm %{upgrade_file_path}/data/dlog.conf
+
+%post -n dlogbackend-kmsg
+ln -s %{TZ_SYS_ETC}/dlog.conf.kmsg %{TZ_SYS_ETC}/dlog.conf
+ln %{upgrade_file_path}/data/dlog.conf.kmsg %{upgrade_file_path}/data/dlog.conf
+
+%postun -n dlogbackend-kmsg
+rm %{TZ_SYS_ETC}/dlog.conf
+ln -s %{TZ_SYS_ETC}/dlog.conf.pipe %{TZ_SYS_ETC}/dlog.conf
+rm %{upgrade_file_path}/data/dlog.conf
+ln %{upgrade_file_path}/data/dlog.conf.pipe %{upgrade_file_path}/data/dlog.conf
+
+%pre -n dlogbackend-logger
+rm %{TZ_SYS_ETC}/dlog.conf
+rm %{upgrade_file_path}/data/dlog.conf
+
+%post -n dlogbackend-logger
+ln -s %{TZ_SYS_ETC}/dlog.conf.logger %{TZ_SYS_ETC}/dlog.conf
+ln %{upgrade_file_path}/data/dlog.conf.logger %{upgrade_file_path}/data/dlog.conf
+
+%postun -n dlogbackend-logger
+rm %{TZ_SYS_ETC}/dlog.conf
+ln -s %{TZ_SYS_ETC}/dlog.conf.pipe %{TZ_SYS_ETC}/dlog.conf
+rm %{upgrade_file_path}/data/dlog.conf
+ln %{upgrade_file_path}/data/dlog.conf.pipe %{upgrade_file_path}/data/dlog.conf
 
 %files  -n dlogutil
 %manifest dlogutil.manifest
@@ -157,29 +182,39 @@ chsmack -a System /var/log/dlog
 
 %files  -n libdlog
 %manifest libdlog.manifest
+/usr/share/license/%{name}
 /usr/share/license/libdlog
 %{_libdir}/libdlog.so.0
 %{_libdir}/libdlog.so.0.0.0
-%attr(664,log,log) %{TZ_SYS_ETC}/dlog.conf
-/usr/share/license/%{name}
-%if %{?backend_kmsg} == ON
-%attr(700,log,log) %{_sbindir}/dloginit
-%attr(-,log,log) %{_unitdir}/dloginit.service
-%{_unitdir}/sysinit.target.wants/dloginit.service
-%endif
+%attr(664,log,log) %{TZ_SYS_ETC}/dlog.conf.pipe
 %attr(755,log,log) /var/log/dlog
 %attr(750,log,log) %{_bindir}/dlog_logger
 %{_unitdir}/multi-user.target.wants/dlog_logger.service
 %{_unitdir}/dlog_logger.service
 %{_unitdir}/dlog_logger.path
 %attr(664,log,log) /usr/lib/tmpfiles.d/dlog-run.conf
+%{_udevrulesdir}/01-dlog.rules
 # For upgrade
 %{upgrade_file_path}/scripts/dlog_upgrade.sh
-%{upgrade_file_path}/data/dlog.conf
-%{_udevrulesdir}/01-dlog.rules
+%{upgrade_file_path}/data/dlog.conf.pipe
 
 %files -n libdlog-devel
 %{_includedir}/dlog/dlog.h
 %{_includedir}/dlog/dlog-internal.h
 %{_libdir}/pkgconfig/dlog.pc
 %{_libdir}/libdlog.so
+
+%files -n dlogbackend-kmsg
+%manifest dlogbackend-kmsg.manifest
+%attr(664,log,log) %{TZ_SYS_ETC}/dlog.conf.kmsg
+%attr(700,log,log) %{_sbindir}/dloginit
+%attr(-,log,log) %{_unitdir}/dloginit.service
+%{_unitdir}/sysinit.target.wants/dloginit.service
+# For upgrade
+%{upgrade_file_path}/data/dlog.conf.kmsg
+
+%files -n dlogbackend-logger
+%manifest dlogbackend-logger.manifest
+%attr(664,log,log) %{TZ_SYS_ETC}/dlog.conf.logger
+# For upgrade
+%{upgrade_file_path}/data/dlog.conf.logger
index 0e73b12..0627d1b 100755 (executable)
@@ -2,8 +2,6 @@
 Description=Dumps dlog logs onto disk
 
 [Service]
-Nice=19
-
 # Needed for access to /dev/kmsg, the daemon drops its privileges to log,log on its own after that
 User=root
 Group=root
diff --git a/packaging/dlogbackend-kmsg.manifest b/packaging/dlogbackend-kmsg.manifest
new file mode 100755 (executable)
index 0000000..75b0fa5
--- /dev/null
@@ -0,0 +1,5 @@
+<manifest>
+    <request>
+        <domain name="_"/>
+    </request>
+</manifest>
diff --git a/packaging/dlogbackend-logger.manifest b/packaging/dlogbackend-logger.manifest
new file mode 100755 (executable)
index 0000000..75b0fa5
--- /dev/null
@@ -0,0 +1,5 @@
+<manifest>
+    <request>
+        <domain name="_"/>
+    </request>
+</manifest>
index 063787e..02b394e 100755 (executable)
@@ -40,7 +40,9 @@
  */
 int (*write_to_log)(log_id_t log_id, log_priority prio, const char *tag, const char *msg);
 pthread_mutex_t log_init_lock = PTHREAD_MUTEX_INITIALIZER;
-extern void __dlog_init_backend();
+extern void __dlog_init_pipe();
+extern void __dlog_init_kmsg();
+extern void __dlog_init_android();
 
 static int limiter;
 static int plog;
@@ -120,10 +122,24 @@ static void __configure(void)
        limiter = atoi(conf_value);
 
        log_config_foreach(&conf, __config_iteration);
-       log_config_free(&conf);
 
        if (limiter && (0 > __log_limiter_initialize()))
                limiter = 0;
+
+       conf_value = log_config_get(&conf, "backend");
+       if (!conf_value)
+               return;
+
+       if (!strncmp(conf_value, "pipe", sizeof("pipe") + 1))
+               __dlog_init_pipe();
+       else if (!strncmp(conf_value, "kmsg", sizeof("kmsg") + 1))
+               __dlog_init_kmsg();
+       else if (!strncmp(conf_value, "logger", sizeof("logger") + 1))
+               __dlog_init_android();
+
+       log_config_free(&conf);
+
+       return;
 }
 
 /**
@@ -135,7 +151,6 @@ static void __dlog_init(void)
        pthread_mutex_lock(&log_init_lock);
        write_to_log = __write_to_log_null;
        __configure();
-       __dlog_init_backend();
        debugmode = access(DEBUGMODE_FILE, F_OK) != -1 ? 1 : 0;
        pthread_mutex_unlock(&log_init_lock);
 }
index 6791962..ee7f14c 100644 (file)
@@ -56,7 +56,7 @@ static int __write_to_log_android(log_id_t log_id, log_priority prio, const char
  * @brief Initialize the backend
  * @description Prepares the backend for proper and fruitful work
  */
-void __dlog_init_backend()
+void __dlog_init_android()
 {
        struct log_config conf;
        log_id_t buf_id;
index bbf4f9c..a70815c 100644 (file)
@@ -64,7 +64,7 @@ static int __write_to_log_kmsg(log_id_t log_id, log_priority prio, const char *t
  * @brief Initialize the backend
  * @description Prepares the backend for proper and fruitful work
  */
-void __dlog_init_backend()
+void __dlog_init_kmsg()
 {
        struct log_config conf;
        log_id_t buf_id;
index 71aa7fa..6ae3644 100644 (file)
@@ -155,7 +155,7 @@ static int __write_to_log_pipe(log_id_t log_id, log_priority prio, const char *t
  * @brief Initialize the backend
  * @description Prepares the backend for proper and fruitful work
  */
-void __dlog_init_backend()
+void __dlog_init_pipe()
 {
        const char * conf_val;
        char conf_key[MAX_CONF_KEY_LEN];