aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2016-05-30 23:08:24 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2016-05-30 23:08:24 +0300
commit0482635c1293ecc1148da8236f6b77cd4f21e130 (patch)
treedcbb570b109ad93d0b23986273a73e708d3352ce
parent8e734a8c9fbd874a20c59a3994df0bf081f3bf48 (diff)
downloadmeson-0482635c1293ecc1148da8236f6b77cd4f21e130.zip
meson-0482635c1293ecc1148da8236f6b77cd4f21e130.tar.gz
meson-0482635c1293ecc1148da8236f6b77cd4f21e130.tar.bz2
Handle case of install_subdirring a subdir.
-rw-r--r--mesonbuild/backend/ninjabackend.py11
-rw-r--r--mesonbuild/scripts/meson_install.py5
-rw-r--r--test cases/common/66 install subdir/installed_files.txt1
-rw-r--r--test cases/common/66 install subdir/meson.build1
-rw-r--r--test cases/common/66 install subdir/sub/sub1/third.dat1
5 files changed, 16 insertions, 3 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index ce8d46e..077254d 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -545,8 +545,15 @@ int dummy;
def generate_subdir_install(self, d):
for sd in self.build.get_install_subdirs():
- src_dir = os.path.join(self.environment.get_source_dir(), sd.source_subdir)
- inst_dir = sd.installable_subdir
+ inst_subdir = sd.installable_subdir.rstrip('/')
+ idir_parts = inst_subdir.split('/')
+ if len(idir_parts) > 1:
+ subdir = os.path.join(sd.source_subdir, '/'.join(idir_parts[:-1]))
+ inst_dir = idir_parts[-1]
+ else:
+ subdir = sd.source_subdir
+ inst_dir = sd.installable_subdir
+ src_dir = os.path.join(self.environment.get_source_dir(), subdir)
dst_dir = os.path.join(self.environment.get_prefix(), sd.install_dir)
d.install_subdirs.append([src_dir, inst_dir, dst_dir])
diff --git a/mesonbuild/scripts/meson_install.py b/mesonbuild/scripts/meson_install.py
index 1cba480..0af7c24 100644
--- a/mesonbuild/scripts/meson_install.py
+++ b/mesonbuild/scripts/meson_install.py
@@ -55,7 +55,6 @@ def install_subdirs(data):
if not os.path.exists(dst_dir):
os.makedirs(dst_dir)
for root, dirs, files in os.walk(src_prefix):
- print(root)
for d in dirs:
abs_src = os.path.join(src_dir, root, d)
filepart = abs_src[len(src_dir)+1:]
@@ -75,6 +74,10 @@ def install_subdirs(data):
print('Tried to copy file %s but a directory of that name already exists.' % abs_dst)
if os.path.exists(abs_dst):
os.unlink(abs_dst)
+ parent_dir = os.path.split(abs_dst)[0]
+ if not os.path.isdir(parent_dir):
+ os.mkdir(parent_dir)
+ shutil.copystat(os.path.split(abs_src)[0], parent_dir)
shutil.copy2(abs_src, abs_dst, follow_symlinks=False)
def install_data(d):
diff --git a/test cases/common/66 install subdir/installed_files.txt b/test cases/common/66 install subdir/installed_files.txt
index fb60d74..a610c51 100644
--- a/test cases/common/66 install subdir/installed_files.txt
+++ b/test cases/common/66 install subdir/installed_files.txt
@@ -1,3 +1,4 @@
usr/share/sub1/data1.dat
usr/share/sub1/second.dat
+usr/share/sub1/third.dat
usr/share/sub1/sub2/data2.dat
diff --git a/test cases/common/66 install subdir/meson.build b/test cases/common/66 install subdir/meson.build
index d153213..669cf09 100644
--- a/test cases/common/66 install subdir/meson.build
+++ b/test cases/common/66 install subdir/meson.build
@@ -2,3 +2,4 @@ project('install a whole subdir', 'c')
subdir('subdir')
install_subdir('sub1', install_dir : 'share')
+install_subdir('sub/sub1', install_dir : 'share')
diff --git a/test cases/common/66 install subdir/sub/sub1/third.dat b/test cases/common/66 install subdir/sub/sub1/third.dat
new file mode 100644
index 0000000..5ccbc43
--- /dev/null
+++ b/test cases/common/66 install subdir/sub/sub1/third.dat
@@ -0,0 +1 @@
+This is a third data file for sub1 dir.