1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
wrapped_scripts = [
'makepkg.sh.in',
'pacman-db-upgrade.sh.in',
'pacman-key.sh.in',
'pkgdelta.sh.in',
'repo-add.sh.in'
]
scripts = [
'makepkg-template.pl.in',
]
library_files = [
'library/human_to_size.sh',
]
SCRIPT_EDITOR = find_program(configure_file(
input : join_paths(meson.source_root(), 'build-aux/edit-script.sh.in'),
output : 'edit-script.sh',
configuration : substs))
m4_edit = generator(
M4,
arguments : ['-P', '-I', meson.current_source_dir(), '@INPUT@'],
output : '@PLAINNAME@',
capture : true)
foreach script : scripts
script_shortname = script.split('.')[0]
custom_target(
script,
input : m4_edit.process(script),
command : [ SCRIPT_EDITOR, '@INPUT@', '@OUTPUT@', '0755'],
output : script_shortname,
depend_files : library_files,
install : true,
install_dir : get_option('bindir'))
endforeach
foreach script : wrapped_scripts
script_shortname = script.split('.')[0]
# Build the script, but don't install it. We want to keep it as a "private"
# artifact that we reference from a wrapper script in order to bootstrap it
# the build directory.
internal_script = custom_target(
script,
input : m4_edit.process(script),
command : [ SCRIPT_EDITOR, '@INPUT@', '@OUTPUT@', '0755'],
output : script,
depend_files : library_files,
build_by_default : true)
# Create a wrapper script that bootstraps the real script within the build
# directory.
custom_target(
'wrap_@0@'.format(script_shortname),
input : join_paths(meson.source_root(), 'build-aux', 'script-wrapper.sh.in'),
output : script_shortname,
build_by_default : true,
command : [
SED,
'-e', 's,@BASH@,"@0@",'.format(BASH.path()),
'-e', 's,@BUILDDIR@,"@0@",'.format(meson.current_build_dir()),
'-e', 's,@REAL_PROGPATH@,"@0@",'.format(internal_script.full_path()),
'@INPUT@',
],
capture : true)
# Install the real script
meson.add_install_script(MESON_INSTALL_SCRIPT,
internal_script.full_path(),
join_paths(BINDIR, script_shortname))
endforeach
foreach symlink : ['repo-remove', 'repo-elephant']
meson.add_install_script(MESON_MAKE_SYMLINK,
'repo-add',
join_paths(BINDIR, symlink))
endforeach
subdir('libmakepkg')
custom_target(
'bash_completion',
command : [ SCRIPT_EDITOR, '@INPUT@', '@OUTPUT@' ],
input : 'completion/bash_completion.in',
output : 'pacman',
install : true,
install_dir : BASHCOMPDIR)
foreach symlink : ['pacman-key', 'makepkg']
meson.add_install_script(MESON_MAKE_SYMLINK,
'pacman',
join_paths(BASHCOMPDIR, symlink))
endforeach
zsh_completion_dir = join_paths(DATAROOTDIR, 'zsh/site-functions')
custom_target(
'zsh_completion',
command : [ SCRIPT_EDITOR, '@INPUT@', '@OUTPUT@' ],
input : 'completion/zsh_completion.in',
output : '_pacman',
install : true,
install_dir : zsh_completion_dir)
|