-
Notifications
You must be signed in to change notification settings - Fork 6.5k
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
[cdt] Add new port #29324
[cdt] Add new port #29324
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
diff --git a/CDT/CMakeLists.txt b/CDT/CMakeLists.txt | ||
index 555fb4e..86be850 100644 | ||
--- a/CDT/CMakeLists.txt | ||
+++ b/CDT/CMakeLists.txt | ||
@@ -155,7 +155,7 @@ target_compile_definitions( | ||
) | ||
|
||
if(CDT_USE_BOOST) | ||
- target_link_libraries(${PROJECT_NAME} INTERFACE Boost::boost) | ||
+ target_link_libraries(${PROJECT_NAME} PUBLIC Boost::boost) | ||
endif() | ||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
vcpkg_from_github( | ||
OUT_SOURCE_PATH SOURCE_PATH | ||
REPO artem-ogre/CDT | ||
REF "${VERSION}" | ||
SHA512 811d1fede4960808954bc17f37c8639f52800c98562e9283517c666735ddf3b2f2f8a57992669899be13c40b0fc4439d3cd1a101cb596d2335ef4fc307408c63 | ||
HEAD_REF master | ||
PATCHES | ||
boost-link.patch | ||
) | ||
|
||
vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS | ||
FEATURES | ||
"64-bit-index-type" CDT_USE_64_BIT_INDEX_TYPE | ||
"as-compiled-library" CDT_USE_AS_COMPILED_LIBRARY | ||
"boost" CDT_USE_BOOST | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This looks like an alternative but it doesn't appear to leak into any ABI sensitive bits, so it's probably OK. However, the value does need to be "baked" into the resulting headers. See https://github.com/microsoft/vcpkg/blob/master/docs/maintainers/maintainer-guide.md#a-feature-may-replace-polyfills-with-aliases-provided-that-replacement-is-baked-into-the-installed-tree I think you can do this with something like:
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Done |
||
) | ||
|
||
if (NOT CDT_USE_AS_COMPILED_LIBRARY) | ||
set(VCPKG_BUILD_TYPE "release") # header-only | ||
endif() | ||
|
||
vcpkg_cmake_configure( | ||
SOURCE_PATH "${SOURCE_PATH}/CDT" | ||
OPTIONS | ||
${FEATURE_OPTIONS} | ||
) | ||
|
||
vcpkg_cmake_install() | ||
vcpkg_cmake_config_fixup(CONFIG_PATH cmake) | ||
|
||
if(CDT_USE_BOOST) | ||
set(CDT_USE_BOOST_STR "#if 1") | ||
else() | ||
set(CDT_USE_BOOST_STR "#if 0") | ||
endif() | ||
foreach(FILE CDTUtils.h Triangulation.hpp) | ||
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/${FILE}" "#ifdef CDT_USE_BOOST" "${CDT_USE_BOOST_STR}") | ||
endforeach() | ||
|
||
if (CDT_USE_AS_COMPILED_LIBRARY) | ||
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include") | ||
endif() | ||
|
||
vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE") |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
{ | ||
"name": "cdt", | ||
"version": "1.2.0", | ||
"description": "Constrained Delaunay Triangulation", | ||
"homepage": "https://github.com/artem-ogre/CDT.git", | ||
"license": "MPL-2.0", | ||
"dependencies": [ | ||
{ | ||
"name": "vcpkg-cmake", | ||
"host": true | ||
}, | ||
{ | ||
"name": "vcpkg-cmake-config", | ||
"host": true | ||
} | ||
], | ||
"features": { | ||
"64-bit-index-type": { | ||
"description": "64bits are used to store vertex/triangle index types" | ||
}, | ||
"as-compiled-library": { | ||
"description": "Templates for float and double will be instantiated and compiled into a library" | ||
}, | ||
"boost": { | ||
"description": "Boost is used as a fall-back for features missing in C++98 and performance tweaks", | ||
"dependencies": [ | ||
"boost-container" | ||
] | ||
} | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
{ | ||
"versions": [ | ||
{ | ||
"git-tree": "d04985a703ae8b9201876879003d44c84f719a3a", | ||
"version": "1.2.0", | ||
"port-version": 0 | ||
} | ||
] | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@ex-purple
Hello, CDT maintainer here.
Could you explain why this patch is necessary? Maybe I could do the change upstream to avoid the need for patching.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks this #29324 (comment)
Otherwise the compiler just doesn't know where to find the boost headers to build cdt as library.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@ex-purple
Sorry, I still don't get it :)
Error in this comment looks to be an include error. As CDT does not require any of the compiled parts of boost, in my understanding using
target_link_libraries
withINTERFACE
should be enough. At least it works for cdt's automated CI builds.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
When I build CDT as header-only and use
PUBLIC
I get the CMake error: "INTERFACE library can only be used with the INTERFACE keyword"There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Look this: https://cmake.org/cmake/help/latest/module/FindBoost.html#imported-targets
The command target_link_libraries(${PROJECT_NAME} PUBLIC Boost::boost) provides path to the boost headers
How else would the compiler find the boost header files to build CDT?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just check the value of the CDT_USE_AS_COMPILED_LIBRARY flag to choose between the INTERFACE or PUBLIC option.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You are looking to get boost's include directories added to the build, so they need to be in cdt's build.
INTERFACE
supplies those include directories only to downstream consumers of your library.You might not see this in your CI if another one of your dependencies happens to add the same include path, or if your system has another copy of boost installed somewhere global like
/usr/include
that is actually getting used here rather than the copy the user expected.