config: Move persistent logging configuration to separate config file
[platform/core/system/dlog.git] / packaging / dlog.spec
index 91b6baf..897a48c 100644 (file)
@@ -1,32 +1,29 @@
+%define _with_dlog_dynamic_filters on
+%bcond_with dlog_dynamic_filters
+
 Name:       dlog
 Summary:    Logging service
-Version:    0.6
+Version:    5.5.1
 Release:    1
 Group:      System/Libraries
-License:    Apache-2.0
+License:    Apache-2.0, MIT
 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
+Source101:  packaging/dlog.manifest
 Source501:  packaging/01-dlog.rules
+Source502:  packaging/logger-devices.conf
 
-%define upgrade_file_path /usr/share/upgrade
+# NOTE: hardcoded instead of a build dependency on libudev.
+#       Needed to prevent a cyclic build dependency in case
+#       dlog is used in a package dependent on libsystemd,
+#       since libudev is a part of it
+%define _udevrulesdir %{_prefix}/lib/udev/rules.d
 
 BuildRequires: autoconf
 BuildRequires: automake
 BuildRequires: libtool
 BuildRequires: pkgconfig(capi-base-common)
-BuildRequires: pkgconfig(libudev)
 BuildRequires: pkgconfig(libtzplatform-config)
-BuildRequires: pkgconfig(libsystemd)
-Requires(post): coreutils
-Requires(post): /usr/bin/systemctl
-Requires(postun): /usr/bin/systemctl
-Requires(preun): /usr/bin/systemctl
+BuildRequires: lcov
 
 %description
 dlog API library
@@ -34,8 +31,15 @@ dlog API library
 %package -n libdlog
 Summary:    Logging service dlog API
 Group:      Development/Libraries
-Requires(post): /usr/bin/chsmack
+Requires(pre): coreutils
 Requires(post): coreutils
+Requires(post): /sbin/ldconfig
+Requires(post): /usr/bin/chsmack
+Requires(post): /usr/bin/systemctl
+Requires(posttrans): coreutils
+Requires(posttrans): /usr/bin/chsmack
+Requires(postun): /sbin/ldconfig
+Requires: %{name}-config-persistent-logs
 
 %description -n libdlog
 dlog API library. If dlogbackend isn't installed, pipe backend is selected.
@@ -48,20 +52,9 @@ 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}
-Requires(post): coreutils
-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}
-Requires(post): coreutils
-Conflicts:     dlogbackend-kmsg
 
 %description -n dlogbackend-logger
 Change dlog backend to logger backend. Require kernel support (Android-logger)
@@ -70,30 +63,68 @@ Change dlog backend to logger backend. Require kernel support (Android-logger)
 Summary:    print log data to the screen
 Group:      Development/Libraries
 Requires:   lib%{name} = %{?epoch:%{epoch}:}%{version}-%{release}
-Requires(post): /usr/bin/systemctl
-Requires(postun): /usr/bin/systemctl
-Requires(preun): /usr/bin/systemctl
 
 %description -n dlogutil
 Utilities for print log data
 
+%package -n log-syslog
+License:    Apache-2.0
+Summary:    Logger: syslog-source logging via dlog
+Group:      Base/Startup
+Requires:   lib%{name} = %{?epoch:%{epoch}:}%{version}-%{release}
+Provides:   tizen-log-syslog
+
+%description -n log-syslog
+Systemd unit for syslog socket configation to use with dlog
+
+%package config-persistent-logs
+Summary: enable persistent storage of logs
+
+%description config-persistent-logs
+Enable persistent logs in dlog (stored in /var/log/dlog/)
+
+%package -n dlog-doc
+Summary: dlog documentation
+BuildRequires: doxygen
+
+%description -n dlog-doc
+Documentation for dlog
+
+%package -n dlog-tests
+Summary: dlog integration tests
+Requires: lib%{name} = %{?epoch:%{epoch}:}%{version}-%{release}
+Requires(post): /usr/bin/chsmack
+
+%description -n dlog-tests
+Integration tests for dlog.
 
 %prep
 %setup -q
 
 %build
