Initial conversion to GNU Configure & Build System

Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
This commit is contained in:
Joachim Nilsson
2016-03-14 22:35:54 +01:00
parent 0704947c33
commit 726f0d428d
10 changed files with 340 additions and 723 deletions
-193
View File
@@ -1,193 +0,0 @@
# Finit - Fast /sbin/init replacement w/ I/O, hook & service plugins
#
# Copyright (c) 2008-2010 Claudio Matsuoka <cmatsuoka@gmail.com>
# Copyright (c) 2008-2015 Joachim Nilsson <troglobit@gmail.com>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
.PHONY: all install clean distclean dist \
install-exec install-data install-dev \
uninstall-exec uninstall-data uninstall-dev
#VERSION = $(shell git tag -l | tail -1)
VERSION = 3.0-beta1
NAME = finit
PKG = $(NAME)-$(VERSION)
DEV = $(NAME)-dev
ARCHTOOL = `which git-archive-all`
ARCHIVE = $(PKG).tar
ARCHIVEZ = ../$(ARCHIVE).xz
EXEC = finit initctl reboot
HEADERS = finit.h plugin.h svc.h inetd.h helpers.h queue.h cond.h
DISTFILES = LICENSE README ChangeLog finit.conf services
OBJS = finit.o api.o client.o conf.o exec.o helpers.o pid.o sig.o \
svc.o service.o plugin.o tty.o inetd.o cond.o cond-w.o
DEPLIBS =
TOPDIR = $(shell pwd)
-include config.mk
# Figure out source and dependency files
SRCS = $(OBJS:.o=.c)
DEPS = $(SRCS:.c=.d)
CFLAGS += -W -Wall
# Disable annoying gcc warning for "warn_unused_result", see GIT 37af997
CPPFLAGS += -U_FORTIFY_SOURCE
CPPFLAGS += -I$(TOPDIR)
CPPFLAGS += -D_XOPEN_SOURCE=600 -D_BSD_SOURCE -D_GNU_SOURCE -D_DEFAULT_SOURCE
CPPFLAGS += -DVERSION=\"$(VERSION)\" -DWHOAMI=\"`whoami`@`hostname`\"
include common.mk
all: config.h $(EXEC)
+$(MAKE) -C plugins $@
$(DEPLIBS): Makefile
+$(MAKE) -C `dirname \`dirname $@\`` all
$(OBJS): Makefile
config.h: configure
@echo "Please run configure script first."
@exit 1
finit: $(OBJS) $(DEPLIBS)
initctl: initctl.o svc.o helpers.o cond.o $(DEPLIBS)
reboot: reboot.o $(DEPLIBS)
install-exec: all
@$(INSTALL) -d $(DESTDIR)$(FINIT_RCSD)
@$(INSTALL) -d $(DESTDIR)$(sbindir)
@for file in $(EXEC); do \
printf " INSTALL $(DESTDIR)$(sbindir)/$$file\n"; \
$(STRIPINST) $$file $(DESTDIR)$(sbindir)/$$file; \
done
@printf " INSTALL $(DESTDIR)$(sbindir)/service\n"
@$(INSTALL) -m 0755 service $(DESTDIR)$(sbindir)/service
printf " INSTALL $(DESTDIR)$(sbindir)/telinit\n"
@ln -sf finit $(DESTDIR)$(sbindir)/telinit
$(MAKE) -C plugins install
ifndef LIBITE
$(MAKE) -C libite install-exec
endif
install-data:
@$(INSTALL) -d $(DESTDIR)$(datadir)
@$(INSTALL) -d $(DESTDIR)$(mandir)
@for file in $(DISTFILES); do \
printf " INSTALL $(DESTDIR)$(datadir)/$$file\n"; \
$(INSTALL) -m 0644 $$file $(DESTDIR)$(datadir)/$$file; \
done
install-dev:
@$(INSTALL) -d $(DESTDIR)$(incdir)
@for file in $(HEADERS); do \
printf " INSTALL $(DESTDIR)$(incdir)/$$file\n"; \
$(INSTALL) -m 0644 $$file $(DESTDIR)$(incdir)/$$file; \
done
ifndef LIBITE
$(MAKE) -C libite install-dev
endif
ifndef LIBUEV
$(MAKE) -C libuev install-dev
endif
install: install-exec install-data install-dev
uninstall-exec:
-@for file in $(EXEC); do \
printf " REMOVE $(DESTDIR)$(sbindir)/$$file\n"; \
rm $(DESTDIR)$(sbindir)/$$file 2>/dev/null; \
done
-@for file in service telinit; do \
printf " REMOVE $(DESTDIR)$(sbindir)/$$file\n"; \
rm $(DESTDIR)$(sbindir)/$$file 2>/dev/null; \
done
-@rmdir $(DESTDIR)$(sbindir) 2>/dev/null
-@rmdir $(DESTDIR)$(FINIT_RCSD) 2>/dev/null
$(MAKE) -C plugins uninstall
ifndef LIBITE
$(MAKE) -C libite uninstall
endif
uninstall-data:
-@for file in $(DISTFILES); do \
printf " REMOVE $(DESTDIR)$(datadir)/$$file\n"; \
rm $(DESTDIR)$(datadir)/$$file 2>/dev/null; \
done
-@rmdir $(DESTDIR)$(mandir) 2>/dev/null
-@rmdir $(DESTDIR)$(datadir) 2>/dev/null
uninstall-dev:
-@$(RM) -rf $(DESTDIR)$(incdir) 2>/dev/null
uninstall: uninstall-exec uninstall-data uninstall-dev
clean:
+$(MAKE) -C plugins $@
ifndef LIBITE
+$(MAKE) -C libite $@
endif
ifndef LIBUEV
+$(MAKE) -C libuev $@
endif
-@$(RM) $(OBJS) $(DEPS) $(EXEC) 2>/dev/null
distclean: clean
+$(MAKE) -C plugins $@
ifndef LIBITE
+$(MAKE) -C libite $@
endif
ifndef LIBUEV
+$(MAKE) -C libuev $@
endif
-@$(RM) $(JUNK) config.mk config.h unittest *.o *.html 2>/dev/null
check:
$(CHECK) *.c plugins/*.c
dist:
@if [ x"$(ARCHTOOL)" = x"" ]; then \
echo "Missing git-archive-all from https://github.com/Kentzo/git-archive-all"; \
exit 1; \
fi
@if [ -e $(ARCHIVEZ) ]; then \
echo "Distribution already exists."; \
exit 1; \
fi
@echo "Building xz tarball of $(PKG) in parent dir..."
@$(ARCHTOOL) ../$(ARCHIVE)
@xz ../$(ARCHIVE)
@md5sum $(ARCHIVEZ) | tee $(ARCHIVEZ).md5
dev: distclean
@echo "Building unstable xz $(DEV) in parent dir..."
-@$(RM) -f ../$(DEV).tar.xz*
@(dir=`mktemp -d`; mkdir $$dir/$(DEV); cp -a . $$dir/$(DEV); \
cd $$dir; tar --exclude=.git --exclude=contrib \
-c -J -f $(DEV).tar.xz $(DEV); \
cd - >/dev/null; mv $$dir/$(DEV).tar.xz ../; cd ..; \
rm -rf $$dir; md5sum $(DEV).tar.xz | tee $(DEV).tar.xz.md5)
ifneq ($(MAKECMDGOALS),distclean)
-include $(DEPS)
endif
+62
View File
@@ -0,0 +1,62 @@
ACLOCAL_AMFLAGS = -I m4
sbin_PROGRAMS = finit initctl reboot
finit_SOURCES = finit.c api.c client.c conf.c exec.c helpers.c pid.c \
sig.c svc.c service.c plugin.c tty.c cond.c cond-w.c
if INETD
finit_SOURCES += inetd.c
endif
finit_CFLAGS = -W -Wall -Wextra -std=gnu99
finit_LDADD = libite/libite.a libuev/libuev.la -ldl
if STATIC
finit_LDADD += plugins/libplug.la
endif
DEPENDENCIES = libite/libite.a libuev/libuev.la
initctl_SOURCES = initctl.c svc.c helpers.c cond.c
initctl_LDADD = libite/libite.a
reboot_SOURCES = reboot.c
SYMLINK = telinit init
DIST_SUBDIRS = libite libuev
SUBDIRS = plugins
doc_DATA = README.md LICENSE finit.conf services
EXTRA_DIST = README.md LICENSE ChangeLog.md finit.conf services
AM_CPPFLAGS = -U_FORTIFY_SOURCE
AM_CPPFLAGS += -D_XOPEN_SOURCE=600 -D_BSD_SOURCE -D_GNU_SOURCE -D_DEFAULT_SOURCE
AM_CPPFLAGS += -DFINIT_CONF=\"$(conf)\" -DFINIT_RCSD=\"$(rcsd)\" -DFINIT_FIFO=\"$(fifo)\" \
-DPLUGIN_PATH=\"$(plugindir)\"
# Slightly ugly hacks to prevent the build system from installing
# libuev/libite, which it does if we use the more plain SUBDIRS.
$(DEPENDENCIES):
@$(MAKE) -C `dirname $@` all
clean-local:
@-for dep in $(DEPENDENCIES); do \
$(MAKE) -C `dirname $$dep` clean; \
done
# Hook in install to add finit --> telinit symlink(s)
install-exec-hook:
@for file in $(SYMLINK); do \
link=$(DESTDIR)$(sbindir)/$$file; \
test "`readlink $$link`" = "finit" && continue; \
$(LN_S) finit $$link; \
done
uninstall-hook:
@for file in $(SYMLINK); do \
$(RM) $(DESTDIR)$(sbindir)/$$file; \
done
# Target to run when building a release
release: dist
@for file in $(DIST_ARCHIVES); do \
md5sum $$file > ../$$file.md5; \
done
@mv $(DIST_ARCHIVES) ../
@echo
@echo "Resulting release files:"
@echo "================================================================="
@for file in $(DIST_ARCHIVES); do \
printf "$$file \tDistribution tarball\n"; \
printf "$$file.md5\t"; cat ../$$file.md5 | cut -f1 -d' '; \
done
Executable
+3
View File
@@ -0,0 +1,3 @@
#!/bin/sh
autoreconf -W portability -vifm
Vendored
-473
View File
@@ -1,473 +0,0 @@
#!/bin/sh
# Simple home brew configure script, not as fancy as GNU Autotools
#
# --with-plugins="time initctl"
# --enable-static
# --disable-inetd
# --disable-plugins
#
# This creates a configuration where Finit is built statically, with the
# time and initctl plugins built-in, and no inetd support.
#
# Setup defaults if undefined
defaults()
{
heading=${heading:='"Finit v" VERSION'}
prefix=${prefix:="/usr"}
sysconfdir=${sysconfdir:="/etc"}
sbindir=${sbindir:="/sbin"}
libdir=${libdir:="/lib"}
pdir="finit/plugins"
plugindir=${plugindir:="$libdir/$pdir"}
# The initctl FIFO, should probably be in /run, not /dev
fifo=${fifo:="/dev/initctl"}
random=${random:="/var/lib/urandom/random-seed"}
conf="finit.conf"
config=${config:="$sysconfdir/$conf"}
confdir=${confdir:="finit.d"}
rcsd=${rcsd:="$sysconfdir/$confdir"}
console=${console:='_PATH_CONSOLE'}
shell=${shell:='_PATH_BSHELL'}
defuser=${defuser:="root"}
defhost=${defhost:="noname"}
runlevel=${runlevel:=2}
debug=${debug:=0}
embedded=${embedded:=0}
dbus=${dbus:=0}
remount=${remount:=0}
inetd=${inetd:=1}
verbose=${verbose:=1}
kernel_quiet=${kernel_quiet:=1}
static=${static:=0}
disable_plugins=${disable_plugins:=0}
}
result()
{
echo
echo "Finit configuration"
echo "========================================================================"
echo "Heading : $heading"
echo "Install prefix : $prefix"
echo "System config dir : $sysconfdir"
echo "Super user bindir : $sbindir"
echo "Shared libs dir : $libdir"
echo "Plugins dir : $plugindir"
echo "FIFO : $fifo"
echo "Config file : $config"
echo "rcs.d/ directory : $rcsd"
echo "Default console : $console"
# echo "Fallback shell : $shell"
if [ x"$sysroot" != x"" ]; then
echo "Swap rootfs to : $sysroot"
fi
echo "Default username : $defuser"
echo "Default hostname : $defhost"
echo "Default runlevel : $runlevel"
if [ $debug -ne 0 ]; then
echo "Debug : ENABLED"
fi
if [ $embedded -ne 0 ]; then
echo "Embedded target : YES (BusyBox getty, and mdev instead of udev)"
fi
if [ $dbus -ne 0 ]; then
echo "D-Bus : YES, remember to install dbus.so plugin as well!"
fi
if [ $remount -ne 0 ]; then
echo "Remount ROOT fs : YES, / will be remounted as read-write at bootstrap"
fi
if [ x"$random" != x"" ]; then
echo "Random seed : $random"
fi
if [ $inetd -ne 0 ]; then
echo "Inetd : Built-in"
else
echo "Inetd : DISABLED"
fi
if [ x"$libite" = x"" ]; then
echo "Libite (LITE) : Built-in"
else
echo "Libite (LITE) : $libite + {/lib, /include}"
fi
if [ x"$libuev" = x"" ]; then
echo "LibuEv : Built-in"
else
echo "LibuEv : $libuev + {/lib, /include}"
fi
if [ $verbose -ne 1 ]; then
echo "Quiet Finit : YES"
else
echo "Quiet Finit : NO, verbose output (default)"
fi
if [ $kernel_quiet -eq 1 ]; then
echo "Kernel Quiet : YES, silent after inital boot (default)"
else
echo "Kernel Quiet : NO"
fi
if [ $static -ne 0 ]; then
echo "Static Finit : YES"
fi
if [ $disable_plugins -eq 1 ]; then
echo "Plugins : DISABLED"
else
if [ x"$plugins" = x"" ]; then
echo "Plugins : ALL"
else
echo "Plugins : $plugins"
fi
fi
echo
}
usage()
{
defaults
echo "Run this script to configure finit for your operating system."
echo
echo "Usage: $0 [ARG]"
echo
echo " --help This help text"
echo " --prefix=PREFIX Set installation prefix, default '$prefix'"
echo " --sysconfdir=CONF Set conf dir, default '$sysconfdir'"
echo " --sbindir=SBIN Set sbin dir, default '$sbindir'"
echo " --libdir=LIB Set lib dir, default '$libdir'"
echo " --plugindir=DIR Set plugin dir, default '\$libdir/$pdir'"
echo
echo " --with-fifo=FIFO FIFO for initctl plugin, default '$fifo'"
echo " --with-config=CONFIG Finit CONFIG file, default '\$sysconfdir/$conf'"
echo " --with-heading=GREET Display GREET instead of Finit version at boot"
echo " --with-randomseed=SEED Seed /dev/urandom at boot from SEED. Usually found in"
echo " standard Linux systems at $random"
echo " which is also the default. Requires urandom plugin!"
echo " --with-plugins=\"a b c\" Build plugins 'a', 'b' and 'c', either as dynamic .so"
echo " files, or as built-in if --enable-static is given,"
echo " defaults to all plugins. Exclude extension!"
echo " --with-rcsd=RCSD Finit RCSD directory, default '\$sysconfdir/$confdir'"
echo " --with-console=DEV Console to use, default: /dev/console"
# echo " --with-shell=PATH Fallback shell to use, default: /bin/sh"
echo " --with-sysroot=PATH Some distributions keep a different (writable) rootfs"
echo " that is used at runtime, usually /sysroot or /mnt"
echo " --with-username=USER User for 'startx' .conf option, default: root"
echo " --with-hostname=NAME Hostname, if /etc/hostname is missing, default: noname"
echo " --with-runlevel=LEVEL Runlevel to switch to after bootstrap (S), default: 2"
echo " --with-libite=PATH Look for libite in PATH/include and PATH/lib"
echo " This is for disabling the use of built-in libite."
echo " --with-libuev=PATH Look for libuEv in PATH/include and PATH/lib"
echo " This is for disabling the use of built-in libuEv."
echo
echo " --enable-embedded Embedded defaults, BusBox getty, mdev etc."
echo " --enable-dbus Enable D-Bus plugin. Note: install plugin as well!"
echo " --enable-rw-rootfs Remount / as read-write at bootstrap, not for embedded"
echo " --enable-debug Enable debug flags, '-O0, -g'"
echo " --enable-quiet Quiet mode, reduce screen output to absolute minimum"
echo " --enable-static Link statically. This disables a few features."
echo " --disable-inetd Disable inetd support if not needed."
echo " --disable-kernel-quiet Disable kernel cmdline quiet, default enabled."
echo " --disable-plugins Disable plugins"
echo
echo "The build system also supports external CFLAGS, CPPFLAGS, LDFLAGS, LDLIBS,"
echo "and DESTDIR, useful for packaging or cross-compiling."
echo
echo "Example:"
echo " ./configure --enable-embedded --with-plugins=\"initctl tty\""
echo
echo "Report bugs to https://github.com/troglobit/finit/issues"
echo
exit 1
}
while [ "$*" != "" ]; do
opt=`expr "$1" : "--\([^=]*\)=.*"`
arg=`expr "$1" : "--[^=]*=\(.*\)"`
if [ -z "$opt" ]; then
opt=`expr "$1" : "--\(.*\)"`
fi
shift
case $opt in
prefix)
prefix="$arg"
;;
sysconfdir)
sysconfdir="$arg"
;;
sbindir)
sbindir="$arg"
;;
libdir)
libdir="$arg"
;;
plugindir)
plugindir="$arg"
;;
with-fifo)
fifo="$arg"
;;
with-config)
config="$arg"
;;
with-heading)
heading="\"$arg\""
;;
with-randomseed)
random="$arg"
;;
with-plugins)
plugins="$arg"
;;
with-rcsd)
rcsd="$arg"
;;
with-console)
console="\"$arg\""
;;
with-shell)
shell="\"$arg\""
;;
with-sysroot)
sysroot="$arg"
;;
with-usename)
defuser="$arg"
;;
with-hostname)
defhost="$arg"
;;
with-runlevel)
runlevel="$arg"
;;
with-libite)
libite="$arg"
;;
with-libuev)
libuev="$arg"
;;
enable-debug)
debug=1
;;
enable-embedded)
embedded=1
;;
enable-dbus)
dbus=1
;;
enable-rw-rootfs)
remount=1
;;
enable-quiet)
verbose=0
;;
enable-static)
static=1
;;
disable-inetd)
inetd=0
;;
disable-kernel-quiet)
kernel_quiet=0
;;
disable-plugins)
disable_plugins=1
;;
help)
usage
;;
*)
echo "Unknown option: $opt"
usage
;;
esac
done
# If no arguments given to configure script, use defaults
defaults
##############################################################################
echo "# Generated by finit configure script." > config.mk
echo "prefix = $prefix" >> config.mk
echo "sysconfdir = $sysconfdir" >> config.mk
echo "sbindir = $sbindir" >> config.mk
echo "libdir = $libdir" >> config.mk
echo "plugindir = $plugindir" >> config.mk
echo "incdir = \$(prefix)/include/finit" >> config.mk
echo "datadir = \$(prefix)/share/doc/finit" >> config.mk
echo "mandir = \$(prefix)/share/man/man8" >> config.mk
echo "FINIT_RCSD = $rcsd" >> config.mk
if [ $inetd -eq 0 ]; then
echo >> config.mk
echo "OBJS := \$(filter-out inetd.o, \$(OBJS))" >> config.mk
fi
echo >> config.mk
if [ $debug -eq 1 ]; then
echo "CFLAGS += -O0 -g" >> config.mk
else
echo "CFLAGS += -O2" >> config.mk
fi
echo >> config.mk
if [ $static -ne 0 ]; then
echo "STATIC = 1" >> config.mk
echo "LDFLAGS += -static" >> config.mk
echo "CPPFLAGS += -DENABLE_STATIC" >> config.mk
echo "PLUGINS = \"\"" >> config.mk
if [ $disable_plugins -ne 1 ]; then
if [ x"$plugins" != x"" ]; then
echo "OBJS += \$(addsuffix .o, \$(addprefix plugins/, $plugins))" >> config.mk
else
echo "tmp += \$(wildcard plugins/*.c)" >> config.mk
echo "OBJS += \$(tmp:.c=.o)" >> config.mk
fi
fi
else
echo "STATIC = 0" >> config.mk
echo "LDFLAGS += -rdynamic" >> config.mk
echo "LDLIBS += -ldl" >> config.mk
if [ x"$plugins" != x"" ]; then
echo "PLUGINS = \$(addsuffix .so, $plugins)" >> config.mk
fi
fi
if [ x"$libite" != x"" ]; then
echo "LIBITE = $libite" >> config.mk
echo "CPPFLAGS += -I\$(LIBITE)/include" >> config.mk
echo "LDFLAGS += -L\$(LIBITE)/lib" >> config.mk
echo "LDLIBS += -l:libite.so.2" >> config.mk
else
echo "LDFLAGS += -L\$(TOPDIR)/libite" >> config.mk
echo "DEPLIBS += libite/.libs/libite.a" >> config.mk
fi
if [ x"$libuev" != x"" ]; then
echo "LIBUEV = $libuev" >> config.mk
echo "CPPFLAGS += -I\$(LIBUEV)/include" >> config.mk
echo "LDFLAGS += -L\$(LIBUEV)/lib" >> config.mk
echo "LDLIBS += -l:libuev.so.1" >> config.mk
else
echo "LDFLAGS += -L\$(TOPDIR)/libuev" >> config.mk
echo "DEPLIBS += libuev/.libs/libuev.a" >> config.mk
fi
echo >> config.mk
echo "export libdir plugindir incdir" >> config.mk
echo "export CFLAGS CPPFLAGS LDFLAGS LDLIBS STATIC" >> config.mk
##############################################################################
echo "/* Generated by finit configure script. */" > config.h
echo >> config.h
echo "#ifndef FINIT_CONFIG_H_" >> config.h
echo "#define FINIT_CONFIG_H_" >> config.h
echo >> config.h
echo "#define INIT_HEADING $heading" >> config.h
echo "#define VERBOSE_MODE $verbose" >> config.h
echo "#define KERNEL_QUIET $kernel_quiet" >> config.h
if [ $embedded -eq 1 ]; then
echo "#define EMBEDDED_SYSTEM 1" >> config.h
echo "#define SETUP_DEVFS \"/sbin/mdev -s\"" >> config.h
echo "#define GETTY \"/sbin/getty -L\"" >> config.h
echo "#define GETTY_BUSYBOX 1" >> config.h
echo "#define BAUDRATE 115200" >> config.h
else
echo "#define SETUP_DEVFS \"/sbin/udevd --daemon\"" >> config.h
echo "#define GETTY \"/sbin/getty -8\"" >> config.h
echo "#define GETTY_AGETTY 1" >> config.h
echo "#define BAUDRATE 38400" >> config.h
fi
if [ $remount -eq 1 ]; then
echo "#define REMOUNT_ROOTFS 1" >> config.h
fi
if [ $dbus -eq 1 ]; then
echo "#define HAVE_DBUS 1" >> config.h
fi
if [ $inetd -eq 0 ]; then
echo "#define INETD_DISABLED" >> config.h
fi
echo "#define FINIT_FIFO \"$fifo\"" >> config.h
echo "#define FINIT_CONF \"$config\"" >> config.h
echo "#define FINIT_RCSD \"$rcsd\"" >> config.h
echo "#define CONSOLE $console" >> config.h
echo "#define FALLBACK_SHELL $shell" >> config.h
if [ x"$sysroot" != x"" ]; then
echo "#define SYSROOT \"$sysroot\"" >> config.h
fi
echo "#define PLUGIN_PATH \"$plugindir\"" >> config.h
if [ x"$random" != x"" ]; then
echo "#define RANDOMSEED \"$random\"" >> config.h
fi
echo "#define DEFUSER \"$defuser\"" >> config.h
echo "#define DEFHOST \"$defhost\"" >> config.h
echo "#define RUNLEVEL $runlevel" >> config.h
echo >> config.h
echo "#endif /* FINIT_CONFIG_H_ */" >> config.h
# Call configure in local libite if --with-libite is not selected
if [ x"$libite" = x"" ]; then
set -e
cd libite
test -e Makefile && make distclean >/dev/null
./autogen.sh
./configure
cd -
set +e
fi
# Call configure in local libuev if --with-libuev is not selected
if [ x"$libuev" = x"" ]; then
set -e
cd libuev
test -e Makefile && make distclean >/dev/null
./autogen.sh
./configure
cd -
set +e
fi
# Show resulting config
result
+239
View File
@@ -0,0 +1,239 @@
# Use v2.61 for backwards compat with Ubuntu 12.04 LTS
AC_PREREQ([2.61])
AC_INIT(Finit, 3.0-beta1, https://github.com/troglobit/finit/issues, finit, http://troglobit.com/finit.html)
AM_INIT_AUTOMAKE([1.11 foreign no-dist-gzip dist-xz subdir-objects])
AM_SILENT_RULES([yes])
AC_CONFIG_SRCDIR([finit.c])
AC_CONFIG_HEADER([config.h])
AC_CONFIG_FILES([Makefile plugins/Makefile])
AC_CONFIG_FILES([libite/Makefile])
AC_CONFIG_FILES([libuev/Makefile libuev/examples/Makefile])
# Older versions of autoconf (<2.58) do not have AC_CONFIG_MACRO_DIR()
#m4_include([m4/misc.m4])
#m4_include([m4/mroute.m4])
AC_CONFIG_MACRO_DIR([m4])
# Change default prefix, we're PID 1 after all ...
AC_PREFIX_DEFAULT([/])
datarootdir=/usr/share
AC_SUBST([datarootdir])
# Default plugins
#plugins_all="alsa-utils bootmisc dbus hwclock initctl netlink pidfile resolvconf time tty urandom x11-common"
# Checks for programs.
AC_PROG_CC
AC_PROG_LN_S
AC_PROG_INSTALL
# Configuration.
AC_HEADER_STDC
AC_CHECK_FUNCS(strstr getopt)
# Check for uint[8,16,32]_t
AC_TYPE_UINT8_T
AC_TYPE_UINT16_T
AC_TYPE_UINT32_T
# Needed for the libraries
AM_PROG_AR
LT_INIT([shared disable-static dlopen])
#LT_INIT([dlopen])
AM_CONDITIONAL([ENABLE_EXAMPLES], [test "$enable_examples" = yes])
# Check for configured Finit features
AC_ARG_ENABLE(embedded,
AS_HELP_STRING([--enable-embedded], [Embedded defaults, BusBox getty, mdev etc.]))
AC_ARG_ENABLE(rw-rootfs,
AS_HELP_STRING([--enable-rw-rootfs], [Remount / as read-write at bootstrap, not for embedded]))
AC_ARG_ENABLE(quiet,
AS_HELP_STRING([--enable-quiet], [Quiet mode, reduce screen output to absolute minimum]))
AC_ARG_ENABLE(inetd,
AS_HELP_STRING([--disable-inetd], [Disable inetd support if not needed, default enabled]))
AC_ARG_ENABLE(kernel-quiet,
AS_HELP_STRING([--disable-kernel-quiet], [Disable kernel cmdline quiet, default enabled]))
AC_ARG_WITH(fifo,
AS_HELP_STRING([--with-fifo=FIFO], [Old Finit initctl FIFO, default /dev/initctl]),
[fifo=$withval], [fifo=/dev/initctl])
AC_ARG_WITH(config,
AS_HELP_STRING([--with-config=CONFIG], [Finit CONFIG file, default $sysconfdir/finit.conf]),
[conf=$withval], [conf='$(sysconfdir)/finit.conf'])
AC_ARG_WITH(heading,
AS_HELP_STRING([--with-heading=GREET], [Display GREET instead of Finit version at boot]),
[heading=$withval], [heading='$(PACKAGE_NAME) v$(PACKAGE_VERSION)'])
AC_ARG_WITH(plugindir,
AS_HELP_STRING([--with-plugindir=DIR], [Finit plugins directory, default $libdir/finit/plugins]),
[pkglibdir=$withval], [pkglibdir='$(libdir)/finit/plugins'])
AC_SUBST([pkglibdir])
#AC_ARG_WITH(plugins,
# AS_HELP_STRING([--with-plugins=LIST], [Finit plugins to build, default $plugins_all]),
# [plugins=$withval], [plugins=$plugins_all])
#plugins_src=""
#plugins_lib=""
#for plug in $plugins; do
# plugins_src="${plugins_src} ${plug}.c"
# plugins_lib="${plugins_lib} ${plug}.la"
#done
#AC_SUBST([plugins_src])
#AC_SUBST([plugins_lib])
AC_ARG_WITH(rcsd,
AS_HELP_STRING([--with-rcsd=DIR], [Finit rc.d/ directory, default $sysconfdir/finit.d]),
[rcsd=$withval], [rcsd='$(sysconfdir)/finit.d'])
AC_SUBST(rcsd)
AC_ARG_WITH(console,
AS_HELP_STRING([--with-console=DEV], [Console to use, default: /dev/console]),
[console=$withval], [console=/dev/console])
AC_ARG_WITH(shell,
AS_HELP_STRING([--with-shell=PATH], [Fallback shell to use, default: /bin/sh]),
[shell=$withval], [shell=/bin/sh])
AC_ARG_WITH(username,
AS_HELP_STRING([--with-username=USER], [User for 'startx' .conf option, default: root]),
[username=$withval], [username=root])
AC_ARG_WITH(hostname,
AS_HELP_STRING([--with-hostname=NAME], [Hostname, if /etc/hostname is missing, default: noname]),
[hostname=$withval], [hostname=noname])
AC_ARG_WITH(runlevel,
AS_HELP_STRING([--with-runlevel=N], [Runlevel to switch to after bootstrap, default: 2]),
[runlevel=$withval], [runlevel=2])
### Enable features ###########################################################################
# Create config.h from selected features and fallback defautls
AS_IF([test "x$enable_embedded" = "xyes"],[
AC_DEFINE(EMBEDDED_SYSTEM, 1, [Target an embedded system with BusyBox])
AC_DEFINE(SETUP_DEVFS, "/sbin/mdev -s", [Command to populate /dev])
AC_DEFINE(GETTY, "/sbin/getty -L", [Command to start getty on login prompt])
AC_DEFINE(GETTY_BUSYBOX, 1, [Use BusyBox getty call syntax])
AC_DEFINE(BAUDRATE, 115200, [Default getty baudrate])
],[
AC_DEFINE(SETUP_DEVFS, "/sbin/udevd --daemon", [Command to populate /dev])
AC_DEFINE(GETTY, "/sbin/getty -8", [Command to start getty on login prompt])
AC_DEFINE(GETTY_AGETTY, 1, [Use standard agetty call syntax])
AC_DEFINE(BAUDRATE, 38400, [Default getty baudrate])])
AS_IF([test "x$enable_rw-rootfs" = "xyes"],[
AC_DEFINE(REMOUNT_ROOTFS, 1, [Remount / as rw at boot])])
AS_IF([test "x$enable_quiet" = "xyes"],[
AC_DEFINE(VERBOSE_MODE, 0, [Quiet Finit])
],[
AC_DEFINE(VERBOSE_MODE, 1, [Verbose output, default])])
### Disable features ###########################################################################
AS_IF([test "x$enable_inetd" != "xno"],enable_inetd="yes",[
AC_DEFINE(INETD_DISABLED, 1, [Disable built-in inetd])])
AS_IF([test "x$enable_kernel-quiet" != "xno"],[
AC_DEFINE(KERNEL_QUIET, 0, [Will print stopping/starting/etc messages])
],[
AC_DEFINE(KERNEL_QUIET, 1, [Silent after initial boot, default])
])
### With features ##############################################################################
AS_IF([test "x$with_fifo" != "xno"],[
AS_IF([test "x$fifo" = "xyes"],[
AC_MSG_ERROR([Must supply argument])])
],[
fifo='/dev/initctl'])
AC_SUBST(fifo)
AS_IF([test "x$with_confing" != "xno"],[
AS_IF([test "x$config" = "xyes"],[
AC_MSG_ERROR([Must supply argument])])
],[
conf='$(sysconfdir)/finit.conf'])
AC_SUBST(conf)
AS_IF([test "x$with_heading" != "xno"],[
AS_IF([test "x$heading" = "xyes"],[
AC_MSG_ERROR([Must supply argument])])
],[
heading='$(libdir)/finit'])
AC_DEFINE_UNQUOTED(INIT_HEADING, "$heading", [Displayed by Finit at boot])
#AS_IF([test "x$with_plugindir" != "xno"],[
# AS_IF([test "x$plugindir" = "xyes"],[
# AC_MSG_ERROR([Must supply argument])])
# ],[
# plugindir='$(libdir)/finit'])
#AC_SUBST(plugindir)
#AS_IF([test "x$with_rcsd" != "xno"],[
# AS_IF([test "x$rcsd" = "xyes"],[
# AC_MSG_ERROR([Must supply argument])])
# ],[
# rcsd='$(sysconfdir)/finit.d'])
AS_IF([test "x$with_console" != "xno"],[
AS_IF([test "x$console" = "xyes"],[
AC_MSG_ERROR([Must supply argument])])
],[
console=/dev/console])
AC_DEFINE_UNQUOTED(CONSOLE, "$console", [Default console to use])
AS_IF([test "x$with_shell" != "xno"],[
AS_IF([test "x$shell" = "xyes"],[
AC_MSG_ERROR([Must supply argument])])
],[
shell=/bin/sh])
AC_DEFINE_UNQUOTED(FALLBACK_SHELL, "$shell", [Used if no login getty])
AS_IF([test "x$with_username" != "xno"],[
AS_IF([test "x$username" = "xyes"],[
AC_MSG_ERROR([Must supply argument])])
],[
username=root])
AC_DEFINE_UNQUOTED(DEFUSER, "$username", [Used for startx .conf option])
AS_IF([test "x$with_hostname" != "xno"],[
AS_IF([test "x$hostname" = "xyes"],[
AC_MSG_ERROR([Must supply argument])])
],[
hostname=noname])
AC_DEFINE_UNQUOTED(DEFHOST, "$hostname", [For /etc/hostname])
AS_IF([test "x$with_runlevel" != "xno"],[
AS_IF([test "x$runlevel" = "xyes"],[
AC_MSG_ERROR([Runlevel must be a number, 1-9, but not 6 (reboot)])])
AC_DEFINE_UNQUOTED(RUNLEVEL, $runlevel, [Runlevel to start after S])
],[
AC_DEFINE(RUNLEVEL, 2, [Default runlevel to start after S])])
# Check if user has downloaded a GitHub ZIP file and attempt to fix it.
AC_MSG_CHECKING([status of GIT submodules])
if test ! -e libite/lite.h; then
AC_MSG_RESULT([Missing!])
AC_MSG_CHECKING([if we can update all submodules])
run=`git submodule update --init`
if test $? -ne 0; then
AC_MSG_RESULT([Failed! No Internet access?])
exit 1
fi
AC_MSG_RESULT([Yes, all fixed!])
else
AC_MSG_RESULT([OK])
fi
# Control build with automake flags
AM_CONDITIONAL(STATIC, [test "x$enable_static" = "xyes"])
AM_CONDITIONAL(INETD, [test "x$enable_inetd" = "xyes"])
# Generate all files
AC_OUTPUT
+2 -1
View File
@@ -27,6 +27,7 @@
#include <sys/socket.h>
#include <sys/un.h>
#include "config.h"
#include "finit.h"
#include "cond.h"
#include "helpers.h"
@@ -182,7 +183,7 @@ static int do_cond(char *UNUSED(arg))
static int show_version(char *UNUSED(arg))
{
puts("v" VERSION);
puts("v" PACKAGE_VERSION);
return 0;
}
+1
View File
@@ -27,6 +27,7 @@
#include <poll.h>
#include <string.h>
#include "config.h"
#include "finit.h"
#include "private.h"
#include "helpers.h"
-53
View File
@@ -1,53 +0,0 @@
# Plugin based services architecture for finit
-include ../config.mk
TOPDIR ?= $(shell pwd)
CFLAGS += -fPIC
LDFLAGS := $(filter-out -rdynamic, $(LDFLAGS))
LDFLAGS += -shared
ifneq ($(STATIC), 1)
PLUGINS ?= initctl.so alsa-utils.so bootmisc.so dbus.so hwclock.so \
resolvconf.so urandom.so x11-common.so tty.so time.so \
netlink.so pidfile.so
DEPS := $(PLUGINS:.so=.d)
endif
include ../common.mk
ifneq ($(STATIC), 1)
all: $(PLUGINS)
else
all:
@true
endif
clean:
-@$(RM) $(PLUGINS)
distclean:
-@$(RM) *.o *.so $(JUNK) $(DEPS)
ifneq ($(STATIC), 1)
install: all
@install -d $(DESTDIR)$(plugindir)
@for plugin in $(PLUGINS); do \
echo " INSTALL $(DESTDIR)$(plugindir)/$$plugin"; \
$(STRIPINST) $$plugin $(DESTDIR)$(plugindir)/$$plugin; \
done
uninstall:
-@for plugin in $(PLUGINS); do \
echo " RM $(DESTDIR)$(plugindir)/$$plugin"; \
rm $(DESTDIR)$(plugindir)/$$plugin 2>/dev/null; \
done
-@rmdir $(DESTDIR)$(plugindir) 2>/dev/null
else
install:
@true
uninstall:
@true
endif
ifneq ($(MAKECMDGOALS),distclean)
-include $(DEPS)
endif
+19
View File
@@ -0,0 +1,19 @@
AM_LDFLAGS = -module -avoid-version -shared -no-undefined -export-dynamic
AM_CPPFLAGS = -U_FORTIFY_SOURCE
AM_CPPFLAGS += -D_XOPEN_SOURCE=600 -D_BSD_SOURCE -D_GNU_SOURCE -D_DEFAULT_SOURCE
AM_CPPFLAGS += -DFINIT_FIFO=\"$(fifo)\"
if STATIC
noinst_LTLIBRARIES = libplug.la
libplug_la_SOURCES = alsa-utils.c bootmisc.c dbus.c hwclock.c \
initctl.c netlink.c pidfile.c resolvconf.c \
time.c tty.c urandom.c x11-common.c
else
pkglib_LTLIBRARIES = alsa-utils.la bootmisc.la dbus.la hwclock.la \
initctl.la netlink.la pidfile.la resolvconf.la \
time.la tty.la urandom.la x11-common.la
# Clean up .la files installed by libtool despite being in -module mode
install-exec-hook:
@(cd $(DESTDIR)$(pkglibdir) && $(RM) $(pkglib_LTLIBRARIES))
endif
+14 -3
View File
@@ -144,12 +144,14 @@ static int service_start(svc_t *svc)
print_desc("", svc->desc);
}
#ifndef INETD_DISABLED
if (svc_is_inetd(svc)) {
result = inetd_start(&svc->inetd);
if (verbose)
print_result(result);
return result;
}
#endif
/* Block sigchild while forking. */
sigemptyset(&nmask);
@@ -192,12 +194,15 @@ static int service_start(svc_t *svc)
args[i] = NULL;
/* Redirect inetd socket to stdin for connection */
#ifndef INETD_DISABLED
if (svc_is_inetd_conn(svc)) {
dup2(svc->stdin, STDIN_FILENO);
close(svc->stdin);
dup2(STDIN_FILENO, STDOUT_FILENO);
dup2(STDIN_FILENO, STDERR_FILENO);
} else if (debug) {
} else
#endif
if (debug) {
int fd;
char buf[CMD_SIZE] = "";
@@ -225,6 +230,7 @@ static int service_start(svc_t *svc)
else
status = execv(svc->cmd, args); /* XXX: Maybe use execve() to be able to launch scripts? */
#ifndef INETD_DISABLED
if (svc_is_inetd_conn(svc)) {
if (svc->inetd.type == SOCK_STREAM) {
close(STDIN_FILENO);
@@ -232,13 +238,15 @@ static int service_start(svc_t *svc)
close(STDERR_FILENO);
}
}
#endif
exit(status);
}
svc->pid = pid;
#ifndef INETD_DISABLED
if (svc_is_inetd_conn(svc) && svc->inetd.type == SOCK_STREAM)
close(svc->stdin);
#endif
if (SVC_TYPE_RUN == svc->type) {
result = WEXITSTATUS(complete(svc->cmd, pid));
@@ -265,6 +273,7 @@ static int service_stop(svc_t *svc)
if (!svc)
return 1;
#ifndef INETD_DISABLED
if (svc_is_inetd(svc)) {
int do_print = runlevel != 1 && verbose &&
svc->block != SVC_BLOCK_INETD_BUSY;
@@ -278,6 +287,7 @@ static int service_stop(svc_t *svc)
print_result(0);
return 0;
}
#endif
if (svc->pid <= 1) {
_d("Bad PID %d for %s, SIGTERM", svc->pid, svc->desc);
@@ -784,6 +794,7 @@ restart:
break;
case SVC_DONE_STATE:
#ifndef INETD_DISABLED
if (svc_is_inetd_conn(svc)) {
if (svc->inetd.svc->block == SVC_BLOCK_INETD_BUSY) {
svc->inetd.svc->block = 0;
@@ -792,7 +803,7 @@ restart:
service_unregister(svc);
return;
}
#endif
if (svc_is_changed(svc))
svc_set_state(svc, SVC_HALTED_STATE);
break;