Commit ad0371f
authored
Fix importing TileDB in CMake versions prior to 3.18. (#4671)
#4528 introduced a single `TileDB::tiledb`exported CMake target for
TileDB with either static or dynamic linkage. For compatibility with
previous versions, the targets `TileDB::tiledb_shared` or
`TileDB::tiledb_static` were also defined depending on the linkage, as
`ALIAS`es to `TileDB::tiledb`.
As it turns out however, we cannot use `ALIAS` targets, because they are
always declared in the global scope prior to CMake 3.18 and if
`find_package(TileDB)` is not called in the top-level `CMakeLists.txt`
file, it will fail with `add_library cannot create ALIAS target
"TileDB::tiledb_shared" because target "TileDB::tiledb" is imported but
not globally visible.`.
Nor can we switch to using `IMPORTED INTERFACE` targets and linking them
to `TileDB::tiledb`, because it would bring a minor breaking change[^1].
Because `TileDB::tiledb_shared` would become an `INTERFACE` library, it
does not have an `IMPORTED_LOCATION` anymore, which would cause [calls
to
`install_target_libs(TileDB::tiledb_shared)`](https://github.com/TileDB-Inc/TileDB-VCF/blob/5bcc79b07935ac540c56bf6ed9ee0f5d60bf247e/libtiledbvcf/cmake/Modules/FindTileDB_EP.cmake#L121)
to fail.
Thankfully there is another solution. We set the
[`EXPORT_NAME`](https://cmake.org/cmake/help/latest/prop_tgt/EXPORT_NAME.html)
of the `tiledb` target to either `tiledb_shared` or `tiledb_static`
depending on the linkage, and define `TileDB::tiledb` as an `IMPORTED
INTERFACE` target[^2] to the linkage-specific target. This maintains
full compatibility.
[^1]: Something similar is the "breaking build system change" I talked
about in
#4408 (comment).
After removing the `install_target_libs` calls from this repository, the
change in Curl did not afffect us and we could update much more easily.
[^2]: In this opposite case the unified target _must_ be an `IMPORTED
INTERFACE`. We cannot get the `IMPORTED_LOCATION` of `TileDB::tiledb`,
but since the target is new this is not a breaking change.
---
TYPE: BUILD
DESC: Fix importing TileDB in CMake versions prior to 3.18.1 parent 49e8752 commit ad0371f
2 files changed
+17
-4
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
44 | 44 | | |
45 | 45 | | |
46 | 46 | | |
47 | | - | |
48 | | - | |
49 | | - | |
50 | | - | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
51 | 55 | | |
52 | 56 | | |
53 | 57 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
835 | 835 | | |
836 | 836 | | |
837 | 837 | | |
| 838 | + | |
| 839 | + | |
| 840 | + | |
| 841 | + | |
| 842 | + | |
| 843 | + | |
| 844 | + | |
| 845 | + | |
| 846 | + | |
838 | 847 | | |
839 | 848 | | |
840 | 849 | | |
| |||
0 commit comments