[Buildroot] [PATCH v2 2/2] boot/systemd-boot: new package

Yann E. MORIN yann.morin.1998 at free.fr
Wed Dec 26 08:51:29 UTC 2018


James, All,

On 2018-12-26 07:56 +0800, james.hilliard1 at gmail.com spake thusly:
> From: James Hilliard <james.hilliard1 at gmail.com>
> 
> systemd-boot is the integration of gummiboot into systemd, and gummiboot
> is no longer maintained [0]. However, it is still interesting to use it
> as a simple, stand-alone bootloader.
> 
> Since systemd-boot is really part of systemd, when systemd is enabled
> (as an init system), we rely on it to build the boot blobs, and
> systemd-boot (this package) is not available.
> 
> Now, when systemd is not enabled, systemd-boot (this package) will
> actually build the boot blobs, and only that. No userspace tool is
> built.
> 
> To avoid duplication, we just symlink the systemd patches as-is. We just
> need to add a specific patch, that just relaxes the dependency checks,
> since we're only interested in building the boot blobs.
> 
> [0] https://cgit.freedesktop.org/gummiboot/commit/?id=55df1539c9d330732e88bd196afee386db6e4a1d
> 
> Signed-off-by: James Hilliard <james.hilliard1 at gmail.com>
> [yann.morin.1998 at free.fr:
>   - drop the duality due to to interdependence with systemd
>   - share boot files with systemd
>   - add patch to allow building only systemd-boot
>   - specify _SOURCE to be sure to share wth systemd
>   - rename the .hash file
>   - add comment about syncing the version with systemd
> ]
> Signed-off-by: Yann E. MORIN <yann.morin.1998 at free.fr>
> 
> ---
> Changes v3 -> v4 (James):
>   - remove more dependencies checks

Why? That was absolutely not necessary.

Besides, since that patch is not upstreamable, we will have to maintain
and fix it every time we bump systemd, which will be a maintainenance
burden. If only the strictly needed changes were made, then it would be
easier to update.

>   - use custom build commands instead of ninja opts

Why did you not include the initial third patch to introduce NINJA_OPTS?
Even if that was not your change but mine, you could have carried it and
sent it; git is smart enough to carry proper authorship, if that were
your concern.

It does make sense to have the possibility to pass arbitrary options to
the ninja backend to build arbitrary targets, like we have for autotools,
cmake, golang. luarocks, perl, python, and waf. meson/ninja and rebar
are the only two for which it's currently not possible...

Also, you forgot to state that this series requires your previous patch
about the CPU famlilly fix to be applied first.

And so, this series should be a 5-patch series (accounting for my last
comment on the CPU-familly fix):

  1. your exe_needs_wrapper fix
  2. your cpu-familly fix
  3- my ninja-opts addition
  4- systemd-boot as a systemd option
  5- standalone systemd-boot

Then, you should provide a cover-letter that explains the overall
changes you're doing.

So, yes, all your changes are related after all, except that they 
were not correctly explained and documented, nor were they correctly
split.

I'll send a series with all the bits gatyhered in a single series, as I
suggested above.

Thank you very much for the initial patches, and for your fortitude in
this journey! :-)

Regards,
Yann E. MORIN.

