From 338d0f3246ede034fde0eb9a3be1b640159e3bd9 Mon Sep 17 00:00:00 2001 From: Christopher Allan Webber Date: Fri, 19 Feb 2016 13:47:19 -0800 Subject: [PATCH] gnu: Add stellar-core. * gnu/packages/finance.scm (stellar-core): New variable. * gnu/packages/patches/stellar-core-find-mk-files.patch: New file. --- gnu/packages/finance.scm | 75 ++++++++++++++++++++++ .../patches/stellar-core-find-mk-files.patch | 33 ++++++++++ 2 files changed, 108 insertions(+) create mode 100644 gnu/packages/patches/stellar-core-find-mk-files.patch diff --git a/gnu/packages/finance.scm b/gnu/packages/finance.scm index e9487d4..c461ca7 100644 --- a/gnu/packages/finance.scm +++ b/gnu/packages/finance.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015 Andreas Enge ;;; Copyright © 2016 Efraim Flashner +;;; Copyright © 2016 Christopher Allan Webber ;;; ;;; This file is part of GNU Guix. ;;; @@ -21,9 +22,15 @@ #:use-module ((guix licenses) #:prefix license:) #:use-module (guix packages) #:use-module (guix download) + #:use-module (guix git-download) #:use-module (guix build utils) #:use-module (guix build-system gnu) + #:use-module (gnu packages) + #:use-module (gnu packages autogen) + #:use-module (gnu packages autotools) #:use-module (gnu packages boost) + #:use-module (gnu packages bison) + #:use-module (gnu packages flex) #:use-module (gnu packages databases) #:use-module (gnu packages linux) #:use-module (gnu packages pkg-config) @@ -81,3 +88,71 @@ collectively by the network. Bitcoin Core is the reference implementation of the bitcoin protocol. This package provides the Bitcoin Core command line client and a client based on Qt.") (license license:expat))) + +(define-public stellar-core + (package + (name "stellar-core") + (version "0.4.1") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/stellar/stellar-core.git") + (commit "v0.4.1") + (recursive? #t))) + (sha256 + (base32 + "15mm1jk2kk5x34vn9gqwp7ijhsmhm6dwymznz7hqvjj8kjd088fi")) + ;; This is a pain in the butt. + ;; autogen.sh calls make-mks which does git ls-files, which + ;; obviously we can't do. + ;; As a workaround, we provide the results of the + ;; .mk files generated by this script, but if a new version + ;; comes out, you might need to provide new versions + ;; of this patch by running autogen and then adding the results + ;; manually! Not nice at all. + ;; Alternative paths forward might be to de-bundle things + ;; or maybe run autogen as part of the git-fetch phase... + ;; which seems hard to do. + ;; Anyway, you'll need to provide the contents of: + ;; - src/src.mk + ;; - lib/medida.mk + ;; - lib/lib.mk + (patches (list (search-patch + "stellar-core-find-mk-files.patch"))))) + (arguments + '(#:phases (modify-phases %standard-phases + (add-before 'configure 'autogen-self-and-submodules + (lambda _ + (and (zero? (system* "sh" "autogen.sh" + ;; we'll handle submodules manually + "--skip-submodules")) + ;; Run autogen on libsodium too. + ;; In the future, we might also have to manually + ;; run this on other git submodules which are + ;; introduced + (begin (chdir "lib/libsodium") #t) + (zero? (system* "sh" "autogen.sh")) + (begin (chdir "../..") #t))))) + ;; Tries to run tests with a running postgres server... + ;; well, sorry, we can't do that! + #:tests? #f)) + (build-system gnu-build-system) + (native-inputs + `(("pkg-config" ,pkg-config) + ("autoconf" ,autoconf) + ("automake" ,automake) + ("autogen" ,autogen) + ;; used by libsodium git submodule + ("libtool" ,libtool))) + (inputs + `(("bison" ,bison) + ("flex" ,flex) + ("postgresql" ,postgresql))) + (home-page "https://www.stellar.org/") + (synopsis "Communicate with the Stellar peer-to-peer network") + (description "Stellar-core is a replicated state machine that +maintains a local copy of a cryptographic ledger and processes +transactions against it, in consensus with a set of peers. +It implements the Stellar Consensus Protocol, a federated consensus +protocol.") + (license license:asl2.0))) diff --git a/gnu/packages/patches/stellar-core-find-mk-files.patch b/gnu/packages/patches/stellar-core-find-mk-files.patch new file mode 100644 index 0000000..2b26171 --- /dev/null +++ b/gnu/packages/patches/stellar-core-find-mk-files.patch @@ -0,0 +1,33 @@ +Use "find" instead of "git ls-files" to fill in the src/src.mk file + +(Guix removes the .git directory, so we have to do this!) + +diff --git a/make-mks b/make-mks +index f3edf10..5972ebf 100755 +--- a/make-mks ++++ b/make-mks +@@ -6,21 +6,17 @@ case "$0" in + ;; + esac + +-# Bail if not under git +-git rev-parse +- + trap 'rm -f src/src.mk lib/medida.mk lib/lib.mk' 0 + + message="# This file was generated by make-mks; don't edit it by hand." + +-# Use only files git knows about, to avoid picking up autogenrated +-# files or other random cruft. When adding a new file foo.cpp, you +-# must run "git add -N foo.cpp" before running this script. ++# Since Guix is running not from git, we can just use find to fill ++# in this information instead of `git lsfiles` + (cd src + echo "$message" +- echo "SRC_H_FILES" = $(git ls-files '*.h' '*.[ih]pp') +- echo "SRC_CXX_FILES" = $(git ls-files '*.cpp') +- echo "SRC_X_FILES" = $(git ls-files '*.x') ++ echo "SRC_H_FILES" = $(find . -name '*.h') $(find . -name '*.[ih]pp') ++ echo "SRC_CXX_FILES" = $(find . -name '*.cpp') ++ echo "SRC_X_FILES" = $(find . -name '*.x') + ) > src/src.mk -- 2.1.4