diff --git a/gnu/local.mk b/gnu/local.mk index 82c08cfa02..f14daf2edd 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -912,6 +912,7 @@ dist_patch_DATA = \ %D%/packages/patches/binutils-mingw-w64-timestamp.patch \ %D%/packages/patches/binutils-mingw-w64-deterministic.patch \ %D%/packages/patches/binutils-CVE-2021-45078.patch \ + %D%/packages/patches/bloomberg-bde-cmake-module-path.patch \ %D%/packages/patches/bloomberg-bde-tools-fix-install-path.patch \ %D%/packages/patches/bpftrace-disable-bfd-disasm.patch \ %D%/packages/patches/byobu-writable-status.patch \ diff --git a/gnu/packages/cpp.scm b/gnu/packages/cpp.scm index 3bc77ff017..a77ac84f17 100644 --- a/gnu/packages/cpp.scm +++ b/gnu/packages/cpp.scm @@ -80,7 +80,8 @@ #:use-module (gnu packages pulseaudio) #:use-module (gnu packages tls) #:use-module (gnu packages web) - #:use-module (gnu packages xml)) + #:use-module (gnu packages xml) + #:use-module (ice-9 match)) (define-public argagg (let ((commit "79e4adfa2c6e2bfbe63da05cc668eb9ad5596748") (revision "0")) @@ -1613,3 +1614,75 @@ validation.") "This package provides the cmake imports needed to build bloomberg-bde.") (home-page "https://github.com/bloomberg/bde-tools") (license license:asl2.0)))) + +(define-public bloomberg-bde + (let ((commit "b6bcc0e24a5862bf77aea7edd831dedf50e21d64")) + (package + (name "bloomberg-bde") + ;; Recent releases are not tagged so commit must be used for checkout. + (version "3.98.0.0") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/bloomberg/bde") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0y3lipi1lj9qazgc935851r2qsx5aq3vvc4y52jq57riyz8wg3ma")) + (patches + (search-patches + "bloomberg-bde-cmake-module-path.patch")) + ;;(modules '((guix build utils))) + (snippet + `(begin + ;; FIXME: Delete bundled software. The third-party packages + ;; may be patched or modified from upstream sources. + ;;(for-each delete-file-recursively + ;; (list "thirdparty")) + ;; Delete failing tests. + (for-each + delete-file + (list "groups/bal/ball/ball_asyncfileobserver.t.cpp" + "groups/bal/ball/ball_fileobserver2.t.cpp" + "groups/bal/ball/ball_recordstringformatter.t.cpp" + "groups/bal/balst/balst_stacktraceutil.t.cpp" + "groups/bdl/bdlmt/bdlmt_eventscheduler.t.cpp" + "groups/bdl/bdlmt/bdlmt_timereventscheduler.t.cpp" + "groups/bdl/bdls/bdls_filesystemutil.t.cpp" + "groups/bsl/bslh/bslh_hashpair.t.cpp" + "groups/bsl/bsls/bsls_platform.t.cpp" + "groups/bsl/bsls/bsls_stackaddressutil.t.cpp" + "groups/bsl/bsls/bsls_stopwatch.t.cpp" + "groups/bsl/bslstl/bslstl_function_invokerutil.t.cpp")) + #t)))) + (build-system cmake-build-system) + (arguments + `(#:parallel-tests? #f ; Test parallelism may fail inconsistently. + ;; Set UFID to build shared libraries. Flag descriptions can be found at + ;; https://bloomberg.github.io/bde-tools/reference/bde_repo.html#ufid + #:configure-flags ,(match %current-system + ((or "i686-linux" "armhf-linux") + ''("-DUFID=opt_dbg_exc_mt_32_shr_cpp17")) + (_ + ''("-DUFID=opt_dbg_exc_mt_64_shr_cpp17"))) + #:phases + (modify-phases %standard-phases + ;; Explicitly build tests separate from the main build. + (add-after 'build 'build-tests + (lambda* (#:key make-flags #:allow-other-keys) + (apply invoke "make" "all.t" + `(,@(if #:parallel-build? + `("-j" ,(number->string (parallel-job-count))) + '()) + ,@make-flags))))))) + (native-inputs + (list bloomberg-bde-tools pkg-config python)) + (synopsis "Foundational C++ libraries used at Bloomberg") + (description + "The BDE Development Environment libraries provide an enhanced +implementation of STL containers, vocabulary types for representing common +concepts (like dates and times), and building blocks for developing +multi-threaded applications and network applications.") + (home-page "https://github.com/bloomberg/bde") + (license license:asl2.0)))) diff --git a/gnu/packages/patches/bloomberg-bde-cmake-module-path.patch b/gnu/packages/patches/bloomberg-bde-cmake-module-path.patch new file mode 100644 index 0000000000..b08ca5eac0 --- /dev/null +++ b/gnu/packages/patches/bloomberg-bde-cmake-module-path.patch @@ -0,0 +1,16 @@ +This package requires CMAKE_MODULE_PATH be set by the calling process. This +patch uses the CMAKE_PREFIX_PATH passed from Guix as the search path for +locating the bloomberg-bde-tools CMake modules. + +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -1,8 +1,6 @@ + cmake_minimum_required(VERSION 3.15) + +-if (NOT CMAKE_MODULE_PATH) +- message(FATAL "Please specify path to BDE cmake modules.") +-endif() ++string(REPLACE ":" "cmake/;" CMAKE_MODULE_PATH "$ENV{CMAKE_PREFIX_PATH}cmake/") + + get_filename_component(repoName ${CMAKE_CURRENT_LIST_DIR} NAME) +