build: Port meson-make-symlink script to Python
Instead of using non-portable features of GNU ln command, such as -T and --relative, use Python os.path.relpath function to handle it. This fixes installation failure on FreeBSD.
This commit is contained in:
parent
aaa141f28b
commit
8b7d4e46de
|
@ -13,7 +13,7 @@ gnome = import('gnome')
|
||||||
i18n = import('i18n')
|
i18n = import('i18n')
|
||||||
pkgconfig = import('pkgconfig')
|
pkgconfig = import('pkgconfig')
|
||||||
|
|
||||||
meson_make_symlink = join_paths(meson.source_root(), 'tools', 'meson-make-symlink.sh')
|
meson_make_symlink = join_paths(meson.source_root(), 'tools', 'meson-make-symlink.py')
|
||||||
po_dir = join_paths(meson.source_root(), 'po')
|
po_dir = join_paths(meson.source_root(), 'po')
|
||||||
|
|
||||||
prefix = get_option('prefix')
|
prefix = get_option('prefix')
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
destdir = os.environ.get('DESTDIR')
|
||||||
|
source = sys.argv[1]
|
||||||
|
target = sys.argv[2]
|
||||||
|
|
||||||
|
def prepend_destdir(path):
|
||||||
|
if destdir is not None:
|
||||||
|
if os.path.isabs(path):
|
||||||
|
return os.path.join(destdir, path[1:])
|
||||||
|
else:
|
||||||
|
return os.path.join(destdir, path)
|
||||||
|
else:
|
||||||
|
return path
|
||||||
|
|
||||||
|
def call_symlink(src, dst):
|
||||||
|
try:
|
||||||
|
os.remove(dst)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
os.symlink(src, dst)
|
||||||
|
|
||||||
|
os.makedirs(os.path.dirname(prepend_destdir(target)), exist_ok=True)
|
||||||
|
if os.path.dirname(source) == '.':
|
||||||
|
destdir_target = prepend_destdir(target)
|
||||||
|
call_symlink(source, destdir_target)
|
||||||
|
else:
|
||||||
|
destdir_source = prepend_destdir(source)
|
||||||
|
destdir_target = prepend_destdir(target)
|
||||||
|
destdir_target_dir = os.path.dirname(destdir_target)
|
||||||
|
relative_source = os.path.relpath(destdir_source, destdir_target_dir)
|
||||||
|
call_symlink(relative_source, destdir_target)
|
|
@ -1,12 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
# this is needed mostly because $DESTDIR is provided as a variable,
|
|
||||||
# and we need to create the target directory...
|
|
||||||
|
|
||||||
mkdir -vp "$(dirname "${DESTDIR:-}$2")"
|
|
||||||
if [ "$(dirname $1)" = . ]; then
|
|
||||||
ln -vfs -T "$1" "${DESTDIR:-}$2"
|
|
||||||
else
|
|
||||||
ln -vfs -T --relative "${DESTDIR:-}$1" "${DESTDIR:-}$2"
|
|
||||||
fi
|
|
Loading…
Reference in New Issue