vcpkg/ports/outcome/portfile.cmake
Niall Douglas a434cc74ea
[outcome] Replace Outcome single header based port with full fat cmake install port (#15603)
* Replace Outcome single header based port with full fat cmake install port.

* [outcome] Improve portfile.cmake

* update baseline

* Refactor @JackBoosY's changes to make the dependency SHA feature chosen.

* update baseline

* Fix outcome features so they actually work.

* update baseline

* [outcome] install usage

* update baseline

* [outcome] Always use vcpkg copies of dependencies

* DO NOT MERGE YET, ONLY FOR INSPECTION BY PR REVIEW.

1. Break out these dependencies into standalone ports:

  - ned14-internal-quickcpplib
  - status-code

2. Add port for LLFIO.

3. Add dependency smoke tests for Outcome and LLFIO as per instructions.

* Fix all remaining issues, including link failure. This changeset is now ready to merge into vcpkg.

* Update versions.

* Have LLFIO not build static or shared libs according to VCPKG_LIBRARY_LINKAGE.

* Fix last commit breaking everything :)

* Update versions.

* Disable uwp support for LLFIO.

* versions

* Fix status code on GCC 6 and 7

* Don't download ntkernel-error-category if not on Windows.

* Fix status-code on UWP.

* Update versions.

* Fix MSVC on ARM.

* Apply all the feedback from the PR review, more or less.

* versions

* Update to latest, disable UWP for Outcome.

Co-authored-by: JackBoosY <yuzaiyang@beyondsoft.com>
Co-authored-by: Robert Schumacher <roschuma@microsoft.com>
2021-03-30 10:17:02 -07:00

78 lines
3.2 KiB
CMake

# Outcome is composed of other third party libraries:
# Outcome
# <= status-code
# <= quickcpplib
# <= byte-lite
# <= gsl-lite
# <= Optional
#
# byte-lite and gsl-lite are in vcpkg, but may not be versions
# known to be compatible with Outcome. It has occurred in the
# past that newer versions were severely broken with Outcome.
#
# One can fetch an 'all sources' tarball from
# https://github.com/ned14/outcome/releases which contains
# the exact copy of those third party libraries known to
# have passed Outcome's CI process.
message(WARNING [=[
Outcome depends on QuickCppLib which uses the vcpkg versions of gsl-lite and byte-lite, rather than the versions tested by QuickCppLib's and Outcome's CI. It is not guaranteed to work with other versions, with failures experienced in the past up-to-and-including runtime crashes. See the warning message from QuickCppLib for how you can pin the versions of those dependencies in your manifest file to those with which QuickCppLib was tested. Do not report issues to upstream without first pinning the versions as QuickCppLib was tested against.
]=])
vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO ned14/outcome
REF all_tests_passed_b9e664fbf87a4122731f7f19590abad24f1448b8
SHA512 50666de7c6fed8260780a3bbd97eb8c8a27cf02541f15a19c316ddef30eafce155817ea8d77efee0180dbd07ad5da06a888275c324a554e25d5ce6bb80666071
HEAD_REF develop
PATCHES
outcome-prune-sources.patch
)
# Outcome needs a copy of QuickCppLib with which to bootstrap its cmake
file(COPY "${CURRENT_INSTALLED_DIR}/include/quickcpplib"
DESTINATION "${SOURCE_PATH}/quickcpplib/repo/include/"
)
file(COPY "${CURRENT_INSTALLED_DIR}/share/ned14-internal-quickcpplib/"
DESTINATION "${SOURCE_PATH}/quickcpplib/repo/"
)
# Outcome expects status-code to live inside its include directory
file(COPY "${CURRENT_INSTALLED_DIR}/include/status-code/"
DESTINATION "${SOURCE_PATH}/include/outcome/experimental/status-code/include/"
)
file(COPY "${CURRENT_INSTALLED_DIR}/include/status-code/detail/"
DESTINATION "${SOURCE_PATH}/include/outcome/experimental/status-code/include/detail/"
)
# Because outcome's deployed files are header-only, the debug build is not necessary
set(VCPKG_BUILD_TYPE release)
# Already installed dependencies don't appear on the include path, which Outcome assumes.
string(APPEND VCPKG_CXX_FLAGS " \"-I${CURRENT_INSTALLED_DIR}/include\"")
string(APPEND VCPKG_C_FLAGS " \"-I${CURRENT_INSTALLED_DIR}/include\"")
# Use Outcome's own build process, skipping examples and tests.
vcpkg_configure_cmake(
SOURCE_PATH "${SOURCE_PATH}"
PREFER_NINJA
OPTIONS
-DPROJECT_IS_DEPENDENCY=On
-Dquickcpplib_FOUND=1
-DOUTCOME_ENABLE_DEPENDENCY_SMOKE_TEST=ON # Leave this always on to test everything compiles
-DCMAKE_DISABLE_FIND_PACKAGE_Git=ON
)
if("run-tests" IN_LIST FEATURES)
vcpkg_build_cmake(TARGET test)
endif()
vcpkg_install_cmake()
vcpkg_fixup_cmake_targets(CONFIG_PATH lib/cmake/outcome)
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/lib")
file(INSTALL "${CURRENT_PORT_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
file(INSTALL "${SOURCE_PATH}/Licence.txt" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright)