# Copyright 2020-2023 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=8 # These must be bumped together: # dev-cpp/edencommon # dev-cpp/folly # dev-util/watchman # TODO: Split into different variables then combine for each component? # Not all is in rust/ dir. # Rust components: # - thirdparty/deelevate_binding/Cargo.toml # - rust/watchman_client/Cargo.toml # - rust/serde_bser/Cargo.toml # - cli/Cargo.toml CRATES=" ahash-0.8.3 aho-corasick-0.7.20 android_system_properties-0.1.5 ansi_term-0.12.1 anyhow-1.0.70 atty-0.2.14 autocfg-1.1.0 base64-0.10.1 bitflags-1.3.2 bumpalo-3.12.0 byteorder-1.4.3 bytes-1.4.0 cc-1.0.79 cfg-if-1.0.0 chrono-0.4.24 clap-2.34.0 codespan-reporting-0.11.1 core-foundation-sys-0.8.4 crossbeam-0.8.2 crossbeam-channel-0.5.8 crossbeam-deque-0.8.3 crossbeam-epoch-0.9.14 crossbeam-queue-0.3.8 crossbeam-utils-0.8.15 cxx-1.0.94 cxxbridge-flags-1.0.94 cxxbridge-macro-1.0.94 cxx-build-1.0.94 deelevate-0.1.1 dirs-4.0.0 dirs-sys-0.3.7 duct-0.13.6 either-1.8.1 embed-resource-1.8.0 filedescriptor-0.7.3 fnv-1.0.7 futures-0.1.31 futures-0.3.28 futures-channel-0.3.28 futures-core-0.3.28 futures-executor-0.3.28 futures-io-0.3.28 futures-macro-0.3.28 futures-sink-0.3.28 futures-task-0.3.28 futures-util-0.3.28 getrandom-0.1.16 getrandom-0.2.9 heck-0.3.3 hermit-abi-0.1.19 hermit-abi-0.2.6 iana-time-zone-0.1.56 iana-time-zone-haiku-0.1.1 itoa-1.0.6 js-sys-0.3.61 jwalk-0.6.2 lazy_static-1.4.0 libc-0.2.141 link-cplusplus-1.0.8 lock_api-0.4.9 log-0.4.17 maplit-1.0.2 maybe-uninit-2.0.0 memchr-2.5.0 memmem-0.1.1 memoffset-0.6.5 memoffset-0.8.0 mio-0.8.6 nix-0.25.1 nom-5.1.2 ntapi-0.4.0 num-0.2.1 num-bigint-0.2.6 num-complex-0.2.4 num_cpus-1.15.0 num-derive-0.2.5 num-integer-0.1.45 num-iter-0.1.43 num-rational-0.2.4 num-traits-0.2.15 once_cell-1.17.1 ordered-float-1.1.1 os_pipe-1.1.3 parking_lot-0.12.1 parking_lot_core-0.9.7 pathsearch-0.2.0 phf-0.11.1 phf_codegen-0.11.1 phf_generator-0.11.1 phf_shared-0.11.1 pin-project-lite-0.2.9 pin-utils-0.1.0 ppv-lite86-0.2.17 proc-macro2-0.4.30 proc-macro2-1.0.56 proc-macro-error-1.0.4 proc-macro-error-attr-1.0.4 quote-0.6.13 quote-1.0.26 rand-0.7.3 rand-0.8.5 rand_chacha-0.2.2 rand_core-0.5.1 rand_core-0.6.4 rand_hc-0.2.0 rayon-1.7.0 rayon-core-1.11.0 redox_syscall-0.2.16 redox_users-0.4.3 regex-1.7.3 regex-syntax-0.6.29 rustc_version-0.4.0 ryu-1.0.13 scopeguard-1.1.0 scratch-1.0.5 semver-0.9.0 semver-1.0.17 semver-parser-0.7.0 serde-1.0.160 serde_bytes-0.11.9 serde_derive-1.0.160 serde_json-1.0.96 shared_child-1.0.0 shared_library-0.1.9 signal-hook-0.1.17 signal-hook-registry-1.4.1 siphasher-0.3.10 slab-0.4.8 smallvec-0.6.14 smallvec-1.10.0 socket2-0.4.9 strsim-0.8.0 structopt-0.3.26 structopt-derive-0.4.18 syn-0.15.44 syn-1.0.109 syn-2.0.15 sysinfo-0.26.9 tabular-0.2.0 termcolor-1.2.0 terminfo-0.7.5 termios-0.3.3 termwiz-0.8.0 textwrap-0.11.0 thiserror-1.0.40 thiserror-impl-1.0.40 time-0.1.45 tokio-1.27.0 tokio-macros-2.0.0 tokio-util-0.6.10 toml-0.5.11 tracing-0.1.37 tracing-core-0.1.30 unicode-ident-1.0.8 unicode-segmentation-1.10.1 unicode-width-0.1.10 unicode-xid-0.1.0 utf8parse-0.1.1 vec_map-0.8.2 vergen-3.2.0 version_check-0.9.4 vswhom-0.1.0 vswhom-sys-0.1.2 vtparse-0.2.2 wasi-0.10.0+wasi-snapshot-preview1 wasi-0.11.0+wasi-snapshot-preview1 wasi-0.9.0+wasi-snapshot-preview1 wasm-bindgen-0.2.84 wasm-bindgen-backend-0.2.84 wasm-bindgen-macro-0.2.84 wasm-bindgen-macro-support-0.2.84 wasm-bindgen-shared-0.2.84 winapi-0.3.9 winapi-i686-pc-windows-gnu-0.4.0 winapi-util-0.1.5 winapi-x86_64-pc-windows-gnu-0.4.0 windows-0.48.0 windows_aarch64_gnullvm-0.42.2 windows_aarch64_gnullvm-0.48.0 windows_aarch64_msvc-0.42.2 windows_aarch64_msvc-0.48.0 windows_i686_gnu-0.42.2 windows_i686_gnu-0.48.0 windows_i686_msvc-0.42.2 windows_i686_msvc-0.48.0 windows-sys-0.45.0 windows-targets-0.42.2 windows-targets-0.48.0 windows_x86_64_gnu-0.42.2 windows_x86_64_gnu-0.48.0 windows_x86_64_gnullvm-0.42.2 windows_x86_64_gnullvm-0.48.0 windows_x86_64_msvc-0.42.2 windows_x86_64_msvc-0.48.0 winreg-0.10.1 xi-unicode-0.2.1 " DISTUTILS_USE_PEP517=setuptools PYTHON_COMPAT=( python3_{9..11} ) inherit cargo cmake distutils-r1 tmpfiles DESCRIPTION="A file watching service" HOMEPAGE="https://facebook.github.io/watchman/" SRC_URI="https://github.com/facebook/watchman/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz" SRC_URI+=" $(cargo_crate_uris)" LICENSE="Apache-2.0" SLOT="0" KEYWORDS="amd64" IUSE="llvm-libunwind python" REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )" # See https://github.com/facebook/watchman/blob/main/CMakeLists.txt#L342 for libevent RDEPEND=" dev-libs/libevent:= dev-libs/libpcre2 ~dev-cpp/edencommon-${PV}:= ~dev-cpp/folly-${PV}:= dev-cpp/glog:= >=dev-libs/libfmt-8.1.1-r1:= dev-libs/openssl:= llvm-libunwind? ( sys-libs/llvm-libunwind:= ) !llvm-libunwind? ( sys-libs/libunwind:= ) python? ( ${PYTHON_DEPS} )" # TODO: Make gtest test-only (needs a fair bit of patching) DEPEND="${RDEPEND} dev-cpp/gtest" PATCHES=( "${FILESDIR}"/${PN}-2023.01.16.00-python-working-dir.patch "${FILESDIR}"/${PN}-2022.02.28.00-libatomic.patch "${FILESDIR}"/${PN}-2022.08.08.00-musl-fsword-fix.patch ) # Rust utility QA_FLAGS_IGNORED="usr/bin/watchmanctl" distutils_enable_tests unittest src_prepare() { cmake_src_prepare } src_configure() { # https://github.com/facebook/watchman/blob/789678cf9855fb07b402afb75b01e4f8786deba2/build/fbcode_builder/CMake/RustStaticLibrary.cmake#L17 export RUST_VENDORED_CRATES_DIR="${ECARGO_VENDOR}" export RUST_CARGO_HOME="${ECARGO_HOME}" export CARGO_HOME="${ECARGO_HOME}" # Build system already handles avoiding Rust-jobs-while-CMake-jobs-spawned issue # https://github.com/facebook/watchman/blob/789678cf9855fb07b402afb75b01e4f8786deba2/build/fbcode_builder/CMake/RustStaticLibrary.cmake#L69 # so no need to force -j1 via cargo jobs local mycmakeargs=( # Rust wrangling -DUSE_CARGO_VENDOR=ON -DGENERATE_CARGO_VENDOR_CONFIG=OFF -DRUST_CARGO_HOME="${RUST_CARGO_HOME}" # General bits -DWATCHMAN_STATE_DIR="${EPREFIX}"/run/watchman -DWATCHMAN_VERSION_OVERRIDE=${PV} # Fails to build against fbthrift for now in libatomic troubles -DENABLE_EDEN_SUPPORT=OFF # We handle this ourselves -DCMAKE_DISABLE_FIND_PACKAGE_Python3=ON ) cmake_src_configure } src_compile() { cmake_src_compile if use python ; then pushd watchman/python >/dev/null || die distutils-r1_src_compile popd >/dev/null || die fi } src_test() { cmake_src_test if use python ; then pushd watchman/python >/dev/null || die distutils-r1_src_test popd >/dev/null || die fi } src_install() { cmake_src_install newtmpfiles "${FILESDIR}"/watchman.tmpfiles watchman.conf if use python ; then pushd watchman/python >/dev/null || die distutils-r1_src_install popd >/dev/null || die fi } pkg_postinst() { tmpfiles_process watchman.conf }