aws / aws/aws-sdk-cpp

[CMake] Remove assumptions about LIBDIR and INCLUDEDIR being co-located in AWSSDK

Aperta
#2,009 2 commenti 0 reazioni 0 assegnatari Vedi su GitHub
bug Cmake p3
Lingua principale
C++
Stelle
2.2k
Fork
1.2k
Merge medio
4g 11h
PR unite (30g)
13

Descrizione

### Describe the bug

It's possible that the installation LIBDIR to be in a different directory from INCLUDEDIR.

Currently, the [AWSSDK logic](https://github.com/aws/aws-sdk-cpp/blob/6709bb6de9010b165b8bf44b708ba51e26fd5869/cmake/AWSSDKConfig.cmake#L103) assumes that it can traverse up then over to the lib directory.

### Expected Behavior

Since a package manager installed aws-sdk-cpp, aws-sdk-cpp should re-use the `install(TARGETS` information to conclude where to find a package (or at least prefer this method) with `find_package()`. This should also work with `export(TARGETS` as well.

### Current Behavior

At least for nix, the current behavior is that the `find_package(AWSSDK COMPONENTS [components]) ... AWSSDK_LINK_LIBRARIES` workflow is largely useless.

### Reproduction Steps

This would probably not be worthwhile.

### Possible Solution

- Use `find_package(aws-sdk-core)` + `get_target_property(AWS_CORE_HEADER_DIR aws-sdk-core INCLUDE_DIRECTORIES)`
- Takes into account different installation locations (e.g. /usr/local/ vs /usr/ vs build dir)

### Additional Information/Context

Nixpkgs for aws-sdk-cpp installs build dependencies separately from runtime

```
$ nix-build -A aws-sdk-cpp.all
/nix/store/8acky9zc3kldyz0m6728ff4vf24sg3rb-aws-sdk-cpp-1.9.238
/nix/store/34qdbh5bn2wdsm76m9gxqvyfxix65p0j-aws-sdk-cpp-1.9.238-dev

$ ls /nix/store/34qdbh5bn2wdsm76m9gxqvyfxix65p0j-aws-sdk-cpp-1.9.238-dev/include/aws/core/Aws.h
/nix/store/34qdbh5bn2wdsm76m9gxqvyfxix65p0j-aws-sdk-cpp-1.9.238-dev/include/aws/core/Aws.h

$ ls /nix/store/8acky9zc3kldyz0m6728ff4vf24sg3rb-aws-sdk-cpp-1.9.238/lib/libaws-cpp-sdk-core.so
/nix/store/8acky9zc3kldyz0m6728ff4vf24sg3rb-aws-sdk-cpp-1.9.238/lib/libaws-cpp-sdk-core.so
```

[Traversing from the `-dev` output](https://github.com/aws/aws-sdk-cpp/blob/6709bb6de9010b165b8bf44b708ba51e26fd5869/cmake/AWSSDKConfig.cmake#L113) will set AWS_SDK_ROOT_DIR to something which will not contain the respective library, which breaks the AWSSDK logic.

In practice, this isn't too much of an issue as `find_package()` will find the corresponding `-targets.cmake`, which will correctly reflect the passed `CMAKE_INSTALL_LIBDIR` and `CMAKE_INSTALL_INCLUDEDIR` values for the build. But it does mean that the QoL features of AWSSDK are largely unusable on packaging tools which don't assume FHS (or similar unification of dependencies).

### AWS CPP SDK version used

1.9.238

### Compiler and Version used

gcc 11

### Operating System and version

NixOS 22.11pre393074.614a842b74b (unstable)

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Leggi cmake/AWSSDKConfig.cmake intorno alle righe 103 e 113, quindi esamina come install(TARGETS) ed export(TARGETS) producono i metadati del pacchetto. Segui il workflow find_package(AWSSDK COMPONENTS ...) quando le directory delle librerie e degli include sono separate, usando i percorsi Nix nell’issue come scenario. Il lavoro è completato quando AWSSDK_LINK_LIBRARIES e le funzionalità QoL correlate funzionano senza assumere che le directory siano collocate insieme.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
cmake, cpp
Ambito
build-system
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.