+if echo "$CFLAGS" | grep -q -- '-Wl,--as-needed'; then
+  LDFLAGS="${LDFLAGS} -Wl,--as-needed"
+fi
+CFLAGS="$(echo $CFLAGS | sed -e 's/-Wl,--as-needed//g') -Wno-gnu-variable-sized-type-not-at-end"
+CXXFLAGS="$(echo $CXXFLAGS | sed -e 's/-Wl,--as-needed//g')"
 
 cp %{SOURCE101} .
-cp %{SOURCE102} .
-cp %{SOURCE103} .
-cp %{SOURCE104} .
+
 %autogen --disable-static
 %configure --disable-static \
-                       TZ_SYS_ETC=%{TZ_SYS_ETC}
-make %{?jobs:-j%jobs} \
-       CFLAGS+=-DTZ_SYS_ETC=\\\"%{TZ_SYS_ETC}\\\"
+%if %{without dlog_dynamic_filters}
+--disable-dynamic-filters
+%else
+--enable-dynamic-filters
+%endif
 
-make check
+make %{?jobs:-j%jobs} CFLAGS+='-D__DLOG_VERSION=\"%{version}\" -D__DLOG_RELEASE=\"%{release}\"'
+
+# autoconf adds a bunch of flags, including -O2.
+# Clear those so that test coverage can be measured properly
+make check CFLAGS='-Wno-gnu-variable-sized-type-not-at-end -Wno-logical-op-parentheses'
+
+make dox
 
 %install
 rm -rf %{buildroot}
@@ -101,126 +132,114 @@ rm -rf %{buildroot}
 %make_install
 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}/usr/share/doc/dlog
