Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make godot-cpp installable with cmake config #1418

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

ytnuf
Copy link
Contributor

@ytnuf ytnuf commented Mar 23, 2024

This PR allows this library to be installable.

# after building it
cmake --install <insert_build_directory_here> --component godot-cpp-dev

The reason is so that this can be easily installed via a package manager without resorting to patches.

This project uses the standard CMAKE_INSTALL_* variables, so that the package manager can decide where to install the various artifacts of this package.

Also provides:

  • config file so it can be found via find_package
  • config-version file can the user can specify which version they require

From a user's perspective they can use this library like so:

find_package("godot-cpp" 4.2.0 CONFIG REQUIRED)
target_link_library("my-gdextension-project" PRIVATE "godot::cpp")

Note that the target library's name godot::cpp is the consistent as when used via find_package or as a sub-project.

This is because target_link_options was added in v3.13
So this wouldn't build with cmake v3.12

Likewise in CMAKE_CXX_STANDARD only supports value of 17 starting with
cmake v3.9
So the test wouldn't build properly with cmake v3.6
@ytnuf ytnuf requested a review from a team as a code owner March 23, 2024 18:18
@AThousandShips AThousandShips added enhancement This is an enhancement on the current functionality discussion topic:buildsystem Related to the buildsystem or CI setup labels Mar 23, 2024
@AThousandShips AThousandShips added this to the 4.x milestone Mar 23, 2024
@AThousandShips
Copy link
Member

Please open a proposal to track the support and details of this feature, this is pretty specific and we'd need to judge the actual demand

This is so this library can be used via a package manager

The install destination uses CMAKE_INSTALL_ so that package managers
can choose the best location for these artifacts

godot-cpp-dev is the installed component this is so that if this
library is a subproject, the user can install their project without
installing this library by specifying the components

As BUILD_INTERFACE requires absolute path, this means that
GODOT_GDEXTENSION_DIR needs to be an absolute path

config filename can either be PascalCase or kebab-case, the latter was
chosen to be consistent with the package's name (godot-cpp)

string(JSON ...) is only available in cmake v3.19, as it is used to
obtain the version, this means that config-version file is only created
when using cmake v3.19 or later
@dsnopek dsnopek added the cmake label Apr 9, 2024
vicroms pushed a commit to microsoft/vcpkg that referenced this pull request Jun 8, 2024
Fixes #34492

- [X] Changes comply with the [maintainer
guide](https://github.com/microsoft/vcpkg-docs/blob/main/vcpkg/contributing/maintainer-guide.md).
- [X] The name of the port matches an existing name for this component
on https://repology.org/ if possible, and/or is strongly associated with
that component on search engines.
- [X] Optional dependencies are resolved in exactly one way. For
example, if the component is built with CMake, all `find_package` calls
are REQUIRED, are satisfied by `vcpkg.json`'s declared dependencies, or
disabled with
[CMAKE_DISABLE_FIND_PACKAGE_Xxx](https://cmake.org/cmake/help/latest/variable/CMAKE_DISABLE_FIND_PACKAGE_PackageName.html).
- [X] The versioning scheme in `vcpkg.json` matches what upstream says.
- [X] The license declaration in `vcpkg.json` matches what upstream
says.
- [X] The installed as the "copyright" file matches what upstream says.
- [X] The source code of the component installed comes from an
authoritative source.
- [X] The generated "usage text" is accurate. See
[adding-usage](https://github.com/microsoft/vcpkg-docs/blob/main/vcpkg/examples/adding-usage.md)
for context.
- [X] The version database is fixed by rerunning `./vcpkg x-add-version
--all` and committing the result.
- [X] Only one version is in the new port's versions file.
- [X] Only one version is added to each modified port's versions file.

Notes:
- This library is static only, so it's only supported for the static
triplets.
- Unfortunately, godot-cpp is not yet installable, so I had to patch its
cmake script.
I have made a PR upstream:
godotengine/godot-cpp#1418
But in the meanwhile, I have created an unofficial export target
`unofficial::godot::cpp`.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
cmake discussion enhancement This is an enhancement on the current functionality topic:buildsystem Related to the buildsystem or CI setup
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Allow godot-cpp to be installable
3 participants