diff --git a/.gitignore b/.gitignore index 558e11a..e848fb8 100644 --- a/.gitignore +++ b/.gitignore @@ -73,6 +73,7 @@ core /tests/provides /tests/regress /tests/requires +/tests/symlink /tests/sysroot /tests/test_env.sh /tests/version diff --git a/Makefile.am b/Makefile.am index 0d96500..661aaa6 100644 --- a/Makefile.am +++ b/Makefile.am @@ -107,6 +107,7 @@ EXTRA_DIST = pkg.m4 \ tests/lib1/tuple-quoting.pc \ tests/lib1/empty-tuple.pc \ tests/lib1/orphaned-requires-private.pc \ + tests/lib1/pcfiledir.pc \ tests/lib1/sysroot-dir-2.pc \ tests/lib1/sysroot-dir-3.pc \ tests/lib1/sysroot-dir-4.pc \ @@ -137,6 +138,7 @@ test_scripts= tests/meson.build \ tests/provides.sh \ tests/regress.sh \ tests/requires.sh \ + tests/symlink.sh \ tests/sysroot.sh \ tests/version.sh diff --git a/tests/Kyuafile.in b/tests/Kyuafile.in index 0b53da7..f50b749 100644 --- a/tests/Kyuafile.in +++ b/tests/Kyuafile.in @@ -11,3 +11,4 @@ atf_test_program{name='conflicts'} atf_test_program{name='version'} atf_test_program{name='framework'} atf_test_program{name='provides'} +atf_test_program{name='symlink'} diff --git a/tests/lib1/pcfiledir.pc b/tests/lib1/pcfiledir.pc new file mode 100644 index 0000000..fa6ada9 --- /dev/null +++ b/tests/lib1/pcfiledir.pc @@ -0,0 +1,8 @@ +prefix=${pcfiledir} +exec_prefix=${prefix} +libdir=${prefix}/lib +includedir=${prefix}/include + +Name: foo +Description: A testing pkg-config file with a ${pcfiledir} +Version: 1.2.3 diff --git a/tests/meson.build b/tests/meson.build index 39ceeeb..56406c3 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -11,8 +11,9 @@ tests = [ 'provides', 'regress', 'requires', + 'symlink', 'sysroot', - 'version' + 'version', ] diff --git a/tests/symlink.sh b/tests/symlink.sh new file mode 100755 index 0000000..7f49655 --- /dev/null +++ b/tests/symlink.sh @@ -0,0 +1,122 @@ +#!/usr/bin/env atf-sh + +. $(atf_get_srcdir)/test_env.sh + +tests_init \ + pcfiledir_symlink_absolute \ + pcfiledir_symlink_relative + +# - We need to create a temporary subtree, since symlinks are not preserved +# in "make dist". +# - ${srcdir} is relative and since we need to compare paths, we would have +# to portably canonicalize it again, which is hard. Instead, just keep +# the whole thing nested. +pcfiledir_symlink_absolute_body() +{ + mkdir -p tmp/child + cp -f "${selfdir}/lib1/pcfiledir.pc" tmp/child/ + ln -f -s "${PWD}/tmp/child/pcfiledir.pc" tmp/pcfiledir.pc # absolute + ln -f -s tmp/pcfiledir.pc pcfiledir.pc + + atf_check \ + -o inline:"${PWD}/tmp/child\n" \ + pkgconf --variable=prefix pcfiledir.pc + atf_check \ + -o inline:"${PWD}/tmp/child\n" \ + pkgconf --variable=prefix tmp/pcfiledir.pc + atf_check \ + -o inline:"tmp/child\n" \ + pkgconf --variable=prefix tmp/child/pcfiledir.pc + + atf_check \ + -o inline:"${PWD}/tmp/child\n" \ + pkgconf --variable=prefix "${PWD}/pcfiledir.pc" + atf_check \ + -o inline:"${PWD}/tmp/child\n" \ + pkgconf --variable=prefix "${PWD}/tmp/pcfiledir.pc" + atf_check \ + -o inline:"${PWD}/tmp/child\n" \ + pkgconf --variable=prefix "${PWD}/tmp/child/pcfiledir.pc" + + export PKG_CONFIG_PATH="." + atf_check \ + -o inline:"${PWD}/tmp/child\n" \ + pkgconf --variable=prefix pcfiledir + export PKG_CONFIG_PATH="${PWD}" + atf_check \ + -o inline:"${PWD}/tmp/child\n" \ + pkgconf --variable=prefix pcfiledir + + export PKG_CONFIG_PATH="tmp" + atf_check \ + -o inline:"${PWD}/tmp/child\n" \ + pkgconf --variable=prefix pcfiledir + export PKG_CONFIG_PATH="${PWD}/tmp" + atf_check \ + -o inline:"${PWD}/tmp/child\n" \ + pkgconf --variable=prefix pcfiledir + + export PKG_CONFIG_PATH="tmp/child" + atf_check \ + -o inline:"tmp/child\n" \ + pkgconf --variable=prefix pcfiledir + export PKG_CONFIG_PATH="${PWD}/tmp/child" + atf_check \ + -o inline:"${PWD}/tmp/child\n" \ + pkgconf --variable=prefix pcfiledir +} + +pcfiledir_symlink_relative_body() +{ + mkdir -p tmp/child + cp -f "${selfdir}/lib1/pcfiledir.pc" tmp/child/ + ln -f -s child/pcfiledir.pc tmp/pcfiledir.pc # relative + ln -f -s tmp/pcfiledir.pc pcfiledir.pc + + atf_check \ + -o inline:"tmp/child\n" \ + pkgconf --variable=prefix pcfiledir.pc + atf_check \ + -o inline:"tmp/child\n" \ + pkgconf --variable=prefix tmp/pcfiledir.pc + atf_check \ + -o inline:"tmp/child\n" \ + pkgconf --variable=prefix tmp/child/pcfiledir.pc + + atf_check \ + -o inline:"${PWD}/tmp/child\n" \ + pkgconf --variable=prefix "${PWD}/pcfiledir.pc" + atf_check \ + -o inline:"${PWD}/tmp/child\n" \ + pkgconf --variable=prefix "${PWD}/tmp/pcfiledir.pc" + atf_check \ + -o inline:"${PWD}/tmp/child\n" \ + pkgconf --variable=prefix "${PWD}/tmp/child/pcfiledir.pc" + + export PKG_CONFIG_PATH="." + atf_check \ + -o inline:"tmp/child\n" \ + pkgconf --variable=prefix pcfiledir + export PKG_CONFIG_PATH="${PWD}" + atf_check \ + -o inline:"${PWD}/tmp/child\n" \ + pkgconf --variable=prefix pcfiledir + + export PKG_CONFIG_PATH="tmp" + atf_check \ + -o inline:"tmp/child\n" \ + pkgconf --variable=prefix pcfiledir + export PKG_CONFIG_PATH="${PWD}/tmp" + atf_check \ + -o inline:"${PWD}/tmp/child\n" \ + pkgconf --variable=prefix pcfiledir + + export PKG_CONFIG_PATH="tmp/child" + atf_check \ + -o inline:"tmp/child\n" \ + pkgconf --variable=prefix pcfiledir + export PKG_CONFIG_PATH="${PWD}/tmp/child" + atf_check \ + -o inline:"${PWD}/tmp/child\n" \ + pkgconf --variable=prefix pcfiledir +}