From d9633d939c665e527f8bda22669f543f03540b17 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Mon, 23 Nov 2020 18:43:23 +0100 Subject: [vcpkg] initial openbsd (community) support (#14549) * initial openbsd support in vcpkg * after clang-format * hardcoded in the preferred compiler for openbsd in bootstrap scipt (thanks @tormfinn) * Fetch a patched pkg-config because openbsd pkg-config lacks {fcfiledir} * fixes from review feedback * corrected hash for pkg-config.openbsd * re-added missing endif() * regenerate docs * Update scripts/cmake/vcpkg_configure_meson.cmake Co-authored-by: Nicole Mazzuca --- toolsrc/src/vcpkg/base/system.process.cpp | 6 ++++++ toolsrc/src/vcpkg/build.cpp | 4 ++++ toolsrc/src/vcpkg/tools.cpp | 4 +++- toolsrc/src/vcpkg/triplet.cpp | 2 ++ 4 files changed, 15 insertions(+), 1 deletion(-) (limited to 'toolsrc/src') diff --git a/toolsrc/src/vcpkg/base/system.process.cpp b/toolsrc/src/vcpkg/base/system.process.cpp index 16b37dff7..b330069e6 100644 --- a/toolsrc/src/vcpkg/base/system.process.cpp +++ b/toolsrc/src/vcpkg/base/system.process.cpp @@ -156,6 +156,12 @@ namespace vcpkg Checks::check_exit(VCPKG_LINE_INFO, rcode == 0, "Could not determine current executable path."); Checks::check_exit(VCPKG_LINE_INFO, len > 0, "Could not determine current executable path."); return fs::path(exePath, exePath + len - 1); +#elif defined(__OpenBSD__) + const char* progname = getprogname(); + char resolved_path[PATH_MAX]; + auto ret = realpath(progname, resolved_path); + Checks::check_exit(VCPKG_LINE_INFO, ret != nullptr, "Could not determine current executable path."); + return fs::u8path(resolved_path); #else /* LINUX */ std::array buf; auto written = readlink("/proc/self/exe", buf.data(), buf.size()); diff --git a/toolsrc/src/vcpkg/build.cpp b/toolsrc/src/vcpkg/build.cpp index d418f71f5..495b517ea 100644 --- a/toolsrc/src/vcpkg/build.cpp +++ b/toolsrc/src/vcpkg/build.cpp @@ -694,6 +694,10 @@ namespace vcpkg::Build { return m_paths.scripts / fs::u8path("toolchains/freebsd.cmake"); } + else if (cmake_system_name == "OpenBSD") + { + return m_paths.scripts / fs::u8path("toolchains/openbsd.cmake"); + } else if (cmake_system_name == "Android") { return m_paths.scripts / fs::u8path("toolchains/android.cmake"); diff --git a/toolsrc/src/vcpkg/tools.cpp b/toolsrc/src/vcpkg/tools.cpp index b7092a364..69ad05d38 100644 --- a/toolsrc/src/vcpkg/tools.cpp +++ b/toolsrc/src/vcpkg/tools.cpp @@ -53,11 +53,13 @@ namespace vcpkg static constexpr StringLiteral OS_STRING = "linux"; #elif defined(__FreeBSD__) static constexpr StringLiteral OS_STRING = "freebsd"; +#elif defined(__OpenBSD__) + static constexpr StringLiteral OS_STRING = "openbsd"; #else return std::string("operating system is unknown"); #endif -#if defined(_WIN32) || defined(__APPLE__) || defined(__linux__) || defined(__FreeBSD__) +#if defined(_WIN32) || defined(__APPLE__) || defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) static const std::string XML_VERSION = "2"; static const fs::path XML_PATH = paths.scripts / "vcpkgTools.xml"; static const std::regex XML_VERSION_REGEX{R"###()###"}; diff --git a/toolsrc/src/vcpkg/triplet.cpp b/toolsrc/src/vcpkg/triplet.cpp index 45dbf1f33..dbb82e3c8 100644 --- a/toolsrc/src/vcpkg/triplet.cpp +++ b/toolsrc/src/vcpkg/triplet.cpp @@ -90,6 +90,8 @@ namespace vcpkg return Triplet::from_canonical_name("x64-osx"); #elif defined(__FreeBSD__) return Triplet::from_canonical_name("x64-freebsd"); +#elif defined(__OpenBSD__) + return Triplet::from_canonical_name("x64-openbsd"); #elif defined(__GLIBC__) #if defined(__aarch64__) return Triplet::from_canonical_name("arm64-linux"); -- cgit v1.2.3