add meson build files

Closes #116.
Closes #171.
Closes #172.
Closes #175.
This commit is contained in:
William Hubbs 2021-08-22 13:09:30 -05:00
parent 92004a2ed6
commit d6622a1156
29 changed files with 1197 additions and 2 deletions

View File

@ -4,6 +4,12 @@ OpenRC NEWS
This file will contain a list of notable changes for each release. Note This file will contain a list of notable changes for each release. Note
the information in this file is in reverse order. the information in this file is in reverse order.
## OpenRC 0.44
This version is the first to use a meson-based build system.
I will keep the makefiles for the 0.44 branch, but meson will be the
only build system supported in the future.
## OpenRC 0.43 ## OpenRC 0.43
This version changes the behavior of the checkpath helper to address This version changes the behavior of the checkpath helper to address

View File

@ -4,7 +4,16 @@ OpenRC README
OpenRC is a dependency-based init system that works with the OpenRC is a dependency-based init system that works with the
system-provided init program, normally `/sbin/init`. system-provided init program, normally `/sbin/init`.
## Installation ## building and installing
OpenRC uses the [meson](http://mesonbuild.com) build system, so use the
usual methods for this build system to build and install.
The old build system is still available for the 0.44.x branch, but it
will be removed for the next release. The previous documentation is
below.
## Installation (historical)
OpenRC requires GNU make. OpenRC requires GNU make.
@ -13,7 +22,7 @@ executed using this command:
`make install` `make install`
## Configuration ## Configuration (historical)
You may wish to configure the installation by passing one or more of the You may wish to configure the installation by passing one or more of the
below arguments to the make command below arguments to the make command

59
conf.d/meson.build Normal file
View File

@ -0,0 +1,59 @@
conf_d_dir = get_option('sysconfdir') / 'conf.d'
conf_common = [
'bootmisc',
'fsck',
'hostname',
'localmount',
'netmount',
'swap',
'urandom',
]
conf_net = [
'network',
'staticroute',
]
conf_FreeBSD = [
'ipfw',
'modules',
'moused',
'powerd',
'rarpd',
'savecore',
'syscons',
]
conf_Linux = [
'agetty',
'consolefont',
'devfs',
'dmesg',
'hwclock',
'keymaps',
'killprocs',
'modules',
'mtab',
'net-online',
]
conf_NetBSD = [
'moused',
'rarpd',
'savecore',
]
conf_data = conf_common
if get_option('newnet')
conf_data = conf_data + conf_net
endif
if os == 'FreeBSD'
conf_data = conf_data + conf_FreeBSD
elif os == 'Linux'
conf_data = conf_data + conf_Linux
elif os == 'NetBSD'
conf_data = conf_data + conf_NetBSD
endif
install_data(conf_data, install_dir : conf_d_dir)

44
etc/meson.build Normal file
View File

@ -0,0 +1,44 @@
etc_conf_data = configuration_data()
if os == 'FreeBSD'
etc_conf_data.set('TERM', 'cons25')
elif os == 'Linux'
etc_conf_data.set('TERM', 'wsvt25')
endif
etc_conf_common = [
'rc.conf',
]
etc_bin_FreeBSD = [
'rc.devd',
]
etc_conf_FreeBSD = [
'devd.conf',
]
etc_bin_NetBSD = [
'rc.in',
'rc.shutdown.in',
]
install_data(etc_conf_common,
install_dir : get_option('sysconfdir'))
if os == 'FreeBSD'
install_data(etc_bin_FreeBSD,
install_dir : get_option('sysconfdir'),
install_mode: 'rwxr-xr-x')
install_data(etc_conf_FreeBSD,
install_dir : get_option('sysconfdir'))
endif
if os == 'FreeBSD' or os == 'NetBSD'
foreach file : etc_bin_NetBSD
configure_file(input : file,
output : '@BASENAME@',
configuration : etc_conf_data,
install_dir: get_option('sysconfdir'),
install_mode: 'rwxr-xr-x')
endforeach
endif

100
init.d/meson.build Normal file
View File

@ -0,0 +1,100 @@
init_d_dir = get_option('sysconfdir') / 'init.d'
init_common = [
'bootmisc.in',
'fsck.in',
'hostname.in',
'local.in',
'localmount.in',
'loopback.in',
'netmount.in',
'osclock.in',
'root.in',
'savecache.in',
'swap.in',
'swclock.in',
'sysctl.in',
'runsvdir.in',
'urandom.in',
's6-svscan.in',
]
if get_option('newnet')
init_common = init_common + [
'network.in',
'staticroute.in',
]
endif
init_Linux = [
'agetty.in',
'binfmt.in',
'cgroups.in',
'consolefont.in',
'devfs.in',
'dmesg.in',
'hwclock.in',
'keymaps.in',
'killprocs.in',
'modules.in',
'mount-ro.in',
'mtab.in',
'numlock.in',
'procfs.in',
'net-online.in',
'save-keymaps.in',
'save-termencoding.in',
'sysfs.in',
'termencoding.in',
]
init_BSD = [
'hostid.in',
'moused.in',
'newsyslog.in',
'pf.in',
'rarpd.in',
'rc-enabled.in',
'rpcbind.in',
'savecore.in',
'syslogd.in',
]
init_FreeBSD = [
'adjkerntz.in',
'devd .in',
'dumpon.in',
'encswap.in',
'ipfw.in',
'modules.in',
'mixer.in',
'nscd.in',
'powerd.in',
'syscons.in',
]
init_NetBSD = [
'devdb.in',
'swap-blk.in',
'ttys.in',
'wscons.in',
]
init_data = init_common
if os == 'Dragonfly'
init_data = init_data + init_BSD
elif os == 'FreeBSD' or os == 'Gnu-kFreeBSD'
init_data = init_data + init_BSD + init_FreeBSD
elif os == 'Linux'
init_data = init_data + init_Linux
elif os == 'NetBSD'
init_data = init_data + init_BSD + init_NetBSD
endif
foreach init_d_file : init_data
configure_file(input : init_d_file,
output : '@BASENAME@',
configuration : init_d_conf_data,
install_dir: init_d_dir,
install_mode: 'rwxr-xr-x')
endforeach

7
local.d/meson.build Normal file
View File

@ -0,0 +1,7 @@
local_d_dir = get_option('sysconfdir') / 'local.d'
local_data = [
'README'
]
install_data(local_data, install_dir : local_d_dir)

34
man/meson.build Normal file
View File

@ -0,0 +1,34 @@
man3 = [
'einfo.3',
'rc_config.3',
'rc_deptree.3',
'rc_find_pids.3',
'rc_plugin_hook.3',
'rc_runlevel.3',
'rc_service.3',
'rc_stringlist.3',
]
man8 = [
'openrc.8',
'openrc-run.8',
'rc-service.8',
'rc-status.8',
'rc-update.8',
'start-stop-daemon.8',
'supervise-daemon.8',
]
if os == 'Linux'
man8 = man8 + [
'rc-sstat.8',
'openrc-init.8',
'openrc-shutdown.8',
]
endif
install_data(man3,
install_dir : get_option('mandir') / 'man3')
install_data(man8,
install_dir : get_option('mandir') / 'man8')
meson.add_install_script('meson_man_links.sh', get_option('mandir'), man3 + man8)

20
man/meson_man_links.sh Executable file
View File

@ -0,0 +1,20 @@
#!/bin/sh
get_links() {
sed -e 's/ ,//g' \
-e '/^\.Sh NAME$/,/\.Sh/ s/\.Nm //p' \
-n ${MESON_SOURCE_ROOT}/man/${1}
}
MANDIR="$1"
shift
for man in $@; do
prefix=${man%%.*}
suffix=${man#*.}
links=$(get_links ${man})
for link in ${links}; do
if [ "${link}" != "${prefix}" ]; then
ln -sf ${man} ${MESON_INSTALL_DESTDIR_PREFIX}/${MANDIR}/man${suffix}/${link}.${suffix}
fi
done
done

168
meson.build Normal file
View File

@ -0,0 +1,168 @@
project('OpenRC', 'c',
version : '0.42',
license: 'BSD-2',
default_options : [
'c_std=c99',
'prefix=/usr',
'warning_level=3',
],
meson_version : '>=0.49.0')
cc = meson.get_compiler('c')
audit_dep = dependency('audit', required : get_option('audit'))
if audit_dep.found()
cc_audit_flags = '-DHAVE_AUDIT'
else
cc_audit_flags = []
endif
if get_option('branding') != ''
cc_branding_flags = '-DBRANDING=' + get_option('branding')
else
cc_branding_flags = []
endif
libname = get_option('libdir').split('/')[-1]
option_local_prefix = get_option('local_prefix')
if option_local_prefix == ''
local_prefix = get_option('prefix') / 'usr' / 'local'
else
local_prefix = option_local_prefix
endif
option_os = get_option('os')
if option_os == ''
uname = find_program('uname')
r = run_command(uname, '-s')
os = r.stdout().strip()
os = '-'.join(os.split('/'))
else
os = option_os
endif
pam = get_option('pam')
if pam
libpam = cc.find_library('pam')
libpam_misc = cc.find_library('pam_misc')
cc_pam_flags = '-DHAVE_PAM'
else
libpam = []
libpam_misc = []
cc_pam_flags = []
endif
option_pkg_prefix = get_option('pkg_prefix')
if option_pkg_prefix == ''
if os == 'Dragonfly' or os == 'FreeBSD'
pkg_prefix = '/usr/local'
elif os == 'GNU' or os == 'GNU-kFreeBSD' or os == 'Linux'
pkg_prefix = '/usr'
elif os == 'NetBSD'
pkg_prefix = '/usr/pkg'
endif
else
pkg_prefix = option_pkg_prefix
endif
root_prefix = get_option('root_prefix')
if root_prefix == ''
root_prefix = '/'
endif
bindir = root_prefix / get_option('bindir')
libdir = root_prefix / get_option('libdir')
libexecdir = root_prefix / get_option('libexecdir')
rc_libexecdir = libexecdir / 'rc'
sbindir = root_prefix / get_option('sbindir')
selinux_dep = dependency('libselinux', required : get_option('selinux'))
if selinux_dep.found()
cc_selinux_flags = '-DHAVE_SELINUX'
else
cc_selinux_flags = []
endif
termcap = get_option('termcap')
if termcap != ''
termcap_dep = dependency(termcap)
termcap_flags = '-DHAVE_TERMCAP'
else
termcap_dep = []
termcap_flags = []
endif
if get_option('buildtype').startswith('debug')
cc_debug_flags = ['-DRC_DEBUG']
else
cc_debug_flags = []
endif
if os == 'Linux' or os == 'GNU-kFreeBSD'
cc_os_flags = ['-D_DEFAULT_SOURCE']
elif os == 'FreeBSD'
cc_os_flags = ['-D_BSD_SOURCE']
elif os == 'GNU'
cc_os_flags = ['-D_DEFAULT_SOURCE', '-DMAXPATHLEN=4096', '-DPATH_MAX=4096']
endif
# Try and use some good cc flags if we're building from git. We don't use
# -pedantic as it will warn about our perfectly valid use of %m in our logger.
# We should be using -Wredundant-decls, but our library hidden proto stuff gives
# loads of warnings. I don't fully understand it (the hidden proto, not the
# warning) so we just silence the warning.
cc_warning_flags_test = [
'-Wcast-align',
'-Wcast-qual',
'-Wdeclaration-after-statement',
'-Wformat=2',
'-Winline',
'-Wmissing-declarations',
'-Wmissing-format-attribute',
'-Wmissing-noreturn',
'-Wmissing-prototypes',
'-Wnested-externs',
'-Wpointer-arith',
'-Wsequence-point',
'-Wshadow',
'-Wwrite-strings',
'-Werror=implicit-function-declaration',
]
cc_warning_flags = cc.get_supported_arguments(cc_warning_flags_test)
cc_flags = [cc_debug_flags, cc_os_flags, cc_warning_flags]
add_project_arguments(cc_flags, language : 'c')
incdir = include_directories('src/includes')
einfo_incdir = include_directories('src/libeinfo')
rc_incdir = include_directories('src/librc')
init_d_conf_data = configuration_data()
init_d_conf_data.set('SBINDIR', sbindir)
init_d_conf_data.set('PKG_PREFIX', pkg_prefix)
init_d_conf_data.set('SYSCONFDIR', get_option('sysconfdir'))
dl_dep = cc.find_library('dl', required: false)
util_dep = cc.find_library('util', required: false)
subdir('conf.d')
subdir('etc')
subdir('init.d')
subdir('local.d')
subdir('man')
if get_option('pkgconfig')
subdir('pkgconfig')
endif
subdir('scripts')
subdir('sh')
subdir('src')
subdir('support')
subdir('sysctl.d')
meson.add_install_script('tools/meson_runlevels.sh',
os,
get_option('newnet') ? 'yes' : 'no',
rc_libexecdir,
get_option('sysconfdir'))
meson.add_install_script('tools/meson_final.sh',
rc_libexecdir,
os)

30
meson_options.txt Normal file
View File

@ -0,0 +1,30 @@
option('audit', type : 'feature', value : 'auto',
description : 'enable libaudit support')
option('branding', type : 'string',
description : 'Add branding to OpenRC')
option('local_prefix', type : 'string', value : '/usr/local',
description : 'default location of user maintained packages')
option('newnet', type : 'boolean',
description : 'build and install our networking scripts')
option('os', type : 'combo',
choices :
[ '', 'DragonFly', 'FreeBSD', 'GNU', 'GNU-kFreeBSD', 'Linux', 'NetBSD' ],
description : 'Operating System (autodetected if not specified)')
option('pam', type : 'boolean',
description : 'enable PAM support')
option('pkg_prefix', type : 'string',
description : 'default location where packages are installed')
option('pkgconfig', type : 'boolean',
description : 'build PKGConfig files')
option('root_prefix', type : 'string',
description : 'default path of root directory')
option('selinux', type : 'feature', value : 'auto',
description : 'enable SELinux support')
option('shell', type : 'string', value : '/bin/sh',
description : 'Default posix compatible shell')
option('sysvinit', type : 'boolean', value : false,
description : 'enable SysVinit compatibility (linux only)')
option('termcap', type : 'combo',
choices :
[ '', 'ncurses', 'termcap' ],
description : 'the termcap library to use')

22
pkgconfig/meson.build Normal file
View File

@ -0,0 +1,22 @@
pkgconfig_dir = get_option('libdir') / 'pkgconfig'
pkgconfig_conf_data = configuration_data()
if root_prefix != '/'
pkgconfig_conf_data.set('PREFIX', root_prefix)
else
pkgconfig_conf_data.set('PREFIX', '')
endif
pkgconfig_conf_data.set('LIB', get_option('libdir'))
pkgconfig_conf_data.set('VERSION', meson.project_version())
pkgconfig_files = [
'einfo.pc.in',
'openrc.pc.in',
]
foreach file : pkgconfig_files
configure_file(input : file,
output : '@BASENAME@',
configuration : pkgconfig_conf_data,
install_dir : pkgconfig_dir)
endforeach

45
scripts/meson.build Normal file
View File

@ -0,0 +1,45 @@
script_conf_data = configuration_data()
script_conf_data.set('SBINDIR', sbindir)
script_dir = rc_libexecdir / 'bin'
scripts_internal = [
'on_ac_power',
]
scripts_Linux = [
'rc-sstat.in',
]
scripts_sysvinit = [
'halt',
'poweroff',
'shutdown',
'reboot',
]
install_data(scripts_internal,
install_dir : script_dir,
install_mode: 'rwxr-xr-x')
if os == 'Linux'
foreach file : scripts_Linux
configure_file(input : file,
output : '@BASENAME@',
configuration : script_conf_data,
install_dir: script_dir,
install_mode: 'rwxr-xr-x')
endforeach
if get_option('sysvinit')
foreach file : scripts_sysvinit
configure_file(input : file,
output : '@BASENAME@',
configuration : script_conf_data,
install_dir: script_dir,
install_mode: 'rwxr-xr-x')
endforeach
endif
endif
meson.add_install_script('meson_script_links.sh', rc_libexecdir,
sbindir)

14
scripts/meson_script_links.sh Executable file
View File

@ -0,0 +1,14 @@
#!/bin/sh
set -e
set -u
rc_libexecdir="$1"
sbindir="$2"
binaries=" halt poweroff rc-sstat reboot shutdown"
for f in $binaries; do
if [ -x "${DESTDIR}${rc_libexecdir}/bin/${f}" ]; then
ln -snf "${DESTDIR}${rc_libexecdir}/bin/${f}" \
"${DESTDIR}${sbindir}/${f}"
fi
done

84
sh/meson.build Normal file
View File

@ -0,0 +1,84 @@
sh_conf_data = configuration_data()
if root_prefix == '/'
sh_conf_data.set('PREFIX', '')
else
sh_conf_data.set('PREFIX', root_prefix)
endif
sh_conf_data.set('BINDIR', bindir)
sh_conf_data.set('LIBEXECDIR', rc_libexecdir)
sh_conf_data.set('LOCAL_PREFIX', local_prefix)
sh_conf_data.set('PKG_PREFIX', pkg_prefix)
sh_conf_data.set('SBINDIR', sbindir)
sh_conf_data.set('SHELL', get_option('shell'))
sh_conf_data.set('SYSCONFDIR', get_option('sysconfdir'))
sh_dir = rc_libexecdir / 'sh'
sh = [
'rc-functions.sh',
'rc-mount.sh',
'runit.sh',
's6.sh',
'start-stop-daemon.sh',
'supervise-daemon.sh',
]
sh_config = [
'functions.sh.in',
]
scripts_config = [
'gendepends.sh.in',
'openrc-run.sh.in',
]
if os == 'Linux'
sh += [
'rc-cgroup.sh',
]
scripts_config += [
'binfmt.sh.in',
'cgroup-release-agent.sh.in',
]
scripts_config_os = [
['init-early.sh.Linux.in', 'init-early.sh'],
['init.sh.Linux.in', 'init.sh'],
]
elif os == 'GNU'
scripts_config_os = [
['init.sh.GNU.in', 'init.sh'],
]
elif os == 'Gnu-KFreeBSD'
scripts_config_os = [
['init.sh.GNU-kFreeBSD.in', 'init.sh'],
]
else
scripts_config_os = [
['init.sh.BSD.in', 'init.sh'],
]
endif
install_data(sh,
install_dir : sh_dir)
foreach file : sh_config
configure_file(input : file,
output : '@BASENAME@',
configuration : sh_conf_data,
install_dir : sh_dir)
endforeach
foreach file : scripts_config
configure_file(input : file,
output : '@BASENAME@',
configuration : sh_conf_data,
install_dir : sh_dir,
install_mode : 'rwxr-xr-x')
endforeach
foreach file : scripts_config_os
configure_file(input : file.get(0),
output : file.get(1),
configuration : sh_conf_data,
install_dir : sh_dir,
install_mode : 'rwxr-xr-x')
endforeach

6
src/common/meson.build Normal file
View File

@ -0,0 +1,6 @@
version_h = vcs_tag(
input : 'version.h.in',
output : 'version.h')
version_f = vcs_tag(
input : 'version.in',
output : 'version')

18
src/common/version.h.in Normal file
View File

@ -0,0 +1,18 @@
/*
* Copyright (c) 2007-2015 The OpenRC Authors.
* See the Authors file at the top-level directory of this distribution and
* https://github.com/OpenRC/openrc/blob/master/AUTHORS
*
* This file is part of OpenRC. It is subject to the license terms in
* the LICENSE file found in the top-level directory of this
* distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE
* This file may not be copied, modified, propagated, or distributed
* except according to the terms contained in the LICENSE file.
*/
#ifndef _VERSION_H_
#define _VERSION_H_
#define VERSION "@VCS_TAG@"
#endif

1
src/common/version.in Normal file
View File

@ -0,0 +1 @@
@VCS_TAG@

12
src/libeinfo/meson.build Normal file
View File

@ -0,0 +1,12 @@
libeinfo_version = '1'
libeinfo = library('einfo', ['libeinfo.c'],
c_args : termcap_flags,
include_directories : incdir,
dependencies : termcap_dep,
link_depends : 'einfo.map',
version : libeinfo_version,
install : true,
install_dir : libdir)
install_headers('einfo.h')

33
src/librc/meson.build Normal file
View File

@ -0,0 +1,33 @@
rc_h_conf_data = configuration_data()
if root_prefix == '/'
rc_h_conf_data.set('PREFIX', '')
else
rc_h_conf_data.set('PREFIX', root_prefix)
endif
rc_h_conf_data.set('LIB', libname)
rc_h_conf_data.set('LIBEXECDIR', rc_libexecdir)
rc_h_conf_data.set('LOCAL_PREFIX', local_prefix)
rc_h_conf_data.set('PKG_PREFIX', pkg_prefix)
rc_h_conf_data.set('SYSCONFDIR', get_option('sysconfdir'))
librc_version = '1'
librc_sources = [
'librc.c',
'librc-daemon.c',
'librc-depend.c',
'librc-misc.c',
'librc-stringlist.c',
]
rc_h = configure_file(input : 'rc.h.in', output : 'rc.h',
configuration : rc_h_conf_data)
librc = library('rc', librc_sources,
include_directories : [incdir, einfo_incdir],
link_depends : 'rc.map',
version : librc_version,
install : true,
install_dir : libdir)
install_headers(rc_h)

4
src/meson.build Normal file
View File

@ -0,0 +1,4 @@
subdir('common')
subdir('libeinfo')
subdir('librc')
subdir('rc')

302
src/rc/meson.build Normal file
View File

@ -0,0 +1,302 @@
rc_misc_c = files([
'rc-misc.c',
])
rc_plugin_c = ([
'rc-plugin.c',
])
rc_schedules_c = files([
'rc-schedules.c',
])
usage_c = files([
'_usage.c',
])
if get_option('selinux').enabled()
rc_selinux_c = files([
'rc-selinux.c',
])
else
rc_selinux_c = []
endif
rc_wtmp_c = files([
'rc-wtmp.c',
])
rc_bindir = rc_libexecdir / 'bin'
rc_sbindir = rc_libexecdir / 'sbin'
executable('rc-status',
['rc-status.c', rc_misc_c, usage_c, version_h],
c_args : cc_branding_flags,
link_with: [libeinfo, librc],
dependencies: [util_dep],
include_directories: [incdir, einfo_incdir, rc_incdir],
install: true,
install_dir: bindir)
executable('openrc',
['rc.c', 'rc-logger.c', rc_misc_c, rc_plugin_c, usage_c,
version_h],
c_args : cc_branding_flags,
link_with: [libeinfo, librc],
dependencies: [dl_dep, util_dep],
include_directories: [incdir, einfo_incdir, rc_incdir],
install: true,
install_dir: sbindir)
executable('openrc-run',
['openrc-run.c', rc_misc_c, rc_plugin_c, usage_c,
rc_selinux_c, version_h],
c_args : [cc_audit_flags, cc_branding_flags, cc_pam_flags, cc_selinux_flags],
link_with: [libeinfo, librc],
dependencies: [dl_dep, libpam, selinux_dep, util_dep],
include_directories: [incdir, einfo_incdir, rc_incdir],
install: true,
install_dir: sbindir)
executable('rc',
['rc.c', 'rc-logger.c', rc_misc_c, rc_plugin_c, usage_c, version_h],
c_args : cc_branding_flags,
link_with: [libeinfo, librc],
dependencies: [dl_dep, util_dep],
include_directories: [incdir, einfo_incdir, rc_incdir],
install: true,
install_dir: sbindir)
executable('rc-service',
['rc-service.c', rc_misc_c, usage_c, version_h],
c_args : cc_branding_flags,
link_with: [libeinfo, librc],
include_directories: [incdir, einfo_incdir, rc_incdir],
install: true,
install_dir: sbindir)
executable('rc-update',
['rc-update.c', rc_misc_c, usage_c, version_h],
c_args : cc_branding_flags,
link_with: [libeinfo, librc],
include_directories: [incdir, einfo_incdir, rc_incdir],
install: true,
install_dir: sbindir)
executable('runscript',
['openrc-run.c', rc_misc_c, usage_c, 'rc-plugin.c',
rc_selinux_c, version_h],
c_args : [cc_audit_flags, cc_branding_flags, cc_pam_flags, cc_selinux_flags],
link_with: [libeinfo, librc],
dependencies: [dl_dep, libpam, util_dep, selinux_dep],
include_directories: [incdir, einfo_incdir, rc_incdir],
install: true,
install_dir: sbindir)
executable('start-stop-daemon',
['start-stop-daemon.c', 'rc-pipes.c', rc_misc_c, rc_schedules_c,
rc_selinux_c, usage_c, version_h],
c_args : [cc_audit_flags, cc_branding_flags, cc_pam_flags, cc_selinux_flags],
link_with: [libeinfo, librc],
dependencies: [dl_dep, libpam, util_dep, selinux_dep],
include_directories: [incdir, einfo_incdir, rc_incdir],
install: true,
install_dir: sbindir)
executable('supervise-daemon',
['supervise-daemon.c', rc_misc_c, rc_plugin_c, rc_schedules_c,
usage_c, version_h],
c_args : [cc_branding_flags, cc_pam_flags, cc_selinux_flags],
link_with: [libeinfo, librc],
dependencies: [dl_dep, libpam, util_dep, selinux_dep],
include_directories: [incdir, einfo_incdir, rc_incdir],
install: true,
install_dir: sbindir)
if os == 'Linux'
executable('openrc-init',
['openrc-init.c', rc_plugin_c, rc_wtmp_c, version_h],
include_directories: [incdir, einfo_incdir, rc_incdir],
link_with: [libeinfo, librc],
dependencies: [dl_dep],
install: true,
install_dir: sbindir)
executable('openrc-shutdown',
['openrc-shutdown.c', 'broadcast.c', 'rc-sysvinit.c', rc_misc_c,
usage_c, rc_wtmp_c, version_h],
c_args : cc_branding_flags,
include_directories: [incdir, einfo_incdir, rc_incdir],
link_with: [libeinfo, librc],
install: true,
install_dir: sbindir)
endif
einfo_execs = [
'einfon',
'einfo',
'ewarnn',
'ewarn',
'eerrorn',
'eerror',
'ebegin',
'eend',
'ewend',
'eindent',
'eoutdent',
'esyslog',
'eval_ecolors',
'ewaitfile',
'veinfo',
'vewarn',
'vebegin',
'veend',
'vewend',
'veindent',
'veoutdent',
]
foreach exec: einfo_execs
executable(exec,
['do_e.c', rc_misc_c, version_h],
include_directories: [incdir, einfo_incdir, rc_incdir],
link_with: [libeinfo, librc],
install: true,
install_dir: rc_bindir)
endforeach
executable('checkpath',
['checkpath.c', rc_misc_c, usage_c, rc_selinux_c,
version_h],
c_args : [cc_audit_flags, cc_branding_flags, cc_pam_flags, cc_selinux_flags],
include_directories: [incdir, einfo_incdir, rc_incdir],
link_with: [libeinfo, librc],
dependencies: [libpam, selinux_dep],
install: true,
install_dir: rc_bindir)
executable('fstabinfo',
['fstabinfo.c', rc_misc_c, usage_c, version_h],
c_args : cc_branding_flags,
include_directories: [incdir, einfo_incdir, rc_incdir],
link_with: [libeinfo, librc],
install: true,
install_dir: rc_bindir)
executable('mountinfo',
['mountinfo.c', rc_misc_c, usage_c, version_h],
c_args : cc_branding_flags,
include_directories: [incdir, einfo_incdir, rc_incdir],
link_with: [libeinfo, librc],
install: true,
install_dir: rc_bindir)
executable('rc-depend',
['rc-depend.c', rc_misc_c, usage_c, version_h],
c_args : cc_branding_flags,
include_directories: [incdir, einfo_incdir, rc_incdir],
link_with: [libeinfo, librc],
install: true,
install_dir: rc_bindir)
executable('is_newer_than',
['is_newer_than.c', rc_misc_c, version_h],
include_directories: [incdir, einfo_incdir, rc_incdir],
link_with: [libeinfo, librc],
install: true,
install_dir: rc_bindir)
executable('is_older_than',
['is_older_than.c', rc_misc_c, version_h],
include_directories: [incdir, einfo_incdir, rc_incdir],
link_with: [libeinfo, librc],
install: true,
install_dir: rc_bindir)
service_execs = [
'service_starting',
'service_started',
'service_stopping',
'service_stopped',
'service_inactive',
'service_wasinactive',
'service_hotplugged',
'service_started_daemon',
'service_crashed',
]
foreach exec : service_execs
executable(exec,
['do_service.c', rc_misc_c, version_h],
include_directories: [incdir, einfo_incdir, rc_incdir],
link_with: [libeinfo, librc],
install: true,
install_dir: rc_bindir)
endforeach
value_execs = [
'service_get_value',
'service_set_value',
'get_options',
'save_options',
]
foreach exec : value_execs
executable(exec,
['do_value.c', rc_misc_c, version_h],
include_directories: [incdir, einfo_incdir, rc_incdir],
link_with: [libeinfo, librc],
install: true,
install_dir: rc_bindir)
endforeach
if os == 'Linux'
executable('kill_all',
['kill_all.c', usage_c, version_h],
c_args : cc_branding_flags,
include_directories: [incdir, einfo_incdir, rc_incdir],
link_with: [libeinfo,librc],
install: true,
install_dir: rc_bindir)
endif
executable('shell_var',
['shell_var.c'],
install: true,
install_dir: rc_bindir)
mark_service_execs = [
'mark_service_starting',
'mark_service_started',
'mark_service_stopping',
'mark_service_stopped',
'mark_service_inactive',
'mark_service_wasinactive',
'mark_service_hotplugged',
'mark_service_failed',
'mark_service_crashed',
]
foreach exec : mark_service_execs
executable(exec,
['do_mark_service.c', rc_misc_c, version_h],
include_directories: [incdir, einfo_incdir, rc_incdir],
link_with: [libeinfo,librc],
install: true,
install_dir: rc_sbindir)
endforeach
executable('rc-abort',
'rc-abort.c',
include_directories: [einfo_incdir],
link_with: [libeinfo],
install: true,
install_dir: rc_sbindir)
executable('swclock',
['swclock.c', rc_misc_c, usage_c, version_h],
c_args : cc_branding_flags,
include_directories: [incdir, einfo_incdir, rc_incdir],
link_with: [libeinfo,librc],
install: true,
install_dir: rc_sbindir)

View File

@ -0,0 +1,11 @@
deptree2dot_dir = support_dir / 'deptree2dot'
deptree2dot_bin = ['deptree2dot']
deptree2dot_data = ['README.md']
install_data(deptree2dot_bin,
install_dir : deptree2dot_dir,
install_mode : 'rwxr-xr-x')
install_data(deptree2dot_data,
install_dir : deptree2dot_dir)

View File

@ -0,0 +1,30 @@
init_d_examples_dir = support_dir / 'init.d.examples'
init_d_examples = [
'avahi-dnsconfd.in',
'avahid.in',
'dhcpcd.in',
'dbus.in',
'hald.in',
'named.in',
'ntpd.in',
'openvpn.in',
'polkitd.in',
'sshd.in',
'wpa_supplicant.in',
]
init_d_examples_data = [
'README.md',
]
foreach init_d_example: init_d_examples
configure_file(input : init_d_example,
output : '@BASENAME@',
configuration : init_d_conf_data,
install_dir : init_d_examples_dir,
install_mode : 'rwxr-xr-x')
endforeach
install_data(init_d_examples_data,
install_dir : init_d_examples_dir)

7
support/meson.build Normal file
View File

@ -0,0 +1,7 @@
support_dir = get_option('datadir') / meson.project_name().to_lower()
support_dir = support_dir / 'support'
subdir('deptree2dot')
subdir('init.d.examples')
subdir('openvpn')
subdir('sysvinit')

View File

@ -0,0 +1,10 @@
openvpn_dir = support_dir / 'openvpn'
openvpn_bin = ['down.sh', 'up.sh']
openvpn_data = ['README.md']
install_data(openvpn_bin,
install_dir : openvpn_dir,
install_mode : 'rwxr-xr-x')
install_data(openvpn_data,
install_dir : openvpn_dir)

View File

@ -0,0 +1,6 @@
sysvinit_dir = support_dir / 'sysvinit'
sysvinit_data = ['halt.sh', 'inittab', 'README.md']
install_data(sysvinit_data,
install_dir : sysvinit_dir)

6
sysctl.d/meson.build Normal file
View File

@ -0,0 +1,6 @@
sysctl_data = [
'README',
]
sysctldir = get_option('sysconfdir') / 'sysctl.d'
install_data(sysctl_data, install_dir : sysctldir)

13
tools/meson_final.sh Executable file
View File

@ -0,0 +1,13 @@
#!/bin/sh
set -e
set -u
rc_libexecdir="$1"
os="$2"
if [ ${os} != Linux ]; then
install -d "${DESTDIR}/${rc_libexecdir}"/init.d
fi
install -d "${DESTDIR}/${rc_libexecdir}"/tmp
install "${MESON_BUILD_ROOT}/src/version/version" "${DESTDIR}/${rc_libexecdir}"

94
tools/meson_runlevels.sh Executable file
View File

@ -0,0 +1,94 @@
#!/bin/sh
set -e
set -u
os="$1"
net="$2"
rc_libexecdir="$3"
sysconfdir="$4"
init_d_dir="${sysconfdir}/init.d"
leveldir="${sysconfdir}/runlevels"
sysinitdir="${leveldir}/sysinit"
bootdir="${leveldir}/boot"
defaultdir="${leveldir}/default"
nonetworkdir="${leveldir}/nonetwork"
shutdowndir="${leveldir}/shutdown"
sysinit=
case "${os}" in
Linux)
sysinit="${sysinit} cgroups devfs dmesg sysfs"
;;
esac
boot="bootmisc fsck hostname localmount loopback root swap sysctl urandom"
if [ "${net}" = yes ]; then
boot="${boot} network staticroute"
fi
boot_BSD="hostid newsyslog savecore syslogd"
case "${os}" in
DragonFly)
boot="${boot} ${boot_BSD}"
;;
FreeBSD|GNU-kFreeBSD)
boot="${boot} ${boot_BSD} adjkerntz dumpon modules syscons"
;;
Linux)
boot="${boot} binfmt hwclock keymaps modules mtab procfs
save-keymaps save-termencoding termencoding"
;;
NetBSD)
boot="${boot} ${boot_BSD} devdb swap-blk tys wscons"
;;
esac
default="local netmount"
nonetwork="local"
shutdown="savecache"
case "${os}" in
Linux)
shutdown="${shutdown} killprocs mount-ro"
;;
esac
if ! test -d "${DESTDIR}${sysinitdir}"; then
install -d "${DESTDIR}${sysinitdir}"
for x in ${sysinit}; do
ln -snf "${init_d_dir}/$x" "${DESTDIR}${sysinitdir}/$x"
done
fi
if ! test -d "${DESTDIR}${bootdir}"; then
install -d "${DESTDIR}${bootdir}"
for x in ${boot}; do
ln -snf "${init_d_dir}/$x" "${DESTDIR}${bootdir}/$x"
done
fi
if ! test -d "${DESTDIR}${defaultdir}"; then
install -d "${DESTDIR}${defaultdir}"
for x in ${default}; do
ln -snf "${init_d_dir}/$x" "${DESTDIR}${defaultdir}/$x"
done
fi
if ! test -d "${DESTDIR}${nonetworkdir}"; then
install -d "${DESTDIR}${nonetworkdir}"
for x in ${nonetwork}; do
ln -snf "${init_d_dir}/$x" "${DESTDIR}${nonetworkdir}/$x"
done
fi
if ! test -d "${DESTDIR}${shutdowndir}"; then
install -d "${DESTDIR}${shutdowndir}"
for x in ${shutdown}; do
ln -snf "${init_d_dir}/$x" "${DESTDIR}${shutdowndir}/$x"
done
fi
ln -snf "${rc_libexecdir}"/sh/functions.sh "${DESTDIR}/${init_d_dir}"