+cp -r documentation/* %{buildroot}/usr/share/doc/dlog
 
 mkdir -p %{buildroot}%{_unitdir}/basic.target.wants/
-install -m 0644 %SOURCE301 %{buildroot}%{_unitdir}
-
-install -m 0644 %SOURCE302 %{buildroot}%{_unitdir}/dlog_logger.path
+mkdir -p %{buildroot}%{_unitdir}/sockets.target.wants/
 ln -s ../dlog_logger.service %{buildroot}%{_unitdir}/basic.target.wants/dlog_logger.service
-
-mkdir -p %{buildroot}%{_unitdir}/sysinit.target.wants/
-install -m 0644 %SOURCE401 %{buildroot}%{_unitdir}
-ln -s ../dloginit.service %{buildroot}%{_unitdir}/sysinit.target.wants/dloginit.service
+ln -s ../dlog_dev-log.socket %{buildroot}%{_unitdir}/sockets.target.wants/dlog_dev-log.socket
 
 mkdir -p %{buildroot}%{_udevrulesdir}
 install -m 0644 %SOURCE501 %{buildroot}%{_udevrulesdir}/01-dlog.rules
 
-mkdir -p %{buildroot}/usr/share/license
-cp LICENSE.Apache-2.0 %{buildroot}/usr/share/license/%{name}
-cp LICENSE.Apache-2.0 %{buildroot}/usr/share/license/libdlog
-cp LICENSE.Apache-2.0 %{buildroot}/usr/share/license/dlogutil
+mkdir -p %{buildroot}%{_unitdir}/dlog_logger.service.d
+install -m 0644 %SOURCE502 %{buildroot}%{_unitdir}/dlog_logger.service.d/logger-devices.conf
 
 mkdir -p %{buildroot}/var/log/dlog
 
-install -D scripts/210.dlog_upgrade.sh %{buildroot}%{upgrade_file_path}/scripts/210.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
-
-%post -n dlogutil
-systemctl daemon-reload
-
-%postun -n dlogutil
-systemctl daemon-reload
+mkdir -p %{buildroot}/var/lib/dlog-tests
+mkdir -p %{buildroot}/usr/share/dlog-filters.conf.test
 
-%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
+%if %{without dlog_dynamic_filters}
+rm -f %{buildroot}%{_bindir}/dlogctl
+sed -i -e 's,^\(dynamic_config_path=\),#\1,g' -e 's,^\(limiter_apply_to_all_buffers=\),#\1,g' %{buildroot}%{_sysconfdir}/dlog.conf
+%endif
 
-%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
-/usr/share/license/dlogutil
+%files -n dlogutil
+%manifest dlog.manifest
+%license LICENSE.APACHE2.0 LICENSE.MIT
 %attr(750,log,log) %{_bindir}/dlogutil
-%attr(755,log,log) %{_bindir}/dlogctrl
+%attr(755,log,log) %{_bindir}/dlogsend
+%if %{with dlog_dynamic_filters}
+%attr(750,log,log) %{_bindir}/dlogctl
+%endif
 
-%files  -n libdlog
-%manifest libdlog.manifest
-/usr/share/license/%{name}
-/usr/share/license/libdlog
+%post -n dlogutil
+%if %{with dlog_dynamic_filters}
+chsmack %{_bindir}/dlogctl -a "System::Tools"
+%endif
+
+%files -n libdlog
+%manifest dlog.manifest
+%license LICENSE.APACHE2.0 LICENSE.MIT
 %{_libdir}/libdlog.so.0
 %{_libdir}/libdlog.so.0.0.0
-%attr(664,log,log) %{TZ_SYS_ETC}/dlog.conf.pipe
+%{_sysconfdir}/dlog.conf
+%{_sysconfdir}/dlog.conf.d/20-pipe.conf
 %attr(755,log,log) /var/log/dlog
 %attr(750,log,log) %{_bindir}/dlog_logger
 %{_unitdir}/basic.target.wants/dlog_logger.service
 %{_unitdir}/dlog_logger.service
 %{_unitdir}/dlog_logger.path
-%attr(664,log,log) /usr/lib/tmpfiles.d/dlog-run.conf
+/usr/lib/tmpfiles.d/dlog-run.conf
 %{_udevrulesdir}/01-dlog.rules
-# For upgrade
-%{upgrade_file_path}/scripts/210.dlog_upgrade.sh
-%{upgrade_file_path}/data/dlog.conf.pipe
+
+%post -n libdlog
+/sbin/ldconfig
+systemctl daemon-reload
+chsmack -a System /var/log/dlog
+
+%postun -n libdlog -p /sbin/ldconfig
 
 %files -n libdlog-devel
+%manifest dlog.manifest
+%license LICENSE.APACHE2.0 LICENSE.MIT
 %{_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
+%manifest dlog.manifest
+%license LICENSE.APACHE2.0 LICENSE.MIT
+%{_sysconfdir}/dlog.conf.d/25-logger.conf
+%{_unitdir}/dlog_logger.service.d/logger-devices.conf
+
+%files -n log-syslog
+%manifest dlog.manifest
+%license LICENSE.APACHE2.0 LICENSE.MIT
+%{_unitdir}/sockets.target.wants/dlog_dev-log.socket
+%{_unitdir}/dlog_dev-log.socket
+
+%files config-persistent-logs
+%{_sysconfdir}/dlog.conf.d/10-persistent-logs.conf
+
+%files -n dlog-doc
+%manifest dlog.manifest
+%license LICENSE.APACHE2.0 LICENSE.MIT
+/usr/share/doc/dlog
+
+%files -n dlog-tests
+%manifest dlog.manifest
+%license LICENSE.APACHE2.0 LICENSE.MIT
+%{_bindir}/dlog_test
+/usr/share/doc/dlog/README.testsuite
+%{_libexecdir}/libdlog/perf_libdlog
+%{_libexecdir}/libdlog/test_libdlog
+%{_libexecdir}/libdlog/test_filters
+%{_datadir}/dlog-pipe.conf.test
+%{_datadir}/dlog-logger.conf.test
+%{_sysconfdir}/dlog.conf.d/99-dlog-logger.disable-platform-logging-for-testsuite.conf
+%dir %attr(755,log,log) /var/lib/dlog-tests
+%dir %attr(755,log,log) /usr/share/dlog-filters.conf.test
+
+%post -n dlog-tests
+chsmack -a System /var/lib/dlog-tests
+echo "Warning! Installation of dlog-tests will break platform logging."
+echo "This is done intentionally, to make logger backend testing possible."
+echo "To restore normal behavior, please uninstall dlog-tests package."
+echo ""
+echo "For more information please read the /usr/share/doc/dlog/README.testsuite file"
+echo ""
+echo "A reboot is required to properly configure logger backend for testing."