mirror of
https://github.com/systemd/systemd
synced 2024-10-15 12:34:37 +00:00
build: basic autoconfization
This commit is contained in:
parent
a7334b0952
commit
47be870bd8
17
.gitignore
vendored
17
.gitignore
vendored
|
@ -8,3 +8,20 @@ systemctl.c
|
||||||
systemd-interfaces.c
|
systemd-interfaces.c
|
||||||
systemadm
|
systemadm
|
||||||
systemadm.c
|
systemadm.c
|
||||||
|
.deps/
|
||||||
|
Makefile.in
|
||||||
|
aclocal.m4
|
||||||
|
*.cache
|
||||||
|
compile
|
||||||
|
config.guess
|
||||||
|
config.h
|
||||||
|
config.h.in
|
||||||
|
config.log
|
||||||
|
config.status
|
||||||
|
config.sub
|
||||||
|
configure
|
||||||
|
depcomp
|
||||||
|
install-sh
|
||||||
|
missing
|
||||||
|
stamp-*
|
||||||
|
*.stamp
|
||||||
|
|
53
Makefile
53
Makefile
|
@ -1,53 +0,0 @@
|
||||||
CFLAGS=-Wall -Wextra -O0 -g -pipe -D_GNU_SOURCE -fdiagnostics-show-option -Wno-unused-parameter -DUNIT_PATH=\"/tmp/does/not/exist\" `pkg-config --cflags libudev dbus-1`
|
|
||||||
LIBS=-lrt -lcap `pkg-config --libs libudev dbus-1`
|
|
||||||
|
|
||||||
COMMON= \
|
|
||||||
unit.o \
|
|
||||||
util.o \
|
|
||||||
set.o \
|
|
||||||
hashmap.o \
|
|
||||||
strv.o \
|
|
||||||
job.o \
|
|
||||||
manager.o \
|
|
||||||
conf-parser.o \
|
|
||||||
load-fragment.o \
|
|
||||||
socket-util.o \
|
|
||||||
log.o \
|
|
||||||
service.o \
|
|
||||||
automount.o \
|
|
||||||
mount.o \
|
|
||||||
device.o \
|
|
||||||
target.o \
|
|
||||||
snapshot.o \
|
|
||||||
socket.o \
|
|
||||||
timer.o \
|
|
||||||
load-dropin.o \
|
|
||||||
execute.o \
|
|
||||||
ratelimit.o \
|
|
||||||
dbus.o \
|
|
||||||
dbus-manager.o \
|
|
||||||
dbus-unit.o \
|
|
||||||
dbus-job.o
|
|
||||||
|
|
||||||
all: systemd test-engine test-job-type systemd-logger systemctl systemadm
|
|
||||||
|
|
||||||
systemd: main.o $(COMMON)
|
|
||||||
$(CC) $(CFLAGS) -o $@ $^ $(LIBS)
|
|
||||||
|
|
||||||
systemd-logger: logger.o $(COMMON)
|
|
||||||
$(CC) $(CFLAGS) -o $@ $^ $(LIBS)
|
|
||||||
|
|
||||||
test-engine: test-engine.o $(COMMON)
|
|
||||||
$(CC) $(CFLAGS) -o $@ $^ $(LIBS)
|
|
||||||
|
|
||||||
test-job-type: test-job-type.o $(COMMON)
|
|
||||||
$(CC) $(CFLAGS) -o $@ $^ $(LIBS)
|
|
||||||
|
|
||||||
systemctl: systemctl.vala
|
|
||||||
valac -g --save-temps systemctl.vala systemd-interfaces.vala --pkg=dbus-glib-1 --pkg=posix
|
|
||||||
|
|
||||||
systemadm: systemadm.vala
|
|
||||||
valac -g --save-temps systemadm.vala systemd-interfaces.vala --pkg=dbus-glib-1 --pkg=posix --pkg gee-1.0 --pkg gtk+-2.0
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f *.o systemd test-engine systemctl systemadm
|
|
112
Makefile.am
Normal file
112
Makefile.am
Normal file
|
@ -0,0 +1,112 @@
|
||||||
|
# This file is part of systemd.
|
||||||
|
#
|
||||||
|
# Copyright 2010 Lennart Poettering
|
||||||
|
#
|
||||||
|
# systemd is free software; you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# systemd is distributed in the hope that it will be useful, but
|
||||||
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
# General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
ACLOCAL_AMFLAGS = -I m4
|
||||||
|
|
||||||
|
AM_CPPFLAGS = \
|
||||||
|
-include $(top_builddir)/config.h \
|
||||||
|
-DUNIT_PATH=\"/tmp/does/not/exist\"
|
||||||
|
|
||||||
|
sbin_PROGRAMS = \
|
||||||
|
systemd
|
||||||
|
|
||||||
|
bin_PROGRAMS = \
|
||||||
|
systemctl \
|
||||||
|
systemadm \
|
||||||
|
systemd-logger
|
||||||
|
|
||||||
|
noinst_PROGRAMS = \
|
||||||
|
test-engine \
|
||||||
|
test-job-type
|
||||||
|
|
||||||
|
BASIC_SOURCES= \
|
||||||
|
util.c \
|
||||||
|
hashmap.c \
|
||||||
|
set.c \
|
||||||
|
strv.c \
|
||||||
|
conf-parser.c \
|
||||||
|
socket-util.c \
|
||||||
|
log.c \
|
||||||
|
ratelimit.c
|
||||||
|
|
||||||
|
COMMON_SOURCES= \
|
||||||
|
$(BASIC_SOURCES) \
|
||||||
|
unit.c \
|
||||||
|
job.c \
|
||||||
|
manager.c \
|
||||||
|
load-fragment.c \
|
||||||
|
service.c \
|
||||||
|
automount.c \
|
||||||
|
mount.c \
|
||||||
|
device.c \
|
||||||
|
target.c \
|
||||||
|
snapshot.c \
|
||||||
|
socket.c \
|
||||||
|
timer.c \
|
||||||
|
load-dropin.c \
|
||||||
|
execute.c \
|
||||||
|
dbus.c \
|
||||||
|
dbus-manager.c \
|
||||||
|
dbus-unit.c \
|
||||||
|
dbus-job.c
|
||||||
|
|
||||||
|
systemd_SOURCES = \
|
||||||
|
$(COMMON_SOURCES) \
|
||||||
|
main.c
|
||||||
|
|
||||||
|
systemd_CPPFLAGS = \
|
||||||
|
$(AM_CPPFLAGS) \
|
||||||
|
$(DBUS_CFLAGS) \
|
||||||
|
$(UDEV_CFLAGS)
|
||||||
|
|
||||||
|
systemd_LDADD = \
|
||||||
|
$(DBUS_LIBS) \
|
||||||
|
$(UDEV_LIBS)
|
||||||
|
|
||||||
|
test_engine_SOURCES = \
|
||||||
|
$(COMMON_SOURCES) \
|
||||||
|
test-engine.c
|
||||||
|
|
||||||
|
test_engine_CPPFLAGS = $(systemd_CPPFLAGS)
|
||||||
|
test_engine_LDADD = $(systemd_LDADD)
|
||||||
|
|
||||||
|
test_job_type_SOURCES = \
|
||||||
|
$(COMMON_SOURCES) \
|
||||||
|
test-engine.c
|
||||||
|
|
||||||
|
test_job_type_CPPFLAGS = $(systemd_CPPFLAGS)
|
||||||
|
test_job_type_LDADD = $(systemd_LDADD)
|
||||||
|
|
||||||
|
systemd_logger_SOURCES = \
|
||||||
|
$(BASIC_SOURCES) \
|
||||||
|
logger.c
|
||||||
|
|
||||||
|
VALAFLAGS = -g --save-temps --pkg=dbus-glib-1 --pkg=posix --pkg gee-1.0 --pkg gtk+-2.0
|
||||||
|
|
||||||
|
systemctl_SOURCES = \
|
||||||
|
systemctl.vala \
|
||||||
|
systemd-interfaces.vala
|
||||||
|
|
||||||
|
systemctl_CPPFLAGS = $(AM_CPPFLAGS) $(DBUSGLIB_CFLAGS)
|
||||||
|
systemctl_LDADD = $(DBUSGLIB_LIBS)
|
||||||
|
|
||||||
|
systemadm_SOURCES = \
|
||||||
|
systemadm.vala \
|
||||||
|
systemd-interfaces.vala
|
||||||
|
|
||||||
|
systemadm_CPPFLAGS = $(AM_CPPFLAGS) $(DBUSGLIB_CFLAGS) $(GTK_CFLAGS)
|
||||||
|
systemadm_LDADD = $(DBUSGLIB_LIBS) $(GTK_LIBS)
|
80
bootstrap.sh
Executable file
80
bootstrap.sh
Executable file
|
@ -0,0 +1,80 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# This file is part of systemd.
|
||||||
|
#
|
||||||
|
# Copyright 2010 Lennart Poettering
|
||||||
|
#
|
||||||
|
# systemd is free software; you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# systemd is distributed in the hope that it will be useful, but
|
||||||
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
# General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
AM_VERSION=1.11
|
||||||
|
AC_VERSION=2.63
|
||||||
|
|
||||||
|
run_versioned() {
|
||||||
|
local P
|
||||||
|
local V
|
||||||
|
|
||||||
|
V=$(echo "$2" | sed -e 's,\.,,g')
|
||||||
|
|
||||||
|
if [ -e "`which $1$V 2> /dev/null`" ] ; then
|
||||||
|
P="$1$V"
|
||||||
|
else
|
||||||
|
if [ -e "`which $1-$2 2> /dev/null`" ] ; then
|
||||||
|
P="$1-$2"
|
||||||
|
else
|
||||||
|
P="$1"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
shift 2
|
||||||
|
"$P" "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
if [ -f .git/hooks/pre-commit.sample -a ! -f .git/hooks/pre-commit ] ; then
|
||||||
|
cp -p .git/hooks/pre-commit.sample .git/hooks/pre-commit && \
|
||||||
|
chmod +x .git/hooks/pre-commit && \
|
||||||
|
echo "Activated pre-commit hook."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# We check for this here, because if pkg-config is not found in the
|
||||||
|
# system, it's likely that the pkg.m4 macro file is also not present,
|
||||||
|
# which will make PKG_PROG_PKG_CONFIG be undefined and the generated
|
||||||
|
# configure file faulty.
|
||||||
|
if ! pkg-config --version &>/dev/null; then
|
||||||
|
echo "pkg-config is required to bootstrap this program" &>/dev/null
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if type -p colorgcc > /dev/null ; then
|
||||||
|
export CC=colorgcc
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "x$1" = "xam" ] ; then
|
||||||
|
run_versioned automake "$VERSION" -a -c --foreign
|
||||||
|
./config.status
|
||||||
|
else
|
||||||
|
rm -rf autom4te.cache
|
||||||
|
rm -f config.cache
|
||||||
|
|
||||||
|
run_versioned aclocal "$AM_VERSION" -I m4
|
||||||
|
run_versioned autoconf "$AC_VERSION" -Wall
|
||||||
|
run_versioned autoheader "$AC_VERSION"
|
||||||
|
run_versioned automake "$AM_VERSION" --copy --foreign --add-missing
|
||||||
|
|
||||||
|
if [ "x$1" != "xac" ]; then
|
||||||
|
CFLAGS="$CFLAGS -g -O0" ./configure --sysconfdir=/etc --localstatedir=/var "$@"
|
||||||
|
make clean
|
||||||
|
fi
|
||||||
|
fi
|
75
configure.ac
Normal file
75
configure.ac
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
# This file is part of systemd.
|
||||||
|
#
|
||||||
|
# Copyright 2010 Lennart Poettering
|
||||||
|
#
|
||||||
|
# systemd is free software; you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# systemd is distributed in the hope that it will be useful, but
|
||||||
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
# General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
AC_PREREQ(2.63)
|
||||||
|
|
||||||
|
AC_INIT([systemd],[0],[mzflfgrzq (at) 0pointer (dot) net])
|
||||||
|
AC_CONFIG_SRCDIR([main.c])
|
||||||
|
AC_CONFIG_MACRO_DIR([m4])
|
||||||
|
AC_CONFIG_HEADERS([config.h])
|
||||||
|
|
||||||
|
AM_INIT_AUTOMAKE([foreign 1.11 -Wall -Wno-portability silent-rules tar-pax])
|
||||||
|
|
||||||
|
AC_SUBST(PACKAGE_URL, [http://git.0pointer.de/?p=systemd.git])
|
||||||
|
|
||||||
|
AC_CANONICAL_HOST
|
||||||
|
|
||||||
|
AM_SILENT_RULES([yes])
|
||||||
|
|
||||||
|
AC_CHECK_PROG([STOW], [stow], [yes], [no])
|
||||||
|
|
||||||
|
AS_IF([test "x$STOW" = "xyes" && test -d /usr/local/stow], [
|
||||||
|
AC_MSG_NOTICE([*** Found /usr/local/stow: default install prefix set to /usr/local/stow/${PACKAGE_NAME}-${PACKAGE_VERSION} ***])
|
||||||
|
ac_default_prefix="/usr/local/stow/${PACKAGE_NAME}-${PACKAGE_VERSION}"
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_PROG_CC
|
||||||
|
AC_PROG_CC_C99
|
||||||
|
AM_PROG_CC_C_O
|
||||||
|
AC_PROG_GCC_TRADITIONAL
|
||||||
|
AC_USE_SYSTEM_EXTENSIONS
|
||||||
|
|
||||||
|
CC_CHECK_CFLAGS_APPEND([-Wall -W -Wextra -pipe -Wno-long-long -Winline -Wvla -Wno-overlength-strings -Wunsafe-loop-optimizations -Wundef -Wformat=2 -Wlogical-op -Wsign-compare -Wformat-security -Wmissing-include-dirs -Wformat-nonliteral -Wold-style-definition -Wpointer-arith -Winit-self -Wdeclaration-after-statement -Wfloat-equal -Wmissing-prototypes -Wstrict-prototypes -Wredundant-decls -Wmissing-declarations -Wmissing-noreturn -Wshadow -Wendif-labels -Wcast-align -Wstrict-aliasing=2 -Wwrite-strings -Wno-unused-parameter -ffast-math -Wp,-D_FORTIFY_SOURCE=2 -fno-common -fdiagnostics-show-option -Wno-missing-field-initializers])
|
||||||
|
|
||||||
|
AC_SEARCH_LIBS([clock_gettime], [rt], [], [AC_MSG_ERROR([*** POSIX RT library not found])])
|
||||||
|
AC_SEARCH_LIBS([cap_init], [cap], [], [AC_MSG_ERROR([*** POSIX caps library not found])])
|
||||||
|
AC_CHECK_HEADERS([sys/capability.h], [], [AC_MSG_ERROR([*** POSIX caps headers not found])])
|
||||||
|
|
||||||
|
PKG_CHECK_MODULES(UDEV, [ libudev ])
|
||||||
|
AC_SUBST(UDEV_CFLAGS)
|
||||||
|
AC_SUBST(UDEV_LIBS)
|
||||||
|
|
||||||
|
PKG_CHECK_MODULES(DBUS, [ dbus-1 ])
|
||||||
|
AC_SUBST(DBUS_CFLAGS)
|
||||||
|
AC_SUBST(DBUS_LIBS)
|
||||||
|
|
||||||
|
PKG_CHECK_MODULES(DBUSGLIB, [ dbus-glib-1 ])
|
||||||
|
AC_SUBST(DBUSGLIB_CFLAGS)
|
||||||
|
AC_SUBST(DBUSGLIB_LIBS)
|
||||||
|
|
||||||
|
PKG_CHECK_MODULES(GEE, [ gee-1.0 ])
|
||||||
|
AC_SUBST(GEE_CFLAGS)
|
||||||
|
AC_SUBST(GEE_LIBS)
|
||||||
|
|
||||||
|
PKG_CHECK_MODULES(GTK, [ gtk+-2.0 ])
|
||||||
|
AC_SUBST(GTK_CFLAGS)
|
||||||
|
AC_SUBST(GTK_LIBS)
|
||||||
|
|
||||||
|
AM_PROG_VALAC()
|
||||||
|
AC_SUBST(VAPIDIR)
|
||||||
|
|
||||||
|
AC_OUTPUT([Makefile])
|
|
@ -142,7 +142,7 @@ oom:
|
||||||
return DBUS_HANDLER_RESULT_NEED_MEMORY;
|
return DBUS_HANDLER_RESULT_NEED_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBusHandlerResult bus_job_message_handler(DBusConnection *connection, DBusMessage *message, void *data) {
|
static DBusHandlerResult bus_job_message_handler(DBusConnection *connection, DBusMessage *message, void *data) {
|
||||||
Manager *m = data;
|
Manager *m = data;
|
||||||
Job *j;
|
Job *j;
|
||||||
int r;
|
int r;
|
||||||
|
|
|
@ -54,7 +54,7 @@
|
||||||
#define INTROSPECTION_END \
|
#define INTROSPECTION_END \
|
||||||
"</node>"
|
"</node>"
|
||||||
|
|
||||||
DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, DBusMessage *message, void *data) {
|
static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, DBusMessage *message, void *data) {
|
||||||
int r;
|
int r;
|
||||||
Manager *m = data;
|
Manager *m = data;
|
||||||
DBusError error;
|
DBusError error;
|
||||||
|
@ -172,7 +172,7 @@ DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, DBusM
|
||||||
goto oom;
|
goto oom;
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(u, k, m->units, i) {
|
HASHMAP_FOREACH_KEY(u, k, m->units, i) {
|
||||||
char *unit_path, *job_path;
|
char *u_path, *j_path;
|
||||||
const char *id, *description, *load_state, *active_state, *job_type;
|
const char *id, *description, *load_state, *active_state, *job_type;
|
||||||
DBusMessageIter sub2;
|
DBusMessageIter sub2;
|
||||||
uint32_t job_id;
|
uint32_t job_id;
|
||||||
|
@ -188,21 +188,21 @@ DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, DBusM
|
||||||
load_state = unit_load_state_to_string(u->meta.load_state);
|
load_state = unit_load_state_to_string(u->meta.load_state);
|
||||||
active_state = unit_active_state_to_string(unit_active_state(u));
|
active_state = unit_active_state_to_string(unit_active_state(u));
|
||||||
|
|
||||||
if (!(unit_path = unit_dbus_path(u)))
|
if (!(u_path = unit_dbus_path(u)))
|
||||||
goto oom;
|
goto oom;
|
||||||
|
|
||||||
if (u->meta.job) {
|
if (u->meta.job) {
|
||||||
job_id = (uint32_t) u->meta.job->id;
|
job_id = (uint32_t) u->meta.job->id;
|
||||||
|
|
||||||
if (!(job_path = job_dbus_path(u->meta.job))) {
|
if (!(j_path = job_dbus_path(u->meta.job))) {
|
||||||
free(unit_path);
|
free(u_path);
|
||||||
goto oom;
|
goto oom;
|
||||||
}
|
}
|
||||||
|
|
||||||
job_type = job_type_to_string(u->meta.job->type);
|
job_type = job_type_to_string(u->meta.job->type);
|
||||||
} else {
|
} else {
|
||||||
job_id = 0;
|
job_id = 0;
|
||||||
job_path = unit_path;
|
j_path = u_path;
|
||||||
job_type = "";
|
job_type = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -210,19 +210,19 @@ DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, DBusM
|
||||||
!dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &description) ||
|
!dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &description) ||
|
||||||
!dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &load_state) ||
|
!dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &load_state) ||
|
||||||
!dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &active_state) ||
|
!dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &active_state) ||
|
||||||
!dbus_message_iter_append_basic(&sub2, DBUS_TYPE_OBJECT_PATH, &unit_path) ||
|
!dbus_message_iter_append_basic(&sub2, DBUS_TYPE_OBJECT_PATH, &u_path) ||
|
||||||
!dbus_message_iter_append_basic(&sub2, DBUS_TYPE_UINT32, &job_id) ||
|
!dbus_message_iter_append_basic(&sub2, DBUS_TYPE_UINT32, &job_id) ||
|
||||||
!dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &job_type) ||
|
!dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &job_type) ||
|
||||||
!dbus_message_iter_append_basic(&sub2, DBUS_TYPE_OBJECT_PATH, &job_path)) {
|
!dbus_message_iter_append_basic(&sub2, DBUS_TYPE_OBJECT_PATH, &j_path)) {
|
||||||
free(unit_path);
|
free(u_path);
|
||||||
if (u->meta.job)
|
if (u->meta.job)
|
||||||
free(job_path);
|
free(j_path);
|
||||||
goto oom;
|
goto oom;
|
||||||
}
|
}
|
||||||
|
|
||||||
free(unit_path);
|
free(u_path);
|
||||||
if (u->meta.job)
|
if (u->meta.job)
|
||||||
free(job_path);
|
free(j_path);
|
||||||
|
|
||||||
if (!dbus_message_iter_close_container(&sub, &sub2))
|
if (!dbus_message_iter_close_container(&sub, &sub2))
|
||||||
goto oom;
|
goto oom;
|
||||||
|
@ -245,7 +245,7 @@ DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, DBusM
|
||||||
goto oom;
|
goto oom;
|
||||||
|
|
||||||
HASHMAP_FOREACH(j, m->jobs, i) {
|
HASHMAP_FOREACH(j, m->jobs, i) {
|
||||||
char *unit_path, *job_path;
|
char *u_path, *j_path;
|
||||||
const char *unit, *state, *type;
|
const char *unit, *state, *type;
|
||||||
uint32_t id;
|
uint32_t id;
|
||||||
DBusMessageIter sub2;
|
DBusMessageIter sub2;
|
||||||
|
@ -258,11 +258,11 @@ DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, DBusM
|
||||||
state = job_state_to_string(j->state);
|
state = job_state_to_string(j->state);
|
||||||
type = job_type_to_string(j->type);
|
type = job_type_to_string(j->type);
|
||||||
|
|
||||||
if (!(job_path = job_dbus_path(j)))
|
if (!(j_path = job_dbus_path(j)))
|
||||||
goto oom;
|
goto oom;
|
||||||
|
|
||||||
if (!(unit_path = unit_dbus_path(j->unit))) {
|
if (!(u_path = unit_dbus_path(j->unit))) {
|
||||||
free(job_path);
|
free(j_path);
|
||||||
goto oom;
|
goto oom;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -270,15 +270,15 @@ DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, DBusM
|
||||||
!dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &unit) ||
|
!dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &unit) ||
|
||||||
!dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &type) ||
|
!dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &type) ||
|
||||||
!dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &state) ||
|
!dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &state) ||
|
||||||
!dbus_message_iter_append_basic(&sub2, DBUS_TYPE_OBJECT_PATH, &job_path) ||
|
!dbus_message_iter_append_basic(&sub2, DBUS_TYPE_OBJECT_PATH, &j_path) ||
|
||||||
!dbus_message_iter_append_basic(&sub2, DBUS_TYPE_OBJECT_PATH, &unit_path)) {
|
!dbus_message_iter_append_basic(&sub2, DBUS_TYPE_OBJECT_PATH, &u_path)) {
|
||||||
free(job_path);
|
free(j_path);
|
||||||
free(unit_path);
|
free(u_path);
|
||||||
goto oom;
|
goto oom;
|
||||||
}
|
}
|
||||||
|
|
||||||
free(job_path);
|
free(j_path);
|
||||||
free(unit_path);
|
free(u_path);
|
||||||
|
|
||||||
if (!dbus_message_iter_close_container(&sub, &sub2))
|
if (!dbus_message_iter_close_container(&sub, &sub2))
|
||||||
goto oom;
|
goto oom;
|
||||||
|
|
|
@ -269,7 +269,7 @@ static int setup_output(const ExecContext *context, const char *ident) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int setup_input(const ExecContext *context) {
|
static int setup_input(const ExecContext *context) {
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(context);
|
assert(context);
|
||||||
|
|
2
job.h
2
job.h
|
@ -124,6 +124,8 @@ bool job_type_is_mergeable(JobType a, JobType b);
|
||||||
bool job_type_is_superset(JobType a, JobType b);
|
bool job_type_is_superset(JobType a, JobType b);
|
||||||
bool job_type_is_conflicting(JobType a, JobType b);
|
bool job_type_is_conflicting(JobType a, JobType b);
|
||||||
|
|
||||||
|
bool job_is_runnable(Job *j);
|
||||||
|
|
||||||
void job_schedule_run(Job *j);
|
void job_schedule_run(Job *j);
|
||||||
int job_run_and_invalidate(Job *j);
|
int job_run_and_invalidate(Job *j);
|
||||||
int job_finish_and_invalidate(Job *j, bool success);
|
int job_finish_and_invalidate(Job *j, bool success);
|
||||||
|
|
|
@ -472,7 +472,7 @@ static int config_parse_service_restart(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_bindtodevice(
|
static int config_parse_bindtodevice(
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
const char *section,
|
const char *section,
|
||||||
|
@ -501,7 +501,7 @@ int config_parse_bindtodevice(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_output(
|
static int config_parse_output(
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
const char *section,
|
const char *section,
|
||||||
|
@ -527,7 +527,7 @@ int config_parse_output(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_input(
|
static int config_parse_input(
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
const char *section,
|
const char *section,
|
||||||
|
@ -553,7 +553,7 @@ int config_parse_input(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_facility(
|
static int config_parse_facility(
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
const char *section,
|
const char *section,
|
||||||
|
@ -583,7 +583,7 @@ int config_parse_facility(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_level(
|
static int config_parse_level(
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
const char *section,
|
const char *section,
|
||||||
|
@ -612,7 +612,7 @@ int config_parse_level(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_io_class(
|
static int config_parse_io_class(
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
const char *section,
|
const char *section,
|
||||||
|
@ -643,7 +643,7 @@ int config_parse_io_class(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_io_priority(
|
static int config_parse_io_priority(
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
const char *section,
|
const char *section,
|
||||||
|
@ -671,7 +671,7 @@ int config_parse_io_priority(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_cpu_sched_policy(
|
static int config_parse_cpu_sched_policy(
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
const char *section,
|
const char *section,
|
||||||
|
@ -703,7 +703,7 @@ int config_parse_cpu_sched_policy(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_cpu_sched_prio(
|
static int config_parse_cpu_sched_prio(
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
const char *section,
|
const char *section,
|
||||||
|
@ -732,7 +732,7 @@ int config_parse_cpu_sched_prio(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_cpu_affinity(
|
static int config_parse_cpu_affinity(
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
const char *section,
|
const char *section,
|
||||||
|
@ -775,7 +775,7 @@ int config_parse_cpu_affinity(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_capabilities(
|
static int config_parse_capabilities(
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
const char *section,
|
const char *section,
|
||||||
|
@ -807,7 +807,7 @@ int config_parse_capabilities(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_secure_bits(
|
static int config_parse_secure_bits(
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
const char *section,
|
const char *section,
|
||||||
|
@ -848,7 +848,7 @@ int config_parse_secure_bits(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_bounding_set(
|
static int config_parse_bounding_set(
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
const char *section,
|
const char *section,
|
||||||
|
|
8
logger.c
8
logger.c
|
@ -155,7 +155,7 @@ static int stream_log(Stream *s, char *p, usec_t timestamp) {
|
||||||
IOVEC_SET_STRING(iovec[1], s->process);
|
IOVEC_SET_STRING(iovec[1], s->process);
|
||||||
IOVEC_SET_STRING(iovec[2], header_pid);
|
IOVEC_SET_STRING(iovec[2], header_pid);
|
||||||
IOVEC_SET_STRING(iovec[3], p);
|
IOVEC_SET_STRING(iovec[3], p);
|
||||||
IOVEC_SET_STRING(iovec[4], "\n");
|
IOVEC_SET_STRING(iovec[4], (char*) "\n");
|
||||||
|
|
||||||
if (writev(s->server->kmsg_fd, iovec, ELEMENTSOF(iovec)) < 0)
|
if (writev(s->server->kmsg_fd, iovec, ELEMENTSOF(iovec)) < 0)
|
||||||
return -errno;
|
return -errno;
|
||||||
|
@ -548,9 +548,9 @@ int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
struct epoll_event event;
|
struct epoll_event event;
|
||||||
int n;
|
int k;
|
||||||
|
|
||||||
if ((n = epoll_wait(server.epoll_fd,
|
if ((k = epoll_wait(server.epoll_fd,
|
||||||
&event, 1,
|
&event, 1,
|
||||||
server.n_streams <= 0 ? TIMEOUT : -1)) < 0) {
|
server.n_streams <= 0 ? TIMEOUT : -1)) < 0) {
|
||||||
|
|
||||||
|
@ -561,7 +561,7 @@ int main(int argc, char *argv[]) {
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (n <= 0)
|
if (k <= 0)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if ((r = process_event(&server, &event)) < 0)
|
if ((r = process_event(&server, &event)) < 0)
|
||||||
|
|
311
m4/attributes.m4
Normal file
311
m4/attributes.m4
Normal file
|
@ -0,0 +1,311 @@
|
||||||
|
dnl Macros to check the presence of generic (non-typed) symbols.
|
||||||
|
dnl Copyright (c) 2006-2008 Diego Pettenò <flameeyes@gmail.com>
|
||||||
|
dnl Copyright (c) 2006-2008 xine project
|
||||||
|
dnl
|
||||||
|
dnl This program is free software; you can redistribute it and/or modify
|
||||||
|
dnl it under the terms of the GNU General Public License as published by
|
||||||
|
dnl the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
dnl any later version.
|
||||||
|
dnl
|
||||||
|
dnl This program is distributed in the hope that it will be useful,
|
||||||
|
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
dnl GNU General Public License for more details.
|
||||||
|
dnl
|
||||||
|
dnl You should have received a copy of the GNU General Public License
|
||||||
|
dnl along with this program; if not, write to the Free Software
|
||||||
|
dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
|
dnl 02110-1301, USA.
|
||||||
|
dnl
|
||||||
|
dnl As a special exception, the copyright owners of the
|
||||||
|
dnl macro gives unlimited permission to copy, distribute and modify the
|
||||||
|
dnl configure scripts that are the output of Autoconf when processing the
|
||||||
|
dnl Macro. You need not follow the terms of the GNU General Public
|
||||||
|
dnl License when using or distributing such scripts, even though portions
|
||||||
|
dnl of the text of the Macro appear in them. The GNU General Public
|
||||||
|
dnl License (GPL) does govern all other use of the material that
|
||||||
|
dnl constitutes the Autoconf Macro.
|
||||||
|
dnl
|
||||||
|
dnl This special exception to the GPL applies to versions of the
|
||||||
|
dnl Autoconf Macro released by this project. When you make and
|
||||||
|
dnl distribute a modified version of the Autoconf Macro, you may extend
|
||||||
|
dnl this special exception to the GPL to apply to your modified version as
|
||||||
|
dnl well.
|
||||||
|
|
||||||
|
dnl Check if the flag is supported by compiler
|
||||||
|
dnl CC_CHECK_CFLAGS_SILENT([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND])
|
||||||
|
|
||||||
|
AC_DEFUN([CC_CHECK_CFLAGS_SILENT], [
|
||||||
|
AC_CACHE_VAL(AS_TR_SH([cc_cv_cflags_$1]),
|
||||||
|
[ac_save_CFLAGS="$CFLAGS"
|
||||||
|
CFLAGS="$CFLAGS $1"
|
||||||
|
AC_COMPILE_IFELSE([int a;],
|
||||||
|
[eval "AS_TR_SH([cc_cv_cflags_$1])='yes'"],
|
||||||
|
[eval "AS_TR_SH([cc_cv_cflags_$1])='no'"])
|
||||||
|
CFLAGS="$ac_save_CFLAGS"
|
||||||
|
])
|
||||||
|
|
||||||
|
AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_$1])[ = xyes],
|
||||||
|
[$2], [$3])
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl Check if the flag is supported by compiler (cacheable)
|
||||||
|
dnl CC_CHECK_CFLAGS([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND])
|
||||||
|
|
||||||
|
AC_DEFUN([CC_CHECK_CFLAGS], [
|
||||||
|
AC_CACHE_CHECK([if $CC supports $1 flag],
|
||||||
|
AS_TR_SH([cc_cv_cflags_$1]),
|
||||||
|
CC_CHECK_CFLAGS_SILENT([$1]) dnl Don't execute actions here!
|
||||||
|
)
|
||||||
|
|
||||||
|
AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_$1])[ = xyes],
|
||||||
|
[$2], [$3])
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl CC_CHECK_CFLAG_APPEND(FLAG, [action-if-found], [action-if-not-found])
|
||||||
|
dnl Check for CFLAG and appends them to CFLAGS if supported
|
||||||
|
AC_DEFUN([CC_CHECK_CFLAG_APPEND], [
|
||||||
|
AC_CACHE_CHECK([if $CC supports $1 flag],
|
||||||
|
AS_TR_SH([cc_cv_cflags_$1]),
|
||||||
|
CC_CHECK_CFLAGS_SILENT([$1]) dnl Don't execute actions here!
|
||||||
|
)
|
||||||
|
|
||||||
|
AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_$1])[ = xyes],
|
||||||
|
[CFLAGS="$CFLAGS $1"; DEBUG_CFLAGS="$DEBUG_CFLAGS $1"; $2], [$3])
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl CC_CHECK_CFLAGS_APPEND([FLAG1 FLAG2], [action-if-found], [action-if-not])
|
||||||
|
AC_DEFUN([CC_CHECK_CFLAGS_APPEND], [
|
||||||
|
for flag in $1; do
|
||||||
|
CC_CHECK_CFLAG_APPEND($flag, [$2], [$3])
|
||||||
|
done
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl Check if the flag is supported by linker (cacheable)
|
||||||
|
dnl CC_CHECK_LDFLAGS([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND])
|
||||||
|
|
||||||
|
AC_DEFUN([CC_CHECK_LDFLAGS], [
|
||||||
|
AC_CACHE_CHECK([if $CC supports $1 flag],
|
||||||
|
AS_TR_SH([cc_cv_ldflags_$1]),
|
||||||
|
[ac_save_LDFLAGS="$LDFLAGS"
|
||||||
|
LDFLAGS="$LDFLAGS $1"
|
||||||
|
AC_LINK_IFELSE([int main() { return 1; }],
|
||||||
|
[eval "AS_TR_SH([cc_cv_ldflags_$1])='yes'"],
|
||||||
|
[eval "AS_TR_SH([cc_cv_ldflags_$1])="])
|
||||||
|
LDFLAGS="$ac_save_LDFLAGS"
|
||||||
|
])
|
||||||
|
|
||||||
|
AS_IF([eval test x$]AS_TR_SH([cc_cv_ldflags_$1])[ = xyes],
|
||||||
|
[$2], [$3])
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl define the LDFLAGS_NOUNDEFINED variable with the correct value for
|
||||||
|
dnl the current linker to avoid undefined references in a shared object.
|
||||||
|
AC_DEFUN([CC_NOUNDEFINED], [
|
||||||
|
dnl We check $host for which systems to enable this for.
|
||||||
|
AC_REQUIRE([AC_CANONICAL_HOST])
|
||||||
|
|
||||||
|
case $host in
|
||||||
|
dnl FreeBSD (et al.) does not complete linking for shared objects when pthreads
|
||||||
|
dnl are requested, as different implementations are present; to avoid problems
|
||||||
|
dnl use -Wl,-z,defs only for those platform not behaving this way.
|
||||||
|
*-freebsd* | *-openbsd*) ;;
|
||||||
|
*)
|
||||||
|
dnl First of all check for the --no-undefined variant of GNU ld. This allows
|
||||||
|
dnl for a much more readable commandline, so that people can understand what
|
||||||
|
dnl it does without going to look for what the heck -z defs does.
|
||||||
|
for possible_flags in "-Wl,--no-undefined" "-Wl,-z,defs"; do
|
||||||
|
CC_CHECK_LDFLAGS([$possible_flags], [LDFLAGS_NOUNDEFINED="$possible_flags"])
|
||||||
|
break
|
||||||
|
done
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
AC_SUBST([LDFLAGS_NOUNDEFINED])
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl Check for a -Werror flag or equivalent. -Werror is the GCC
|
||||||
|
dnl and ICC flag that tells the compiler to treat all the warnings
|
||||||
|
dnl as fatal. We usually need this option to make sure that some
|
||||||
|
dnl constructs (like attributes) are not simply ignored.
|
||||||
|
dnl
|
||||||
|
dnl Other compilers don't support -Werror per se, but they support
|
||||||
|
dnl an equivalent flag:
|
||||||
|
dnl - Sun Studio compiler supports -errwarn=%all
|
||||||
|
AC_DEFUN([CC_CHECK_WERROR], [
|
||||||
|
AC_CACHE_CHECK(
|
||||||
|
[for $CC way to treat warnings as errors],
|
||||||
|
[cc_cv_werror],
|
||||||
|
[CC_CHECK_CFLAGS_SILENT([-Werror], [cc_cv_werror=-Werror],
|
||||||
|
[CC_CHECK_CFLAGS_SILENT([-errwarn=%all], [cc_cv_werror=-errwarn=%all])])
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([CC_CHECK_ATTRIBUTE], [
|
||||||
|
AC_REQUIRE([CC_CHECK_WERROR])
|
||||||
|
AC_CACHE_CHECK([if $CC supports __attribute__(( ifelse([$2], , [$1], [$2]) ))],
|
||||||
|
AS_TR_SH([cc_cv_attribute_$1]),
|
||||||
|
[ac_save_CFLAGS="$CFLAGS"
|
||||||
|
CFLAGS="$CFLAGS $cc_cv_werror"
|
||||||
|
AC_COMPILE_IFELSE([$3],
|
||||||
|
[eval "AS_TR_SH([cc_cv_attribute_$1])='yes'"],
|
||||||
|
[eval "AS_TR_SH([cc_cv_attribute_$1])='no'"])
|
||||||
|
CFLAGS="$ac_save_CFLAGS"
|
||||||
|
])
|
||||||
|
|
||||||
|
AS_IF([eval test x$]AS_TR_SH([cc_cv_attribute_$1])[ = xyes],
|
||||||
|
[AC_DEFINE(
|
||||||
|
AS_TR_CPP([SUPPORT_ATTRIBUTE_$1]), 1,
|
||||||
|
[Define this if the compiler supports __attribute__(( ifelse([$2], , [$1], [$2]) ))]
|
||||||
|
)
|
||||||
|
$4],
|
||||||
|
[$5])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([CC_ATTRIBUTE_CONSTRUCTOR], [
|
||||||
|
CC_CHECK_ATTRIBUTE(
|
||||||
|
[constructor],,
|
||||||
|
[void __attribute__((constructor)) ctor() { int a; }],
|
||||||
|
[$1], [$2])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([CC_ATTRIBUTE_FORMAT], [
|
||||||
|
CC_CHECK_ATTRIBUTE(
|
||||||
|
[format], [format(printf, n, n)],
|
||||||
|
[void __attribute__((format(printf, 1, 2))) printflike(const char *fmt, ...) { fmt = (void *)0; }],
|
||||||
|
[$1], [$2])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([CC_ATTRIBUTE_FORMAT_ARG], [
|
||||||
|
CC_CHECK_ATTRIBUTE(
|
||||||
|
[format_arg], [format_arg(printf)],
|
||||||
|
[char *__attribute__((format_arg(1))) gettextlike(const char *fmt) { fmt = (void *)0; }],
|
||||||
|
[$1], [$2])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([CC_ATTRIBUTE_VISIBILITY], [
|
||||||
|
CC_CHECK_ATTRIBUTE(
|
||||||
|
[visibility_$1], [visibility("$1")],
|
||||||
|
[void __attribute__((visibility("$1"))) $1_function() { }],
|
||||||
|
[$2], [$3])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([CC_ATTRIBUTE_NONNULL], [
|
||||||
|
CC_CHECK_ATTRIBUTE(
|
||||||
|
[nonnull], [nonnull()],
|
||||||
|
[void __attribute__((nonnull())) some_function(void *foo, void *bar) { foo = (void*)0; bar = (void*)0; }],
|
||||||
|
[$1], [$2])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([CC_ATTRIBUTE_UNUSED], [
|
||||||
|
CC_CHECK_ATTRIBUTE(
|
||||||
|
[unused], ,
|
||||||
|
[void some_function(void *foo, __attribute__((unused)) void *bar);],
|
||||||
|
[$1], [$2])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([CC_ATTRIBUTE_SENTINEL], [
|
||||||
|
CC_CHECK_ATTRIBUTE(
|
||||||
|
[sentinel], ,
|
||||||
|
[void some_function(void *foo, ...) __attribute__((sentinel));],
|
||||||
|
[$1], [$2])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([CC_ATTRIBUTE_DEPRECATED], [
|
||||||
|
CC_CHECK_ATTRIBUTE(
|
||||||
|
[deprecated], ,
|
||||||
|
[void some_function(void *foo, ...) __attribute__((deprecated));],
|
||||||
|
[$1], [$2])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([CC_ATTRIBUTE_ALIAS], [
|
||||||
|
CC_CHECK_ATTRIBUTE(
|
||||||
|
[alias], [weak, alias],
|
||||||
|
[void other_function(void *foo) { }
|
||||||
|
void some_function(void *foo) __attribute__((weak, alias("other_function")));],
|
||||||
|
[$1], [$2])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([CC_ATTRIBUTE_MALLOC], [
|
||||||
|
CC_CHECK_ATTRIBUTE(
|
||||||
|
[malloc], ,
|
||||||
|
[void * __attribute__((malloc)) my_alloc(int n);],
|
||||||
|
[$1], [$2])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([CC_ATTRIBUTE_PACKED], [
|
||||||
|
CC_CHECK_ATTRIBUTE(
|
||||||
|
[packed], ,
|
||||||
|
[struct astructure { char a; int b; long c; void *d; } __attribute__((packed));],
|
||||||
|
[$1], [$2])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([CC_ATTRIBUTE_CONST], [
|
||||||
|
CC_CHECK_ATTRIBUTE(
|
||||||
|
[const], ,
|
||||||
|
[int __attribute__((const)) twopow(int n) { return 1 << n; } ],
|
||||||
|
[$1], [$2])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([CC_FLAG_VISIBILITY], [
|
||||||
|
AC_REQUIRE([CC_CHECK_WERROR])
|
||||||
|
AC_CACHE_CHECK([if $CC supports -fvisibility=hidden],
|
||||||
|
[cc_cv_flag_visibility],
|
||||||
|
[cc_flag_visibility_save_CFLAGS="$CFLAGS"
|
||||||
|
CFLAGS="$CFLAGS $cc_cv_werror"
|
||||||
|
CC_CHECK_CFLAGS_SILENT([-fvisibility=hidden],
|
||||||
|
cc_cv_flag_visibility='yes',
|
||||||
|
cc_cv_flag_visibility='no')
|
||||||
|
CFLAGS="$cc_flag_visibility_save_CFLAGS"])
|
||||||
|
|
||||||
|
AS_IF([test "x$cc_cv_flag_visibility" = "xyes"],
|
||||||
|
[AC_DEFINE([SUPPORT_FLAG_VISIBILITY], 1,
|
||||||
|
[Define this if the compiler supports the -fvisibility flag])
|
||||||
|
$1],
|
||||||
|
[$2])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([CC_FUNC_EXPECT], [
|
||||||
|
AC_REQUIRE([CC_CHECK_WERROR])
|
||||||
|
AC_CACHE_CHECK([if compiler has __builtin_expect function],
|
||||||
|
[cc_cv_func_expect],
|
||||||
|
[ac_save_CFLAGS="$CFLAGS"
|
||||||
|
CFLAGS="$CFLAGS $cc_cv_werror"
|
||||||
|
AC_COMPILE_IFELSE(
|
||||||
|
[int some_function() {
|
||||||
|
int a = 3;
|
||||||
|
return (int)__builtin_expect(a, 3);
|
||||||
|
}],
|
||||||
|
[cc_cv_func_expect=yes],
|
||||||
|
[cc_cv_func_expect=no])
|
||||||
|
CFLAGS="$ac_save_CFLAGS"
|
||||||
|
])
|
||||||
|
|
||||||
|
AS_IF([test "x$cc_cv_func_expect" = "xyes"],
|
||||||
|
[AC_DEFINE([SUPPORT__BUILTIN_EXPECT], 1,
|
||||||
|
[Define this if the compiler supports __builtin_expect() function])
|
||||||
|
$1],
|
||||||
|
[$2])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([CC_ATTRIBUTE_ALIGNED], [
|
||||||
|
AC_REQUIRE([CC_CHECK_WERROR])
|
||||||
|
AC_CACHE_CHECK([highest __attribute__ ((aligned ())) supported],
|
||||||
|
[cc_cv_attribute_aligned],
|
||||||
|
[ac_save_CFLAGS="$CFLAGS"
|
||||||
|
CFLAGS="$CFLAGS $cc_cv_werror"
|
||||||
|
for cc_attribute_align_try in 64 32 16 8 4 2; do
|
||||||
|
AC_COMPILE_IFELSE([
|
||||||
|
int main() {
|
||||||
|
static char c __attribute__ ((aligned($cc_attribute_align_try))) = 0;
|
||||||
|
return c;
|
||||||
|
}], [cc_cv_attribute_aligned=$cc_attribute_align_try; break])
|
||||||
|
done
|
||||||
|
CFLAGS="$ac_save_CFLAGS"
|
||||||
|
])
|
||||||
|
|
||||||
|
if test "x$cc_cv_attribute_aligned" != "x"; then
|
||||||
|
AC_DEFINE_UNQUOTED([ATTRIBUTE_ALIGNED_MAX], [$cc_cv_attribute_aligned],
|
||||||
|
[Define the highest alignment supported])
|
||||||
|
fi
|
||||||
|
])
|
30
ratelimit.h
30
ratelimit.h
|
@ -31,23 +31,23 @@ typedef struct RateLimit {
|
||||||
usec_t begin;
|
usec_t begin;
|
||||||
} RateLimit;
|
} RateLimit;
|
||||||
|
|
||||||
#define RATELIMIT_DEFINE(_name, _interval, _burst) \
|
#define RATELIMIT_DEFINE(_name, _interval, _burst) \
|
||||||
RateLimit _name = { \
|
RateLimit _name = { \
|
||||||
.interval = (_interval), \
|
.interval = (_interval), \
|
||||||
.burst = (_burst), \
|
.burst = (_burst), \
|
||||||
.n_printed = 0, \
|
.n_printed = 0, \
|
||||||
.n_missed = 0, \
|
.n_missed = 0, \
|
||||||
.begin = 0 \
|
.begin = 0 \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define RATELIMIT_INIT(v, _interval, _burst) \
|
#define RATELIMIT_INIT(v, _interval, _burst) \
|
||||||
do { \
|
do { \
|
||||||
RateLimit *r = &(v); \
|
RateLimit *_r = &(v); \
|
||||||
r->interval = (_interval); \
|
_r->interval = (_interval); \
|
||||||
r->burst = (_burst); \
|
_r->burst = (_burst); \
|
||||||
r->n_printed = 0; \
|
_r->n_printed = 0; \
|
||||||
r->n_missed = 0; \
|
_r->n_missed = 0; \
|
||||||
r->begin = 0; \
|
_r->begin = 0; \
|
||||||
} while (false);
|
} while (false);
|
||||||
|
|
||||||
bool ratelimit_test(RateLimit *r);
|
bool ratelimit_test(RateLimit *r);
|
||||||
|
|
22
service.c
22
service.c
|
@ -130,13 +130,13 @@ static void service_dump(Unit *u, FILE *f, const char *prefix) {
|
||||||
|
|
||||||
ServiceExecCommand c;
|
ServiceExecCommand c;
|
||||||
Service *s = SERVICE(u);
|
Service *s = SERVICE(u);
|
||||||
char *prefix2;
|
const char *prefix2;
|
||||||
|
char *p2;
|
||||||
|
|
||||||
assert(s);
|
assert(s);
|
||||||
|
|
||||||
prefix2 = strappend(prefix, "\t");
|
p2 = strappend(prefix, "\t");
|
||||||
if (!prefix2)
|
prefix2 = p2 ? p2 : prefix;
|
||||||
prefix2 = "";
|
|
||||||
|
|
||||||
fprintf(f,
|
fprintf(f,
|
||||||
"%sService State: %s\n",
|
"%sService State: %s\n",
|
||||||
|
@ -161,7 +161,7 @@ static void service_dump(Unit *u, FILE *f, const char *prefix) {
|
||||||
exec_command_dump_list(s->exec_command[c], f, prefix2);
|
exec_command_dump_list(s->exec_command[c], f, prefix2);
|
||||||
}
|
}
|
||||||
|
|
||||||
free(prefix2);
|
free(p2);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int service_load_pid_file(Service *s) {
|
static int service_load_pid_file(Service *s) {
|
||||||
|
@ -243,7 +243,7 @@ fail:
|
||||||
static int service_notify_sockets(Service *s) {
|
static int service_notify_sockets(Service *s) {
|
||||||
Iterator i;
|
Iterator i;
|
||||||
Set *set;
|
Set *set;
|
||||||
Socket *socket;
|
Socket *sock;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(s);
|
assert(s);
|
||||||
|
@ -253,8 +253,8 @@ static int service_notify_sockets(Service *s) {
|
||||||
if ((r = service_get_sockets(s, &set)) < 0)
|
if ((r = service_get_sockets(s, &set)) < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
SET_FOREACH(socket, set, i)
|
SET_FOREACH(sock, set, i)
|
||||||
socket_notify_service_dead(socket);
|
socket_notify_service_dead(sock);
|
||||||
|
|
||||||
set_free(set);
|
set_free(set);
|
||||||
|
|
||||||
|
@ -338,7 +338,7 @@ static int service_collect_fds(Service *s, int **fds, unsigned *n_fds) {
|
||||||
int *rfds = NULL;
|
int *rfds = NULL;
|
||||||
unsigned rn_fds = 0;
|
unsigned rn_fds = 0;
|
||||||
Set *set;
|
Set *set;
|
||||||
Socket *socket;
|
Socket *sock;
|
||||||
|
|
||||||
assert(s);
|
assert(s);
|
||||||
assert(fds);
|
assert(fds);
|
||||||
|
@ -347,11 +347,11 @@ static int service_collect_fds(Service *s, int **fds, unsigned *n_fds) {
|
||||||
if ((r = service_get_sockets(s, &set)) < 0)
|
if ((r = service_get_sockets(s, &set)) < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
SET_FOREACH(socket, set, i) {
|
SET_FOREACH(sock, set, i) {
|
||||||
int *cfds;
|
int *cfds;
|
||||||
unsigned cn_fds;
|
unsigned cn_fds;
|
||||||
|
|
||||||
if ((r = socket_collect_fds(socket, &cfds, &cn_fds)) < 0)
|
if ((r = socket_collect_fds(sock, &cfds, &cn_fds)) < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
if (!cfds)
|
if (!cfds)
|
||||||
|
|
|
@ -102,7 +102,7 @@ struct Service {
|
||||||
RateLimit ratelimit;
|
RateLimit ratelimit;
|
||||||
};
|
};
|
||||||
|
|
||||||
const UnitVTable service_vtable;
|
extern const UnitVTable service_vtable;
|
||||||
|
|
||||||
const char* service_state_to_string(ServiceState i);
|
const char* service_state_to_string(ServiceState i);
|
||||||
ServiceState service_state_from_string(const char *s);
|
ServiceState service_state_from_string(const char *s);
|
||||||
|
|
|
@ -103,7 +103,6 @@ int socket_address_parse(SocketAddress *a, const char *s) {
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
if ((e = strchr(s, ':'))) {
|
if ((e = strchr(s, ':'))) {
|
||||||
int r;
|
|
||||||
|
|
||||||
if ((r = safe_atou(e+1, &u)) < 0)
|
if ((r = safe_atou(e+1, &u)) < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
2
timer.h
2
timer.h
|
@ -44,6 +44,6 @@ struct Timer {
|
||||||
Service *service;
|
Service *service;
|
||||||
};
|
};
|
||||||
|
|
||||||
const UnitVTable timer_vtable;
|
extern const UnitVTable timer_vtable;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
10
unit.c
10
unit.c
|
@ -351,15 +351,15 @@ void unit_dump(Unit *u, FILE *f, const char *prefix) {
|
||||||
char *t;
|
char *t;
|
||||||
UnitDependency d;
|
UnitDependency d;
|
||||||
Iterator i;
|
Iterator i;
|
||||||
char *prefix2;
|
char *p2;
|
||||||
|
const char *prefix2;
|
||||||
|
|
||||||
assert(u);
|
assert(u);
|
||||||
|
|
||||||
if (!prefix)
|
if (!prefix)
|
||||||
prefix = "";
|
prefix = "";
|
||||||
prefix2 = strappend(prefix, "\t");
|
p2 = strappend(prefix, "\t");
|
||||||
if (!prefix2)
|
prefix2 = p2 ? p2 : prefix;
|
||||||
prefix2 = "";
|
|
||||||
|
|
||||||
fprintf(f,
|
fprintf(f,
|
||||||
"%s→ Unit %s:\n"
|
"%s→ Unit %s:\n"
|
||||||
|
@ -397,7 +397,7 @@ void unit_dump(Unit *u, FILE *f, const char *prefix) {
|
||||||
if (u->meta.job)
|
if (u->meta.job)
|
||||||
job_dump(u->meta.job, f, prefix2);
|
job_dump(u->meta.job, f, prefix2);
|
||||||
|
|
||||||
free(prefix2);
|
free(p2);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Common implementation for multiple backends */
|
/* Common implementation for multiple backends */
|
||||||
|
|
12
util.c
12
util.c
|
@ -36,10 +36,10 @@
|
||||||
#include "ioprio.h"
|
#include "ioprio.h"
|
||||||
#include "missing.h"
|
#include "missing.h"
|
||||||
|
|
||||||
usec_t now(clockid_t clock) {
|
usec_t now(clockid_t clock_id) {
|
||||||
struct timespec ts;
|
struct timespec ts;
|
||||||
|
|
||||||
assert_se(clock_gettime(clock, &ts) == 0);
|
assert_se(clock_gettime(clock_id, &ts) == 0);
|
||||||
|
|
||||||
return timespec_load(&ts);
|
return timespec_load(&ts);
|
||||||
}
|
}
|
||||||
|
@ -824,11 +824,11 @@ char *xescape(const char *s, const char *bad) {
|
||||||
}
|
}
|
||||||
|
|
||||||
char *bus_path_escape(const char *s) {
|
char *bus_path_escape(const char *s) {
|
||||||
assert(s);
|
|
||||||
|
|
||||||
char *r, *t;
|
char *r, *t;
|
||||||
const char *f;
|
const char *f;
|
||||||
|
|
||||||
|
assert(s);
|
||||||
|
|
||||||
/* Escapes all chars that D-Bus' object path cannot deal
|
/* Escapes all chars that D-Bus' object path cannot deal
|
||||||
* with. Can be reverse with bus_path_unescape() */
|
* with. Can be reverse with bus_path_unescape() */
|
||||||
|
|
||||||
|
@ -853,11 +853,11 @@ char *bus_path_escape(const char *s) {
|
||||||
}
|
}
|
||||||
|
|
||||||
char *bus_path_unescape(const char *s) {
|
char *bus_path_unescape(const char *s) {
|
||||||
assert(s);
|
|
||||||
|
|
||||||
char *r, *t;
|
char *r, *t;
|
||||||
const char *f;
|
const char *f;
|
||||||
|
|
||||||
|
assert(s);
|
||||||
|
|
||||||
if (!(r = new(char, strlen(s)+1)))
|
if (!(r = new(char, strlen(s)+1)))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue