Skip to content

Commit ce0dce9

Browse files
committed
meson: de-duplicate binaries using hard links
Use custom targets to create hard links for testing. meson will install these as duplicate files, so use a custom install script.
1 parent 70be1c0 commit ce0dce9

6 files changed

Lines changed: 75 additions & 29 deletions

File tree

meson.build

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ project('OpenRC', 'c',
66
'prefix=/usr',
77
'warning_level=3',
88
],
9-
meson_version : '>=0.53.2')
9+
meson_version : '>=0.57.0')
1010

1111
cc = meson.get_compiler('c')
1212
fs = import('fs')
@@ -201,6 +201,8 @@ init_d_conf_data.set('SYSCONFDIR', get_option('sysconfdir'))
201201
dl_dep = cc.find_library('dl', required: false)
202202
util_dep = cc.find_library('util', required: false)
203203

204+
install_hardlinks = files('tools' / 'meson_install_hardlinks.sh')
205+
204206
subdir('bash-completion')
205207
subdir('conf.d')
206208
subdir('etc')

src/einfo/meson.build

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
einfo_execs = [
22
'einfon',
3-
'einfo',
43
'ewarnn',
54
'ewarn',
65
'eerrorn',
@@ -22,11 +21,21 @@ einfo_execs = [
2221
'veoutdent',
2322
]
2423

24+
einfo = executable('einfo',
25+
['einfo.c', version_h],
26+
include_directories: [incdir, einfo_incdir, rc_incdir],
27+
link_with: [libeinfo, librc],
28+
install: true,
29+
install_dir: rc_bindir)
30+
2531
foreach exec: einfo_execs
26-
executable(exec,
27-
['einfo.c', version_h],
28-
include_directories: [incdir, einfo_incdir, rc_incdir],
29-
link_with: [libeinfo, librc],
30-
install: true,
31-
install_dir: rc_bindir)
32+
custom_target(exec,
33+
build_by_default: true,
34+
command: ['ln', '-fn', einfo, '@OUTPUT@'],
35+
output: exec)
3236
endforeach
37+
38+
meson.add_install_script(install_hardlinks,
39+
rc_bindir,
40+
'einfo',
41+
einfo_execs)

src/mark_service/meson.build

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
mark_service_execs = [
2-
'mark_service_starting',
32
'mark_service_started',
43
'mark_service_stopping',
54
'mark_service_stopped',
@@ -10,11 +9,21 @@ mark_service_execs = [
109
'mark_service_crashed',
1110
]
1211

12+
mark_service = executable('mark_service_starting',
13+
['mark_service.c', misc_c, version_h],
14+
include_directories: [incdir, einfo_incdir, rc_incdir],
15+
link_with: [libeinfo,librc],
16+
install: true,
17+
install_dir: rc_sbindir)
18+
1319
foreach exec : mark_service_execs
14-
executable(exec,
15-
['mark_service.c', misc_c, version_h],
16-
include_directories: [incdir, einfo_incdir, rc_incdir],
17-
link_with: [libeinfo,librc],
18-
install: true,
19-
install_dir: rc_sbindir)
20+
custom_target(exec,
21+
build_by_default: true,
22+
command: ['ln', '-fn', mark_service, '@OUTPUT@'],
23+
output: exec)
2024
endforeach
25+
26+
meson.add_install_script(install_hardlinks,
27+
rc_sbindir,
28+
'mark_service_starting',
29+
mark_service_execs)

src/service/meson.build

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
service_execs = [
2-
'service_starting',
32
'service_started',
43
'service_stopping',
54
'service_stopped',
@@ -10,11 +9,21 @@ service_execs = [
109
'service_crashed',
1110
]
1211

12+
service = executable('service_starting',
13+
['service.c', misc_c, version_h],
14+
include_directories: [incdir, einfo_incdir, rc_incdir],
15+
link_with: [libeinfo, librc],
16+
install: true,
17+
install_dir: rc_bindir)
18+
1319
foreach exec : service_execs
14-
executable(exec,
15-
['service.c', misc_c, version_h],
16-
include_directories: [incdir, einfo_incdir, rc_incdir],
17-
link_with: [libeinfo, librc],
18-
install: true,
19-
install_dir: rc_bindir)
20+
custom_target(exec,
21+
build_by_default: true,
22+
command: ['ln', '-fn', service, '@OUTPUT@'],
23+
output: exec)
2024
endforeach
25+
26+
meson.add_install_script(install_hardlinks,
27+
rc_bindir,
28+
'service_starting',
29+
service_execs)

src/value/meson.build

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,24 @@
11
value_execs = [
2-
'service_get_value',
32
'service_set_value',
43
'get_options',
54
'save_options',
65
]
76

7+
value = executable('service_get_value',
8+
['value.c', misc_c, version_h],
9+
include_directories: [incdir, einfo_incdir, rc_incdir],
10+
link_with: [libeinfo, librc],
11+
install: true,
12+
install_dir: rc_bindir)
13+
814
foreach exec : value_execs
9-
executable(exec,
10-
['value.c', misc_c, version_h],
11-
include_directories: [incdir, einfo_incdir, rc_incdir],
12-
link_with: [libeinfo, librc],
13-
install: true,
14-
install_dir: rc_bindir)
15+
custom_target(exec,
16+
build_by_default: true,
17+
command: ['ln', '-fn', value, '@OUTPUT@'],
18+
output: exec)
1519
endforeach
20+
21+
meson.add_install_script(install_hardlinks,
22+
rc_bindir,
23+
'service_get_value',
24+
value_execs)

tools/meson_install_hardlinks.sh

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#!/bin/sh
2+
set -eu
3+
dir=$1
4+
target=$2
5+
shift 2
6+
for linkname; do
7+
ln -fn "${DESTDIR-}${dir}/${target}" "${DESTDIR-}${dir}/${linkname}"
8+
done

0 commit comments

Comments
 (0)