Meson: install symlinks or copies of binaries
On most system symlinks are fine, but on windows symlinks are tricky at best, or unsupported for older versions of windows. To avoid those problems we'll just copy the binary if the host or build machine is windows. This uses a small helper python script to make this all easier to use and understand.
This commit is contained in:
parent
78aa9c8623
commit
ab22254684
41
install_links.py
Executable file
41
install_links.py
Executable file
@ -0,0 +1,41 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
"""Create a symlink or a copy of an installed file."""
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('bindir')
|
||||||
|
parser.add_argument('source')
|
||||||
|
parser.add_argument('dest', nargs='+')
|
||||||
|
parser.add_argument('--use-links', action='store_true')
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
os.chdir(os.environ['MESON_INSTALL_DESTDIR_PREFIX'])
|
||||||
|
os.chdir(args.bindir)
|
||||||
|
|
||||||
|
# Windows doesn't really use symlinks, just copy in that case. Windows
|
||||||
|
# before vista (xp) doesn't have symlinks at all.
|
||||||
|
if args.use_links:
|
||||||
|
func = os.symlink
|
||||||
|
verb = 'Linking'
|
||||||
|
else:
|
||||||
|
func = shutil.copy
|
||||||
|
verb = 'Copying'
|
||||||
|
|
||||||
|
# at least os.symlink will fail if the destination already exists, just
|
||||||
|
# remove the dest if it already exists.
|
||||||
|
for dest in args.dest:
|
||||||
|
if os.path.exists(dest):
|
||||||
|
os.unlink(dest)
|
||||||
|
|
||||||
|
func(args.source, dest)
|
||||||
|
print('{} {} to {}'.format(verb, args.source, dest))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
13
meson.build
13
meson.build
@ -101,6 +101,19 @@ install_data(
|
|||||||
install_mode : 'rwxr-xr-x',
|
install_mode : 'rwxr-xr-x',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
## Create aliases. Use links if possible, but copies if not.
|
||||||
|
# Copies are mainly meant for windows, which doesn't have symlinks.
|
||||||
|
bindir = get_option('bindir')
|
||||||
|
targets = [['bzmore', 'bzless'], ['bzdiff', 'bzcmp'], ['bzgrep', 'bzegrep', 'bzfgrep'],
|
||||||
|
['bzip2', 'bunzip2', 'bzcat']]
|
||||||
|
extra_args = []
|
||||||
|
if host_machine.system() != 'windows' and build_machine.system() != 'windows'
|
||||||
|
extra_args = '--use-links'
|
||||||
|
endif
|
||||||
|
foreach t : targets
|
||||||
|
meson.add_install_script('install_links.py', get_option('bindir'), t, extra_args)
|
||||||
|
endforeach
|
||||||
|
|
||||||
## Generate pkg-config automaically from built library information
|
## Generate pkg-config automaically from built library information
|
||||||
pkg = import('pkgconfig')
|
pkg = import('pkgconfig')
|
||||||
pkg.generate(
|
pkg.generate(
|
||||||
|
Loading…
Reference in New Issue
Block a user