> Changes v2 -> v3 (Yann):
>   - changes identified in the commit log
> 
> Changes v1 -> v2 (James):
>   - split off from systemd into its own package  (Yann)
> ---
>  boot/Config.in                                     |    1 +
>  boot/systemd-boot/0001-fix-getty-unit.patch        |    1 +
>  .../0002-install-don-t-use-ln-relative.patch       |    1 +
>  ...etect-whether-struct-statx-is-defined-in-.patch |    1 +
>  ...-linux-stat.h-check-with-other-checks-and.patch |    1 +
>  ...sure-we-have-enough-space-for-the-DHCP6-o.patch |    1 +
>  ...eson.build-fix-detection-of-Werror-shadow.patch |    1 +
>  ...lax-depenencies-to-be-able-to-just-build-.patch | 1496 ++++++++++++++++++++
>  boot/systemd-boot/Config.in                        |   32 +
>  boot/systemd-boot/boot-files                       |    1 +
>  boot/systemd-boot/systemd-boot.hash                |    1 +
>  boot/systemd-boot/systemd-boot.mk                  |  104 ++
>  package/systemd/Config.in                          |    2 +-
>  package/systemd/systemd.mk                         |    1 +
>  14 files changed, 1643 insertions(+), 1 deletion(-)
>  create mode 120000 boot/systemd-boot/0001-fix-getty-unit.patch
>  create mode 120000 boot/systemd-boot/0002-install-don-t-use-ln-relative.patch
>  create mode 120000 boot/systemd-boot/0003-build-sys-Detect-whether-struct-statx-is-defined-in-.patch
>  create mode 120000 boot/systemd-boot/0004-meson-unify-linux-stat.h-check-with-other-checks-and.patch
>  create mode 120000 boot/systemd-boot/0005-dhcp6-make-sure-we-have-enough-space-for-the-DHCP6-o.patch
>  create mode 120000 boot/systemd-boot/0006-meson.build-fix-detection-of-Werror-shadow.patch
>  create mode 100644 boot/systemd-boot/1000-buildsys-relax-depenencies-to-be-able-to-just-build-.patch
>  create mode 100644 boot/systemd-boot/Config.in
>  create mode 120000 boot/systemd-boot/boot-files
>  create mode 120000 boot/systemd-boot/systemd-boot.hash
>  create mode 100644 boot/systemd-boot/systemd-boot.mk
> 
> diff --git a/boot/Config.in b/boot/Config.in
> index 8e0c8e5..5b7f606 100644
> --- a/boot/Config.in
> +++ b/boot/Config.in
> @@ -16,6 +16,7 @@ source "boot/mxs-bootlets/Config.in"
>  source "boot/riscv-pk/Config.in"
>  source "boot/s500-bootloader/Config.in"
>  source "boot/syslinux/Config.in"
> +source "boot/systemd-boot/Config.in"
>  source "boot/ts4800-mbrboot/Config.in"
>  source "boot/uboot/Config.in"
>  source "boot/vexpress-firmware/Config.in"
> diff --git a/boot/systemd-boot/0001-fix-getty-unit.patch b/boot/systemd-boot/0001-fix-getty-unit.patch
> new file mode 120000
> index 0000000..ffb5f53
> --- /dev/null
> +++ b/boot/systemd-boot/0001-fix-getty-unit.patch
> @@ -0,0 +1 @@
> +../../package/systemd/0001-fix-getty-unit.patch
> \ No newline at end of file
> diff --git a/boot/systemd-boot/0002-install-don-t-use-ln-relative.patch b/boot/systemd-boot/0002-install-don-t-use-ln-relative.patch
> new file mode 120000
> index 0000000..cfe0291
> --- /dev/null
> +++ b/boot/systemd-boot/0002-install-don-t-use-ln-relative.patch
> @@ -0,0 +1 @@
> +../../package/systemd/0002-install-don-t-use-ln-relative.patch
> \ No newline at end of file
> diff --git a/boot/systemd-boot/0003-build-sys-Detect-whether-struct-statx-is-defined-in-.patch b/boot/systemd-boot/0003-build-sys-Detect-whether-struct-statx-is-defined-in-.patch
> new file mode 120000
> index 0000000..ded8b4f
> --- /dev/null
> +++ b/boot/systemd-boot/0003-build-sys-Detect-whether-struct-statx-is-defined-in-.patch
> @@ -0,0 +1 @@
> +../../package/systemd/0003-build-sys-Detect-whether-struct-statx-is-defined-in-.patch
> \ No newline at end of file
> diff --git a/boot/systemd-boot/0004-meson-unify-linux-stat.h-check-with-other-checks-and.patch b/boot/systemd-boot/0004-meson-unify-linux-stat.h-check-with-other-checks-and.patch
> new file mode 120000
> index 0000000..32bc435
> --- /dev/null
> +++ b/boot/systemd-boot/0004-meson-unify-linux-stat.h-check-with-other-checks-and.patch
> @@ -0,0 +1 @@
> +../../package/systemd/0004-meson-unify-linux-stat.h-check-with-other-checks-and.patch
> \ No newline at end of file
> diff --git a/boot/systemd-boot/0005-dhcp6-make-sure-we-have-enough-space-for-the-DHCP6-o.patch b/boot/systemd-boot/0005-dhcp6-make-sure-we-have-enough-space-for-the-DHCP6-o.patch
> new file mode 120000
> index 0000000..003d6a7
> --- /dev/null
> +++ b/boot/systemd-boot/0005-dhcp6-make-sure-we-have-enough-space-for-the-DHCP6-o.patch
> @@ -0,0 +1 @@
> +../../package/systemd/0005-dhcp6-make-sure-we-have-enough-space-for-the-DHCP6-o.patch
> \ No newline at end of file
> diff --git a/boot/systemd-boot/0006-meson.build-fix-detection-of-Werror-shadow.patch b/boot/systemd-boot/0006-meson.build-fix-detection-of-Werror-shadow.patch
> new file mode 120000
> index 0000000..0e0a5cf
> --- /dev/null
> +++ b/boot/systemd-boot/0006-meson.build-fix-detection-of-Werror-shadow.patch
> @@ -0,0 +1 @@
> +../../package/systemd/0006-meson.build-fix-detection-of-Werror-shadow.patch
> \ No newline at end of file
> diff --git a/boot/systemd-boot/1000-buildsys-relax-depenencies-to-be-able-to-just-build-.patch b/boot/systemd-boot/1000-buildsys-relax-depenencies-to-be-able-to-just-build-.patch
> new file mode 100644
> index 0000000..2136d88
> --- /dev/null
> +++ b/boot/systemd-boot/1000-buildsys-relax-depenencies-to-be-able-to-just-build-.patch
> @@ -0,0 +1,1496 @@
> +From 71ee1948e3dd1c43f4c084750b854bbbbf58e840 Mon Sep 17 00:00:00 2001
> +From: "Yann E. MORIN" <yann.morin.1998 at free.fr>
> +Date: Tue, 25 Dec 2018 10:36:32 +0100
> +Subject: [PATCH] buildsys: relax depenencies to be able to just build
> + systemd-boot
> +
> +Signed-off-by: "Yann E. MORIN" <yann.morin.1998 at free.fr>
> +---
> + meson.build | 1423 +----------------------------------------------------------
> + 1 file changed, 4 insertions(+), 1419 deletions(-)
> +
> +diff --git a/meson.build b/meson.build
> +index b96ae38..347d3bd 100644
> +--- a/meson.build
> ++++ b/meson.build
> +@@ -577,7 +577,7 @@ endif
> + 
> + ############################################################
> + 
> +-gperf = find_program('gperf')
> ++gperf = find_program('gperf', required : false)
> + 
> + gperf_test_format = '''
> + #include <string.h>
> +@@ -604,7 +604,7 @@ conf.set('GPERF_LEN_TYPE', gperf_len_type,
> + ############################################################
> + 
> + if not cc.has_header('sys/capability.h')
> +-        error('POSIX caps headers not found')
> ++        warning('POSIX caps headers not found')
> + endif
> + foreach header : ['crypt.h',
> +                   'linux/btrfs.h',
> +@@ -802,10 +802,10 @@ libcrypt = cc.find_library('crypt')
> + libcap = dependency('libcap', required : false)
> + if not libcap.found()
> +         # Compat with Ubuntu 14.04 which ships libcap w/o .pc file
> +-        libcap = cc.find_library('cap')
> ++        libcap = cc.find_library('cap', required : false)
> + endif
> + 
> +-libmount = dependency('mount',
> ++libmount = dependency('mount', required : false,
> +                       version : fuzzer_build ? '>= 0' : '>= 2.30')
> + 
> + want_seccomp = get_option('seccomp')
> +@@ -1313,66 +1313,8 @@ includes = include_directories('src/basic',
> + 
> + add_project_arguments('-include', 'config.h', language : 'c')
> + 
> +-subdir('po')
> + subdir('catalog')
> + subdir('src/systemd')
> +-subdir('src/basic')
> +-subdir('src/libsystemd')
> +-subdir('src/libsystemd-network')
> +-subdir('src/journal')
> +-subdir('src/login')
> +-
> +-libjournal_core = static_library(
> +-        'journal-core',
> +-        libjournal_core_sources,
> +-        journald_gperf_c,
> +-        include_directories : includes,
> +-        install : false)
> +-
> +-libsystemd_sym_path = '@0@/@1@'.format(meson.current_source_dir(), libsystemd_sym)
> +-libsystemd = shared_library(
> +-        'systemd',
> +-        'src/systemd/sd-id128.h', # pick a header file at random to work around old meson bug
> +-        version : libsystemd_version,
> +-        include_directories : includes,
> +-        link_args : ['-shared',
> +-                     '-Wl,--version-script=' + libsystemd_sym_path],
> +-        link_with : [libbasic,
> +-                     libbasic_gcrypt],
> +-        link_whole : [libsystemd_static,
> +-                      libjournal_client],
> +-        dependencies : [threads,
> +-                        librt,
> +-                        libxz,
> +-                        liblz4],
> +-        link_depends : libsystemd_sym,
> +-        install : true,
> +-        install_dir : rootlibdir)
> +-
> +-static_libsystemd = get_option('static-libsystemd')
> +-static_libsystemd_pic = static_libsystemd == 'true' or static_libsystemd == 'pic'
> +-
> +-install_libsystemd_static = static_library(
> +-        'systemd',
> +-        libsystemd_sources,
> +-        journal_client_sources,
> +-        basic_sources,
> +-        basic_gcrypt_sources,
> +-        include_directories : includes,
> +-        build_by_default : static_libsystemd != 'false',
> +-        install : static_libsystemd != 'false',
> +-        install_dir : rootlibdir,
> +-        pic : static_libsystemd == 'true' or static_libsystemd == 'pic',
> +-        dependencies : [threads,
> +-                        librt,
> +-                        libxz,
> +-                        liblz4,
> +-                        libcap,
> +-                        libblkid,
> +-                        libmount,
> +-                        libselinux,
> +-                        libgcrypt],
> +-        c_args : libsystemd_c_args + (static_libsystemd_pic ? [] : ['-fno-PIC']))
> + 
> + ############################################################
> + 
> +@@ -1380,1305 +1322,8 @@ install_libsystemd_static = static_library(
> + # usually, but not always, installed in /bin.
> + public_programs = []
> + 
> +-subdir('src/libudev')
> +-subdir('src/shared')
> +-subdir('src/core')
> +-subdir('src/udev')
> +-subdir('src/network')
> +-
> +-subdir('src/analyze')
> +-subdir('src/journal-remote')
> +-subdir('src/coredump')
> +-subdir('src/hostname')
> +-subdir('src/import')
> +-subdir('src/kernel-install')
> +-subdir('src/locale')
> +-subdir('src/machine')
> +-subdir('src/portable')
> +-subdir('src/nspawn')
> +-subdir('src/resolve')
> +-subdir('src/timedate')
> +-subdir('src/timesync')
> +-subdir('src/vconsole')
> + subdir('src/boot/efi')
> + 
> +-subdir('src/test')
> +-subdir('src/fuzz')
> +-subdir('rules')
> +-subdir('test')
> +-
> +-############################################################
> +-
> +-# only static linking apart from libdl, to make sure that the
> +-# module is linked to all libraries that it uses.
> +-test_dlopen = executable(
> +-        'test-dlopen',
> +-        test_dlopen_c,
> +-        include_directories : includes,
> +-        link_with : [libbasic],
> +-        dependencies : [libdl])
> +-
> +-foreach tuple : [['myhostname', 'ENABLE_MYHOSTNAME'],
> +-                 ['systemd',    'ENABLE_NSS_SYSTEMD'],
> +-                 ['mymachines', 'ENABLE_MACHINED'],
> +-                 ['resolve',    'ENABLE_RESOLVE']]
> +-
> +-        condition = tuple[1] == '' or conf.get(tuple[1]) == 1
> +-        if condition
> +-                module = tuple[0]
> +-
> +-                sym = 'src/nss- at 0@/nss- at 0@.sym'.format(module)
> +-                version_script_arg = join_paths(meson.current_source_dir(), sym)
> +-
> +-                nss = shared_library(
> +-                        'nss_' + module,
> +-                        'src/nss- at 0@/nss- at 0@.c'.format(module),
> +-                        version : '2',
> +-                        include_directories : includes,
> +-                        # Note that we link NSS modules with '-z nodelete' so that mempools never get orphaned
> +-                        link_args : ['-Wl,-z,nodelete',
> +-                                     '-shared',
> +-                                     '-Wl,--version-script=' + version_script_arg,
> +-                                     '-Wl,--undefined'],
> +-                        link_with : [libsystemd_static,
> +-                                     libbasic],
> +-                        dependencies : [threads,
> +-                                        librt],
> +-                        link_depends : sym,
> +-                        install : true,
> +-                        install_dir : rootlibdir)
> +-
> +-                # We cannot use shared_module because it does not support version suffix.
> +-                # Unfortunately shared_library insists on creating the symlink…
> +-                meson.add_install_script('sh', '-c',
> +-                                         'rm $DESTDIR at 0@/libnss_ at 1@.so'
> +-                                         .format(rootlibdir, module))
> +-
> +-                test('dlopen-nss_' + module,
> +-                     test_dlopen,
> +-                     args : [nss.full_path()]) # path to dlopen must include a slash
> +-        endif
> +-endforeach
> +-
> +-############################################################
> +-
> +-executable('systemd',
> +-           systemd_sources,
> +-           include_directories : includes,
> +-           link_with : [libcore,
> +-                        libshared],
> +-           dependencies : [threads,
> +-                           librt,
> +-                           libseccomp,
> +-                           libselinux,
> +-                           libmount,
> +-                           libblkid],
> +-           install_rpath : rootlibexecdir,
> +-           install : true,
> +-           install_dir : rootlibexecdir)
> +-
> +-meson.add_install_script(meson_make_symlink,
> +-                         join_paths(rootlibexecdir, 'systemd'),
> +-                         join_paths(rootsbindir, 'init'))
> +-
> +-exe = executable('systemd-analyze',
> +-                 systemd_analyze_sources,
> +-                 include_directories : includes,
> +-                 link_with : [libcore,
> +-                              libshared],
> +-                 dependencies : [threads,
> +-                                 librt,
> +-                                 libseccomp,
> +-                                 libselinux,
> +-                                 libmount,
> +-                                 libblkid],
> +-                 install_rpath : rootlibexecdir,
> +-                 install : true)
> +-public_programs += [exe]
> +-
> +-executable('systemd-journald',
> +-           systemd_journald_sources,
> +-           include_directories : includes,
> +-           link_with : [libjournal_core,
> +-                        libshared],
> +-           dependencies : [threads,
> +-                           libxz,
> +-                           liblz4,
> +-                           libselinux],
> +-           install_rpath : rootlibexecdir,
> +-           install : true,
> +-           install_dir : rootlibexecdir)
> +-
> +-exe = executable('systemd-cat',
> +-                 systemd_cat_sources,
> +-                 include_directories : includes,
> +-                 link_with : [libjournal_core,
> +-                              libshared],
> +-                 dependencies : [threads],
> +-                 install_rpath : rootlibexecdir,
> +-                 install : true)
> +-public_programs += [exe]
> +-
> +-exe = executable('journalctl',
> +-                 journalctl_sources,
> +-                 include_directories : includes,
> +-                 link_with : [libshared],
> +-                 dependencies : [threads,
> +-                                 libqrencode,
> +-                                 libxz,
> +-                                 liblz4,
> +-                                 libpcre2],
> +-                 install_rpath : rootlibexecdir,
> +-                 install : true,
> +-                 install_dir : rootbindir)
> +-public_programs += [exe]
> +-
> +-executable('systemd-getty-generator',
> +-           'src/getty-generator/getty-generator.c',
> +-           include_directories : includes,
> +-           link_with : [libshared],
> +-           install_rpath : rootlibexecdir,
> +-           install : true,
> +-           install_dir : systemgeneratordir)
> +-
> +-executable('systemd-debug-generator',
> +-           'src/debug-generator/debug-generator.c',
> +-           include_directories : includes,
> +-           link_with : [libshared],
> +-           install_rpath : rootlibexecdir,
> +-           install : true,
> +-           install_dir : systemgeneratordir)
> +-
> +-executable('systemd-fstab-generator',
> +-           'src/fstab-generator/fstab-generator.c',
> +-           'src/core/mount-setup.c',
> +-           include_directories : includes,
> +-           link_with : [libshared],
> +-           install_rpath : rootlibexecdir,
> +-           install : true,
> +-           install_dir : systemgeneratordir)
> +-
> +-if conf.get('ENABLE_ENVIRONMENT_D') == 1
> +-        executable('30-systemd-environment-d-generator',
> +-                   'src/environment-d-generator/environment-d-generator.c',
> +-                   include_directories : includes,
> +-                   link_with : [libshared],
> +-                   install_rpath : rootlibexecdir,
> +-                   install : true,
> +-                   install_dir : userenvgeneratordir)
> +-
> +-        meson.add_install_script(meson_make_symlink,
> +-                                 join_paths(sysconfdir, 'environment'),
> +-                                 join_paths(environmentdir, '99-environment.conf'))
> +-endif
> +-
> +-if conf.get('ENABLE_HIBERNATE') == 1
> +-        executable('systemd-hibernate-resume-generator',
> +-                   'src/hibernate-resume/hibernate-resume-generator.c',
> +-                   include_directories : includes,
> +-                   link_with : [libshared],
> +-                   install_rpath : rootlibexecdir,
> +-                   install : true,
> +-                   install_dir : systemgeneratordir)
> +-
> +-        executable('systemd-hibernate-resume',
> +-                   'src/hibernate-resume/hibernate-resume.c',
> +-                   include_directories : includes,
> +-                   link_with : [libshared],
> +-                   install_rpath : rootlibexecdir,
> +-                   install : true,
> +-                   install_dir : rootlibexecdir)
> +-endif
> +-
> +-if conf.get('HAVE_BLKID') == 1
> +-        executable('systemd-gpt-auto-generator',
> +-                   'src/gpt-auto-generator/gpt-auto-generator.c',
> +-                   'src/basic/blkid-util.h',
> +-                   include_directories : includes,
> +-                   link_with : [libshared],
> +-                   dependencies : libblkid,
> +-                   install_rpath : rootlibexecdir,
> +-                   install : true,
> +-                   install_dir : systemgeneratordir)
> +-
> +-        exe = executable('systemd-dissect',
> +-                         'src/dissect/dissect.c',
> +-                         include_directories : includes,
> +-                         link_with : [libshared],
> +-                         install_rpath : rootlibexecdir,
> +-                         install : true,
> +-                         install_dir : rootlibexecdir)
> +-        public_programs += [exe]
> +-endif
> +-
> +-if conf.get('ENABLE_RESOLVE') == 1
> +-        executable('systemd-resolved',
> +-                   systemd_resolved_sources,
> +-                   include_directories : includes,
> +-                   link_with : [libshared,
> +-                                libbasic_gcrypt,
> +-                                libsystemd_resolve_core],
> +-                   dependencies : systemd_resolved_dependencies,
> +-                   install_rpath : rootlibexecdir,
> +-                   install : true,
> +-                   install_dir : rootlibexecdir)
> +-
> +-        exe = executable('resolvectl',
> +-                         resolvectl_sources,
> +-                         include_directories : includes,
> +-                         link_with : [libshared,
> +-                                      libbasic_gcrypt,
> +-                                      libsystemd_resolve_core],
> +-                         dependencies : [threads,
> +-                                         libgpg_error,
> +-                                         libm,
> +-                                         libidn],
> +-                         install_rpath : rootlibexecdir,
> +-                         install : true)
> +-        public_programs += [exe]
> +-
> +-        meson.add_install_script(meson_make_symlink,
> +-                         join_paths(bindir, 'resolvectl'),
> +-                         join_paths(rootsbindir, 'resolvconf'))
> +-
> +-        meson.add_install_script(meson_make_symlink,
> +-                         join_paths(bindir, 'resolvectl'),
> +-                         join_paths(bindir, 'systemd-resolve'))
> +-endif
> +-
> +-if conf.get('ENABLE_LOGIND') == 1
> +-        executable('systemd-logind',
> +-                   systemd_logind_sources,
> +-                   include_directories : includes,
> +-                   link_with : [liblogind_core,
> +-                                libshared],
> +-                   dependencies : [threads,
> +-                                   libacl],
> +-                   install_rpath : rootlibexecdir,
> +-                   install : true,
> +-                   install_dir : rootlibexecdir)
> +-
> +-        exe = executable('loginctl',
> +-                         loginctl_sources,
> +-                         include_directories : includes,
> +-                         link_with : [libshared],
> +-                         dependencies : [threads,
> +-                                         liblz4,
> +-                                         libxz],
> +-                         install_rpath : rootlibexecdir,
> +-                         install : true,
> +-                         install_dir : rootbindir)
> +-        public_programs += [exe]
> +-
> +-        exe = executable('systemd-inhibit',
> +-                         'src/login/inhibit.c',
> +-                         include_directories : includes,
> +-                         link_with : [libshared],
> +-                         install_rpath : rootlibexecdir,
> +-                         install : true,
> +-                         install_dir : rootbindir)
> +-        public_programs += [exe]
> +-
> +-        if conf.get('HAVE_PAM') == 1
> +-                version_script_arg = join_paths(meson.current_source_dir(), pam_systemd_sym)
> +-                pam_systemd = shared_library(
> +-                        'pam_systemd',
> +-                        pam_systemd_c,
> +-                        name_prefix : '',
> +-                        include_directories : includes,
> +-                        link_args : ['-shared',
> +-                                     '-Wl,--version-script=' + version_script_arg],
> +-                        link_with : [libsystemd_static,
> +-                                     libshared_static],
> +-                        dependencies : [threads,
> +-                                        libpam,
> +-                                        libpam_misc],
> +-                        link_depends : pam_systemd_sym,
> +-                        install : true,
> +-                        install_dir : pamlibdir)
> +-
> +-                test('dlopen-pam_systemd',
> +-                     test_dlopen,
> +-                     args : [pam_systemd.full_path()]) # path to dlopen must include a slash
> +-        endif
> +-endif
> +-
> +-executable('systemd-user-runtime-dir',
> +-           user_runtime_dir_sources,
> +-           include_directories : includes,
> +-           link_with : [libshared, liblogind_core],
> +-           install_rpath : rootlibexecdir,
> +-           install : true,
> +-           install_dir : rootlibexecdir)
> +-
> +-if conf.get('HAVE_PAM') == 1
> +-        executable('systemd-user-sessions',
> +-                   'src/user-sessions/user-sessions.c',
> +-                   include_directories : includes,
> +-                   link_with : [libshared],
> +-                   install_rpath : rootlibexecdir,
> +-                   install : true,
> +-                   install_dir : rootlibexecdir)
> +-endif
> +-
> +-if conf.get('ENABLE_EFI') == 1 and conf.get('HAVE_BLKID') == 1
> +-        exe = executable('bootctl',
> +-                         'src/boot/bootctl.c',
> +-                         include_directories : includes,
> +-                         link_with : [libshared],
> +-                         dependencies : [libblkid],
> +-                         install_rpath : rootlibexecdir,
> +-                         install : true)
> +-        public_programs += [exe]
> +-endif
> +-
> +-exe = executable('systemd-socket-activate', 'src/activate/activate.c',
> +-                 include_directories : includes,
> +-                 link_with : [libshared],
> +-                 dependencies : [threads],
> +-                 install_rpath : rootlibexecdir,
> +-                 install : true)
> +-public_programs += [exe]
> +-
> +-
> +-if get_option('link-systemctl-shared')
> +-        systemctl_link_with = [libshared]
> +-else
> +-        systemctl_link_with = [libsystemd_static,
> +-                               libshared_static,
> +-                               libjournal_client,
> +-                               libbasic_gcrypt]
> +-endif
> +-
> +-exe = executable('systemctl', 'src/systemctl/systemctl.c',
> +-                 include_directories : includes,
> +-                 link_with : systemctl_link_with,
> +-                 dependencies : [threads,
> +-                                 libcap,
> +-                                 libselinux,
> +-                                 libxz,
> +-                                 liblz4],
> +-                 install_rpath : rootlibexecdir,
> +-                 install : true,
> +-                 install_dir : rootbindir)
> +-public_programs += [exe]
> +-
> +-if conf.get('ENABLE_PORTABLED') == 1
> +-        executable('systemd-portabled',
> +-                   systemd_portabled_sources,
> +-                   include_directories : includes,
> +-                   link_with : [libshared],
> +-                   dependencies : [threads],
> +-                   install_rpath : rootlibexecdir,
> +-                   install : true,
> +-                   install_dir : rootlibexecdir)
> +-
> +-        exe = executable('portablectl', 'src/portable/portablectl.c',
> +-                         include_directories : includes,
> +-                         link_with : [libshared],
> +-                         dependencies : [threads],
> +-                         install_rpath : rootlibexecdir,
> +-                         install : true,
> +-                         install_dir : rootlibexecdir)
> +-        public_programs += [exe]
> +-endif
> +-
> +-foreach alias : ['halt', 'poweroff', 'reboot', 'runlevel', 'shutdown', 'telinit']
> +-        meson.add_install_script(meson_make_symlink,
> +-                                 join_paths(rootbindir, 'systemctl'),
> +-                                 join_paths(rootsbindir, alias))
> +-endforeach
> +-
> +-if conf.get('ENABLE_BACKLIGHT') == 1
> +-        executable('systemd-backlight',
> +-                   'src/backlight/backlight.c',
> +-                   include_directories : includes,
> +-                   link_with : [libshared],
> +-                   install_rpath : rootlibexecdir,
> +-                   install : true,
> +-                   install_dir : rootlibexecdir)
> +-endif
> +-
> +-if conf.get('ENABLE_RFKILL') == 1
> +-        executable('systemd-rfkill',
> +-                   'src/rfkill/rfkill.c',
> +-                   include_directories : includes,
> +-                   link_with : [libshared],
> +-                   install_rpath : rootlibexecdir,
> +-                   install : true,
> +-                   install_dir : rootlibexecdir)
> +-endif
> +-
> +-executable('systemd-system-update-generator',
> +-           'src/system-update-generator/system-update-generator.c',
> +-           include_directories : includes,
> +-           link_with : [libshared],
> +-           install_rpath : rootlibexecdir,
> +-           install : true,
> +-           install_dir : systemgeneratordir)
> +-
> +-if conf.get('HAVE_LIBCRYPTSETUP') == 1
> +-        executable('systemd-cryptsetup',
> +-                   'src/cryptsetup/cryptsetup.c',
> +-                   include_directories : includes,
> +-                   link_with : [libshared],
> +-                   dependencies : [libcryptsetup],
> +-                   install_rpath : rootlibexecdir,
> +-                   install : true,
> +-                   install_dir : rootlibexecdir)
> +-
> +-        executable('systemd-cryptsetup-generator',
> +-                   'src/cryptsetup/cryptsetup-generator.c',
> +-                   include_directories : includes,
> +-                   link_with : [libshared],
> +-                   dependencies : [libcryptsetup],
> +-                   install_rpath : rootlibexecdir,
> +-                   install : true,
> +-                   install_dir : systemgeneratordir)
> +-
> +-        executable('systemd-veritysetup',
> +-                   'src/veritysetup/veritysetup.c',
> +-                   include_directories : includes,
> +-                   link_with : [libshared],
> +-                   dependencies : [libcryptsetup],
> +-                   install_rpath : rootlibexecdir,
> +-                   install : true,
> +-                   install_dir : rootlibexecdir)
> +-
> +-        executable('systemd-veritysetup-generator',
> +-                   'src/veritysetup/veritysetup-generator.c',
> +-                   include_directories : includes,
> +-                   link_with : [libshared],
> +-                   dependencies : [libcryptsetup],
> +-                   install_rpath : rootlibexecdir,
> +-                   install : true,
> +-                   install_dir : systemgeneratordir)
> +-endif
> +-
> +-if conf.get('HAVE_SYSV_COMPAT') == 1
> +-        executable('systemd-sysv-generator',
> +-                   'src/sysv-generator/sysv-generator.c',
> +-                   include_directories : includes,
> +-                   link_with : [libshared],
> +-                   install_rpath : rootlibexecdir,
> +-                   install : true,
> +-                   install_dir : systemgeneratordir)
> +-
> +-        executable('systemd-rc-local-generator',
> +-                   'src/rc-local-generator/rc-local-generator.c',
> +-                   include_directories : includes,
> +-                   link_with : [libshared],
> +-                   install_rpath : rootlibexecdir,
> +-                   install : true,
> +-                   install_dir : systemgeneratordir)
> +-endif
> +-
> +-if conf.get('ENABLE_HOSTNAMED') == 1
> +-        executable('systemd-hostnamed',
> +-                   'src/hostname/hostnamed.c',
> +-                   include_directories : includes,
> +-                   link_with : [libshared],
> +-                   install_rpath : rootlibexecdir,
> +-                   install : true,
> +-                   install_dir : rootlibexecdir)
> +-
> +-        exe = executable('hostnamectl',
> +-                         'src/hostname/hostnamectl.c',
> +-                         include_directories : includes,
> +-                         link_with : [libshared],
> +-                         install_rpath : rootlibexecdir,
> +-                         install : true)
> +-        public_programs += [exe]
> +-endif
> +-
> +-if conf.get('ENABLE_LOCALED') == 1
> +-        if conf.get('HAVE_XKBCOMMON') == 1
> +-                # logind will load libxkbcommon.so dynamically on its own
> +-                deps = [libdl]
> +-        else
> +-                deps = []
> +-        endif
> +-
> +-        executable('systemd-localed',
> +-                   systemd_localed_sources,
> +-                   include_directories : includes,
> +-                   link_with : [libshared],
> +-                   dependencies : deps,
> +-                   install_rpath : rootlibexecdir,
> +-                   install : true,
> +-                   install_dir : rootlibexecdir)
> +-
> +-        exe = executable('localectl',
> +-                         localectl_sources,
> +-                         include_directories : includes,
> +-                         link_with : [libshared],
> +-                         install_rpath : rootlibexecdir,
> +-                         install : true)
> +-        public_programs += [exe]
> +-endif
> +-
> +-if conf.get('ENABLE_TIMEDATED') == 1
> +-        executable('systemd-timedated',
> +-                   'src/timedate/timedated.c',
> +-                   include_directories : includes,
> +-                   link_with : [libshared],
> +-                   install_rpath : rootlibexecdir,
> +-                   install : true,
> +-                   install_dir : rootlibexecdir)
> +-endif
> +-
> +-if conf.get('ENABLE_TIMEDATECTL') == 1
> +-        exe = executable('timedatectl',
> +-                         'src/timedate/timedatectl.c',
> +-                         include_directories : includes,
> +-                         install_rpath : rootlibexecdir,
> +-                         link_with : [libshared],
> +-                         dependencies : [libm],
> +-                         install : true)
> +-        public_programs += [exe]
> +-endif
> +-
> +-if conf.get('ENABLE_TIMESYNCD') == 1
> +-        executable('systemd-timesyncd',
> +-                   systemd_timesyncd_sources,
> +-                   include_directories : includes,
> +-                   link_with : [libshared],
> +-                   dependencies : [threads,
> +-                                   libm],
> +-                   install_rpath : rootlibexecdir,
> +-                   install : true,
> +-                   install_dir : rootlibexecdir)
> +-
> +-        executable('systemd-time-wait-sync',
> +-                   'src/time-wait-sync/time-wait-sync.c',
> +-                   include_directories : includes,
> +-                   link_with : [libshared],
> +-                   install_rpath : rootlibexecdir,
> +-                   install : true,
> +-                   install_dir : rootlibexecdir)
> +-endif
> +-
> +-if conf.get('ENABLE_MACHINED') == 1
> +-        executable('systemd-machined',
> +-                   systemd_machined_sources,
> +-                   include_directories : includes,
> +-                   link_with : [libmachine_core,
> +-                                libshared],
> +-                   install_rpath : rootlibexecdir,
> +-                   install : true,
> +-                   install_dir : rootlibexecdir)
> +-
> +-        exe = executable('machinectl',
> +-                         'src/machine/machinectl.c',
> +-                         include_directories : includes,
> +-                         link_with : [libshared],
> +-                         dependencies : [threads,
> +-                                         libxz,
> +-                                         liblz4],
> +-                         install_rpath : rootlibexecdir,
> +-                         install : true,
> +-                         install_dir : rootbindir)
> +-        public_programs += [exe]
> +-endif
> +-
> +-if conf.get('ENABLE_IMPORTD') == 1
> +-        executable('systemd-importd',
> +-                   systemd_importd_sources,
> +-                   include_directories : includes,
> +-                   link_with : [libshared],
> +-                   dependencies : [threads],
> +-                   install_rpath : rootlibexecdir,
> +-                   install : true,
> +-                   install_dir : rootlibexecdir)
> +-
> +-        systemd_pull = executable('systemd-pull',
> +-                                  systemd_pull_sources,
> +-                                  include_directories : includes,
> +-                                  link_with : [libshared],
> +-                                  dependencies : [libcurl,
> +-                                                  libz,
> +-                                                  libbzip2,
> +-                                                  libxz,
> +-                                                  libgcrypt],
> +-                                  install_rpath : rootlibexecdir,
> +-                                  install : true,
> +-                                  install_dir : rootlibexecdir)
> +-
> +-        systemd_import = executable('systemd-import',
> +-                                    systemd_import_sources,
> +-                                    include_directories : includes,
> +-                                    link_with : [libshared],
> +-                                    dependencies : [libcurl,
> +-                                                    libz,
> +-                                                    libbzip2,
> +-                                                    libxz],
> +-                                    install_rpath : rootlibexecdir,
> +-                                    install : true,
> +-                                    install_dir : rootlibexecdir)
> +-
> +-        systemd_export = executable('systemd-export',
> +-                                    systemd_export_sources,
> +-                                    include_directories : includes,
> +-                                    link_with : [libshared],
> +-                                    dependencies : [libcurl,
> +-                                                    libz,
> +-                                                    libbzip2,
> +-                                                    libxz],
> +-                                    install_rpath : rootlibexecdir,
> +-                                    install : true,
> +-                                    install_dir : rootlibexecdir)
> +-        public_programs += [systemd_pull, systemd_import, systemd_export]
> +-endif
> +-
> +-if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_LIBCURL') == 1
> +-        exe = executable('systemd-journal-upload',
> +-                         systemd_journal_upload_sources,
> +-                         include_directories : includes,
> +-                         link_with : [libshared],
> +-                         dependencies : [threads,
> +-                                         libcurl,
> +-                                         libgnutls,
> +-                                         libxz,
> +-                                         liblz4],
> +-                         install_rpath : rootlibexecdir,
> +-                         install : true,
> +-                         install_dir : rootlibexecdir)
> +-        public_programs += [exe]
> +-endif
> +-
> +-if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_MICROHTTPD') == 1
> +-        s_j_remote = executable('systemd-journal-remote',
> +-                                systemd_journal_remote_sources,
> +-                                include_directories : includes,
> +-                                link_with : [libshared,
> +-                                             libsystemd_journal_remote],
> +-                                dependencies : [threads,
> +-                                                libmicrohttpd,
> +-                                                libgnutls,
> +-                                                libxz,
> +-                                                liblz4],
> +-                                install_rpath : rootlibexecdir,
> +-                                install : true,
> +-                                install_dir : rootlibexecdir)
> +-
> +-        s_j_gatewayd = executable('systemd-journal-gatewayd',
> +-                                  systemd_journal_gatewayd_sources,
> +-                                  include_directories : includes,
> +-                                  link_with : [libshared],
> +-                                  dependencies : [threads,
> +-                                                  libmicrohttpd,
> +-                                                  libgnutls,
> +-                                                  libxz,
> +-                                                  liblz4],
> +-                                  install_rpath : rootlibexecdir,
> +-                                  install : true,
> +-                                  install_dir : rootlibexecdir)
> +-        public_programs += [s_j_remote, s_j_gatewayd]
> +-endif
> +-
> +-if conf.get('ENABLE_COREDUMP') == 1
> +-        executable('systemd-coredump',
> +-                   systemd_coredump_sources,
> +-                   include_directories : includes,
> +-                   link_with : [libshared],
> +-                   dependencies : [threads,
> +-                                   libacl,
> +-                                   libdw,
> +-                                   libxz,
> +-                                   liblz4],
> +-                   install_rpath : rootlibexecdir,
> +-                   install : true,
> +-                   install_dir : rootlibexecdir)
> +-
> +-        exe = executable('coredumpctl',
> +-                         coredumpctl_sources,
> +-                         include_directories : includes,
> +-                         link_with : [libshared],
> +-                         dependencies : [threads,
> +-                                         libxz,
> +-                                         liblz4],
> +-                         install_rpath : rootlibexecdir,
> +-                         install : true)
> +-        public_programs += [exe]
> +-endif
> +-
> +-if conf.get('ENABLE_BINFMT') == 1
> +-        exe = executable('systemd-binfmt',
> +-                         'src/binfmt/binfmt.c',
> +-                         include_directories : includes,
> +-                         link_with : [libshared],
> +-                         install_rpath : rootlibexecdir,
> +-                         install : true,
> +-                         install_dir : rootlibexecdir)
> +-        public_programs += [exe]
> +-
> +-        meson.add_install_script('sh', '-c',
> +-                                 mkdir_p.format(binfmtdir))
> +-        meson.add_install_script('sh', '-c',
> +-                                 mkdir_p.format(join_paths(sysconfdir, 'binfmt.d')))
> +-endif
> +-
> +-if conf.get('ENABLE_VCONSOLE') == 1
> +-        executable('systemd-vconsole-setup',
> +-                   'src/vconsole/vconsole-setup.c',
> +-                   include_directories : includes,
> +-                   link_with : [libshared],
> +-                   install_rpath : rootlibexecdir,
> +-                   install : true,
> +-                   install_dir : rootlibexecdir)
> +-endif
> +-
> +-if conf.get('ENABLE_RANDOMSEED') == 1
> +-        executable('systemd-random-seed',
> +-                   'src/random-seed/random-seed.c',
> +-                   include_directories : includes,
> +-                   link_with : [libshared],
> +-                   install_rpath : rootlibexecdir,
> +-                   install : true,
> +-                   install_dir : rootlibexecdir)
> +-endif
> +-
> +-if conf.get('ENABLE_FIRSTBOOT') == 1
> +-        executable('systemd-firstboot',
> +-                   'src/firstboot/firstboot.c',
> +-                   include_directories : includes,
> +-                   link_with : [libshared],
> +-                   dependencies : [libcrypt],
> +-                   install_rpath : rootlibexecdir,
> +-                   install : true,
> +-                   install_dir : rootbindir)
> +-endif
> +-
> +-executable('systemd-remount-fs',
> +-           'src/remount-fs/remount-fs.c',
> +-           'src/core/mount-setup.c',
> +-           'src/core/mount-setup.h',
> +-           include_directories : includes,
> +-           link_with : [libshared],
> +-           install_rpath : rootlibexecdir,
> +-           install : true,
> +-           install_dir : rootlibexecdir)
> +-
> +-executable('systemd-machine-id-setup',
> +-           'src/machine-id-setup/machine-id-setup-main.c',
> +-           'src/core/machine-id-setup.c',
> +-           'src/core/machine-id-setup.h',
> +-           include_directories : includes,
> +-           link_with : [libshared],
> +-           install_rpath : rootlibexecdir,
> +-           install : true,
> +-           install_dir : rootbindir)
> +-
> +-executable('systemd-fsck',
> +-           'src/fsck/fsck.c',
> +-           include_directories : includes,
> +-           link_with : [libshared],
> +-           install_rpath : rootlibexecdir,
> +-           install : true,
> +-           install_dir : rootlibexecdir)
> +-
> +-executable('systemd-growfs',
> +-           'src/partition/growfs.c',
> +-           include_directories : includes,
> +-           link_with : [libshared],
> +-           dependencies : [libcryptsetup],
> +-           install_rpath : rootlibexecdir,
> +-           install : true,
> +-           install_dir : rootlibexecdir)
> +-
> +-executable('systemd-makefs',
> +-           'src/partition/makefs.c',
> +-           include_directories : includes,
> +-           link_with : [libshared],
> +-           install_rpath : rootlibexecdir,
> +-           install : true,
> +-           install_dir : rootlibexecdir)
> +-
> +-executable('systemd-sleep',
> +-           'src/sleep/sleep.c',
> +-           include_directories : includes,
> +-           link_with : [libshared],
> +-           install_rpath : rootlibexecdir,
> +-           install : true,
> +-           install_dir : rootlibexecdir)
> +-
> +-exe = executable('systemd-sysctl',
> +-                 'src/sysctl/sysctl.c',
> +-                 include_directories : includes,
> +-                 link_with : [libshared],
> +-                 install_rpath : rootlibexecdir,
> +-                 install : true,
> +-                 install_dir : rootlibexecdir)
> +-public_programs += [exe]
> +-
> +-executable('systemd-ac-power',
> +-           'src/ac-power/ac-power.c',
> +-           include_directories : includes,
> +-           link_with : [libshared],
> +-           install_rpath : rootlibexecdir,
> +-           install : true,
> +-           install_dir : rootlibexecdir)
> +-
> +-exe = executable('systemd-detect-virt',
> +-                 'src/detect-virt/detect-virt.c',
> +-                 include_directories : includes,
> +-                 link_with : [libshared],
> +-                 install_rpath : rootlibexecdir,
> +-                 install : true)
> +-public_programs += [exe]
> +-
> +-exe = executable('systemd-delta',
> +-                 'src/delta/delta.c',
> +-                 include_directories : includes,
> +-                 link_with : [libshared],
> +-                 install_rpath : rootlibexecdir,
> +-                 install : true)
> +-public_programs += [exe]
> +-
> +-exe = executable('systemd-escape',
> +-                 'src/escape/escape.c',
> +-                 include_directories : includes,
> +-                 link_with : [libshared],
> +-                 install_rpath : rootlibexecdir,
> +-                 install : true,
> +-                 install_dir : rootbindir)
> +-public_programs += [exe]
> +-
> +-exe = executable('systemd-notify',
> +-                 'src/notify/notify.c',
> +-                 include_directories : includes,
> +-                 link_with : [libshared],
> +-                 install_rpath : rootlibexecdir,
> +-                 install : true,
> +-                 install_dir : rootbindir)
> +-public_programs += [exe]
> +-
> +-executable('systemd-volatile-root',
> +-           'src/volatile-root/volatile-root.c',
> +-           include_directories : includes,
> +-           link_with : [libshared],
> +-           install_rpath : rootlibexecdir,
> +-           install : true,
> +-           install_dir : rootlibexecdir)
> +-
> +-executable('systemd-cgroups-agent',
> +-           'src/cgroups-agent/cgroups-agent.c',
> +-           include_directories : includes,
> +-           link_with : [libshared],
> +-           install_rpath : rootlibexecdir,
> +-           install : true,
> +-           install_dir : rootlibexecdir)
> +-
> +-exe = executable('systemd-path',
> +-                 'src/path/path.c',
> +-                 include_directories : includes,
> +-                 link_with : [libshared],
> +-                 install_rpath : rootlibexecdir,
> +-                 install : true)
> +-public_programs += [exe]
> +-
> +-exe = executable('systemd-ask-password',
> +-                 'src/ask-password/ask-password.c',
> +-                 include_directories : includes,
> +-                 link_with : [libshared],
> +-                 install_rpath : rootlibexecdir,
> +-                 install : true,
> +-                 install_dir : rootbindir)
> +-public_programs += [exe]
> +-
> +-executable('systemd-reply-password',
> +-           'src/reply-password/reply-password.c',
> +-           include_directories : includes,
> +-           link_with : [libshared],
> +-           install_rpath : rootlibexecdir,
> +-           install : true,
> +-           install_dir : rootlibexecdir)
> +-
> +-exe = executable('systemd-tty-ask-password-agent',
> +-                 'src/tty-ask-password-agent/tty-ask-password-agent.c',
> +-                 include_directories : includes,
> +-                 link_with : [libshared],
> +-                 install_rpath : rootlibexecdir,
> +-                 install : true,
> +-                 install_dir : rootbindir)
> +-public_programs += [exe]
> +-
> +-exe = executable('systemd-cgls',
> +-                 'src/cgls/cgls.c',
> +-                 include_directories : includes,
> +-                 link_with : [libshared],
> +-                 install_rpath : rootlibexecdir,
> +-                 install : true)
> +-public_programs += [exe]
> +-
> +-exe = executable('systemd-cgtop',
> +-                 'src/cgtop/cgtop.c',
> +-                 include_directories : includes,
> +-                 link_with : [libshared],
> +-                 install_rpath : rootlibexecdir,
> +-                 install : true)
> +-public_programs += [exe]
> +-
> +-executable('systemd-initctl',
> +-           'src/initctl/initctl.c',
> +-           include_directories : includes,
> +-           link_with : [libshared],
> +-           install_rpath : rootlibexecdir,
> +-           install : true,
> +-           install_dir : rootlibexecdir)
> +-
> +-exe = executable('systemd-mount',
> +-                 'src/mount/mount-tool.c',
> +-                 include_directories : includes,
> +-                 link_with : [libshared],
> +-                 install_rpath : rootlibexecdir,
> +-                 install : true)
> +-public_programs += [exe]
> +-
> +-meson.add_install_script(meson_make_symlink,
> +-                         'systemd-mount', join_paths(bindir, 'systemd-umount'))
> +-
> +-exe = executable('systemd-run',
> +-                 'src/run/run.c',
> +-                 include_directories : includes,
> +-                 link_with : [libshared],
> +-                 install_rpath : rootlibexecdir,
> +-                 install : true)
> +-public_programs += [exe]
> +-
> +-exe = executable('systemd-stdio-bridge',
> +-                 'src/stdio-bridge/stdio-bridge.c',
> +-                 include_directories : includes,
> +-                 link_with : [libshared],
> +-                 install_rpath : rootlibexecdir,
> +-                 install : true)
> +-public_programs += [exe]
> +-
> +-exe = executable('busctl',
> +-                 'src/busctl/busctl.c',
> +-                 'src/busctl/busctl-introspect.c',
> +-                 'src/busctl/busctl-introspect.h',
> +-                 include_directories : includes,
> +-                 link_with : [libshared],
> +-                 install_rpath : rootlibexecdir,
> +-                 install : true)
> +-public_programs += [exe]
> +-
> +-if conf.get('ENABLE_SYSUSERS') == 1
> +-        exe = executable('systemd-sysusers',
> +-                         'src/sysusers/sysusers.c',
> +-                         include_directories : includes,
> +-                         link_with : [libshared],
> +-                         install_rpath : rootlibexecdir,
> +-                         install : true,
> +-                         install_dir : rootbindir)
> +-        public_programs += [exe]
> +-endif
> +-
> +-if conf.get('ENABLE_TMPFILES') == 1
> +-        exe = executable('systemd-tmpfiles',
> +-                         'src/tmpfiles/tmpfiles.c',
> +-                         include_directories : includes,
> +-                         link_with : [libshared],
> +-                         dependencies : [libacl],
> +-                         install_rpath : rootlibexecdir,
> +-                         install : true,
> +-                         install_dir : rootbindir)
> +-        public_programs += [exe]
> +-
> +-        test('test-systemd-tmpfiles',
> +-             test_systemd_tmpfiles_py,
> +-             args : exe.full_path())
> +-        # https://github.com/mesonbuild/meson/issues/2681
> +-endif
> +-
> +-if conf.get('ENABLE_HWDB') == 1
> +-        exe = executable('systemd-hwdb',
> +-                         'src/hwdb/hwdb.c',
> +-                         'src/libsystemd/sd-hwdb/hwdb-internal.h',
> +-                         include_directories : includes,
> +-                         link_with : [libudev_static],
> +-                         install_rpath : udev_rpath,
> +-                         install : true,
> +-                         install_dir : rootbindir)
> +-        public_programs += [exe]
> +-endif
> +-
> +-if conf.get('ENABLE_QUOTACHECK') == 1
> +-        executable('systemd-quotacheck',
> +-                   'src/quotacheck/quotacheck.c',
> +-                   include_directories : includes,
> +-                   link_with : [libshared],
> +-                   install_rpath : rootlibexecdir,
> +-                   install : true,
> +-                   install_dir : rootlibexecdir)
> +-endif
> +-
> +-exe = executable('systemd-socket-proxyd',
> +-                 'src/socket-proxy/socket-proxyd.c',
> +-                 include_directories : includes,
> +-                 link_with : [libshared],
> +-                 dependencies : [threads],
> +-                 install_rpath : rootlibexecdir,
> +-                 install : true,
> +-                 install_dir : rootlibexecdir)
> +-public_programs += [exe]
> +-
> +-exe = executable('systemd-udevd',
> +-                 systemd_udevd_sources,
> +-                 include_directories : includes,
> +-                 c_args : ['-DLOG_REALM=LOG_REALM_UDEV'],
> +-                 link_with : [libudev_core,
> +-                              libsystemd_network,
> +-                              libudev_static],
> +-                 dependencies : [threads,
> +-                                 libkmod,
> +-                                 libidn,
> +-                                 libacl,
> +-                                 libblkid],
> +-                 install_rpath : udev_rpath,
> +-                 install : true,
> +-                 install_dir : rootlibexecdir)
> +-public_programs += [exe]
> +-
> +-exe = executable('udevadm',
> +-                 udevadm_sources,
> +-                 c_args : ['-DLOG_REALM=LOG_REALM_UDEV'],
> +-                 include_directories : includes,
> +-                 link_with : [libudev_core,
> +-                              libsystemd_network,
> +-                              libudev_static],
> +-                 dependencies : [threads,
> +-                                 libkmod,
> +-                                 libidn,
> +-                                 libacl,
> +-                                 libblkid],
> +-                 install_rpath : udev_rpath,
> +-                 install : true,
> +-                 install_dir : rootbindir)
> +-public_programs += [exe]
> +-
> +-executable('systemd-shutdown',
> +-           systemd_shutdown_sources,
> +-           include_directories : includes,
> +-           link_with : [libshared],
> +-           dependencies : [libmount],
> +-           install_rpath : rootlibexecdir,
> +-           install : true,
> +-           install_dir : rootlibexecdir)
> +-
> +-executable('systemd-update-done',
> +-           'src/update-done/update-done.c',
> +-           include_directories : includes,
> +-           link_with : [libshared],
> +-           install_rpath : rootlibexecdir,
> +-           install : true,
> +-           install_dir : rootlibexecdir)
> +-
> +-executable('systemd-update-utmp',
> +-           'src/update-utmp/update-utmp.c',
> +-           include_directories : includes,
> +-           link_with : [libshared],
> +-           dependencies : [libaudit],
> +-           install_rpath : rootlibexecdir,
> +-           install : true,
> +-           install_dir : rootlibexecdir)
> +-
> +-if conf.get('HAVE_KMOD') == 1
> +-        executable('systemd-modules-load',
> +-                   'src/modules-load/modules-load.c',
> +-                   include_directories : includes,
> +-                   link_with : [libshared],
> +-                   dependencies : [libkmod],
> +-                   install_rpath : rootlibexecdir,
> +-                   install : true,
> +-                   install_dir : rootlibexecdir)
> +-
> +-        meson.add_install_script('sh', '-c',
> +-                                 mkdir_p.format(modulesloaddir))
> +-        meson.add_install_script('sh', '-c',
> +-                                 mkdir_p.format(join_paths(sysconfdir, 'modules-load.d')))
> +-endif
> +-
> +-exe = executable('systemd-nspawn',
> +-                 systemd_nspawn_sources,
> +-                 'src/core/mount-setup.c', # FIXME: use a variable?
> +-                 'src/core/mount-setup.h',
> +-                 'src/core/loopback-setup.c',
> +-                 'src/core/loopback-setup.h',
> +-                 include_directories : includes,
> +-                 link_with : [libnspawn_core,
> +-                              libshared],
> +-                 dependencies : [libblkid],
> +-                 install_rpath : rootlibexecdir,
> +-                 install : true)
> +-public_programs += [exe]
> +-
> +-if conf.get('ENABLE_NETWORKD') == 1
> +-        executable('systemd-networkd',
> +-                   systemd_networkd_sources,
> +-                   include_directories : includes,
> +-                   link_with : [libnetworkd_core,
> +-                                libsystemd_network,
> +-                                libudev_static,
> +-                                libshared],
> +-                   dependencies : [threads],
> +-                   install_rpath : rootlibexecdir,
> +-                   install : true,
> +-                   install_dir : rootlibexecdir)
> +-
> +-        executable('systemd-networkd-wait-online',
> +-                   systemd_networkd_wait_online_sources,
> +-                   include_directories : includes,
> +-                   link_with : [libnetworkd_core,
> +-                                libshared],
> +-                   install_rpath : rootlibexecdir,
> +-                   install : true,
> +-                   install_dir : rootlibexecdir)
> +-
> +-        exe = executable('networkctl',
> +-                   networkctl_sources,
> +-                   include_directories : includes,
> +-                   link_with : [libsystemd_network,
> +-                              libshared],
> +-                   install_rpath : rootlibexecdir,
> +-                   install : true,
> +-                   install_dir : rootbindir)
> +-        public_programs += [exe]
> +-endif
> +-
> +-executable('systemd-sulogin-shell',
> +-           ['src/sulogin-shell/sulogin-shell.c'],
> +-           include_directories : includes,
> +-           link_with : [libshared],
> +-           install_rpath : rootlibexecdir,
> +-           install : true,
> +-           install_dir : rootlibexecdir)
> +-
> +-############################################################
> +-
> +-foreach tuple : tests
> +-        sources = tuple[0]
> +-        link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
> +-        dependencies = tuple[2]
> +-        condition = tuple.length() >= 4 ? tuple[3] : ''
> +-        type = tuple.length() >= 5 ? tuple[4] : ''
> +-        defs = tuple.length() >= 6 ? tuple[5] : []
> +-        incs = tuple.length() >= 7 ? tuple[6] : includes
> +-        timeout = 30
> +-
> +-        name = sources[0].split('/')[-1].split('.')[0]
> +-        if type.startswith('timeout=')
> +-                timeout = type.split('=')[1].to_int()
> +-                type = ''
> +-        endif
> +-        if want_tests == 'false'
> +-                message('Not compiling @0@ because tests is set to false'.format(name))
> +-        elif condition == '' or conf.get(condition) == 1
> +-                exe = executable(
> +-                        name,
> +-                        sources,
> +-                        include_directories : incs,
> +-                        link_with : link_with,
> +-                        dependencies : dependencies,
> +-                        c_args : defs,
> +-                        install_rpath : rootlibexecdir,
> +-                        install : install_tests,
> +-                        install_dir : join_paths(testsdir, type))
> +-
> +-                if type == 'manual'
> +-                        message('@0@ is a manual test'.format(name))
> +-                elif type == 'unsafe' and want_tests != 'unsafe'
> +-                        message('@0@ is an unsafe test'.format(name))
> +-                else
> +-                        test(name, exe,
> +-                             env : test_env,
> +-                             timeout : timeout)
> +-                endif
> +-        else
> +-                message('Not compiling @0@ because @1@ is not true'.format(name, condition))
> +-        endif
> +-endforeach
> +-
> +-exe = executable(
> +-        'test-libsystemd-sym',
> +-        test_libsystemd_sym_c,
> +-        include_directories : includes,
> +-        link_with : [libsystemd],
> +-        install : install_tests,
> +-        install_dir : testsdir)
> +-test('test-libsystemd-sym', exe)
> +-
> +-exe = executable(
> +-        'test-libsystemd-static-sym',
> +-        test_libsystemd_sym_c,
> +-        include_directories : includes,
> +-        link_with : [install_libsystemd_static],
> +-        dependencies : [threads], # threads is already included in dependencies on the library,
> +-                                  # but does not seem to get propagated. Add here as a work-around.
> +-        build_by_default : static_libsystemd_pic,
> +-        install : install_tests and static_libsystemd_pic,
> +-        install_dir : testsdir)
> +-if static_libsystemd_pic
> +-        test('test-libsystemd-static-sym', exe)
> +-endif
> +-
> +-exe = executable(
> +-        'test-libudev-sym',
> +-        test_libudev_sym_c,
> +-        include_directories : includes,
> +-        c_args : ['-Wno-deprecated-declarations'],
> +-        link_with : [libudev],
> +-        install : install_tests,
> +-        install_dir : testsdir)
> +-test('test-libudev-sym', exe)
> +-
> +-exe = executable(
> +-        'test-libudev-static-sym',
> +-        test_libudev_sym_c,
> +-        include_directories : includes,
> +-        c_args : ['-Wno-deprecated-declarations'],
> +-        link_with : [install_libudev_static],
> +-        build_by_default : static_libudev_pic,
> +-        install : install_tests and static_libudev_pic,
> +-        install_dir : testsdir)
> +-if static_libudev_pic
> +-        test('test-libudev-static-sym', exe)
> +-endif
> +-
> +-############################################################
> +-
> +-fuzzer_exes = []
> +-
> +-foreach tuple : fuzzers
> +-        sources = tuple[0]
> +-        link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
> +-        dependencies = tuple[2]
> +-        defs = tuple.length() >= 4 ? tuple[3] : []
> +-        incs = tuple.length() >= 5 ? tuple[4] : includes
> +-
> +-        if fuzzer_build
> +-                dependencies += fuzzing_engine
> +-        else
> +-                sources += 'src/fuzz/fuzz-main.c'
> +-        endif
> +-
> +-        name = sources[0].split('/')[-1].split('.')[0]
> +-
> +-        fuzzer_exes += executable(
> +-                name,
> +-                sources,
> +-                include_directories : [incs, include_directories('src/fuzz')],
> +-                link_with : link_with,
> +-                dependencies : dependencies,
> +-                c_args : defs,
> +-                install : false)
> +-endforeach
> +-
> +-run_target('fuzzers',
> +-        depends : fuzzer_exes,
> +-        command : ['true'])
> +-
> + ############################################################
> + 
> + make_directive_index_py = find_program('tools/make-directive-index.py')
> +@@ -2739,58 +1384,6 @@ endforeach
> + 
> + ############################################################
> + 
> +-# Enable tests for all supported sanitizers
> +-foreach tuple : sanitizers
> +-        sanitizer = tuple[0]
> +-        build = tuple[1]
> +-
> +-        have = run_command(check_compilation_sh,
> +-                           cc.cmd_array(), '-x', 'c',
> +-                           '-fsanitize=@0@'.format(sanitizer),
> +-                           '-include', link_test_c).returncode() == 0
> +-        message('@0@ sanitizer supported: @1@'.format(sanitizer, have ? 'yes' : 'no'))
> +-
> +-        if have
> +-                prev = ''
> +-                foreach p : fuzz_regression_tests
> +-                        b = p.split('/')[-2]
> +-                        c = p.split('/')[-1]
> +-
> +-                        name = '@0@:@1@'.format(b, sanitizer)
> +-
> +-                        if name != prev
> +-                                if want_tests == 'false'
> +-                                        message('Not compiling @0@ because tests is set to false'.format(name))
> +-                                elif slow_tests
> +-                                        exe = custom_target(
> +-                                                name,
> +-                                                output : name,
> +-                                                depends : build,
> +-                                                command : [env, 'ln', '-fs',
> +-                                                           join_paths(build.full_path(), b),
> +-                                                           '@OUTPUT@'],
> +-                                                build_by_default : true)
> +-                                else
> +-                                        message('Not compiling @0@ because slow-tests is set to false'.format(name))
> +-                                endif
> +-                        endif
> +-                        prev = name
> +-
> +-                        if want_tests != 'false' and slow_tests
> +-                                test('@0@:@1@:@2@'.format(b, c, sanitizer),
> +-                                     env,
> +-                                     args : [exe.full_path(),
> +-                                             join_paths(meson.source_root(),
> +-                                                        'test/fuzz-regressions',
> +-                                                        p)])
> +-                        endif
> +-                endforeach
> +-        endif
> +-endforeach
> +-
> +-
> +-############################################################
> +-
> + if git.found()
> +         all_files = run_command(
> +                 git,
> +@@ -2836,14 +1429,6 @@ endif
> + 
> + ############################################################
> + 
> +-meson_check_api_docs_sh = find_program('tools/meson-check-api-docs.sh')
> +-run_target(
> +-        'check-api-docs',
> +-        depends : [man, libsystemd, libudev],
> +-        command : [meson_check_api_docs_sh, libsystemd.full_path(), libudev.full_path()])
> +-
> +-############################################################
> +-
> + status = [
> +         '@0@ @1@'.format(meson.project_name(), meson.project_version()),
> + 
> +-- 
> +2.7.4
> +
> diff --git a/boot/systemd-boot/Config.in b/boot/systemd-boot/Config.in
> new file mode 100644
> index 0000000..51dcebb
> --- /dev/null
> +++ b/boot/systemd-boot/Config.in
> @@ -0,0 +1,32 @@
> +config BR2_TARGET_SYSTEMD_BOOT
> +	bool "systemd-boot"
> +	depends on BR2_i386 || BR2_x86_64
> +	depends on !BR2_PACKAGE_SYSTEMD
> +	select BR2_PACKAGE_GNU_EFI
> +	help
> +	  systemd-boot is a simple UEFI boot manager which executes
> +	  configured EFI images. The default entry is selected by a
> +	  configured pattern (glob) or an on-screen menu.
> +
> +	  systemd-boot operates on the EFI System Partition (ESP)
> +	  only. Configuration file fragments, kernels, initrds, other
> +	  EFI images need to reside on the ESP. Linux kernels need to
> +	  be built with CONFIG_EFI_STUB to be able to be directly
> +	  executed as an EFI image.
> +
> +	  See the Grub2 help text for details on preparing an EFI
> +	  capable disk image using systemd-boot: the instructions are
> +	  exactly the same, except that the systemd-boot configuration
> +	  files will be located in /loader/ inside the EFI partition.
> +
> +	  https://www.freedesktop.org/wiki/Software/systemd/systemd-boot/
> +
> +config BR2_TARGET_SYSTEMD_BOOT_EFI_ARCH
> +	string
> +	default "ia32"  if BR2_i386
> +	default "x64"   if BR2_x86_64
> +	depends on BR2_TARGET_SYSTEMD_BOOT
> +
> +comment "systemd-boot is provided by systemd"
> +	depends on BR2_i386 || BR2_x86_64
> +	depends on BR2_PACKAGE_SYSTEMD
> diff --git a/boot/systemd-boot/boot-files b/boot/systemd-boot/boot-files
> new file mode 120000
> index 0000000..0ff51d4
> --- /dev/null
> +++ b/boot/systemd-boot/boot-files
> @@ -0,0 +1 @@
> +../../package/systemd/boot-files
> \ No newline at end of file
> diff --git a/boot/systemd-boot/systemd-boot.hash b/boot/systemd-boot/systemd-boot.hash
> new file mode 120000
> index 0000000..4259f40
> --- /dev/null
> +++ b/boot/systemd-boot/systemd-boot.hash
> @@ -0,0 +1 @@
> +../../package/systemd/systemd.hash
> \ No newline at end of file
> diff --git a/boot/systemd-boot/systemd-boot.mk b/boot/systemd-boot/systemd-boot.mk
> new file mode 100644
> index 0000000..0a9dd15
> --- /dev/null
> +++ b/boot/systemd-boot/systemd-boot.mk
> @@ -0,0 +1,104 @@
> +################################################################################
> +#
> +# systemd-boot
> +#
> +################################################################################
> +
> +# When updating this version, please also update it in package/systemd/
> +SYSTEMD_BOOT_VERSION = 239
> +SYSTEMD_BOOT_SITE = $(call github,systemd,systemd,v$(SYSTEMD_BOOT_VERSION))
> +SYSTEMD_BOOT_SOURCE = systemd-239.tar.gz
> +SYSTEMD_BOOT_DL_SUBDIR = systemd
> +
> +SYSTEMD_BOOT_LICENSE = LGPL-2.1+, GPL-2.0+ (udev), Public Domain (few source files, see README)
> +SYSTEMD_BOOT_LICENSE_FILES = LICENSE.GPL2 LICENSE.LGPL2.1 README
> +
> +SYSTEMD_BOOT_DEPENDENCIES = gnu-efi
> +
> +SYSTEMD_BOOT_INSTALL_TARGET = NO
> +SYSTEMD_BOOT_INSTALL_IMAGES = YES
> +
> +SYSTEMD_BOOT_CONF_OPTS += \
> +	-Drootlibdir='/usr/lib' \
> +	-Dblkid=false \
> +	-Dman=false \
> +	-Dima=false \
> +	-Dlibcryptsetup=false \
> +	-Defi=true \
> +	-Dgnu-efi=true \
> +	-Defi-cc=$(TARGET_CC) \
> +	-Defi-ld=$(TARGET_LD) \
> +	-Defi-libdir=$(STAGING_DIR)/usr/lib \
> +	-Defi-ldsdir=$(STAGING_DIR)/usr/lib \
> +	-Defi-includedir=$(STAGING_DIR)/usr/include/efi \
> +	-Dldconfig=false \
> +	-Ddefault-dnssec=no \
> +	-Dtests=false \
> +	-Dnobody-group=nogroup \
> +	-Didn=false \
> +	-Dnss-systemd=false \
> +	-Dacl=false \
> +	-Daudit=false \
> +	-Delfutils=false \
> +	-Dlibidn=false \
> +	-Dlibidn2=false \
> +	-Dseccomp=false \
> +	-Dxkbcommon=false \
> +	-Dbzip2=false \
> +	-Dlz4=false \
> +	-Dpam=false \
> +	-Dxz=false \
> +	-Dzlib=false \
> +	-Dlibcurl=false \
> +	-Dgcrypt=false \
> +	-Dpcre2=false \
> +	-Dmicrohttpd=false \
> +	-Dqrencode=false \
> +	-Dselinux=false \
> +	-Dhwdb=false \
> +	-Dbinfmt=false \
> +	-Dvconsole=false \
> +	-Dquotacheck=false \
> +	-Dtmpfiles=false \
> +	-Dsysusers=false \
> +	-Dfirstboot=false \
> +	-Drandomseed=false \
> +	-Dbacklight=false \
> +	-Drfkill=false \
> +	-Dlogind=false \
> +	-Dmachined=false \
> +	-Dimportd=false \
> +	-Dhostnamed=false \
> +	-Dmyhostname=false \
> +	-Dtimedated=false \
> +	-Dlocaled=false \
> +	-Dcoredump=false \
> +	-Dpolkit=false \
> +	-Dnetworkd=false \
> +	-Dresolve=false \
> +	-Dtimesyncd=false \
> +	-Dsmack=false \
> +	-Dhibernate=false
> +
> +SYSTEMD_BOOT_CONF_ENV = $(HOST_UTF8_LOCALE_ENV)
> +SYSTEMD_BOOT_NINJA_ENV = $(HOST_UTF8_LOCALE_ENV)
> +
> +SYSTEMD_BOOT_TARGET_EFI_ARCH = $(call qstrip,$(BR2_TARGET_SYSTEMD_BOOT_EFI_ARCH))
> +define SYSTEMD_BOOT_BUILD_CMDS
> +	$(TARGET_MAKE_ENV) $(SYSTEMD_BOOT_NINJA_ENV) \
> +		$(NINJA) $(NINJA_OPTS) -C $(@D)/build \
> +		src/boot/efi/{systemd-boot$(SYSTEMD_BOOT_TARGET_EFI_ARCH).efi,linux$(SYSTEMD_BOOT_TARGET_EFI_ARCH).efi.stub}
> +endef
> +
> +define SYSTEMD_BOOT_INSTALL_IMAGES_CMDS
> +	$(INSTALL) -D -m 0644 $(@D)/build/src/boot/efi/systemd-boot$(SYSTEMD_BOOT_TARGET_EFI_ARCH).efi \
> +		$(BINARIES_DIR)/efi-part/EFI/BOOT/boot$(SYSTEMD_BOOT_TARGET_EFI_ARCH).efi
> +	echo "boot$(SYSTEMD_BOOT_TARGET_EFI_ARCH).efi" > \
> +		$(BINARIES_DIR)/efi-part/startup.nsh
> +	$(INSTALL) -D -m 0644 $(SYSTEMD_BOOT_PKGDIR)/boot-files/loader.conf \
> +		$(BINARIES_DIR)/efi-part/loader/loader.conf
> +	$(INSTALL) -D -m 0644 $(SYSTEMD_BOOT_PKGDIR)/boot-files/buildroot.conf \
> +		$(BINARIES_DIR)/efi-part/loader/entries/buildroot.conf
> +endef
> +
> +$(eval $(meson-package))
> diff --git a/package/systemd/Config.in b/package/systemd/Config.in
> index 50d09b3..a99358f 100644
> --- a/package/systemd/Config.in
> +++ b/package/systemd/Config.in
> @@ -101,9 +101,9 @@ config BR2_PACKAGE_SYSTEMD_BOOT
>  
>  config BR2_PACKAGE_SYSTEMD_BOOT_EFI_ARCH
>  	string
> -	depends on BR2_PACKAGE_SYSTEMD_BOOT
>  	default "ia32"  if BR2_i386
>  	default "x64"   if BR2_x86_64
> +	depends on BR2_PACKAGE_SYSTEMD_BOOT
>  
>  config BR2_PACKAGE_SYSTEMD_JOURNAL_GATEWAY
>  	bool "HTTP server for journal events"
> diff --git a/package/systemd/systemd.mk b/package/systemd/systemd.mk
> index 2822d44..3f8f7aa 100644
> --- a/package/systemd/systemd.mk
> +++ b/package/systemd/systemd.mk
> @@ -4,6 +4,7 @@
>  #
>  ################################################################################
>  
> +# When updating this version, please also update it in boot/systemd-boot/
>  SYSTEMD_VERSION = 239
>  SYSTEMD_SITE = $(call github,systemd,systemd,v$(SYSTEMD_VERSION))
>  SYSTEMD_LICENSE = LGPL-2.1+, GPL-2.0+ (udev), Public Domain (few source files, see README)
> -- 
> 2.7.4
> 

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'



More information about the buildroot mailing list