commit:     ac67334aa9cbd0e41b9e11921cd38a92f7a135c6
Author:     Erik Mackdanz <stasibear <AT> gentoo <DOT> org>
AuthorDate: Sun Nov  3 19:27:46 2024 +0000
Commit:     Erik Mackdanz <stasibear <AT> gentoo <DOT> org>
CommitDate: Sun Nov  3 20:11:30 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=ac67334a

app-office/ledger: bump to -r2

Fix compilation against boost 1.86 by applying patch from
https://github.com/ledger/ledger/pull/2381/files

Closes: https://bugs.gentoo.org/942763
Signed-off-by: Erik Mackdanz <stasibear <AT> gentoo.org>

 app-office/ledger/files/sha1sum.patch    | 110 +++++++++++++++++++++++++++++
 app-office/ledger/ledger-3.3.2-r2.ebuild | 117 +++++++++++++++++++++++++++++++
 2 files changed, 227 insertions(+)

diff --git a/app-office/ledger/files/sha1sum.patch 
b/app-office/ledger/files/sha1sum.patch
new file mode 100644
index 000000000000..2de66a672e68
--- /dev/null
+++ b/app-office/ledger/files/sha1sum.patch
@@ -0,0 +1,110 @@
+diff --git a/src/filters.cc b/src/filters.cc
+index f725c247..030a5fb4 100644
+--- a/src/filters.cc
++++ b/src/filters.cc
+@@ -237,8 +237,6 @@ void anonymize_posts::render_commodity(amount_t& amt)
+ 
+ void anonymize_posts::operator()(post_t& post)
+ {
+-      boost::uuids::detail::sha1  sha;
+-  unsigned int message_digest[5];
+   bool         copy_xact_details = false;
+ 
+   if (last_xact != post.xact) {
+@@ -255,12 +253,7 @@ void anonymize_posts::operator()(post_t& post)
+     std::ostringstream buf;
+     buf << reinterpret_cast<boost::uintmax_t>(post.xact->payee.c_str())
+         << integer_gen() << post.xact->payee.c_str();
+-
+-              sha.reset();
+-    sha.process_bytes(buf.str().c_str(), buf.str().length());
+-    sha.get_digest(message_digest);
+-
+-    xact.payee = to_hex(message_digest);
++    xact.payee = sha1sum(buf.str(), 8);
+     xact.note  = none;
+   } else {
+     xact.journal = post.xact->journal;
+@@ -273,12 +266,7 @@ void anonymize_posts::operator()(post_t& post)
+        acct = acct->parent) {
+     std::ostringstream buf;
+     buf << integer_gen() << acct << acct->fullname();
+-
+-    sha.reset();
+-    sha.process_bytes(buf.str().c_str(), buf.str().length());
+-    sha.get_digest(message_digest);
+-
+-    account_names.push_front(to_hex(message_digest));
++    account_names.push_front(sha1sum(buf.str(), 8));
+   }
+ 
+   account_t * new_account =
+@@ -1268,7 +1256,7 @@ void budget_posts::report_budget_items(const date_t& 
date)
+     foreach (pending_posts_list::iterator& i, posts_to_erase)
+       pending_posts.erase(i);
+   }
+-  
++
+   if (pending_posts.size() == 0)
+     return;
+ 
+diff --git a/src/utils.h b/src/utils.h
+index b09377b8..510686fd 100644
+--- a/src/utils.h
++++ b/src/utils.h
+@@ -607,29 +607,39 @@ inline int peek_next_nonws(std::istream& in) {
+     *_p = '\0';                                         \
+   }
+ 
+-inline string to_hex(unsigned int * message_digest, const int len = 1)
+-{
++inline string digest_to_hex(
++  const boost::uuids::detail::sha1::digest_type& message_digest,
++  size_t len = sizeof(boost::uuids::detail::sha1::digest_type) * 2
++) {
+   std::ostringstream buf;
+-
+-  for(int i = 0; i < 5 ; i++) {
+-    buf.width(8);
+-    buf.fill('0');
+-    buf << std::hex << message_digest[i];
+-    if (i + 1 >= len)
+-      break;                    // only output the first LEN dwords
++  buf.setf(std::ios_base::hex, std::ios_base::basefield);
++  buf.fill('0');
++
++  // sha1::digest_type is an array type and may change between Boost versions
++  const size_t count = std::min(
++    sizeof(message_digest) / sizeof(message_digest[0]),
++    (len - 1) / (sizeof(message_digest[0]) * 2) + 1
++  );
++  for(size_t i = 0; i < count; i++) {
++    buf.width(sizeof(message_digest[i]) * 2);
++    buf << (unsigned int)message_digest[i];
+   }
+-  return buf.str();
++  string hex = buf.str();
++  hex.resize(len, '0'); // in case a partial element is requested
++  return hex;
+ }
+ 
+-inline string sha1sum(const string& str)
+-{
+-      boost::uuids::detail::sha1 sha;
++inline string sha1sum(
++  const string& str,
++  size_t len = sizeof(boost::uuids::detail::sha1::digest_type) * 2
++) {
++      static boost::uuids::detail::sha1 sha;
++  boost::uuids::detail::sha1::digest_type message_digest;
+ 
++      sha.reset();
+   sha.process_bytes(str.c_str(), str.length());
+-
+-  unsigned int message_digest[5];
+   sha.get_digest(message_digest);
+-  return to_hex(message_digest, 5);
++  return digest_to_hex(message_digest, len);
+ }
+ 
+ extern const string version;

diff --git a/app-office/ledger/ledger-3.3.2-r2.ebuild 
b/app-office/ledger/ledger-3.3.2-r2.ebuild
new file mode 100644
index 000000000000..c69d99cb1265
--- /dev/null
+++ b/app-office/ledger/ledger-3.3.2-r2.ebuild
@@ -0,0 +1,117 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10,11,12,13} )
+CMAKE_REMOVE_MODULES_LIST=( FindPython Support )
+inherit bash-completion-r1 check-reqs cmake python-single-r1
+
+DESCRIPTION="Double-entry accounting system with a command-line reporting 
interface"
+HOMEPAGE="https://www.ledger-cli.org/";
+SRC_URI="https://github.com/${PN}/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~ppc64 ~riscv ~x86"
+IUSE="debug doc python"
+REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
+
+RESTRICT="test"
+
+CHECKREQS_MEMORY=8G
+
+RDEPEND="
+       dev-libs/boost:=[python?]
+       dev-libs/gmp:0=
+       dev-libs/mpfr:0=
+       python? (
+               $(python_gen_cond_dep '
+                       dev-libs/boost:=[${PYTHON_USEDEP}]
+                       dev-python/cheetah3:=[${PYTHON_USEDEP}]
+               ')
+               ${PYTHON_DEPS}
+       )
+"
+DEPEND="${RDEPEND}
+       dev-libs/utfcpp
+       doc? (
+               app-text/texlive[extra]
+               sys-apps/texinfo
+               virtual/texi2dvi
+       )
+"
+
+pkg_pretend() {
+       if use python; then
+               check-reqs_pkg_pretend
+       fi
+}
+
+pkg_setup() {
+       if use python; then
+               check-reqs_pkg_setup
+               python-single-r1_pkg_setup
+       fi
+}
+
+src_prepare() {
+       cmake_src_prepare
+
+       # Want to type "info ledger" not "info ledger3"
+       sed -i -e 's/ledger3/ledger/g' \
+               doc/{CMakeLists.txt,ledger3.texi} test/CheckTexinfo.py \
+               tools/{cleanup.sh,gendocs.sh,prepare-commit-msg,spellcheck.sh} \
+               || die "Failed to update info file name in file contents"
+
+       mv doc/ledger{3,}.texi || die "Failed to rename info file name"
+
+       rm -r lib/utfcpp || die
+
+       eapply "${FILESDIR}/convenience.patch"
+       eapply "${FILESDIR}/sha1sum.patch"
+       eapply_user
+}
+
+src_configure() {
+       local mycmakeargs=(
+               -DBUILD_DOCS="$(usex doc)"
+               -DBUILD_WEB_DOCS="$(usex doc)"
+               -DUSE_PYTHON="$(usex python)"
+               -DCMAKE_INSTALL_DOCDIR="/usr/share/doc/${PF}"
+               -DCMAKE_BUILD_WITH_INSTALL_RPATH:BOOL=ON
+               -DBUILD_DEBUG="$(usex debug)"
+               -DUTFCPP_PATH="${ESYSROOT}/usr/include/utf8cpp"
+       )
+       if use python; then
+               mycmakeargs+=(
+                       -DPython_EXECUTABLE="${PYTHON}"
+                       -DPython_INCLUDE_DIR="$(python_get_includedir)"
+               )
+       fi
+
+       cmake_src_configure
+}
+
+src_compile() {
+       cmake_src_compile
+
+       use doc && cmake_src_compile doc
+}
+
+src_install() {
+       cmake_src_install
+
+       newbashcomp contrib/${PN}-completion.bash ${PN}
+}
+
+pkg_postinst() {
+       elog
+       elog "Since version 3, vim support is released separately."
+       elog "See https://github.com/ledger/vim-ledger";
+       elog
+       elog "For Emacs mode, emerge app-emacs/ledger-mode"
+}
+
+# rainy day TODO:
+# - IUSE test

Reply via email to