# Gather the Configuration data conf_data = configuration_data() feature_options = [ 'basic-auth', 'cookie-auth', 'experimental-http2', 'experimental-redfish-dbus-log-subscription', 'experimental-redfish-multi-computer-system', 'google-api', 'host-serial-socket', 'hypervisor-computer-system', 'ibm-management-console', 'insecure-disable-auth', 'insecure-disable-csrf', 'insecure-disable-ssl', 'insecure-enable-redfish-query', 'insecure-ignore-content-type', 'insecure-push-style-notification', 'kvm', 'meta-tls-common-name-parsing', 'mutual-tls-auth', 'redfish', 'redfish-aggregation', 'redfish-allow-deprecated-power-thermal', 'redfish-allow-simple-update', 'redfish-bmc-journal', 'redfish-cpu-log', 'redfish-dbus-log', 'redfish-dump-log', 'redfish-host-logger', 'redfish-new-powersubsystem-thermalsubsystem', 'redfish-oem-manager-fan-data', 'redfish-provisioning-feature', 'redfish-updateservice-use-dbus', 'redfish-use-3-digit-messageid', 'rest', 'session-auth', 'static-hosting', 'tests', 'vm-websocket', 'xtoken-auth', ] string_options = [ 'dns-resolver', 'mutual-tls-common-name-parsing-default', 'redfish-manager-uri-name', 'redfish-system-uri-name', ] int_options = ['http-body-limit', 'watchdog-timeout-seconds'] feature_options_string = '\n// Feature options\n' string_options_string = '\n// String options\n' int_options_string = '\n// Integer options\n' foreach feature_type, feature_list : { 'Feature': feature_options, 'Numeric': int_options, 'String': string_options, } summary_dict = {} foreach option_key : feature_list option_key_config = 'BMCWEB_' + option_key.to_upper() option_key_config = option_key_config.replace('-', '_') opt = get_option(option_key) if feature_type == 'Feature' opt = opt.allowed() feature_options_string += 'constexpr const bool @0@=@1@;\n'.format( option_key_config, opt.to_string(), ) endif if feature_type == 'Numeric' int_options_string += 'constexpr const int @0@=@1@;\n'.format( option_key_config, opt.to_string(), ) endif if feature_type == 'String' string_options_string += 'constexpr std::string_view @0@="@1@";\n'.format( option_key_config, opt, ) endif summary_dict += {option_key: opt} endforeach summary(summary_dict, section: feature_type + ' Options', bool_yn: true) endforeach # Logging level loglvlopt = get_option('bmcweb-logging') if get_option('buildtype').startswith('debug') and loglvlopt == 'disabled' # Override logging level as 'debug' if 'bmcweb-logging' is set as 'disabled' loglvlopt = 'debug' endif loglvlopt = loglvlopt.to_upper() string_options_string += 'constexpr std::string_view BMCWEB_LOGGING_LEVEL' + ' = "' + loglvlopt + '";\n' # NBD proxy is disabled due to lack of maintenance. See meson_options.txt feature_options_string += 'constexpr const bool BMCWEB_VM_NBDPROXY = false;\n' conf_data.set( 'BMCWEB_OPTIONS', string_options_string + int_options_string + feature_options_string, ) conf_h_dep = declare_dependency( include_directories: include_directories('.'), sources: configure_file( input: 'bmcweb_config.h.in', output: 'bmcweb_config.h', configuration: conf_data, ), ) # Configure and install systemd unit files https_port = get_option('https_port') if https_port > 0 configure_file( input: 'bmcweb.socket.in', output: 'bmcweb.socket', install_dir: systemd_system_unit_dir, install: true, configuration: configuration_data( { 'BMCWEB_PORT': https_port, 'HTTP_LEVEL_ALLOWED': 'https', 'HTTP_AUTH_LEVEL': 'auth', 'HTTP_BIND': '', }, ), ) endif ports = get_option('additional-ports') binds = get_option('additional-bind-to-device') auths = get_option('additional-auth') foreach index : range(ports.length()) port_number = ports[index] bind_to_device = '0.0.0.0' auth = 'auth' if index < binds.length() bind_to_device = binds[index] endif if index < auths.length() auth = auths[index] endif filename = 'bmcweb_' + port_number configure_file( input: 'bmcweb.socket.in', output: filename, install_dir: systemd_system_unit_dir, install: true, configuration: configuration_data( { 'BMCWEB_HTTPS_PORT': port_number, 'HTTP_LEVEL_ALLOWED': 'https', 'HTTP_BIND': bind_to_device, 'HTTP_AUTH_LEVEL': auth, }, ), ) endforeach configure_file( input: 'bmcweb.service.in', output: 'bmcweb.service', install_dir: systemd_system_unit_dir, install: true, configuration: configuration_data( { 'MESON_INSTALL_PREFIX': get_option('prefix'), 'WATCHDOG_TIMEOUT_SECONDS': get_option('watchdog-timeout-seconds'), }, ), ) # Copy pam-webserver to etc/pam.d install_data('pam-webserver', install_dir: '/etc/pam.d/', rename: 'webserver')