Skip to content

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

Open
@jonringer

Description

@jonringer

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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    CmakeCmake related submissionsbugThis issue is a bug.p3This is a minor priority issue

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions