aws-sdk-cpp icon indicating copy to clipboard operation
aws-sdk-cpp copied to clipboard

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

Open jonringer opened this issue 3 years ago • 2 comments

Describe the bug

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

Currently, the AWSSDK logic 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 <nixpkgs> -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 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(<pkg>) will find the corresponding <pkg>-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)

jonringer avatar Jul 26 '22 00:07 jonringer

This relates to https://github.com/aws/aws-sdk-cpp/issues/1888, although likely out-of-scope; as it looks like there is lower hanging fruit which would impact people more outside of this "niche" use case.

jonringer avatar Jul 27 '22 21:07 jonringer

Thanks for the suggestion. I will bring this up to see if we want to include this in our build improvements

jmklix avatar Nov 04 '22 17:11 jmklix