1project('phosphor-user-manager',
2        'cpp',
3        version: '0.1', meson_version: '>=1.1.1',
4        default_options: [
5          'warning_level=3',
6          'werror=true',
7          'cpp_std=c++23',
8          'buildtype=debugoptimized',
9        ]
10)
11
12if get_option('root_user_mgmt').enabled()
13    add_project_arguments('-DENABLE_ROOT_USER_MGMT', language:'cpp')
14endif
15
16conf_data = configuration_data()
17
18conf_data.set_quoted('USER_MANAGER_BUSNAME', 'xyz.openbmc_project.User.Manager',
19                      description : 'The DBus busname to own.')
20
21conf_data.set_quoted('DEFAULT_CRYPT_ALGO', '1',
22                      description : 'The default crypt algorithm if one not found in shadow.')
23
24conf_data.set('CLASS_VERSION', 1,
25                      description : 'Class version to register with Cereal.')
26
27conf_data.set_quoted('LDAP_CONFIG_FILE', '/etc/nslcd.conf',
28                      description : 'Path of LDAP configuration file.')
29
30conf_data.set_quoted('TLS_CACERT_PATH', '/etc/ssl/certs/authority',
31                      description : 'Path of LDAP server CA certificate.')
32
33conf_data.set_quoted('TLS_CERT_FILE', '/etc/nslcd/certs/cert.pem',
34                      description : 'Path of LDAP client certificate.')
35
36conf_data.set_quoted('LDAP_CONFIG_ROOT', '/xyz/openbmc_project/user/ldap',
37                      description : 'LDAP configuration root.')
38
39conf_data.set_quoted('LDAP_CONFIG_DBUS_OBJ_PATH', '/xyz/openbmc_project/user/ldap/config',
40                      description : 'D-Bus path of LDAP config object.')
41
42conf_data.set_quoted('LDAP_CONFIG_BUSNAME', 'xyz.openbmc_project.Ldap.Config',
43                      description : 'D-Bus busname of LDAP config service.')
44
45conf_data.set_quoted('LDAP_CONF_PERSIST_PATH', '/var/lib/phosphor-ldap-conf',
46                      description : 'path of directory having persisted LDAP configuration enabled property.')
47
48conf_data.set_quoted('SYSTEMD_BUSNAME', 'org.freedesktop.systemd1',
49                      description : 'systemd busname.')
50
51conf_data.set_quoted('SYSTEMD_PATH', '/org/freedesktop/systemd1',
52                      description :  'systemd path')
53
54conf_data.set_quoted('SYSTEMD_INTERFACE', 'org.freedesktop.systemd1.Manager',
55                      description : 'systemd interface.')
56
57conf_header = configure_file(output: 'config.h',
58    configuration: conf_data)
59
60phosphor_dbus_interfaces_dep = dependency('phosphor-dbus-interfaces')
61sdbusplus_dep = dependency('sdbusplus')
62phosphor_logging_dep = dependency('phosphor-logging')
63systemd_dep = dependency('systemd')
64
65cpp = meson.get_compiler('cpp')
66
67# Get Cereal dependency.
68cereal_dep = dependency('cereal', required: false)
69has_cereal = cpp.has_header_symbol(
70    'cereal/cereal.hpp',
71    'cereal::specialize',
72    dependencies: cereal_dep,
73    required: false)
74if not has_cereal
75    cereal_opts = import('cmake').subproject_options()
76    cereal_opts.add_cmake_defines({'BUILD_TESTS': 'OFF'})
77    cereal_proj = import('cmake').subproject(
78        'cereal',
79        options: cereal_opts,
80        required: false)
81    assert(cereal_proj.found(), 'cereal is required')
82    cereal_dep = cereal_proj.dependency('cereal')
83endif
84
85user_manager_src = [
86    'mainapp.cpp',
87    'user_mgr.cpp',
88    'users.cpp'
89]
90
91user_manager_deps = [
92     sdbusplus_dep,
93     phosphor_logging_dep,
94     phosphor_dbus_interfaces_dep
95]
96
97user_manager_lib = static_library(
98    'phosphor-user-manager',
99    [
100        'user_mgr.cpp',
101        'users.cpp',
102    ],
103    dependencies: user_manager_deps,
104)
105
106user_manager_dep = declare_dependency(
107    link_with: user_manager_lib,
108    dependencies: user_manager_deps
109)
110
111executable(
112    'phosphor-user-manager',
113    'mainapp.cpp',
114    dependencies: user_manager_dep,
115    link_args: ['-lcrypt' ],
116    cpp_args: ['-DBOOST_ALL_NO_LIB', '-DBOOST_SYSTEM_NO_DEPRECATED', '-DBOOST_ERROR_CODE_HEADER_ONLY'],
117    install: true,
118)
119
120
121systemd_system_unit_dir = systemd_dep.get_variable(
122    'systemdsystemunitdir'
123)
124
125install_data(
126    'phosphor-nslcd-cert-config.conf',
127    install_dir: get_option('datadir') / 'dbus-1' / 'system.d',
128)
129
130install_data(
131    'nslcd',
132    install_dir: get_option('datadir') / 'phosphor-certificate-manager',
133)
134
135# Figure out how to use install_symlink to install symlink to a file of another
136# recipe
137#install_symlink(
138#      'phosphor-certificate-manager@nslcd.service',
139#      install_dir: systemd_system_unit_dir / 'multi-user.target.wants',
140#      pointing_to: systemd_system_unit_dir / 'phosphor-certificate-manager@.service',
141#  )
142meson.add_install_script(
143    'sh', '-c',
144    'mkdir -p $(dirname $DESTDIR/@0@/@1@)'.format(systemd_system_unit_dir,
145        'multi-user.target.wants/phosphor-certificate-manager@nslcd.service'),
146)
147meson.add_install_script(
148    'sh', '-c',
149    'ln -s @0@ $DESTDIR/@1@/@2@'.format('../phosphor-certificate-manager@.service',
150        systemd_system_unit_dir,
151        'multi-user.target.wants/phosphor-certificate-manager@nslcd.service'),
152)
153
154subdir('phosphor-ldap-config')
155
156if get_option('tests').enabled()
157  subdir('test')
158endif
159