aboutsummaryrefslogtreecommitdiff
path: root/meson.build
diff options
context:
space:
mode:
Diffstat (limited to 'meson.build')
-rw-r--r--meson.build168
1 files changed, 168 insertions, 0 deletions
diff --git a/meson.build b/meson.build
new file mode 100644
index 00000000..378e18d0
--- /dev/null
+++ b/meson.build
@@ -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)