Error building ledger master branch on OS X 10.9.

273 views
Skip to first unread message

Ronald Ip

unread,
Oct 23, 2013, 9:17:59 PM10/23/13
to ledge...@googlegroups.com
Hello,

After upgrading OS X from 10.8 to 10.9 and Xcode to 5.0.1 with the updated developer tools, there seems to be trouble building ledger.
Any ideas on how this can be resolved? Logs below:

$ clang --version

Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)

Target: x86_64-apple-darwin13.0.0

Thread model: posix


$ ./acprep opt update

acprep: INFO: Invoking primary phase: update

acprep: INFO: Executing phase: update

acprep: INFO: Executing phase: pull

Already up-to-date.

acprep: INFO: Executing phase: submodule

acprep: INFO: Executing phase: make

acprep: INFO: Executing phase: config

acprep: INFO: Executing phase: submodule

acprep: INFO: Executing phase: configure

acprep: INFO: System type is => Darwin

acprep: INFO: Setting up build flavor => opt

-- Boost version: 1.54.0

-- Found the following Boost libraries:

--   date_time

--   filesystem

--   system

--   iostreams

--   regex

--   unit_test_framework

-- Configuring done

-- Generating done

-- Build files have been written to: /Users/iphoting/Development/Utilities/ledger

[…]

In file included from /Users/iphoting/Development/Utilities/ledger/src/output.cc:32:

In file included from /Users/iphoting/Development/Utilities/ledger/system.hh:102:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/map:421:17: error: 

      no matching function for call to object of type 'const

      ledger::account_compare'

        {return static_cast<const _Compare&>(*this)(__x.first, __y);}

                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/__tree:2085:14: note: 

      in instantiation of member function

      'std::__1::__map_value_compare<ledger::account_t *, unsigned long,

      ledger::account_compare, true>::operator()' requested here

        if (!value_comp()(__root->__value_, __v))

             ^

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/__tree:2011:20: note: 

      in instantiation of function template specialization

      'std::__1::__tree<std::__1::pair<ledger::account_t *, unsigned long>,

      std::__1::__map_value_compare<ledger::account_t *, unsigned long,

      ledger::account_compare, true>,

      std::__1::allocator<std::__1::pair<ledger::account_t *, unsigned long> >

      >::__lower_bound<ledger::account_t *>' requested here

    iterator __p = __lower_bound(__v, __root(), __end_node());

                   ^

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/map:950:68: note: 

      in instantiation of function template specialization

      'std::__1::__tree<std::__1::pair<ledger::account_t *, unsigned long>,

      std::__1::__map_value_compare<ledger::account_t *, unsigned long,

      ledger::account_compare, true>,

      std::__1::allocator<std::__1::pair<ledger::account_t *, unsigned long> >

      >::find<ledger::account_t *>' requested here

    iterator find(const key_type& __k)             {return __tree_.find(__k);}

                                                                   ^

/Users/iphoting/Development/Utilities/ledger/src/output.cc:294:61: note: in

      instantiation of member function 'std::__1::map<ledger::account_t *,

      unsigned long, ledger::account_compare,

      std::__1::allocator<std::__1::pair<ledger::account_t *const, unsigned

      long> > >::find' requested here

  std::map<account_t *, std::size_t>::iterator i = accounts.find(post.account);

                                                            ^

/Users/iphoting/Development/Utilities/ledger/src/account.h:313:8: note: 

      candidate function not viable: 'this' argument has type 'const

      ledger::account_compare', but method is not marked const

  bool operator() (const account_t& lhs, const account_t& rhs){

       ^

In file included from /Users/iphoting/Development/Utilities/ledger/src/output.cc:32:

In file included from /Users/iphoting/Development/Utilities/ledger/system.hh:102:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/map:427:17: error: 

      no matching function for call to object of type 'const

      ledger::account_compare'

        {return static_cast<const _Compare&>(*this)(__x, __y.first);}

                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/__tree:2012:26: note: 

      in instantiation of member function

      'std::__1::__map_value_compare<ledger::account_t *, unsigned long,

      ledger::account_compare, true>::operator()' requested here

    if (__p != end() && !value_comp()(__v, *__p))

                         ^

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/map:950:68: note: 

      in instantiation of function template specialization

      'std::__1::__tree<std::__1::pair<ledger::account_t *, unsigned long>,

      std::__1::__map_value_compare<ledger::account_t *, unsigned long,

      ledger::account_compare, true>,

      std::__1::allocator<std::__1::pair<ledger::account_t *, unsigned long> >

      >::find<ledger::account_t *>' requested here

    iterator find(const key_type& __k)             {return __tree_.find(__k);}

                                                                   ^

/Users/iphoting/Development/Utilities/ledger/src/output.cc:294:61: note: in

      instantiation of member function 'std::__1::map<ledger::account_t *,

      unsigned long, ledger::account_compare,

      std::__1::allocator<std::__1::pair<ledger::account_t *const, unsigned

      long> > >::find' requested here

  std::map<account_t *, std::size_t>::iterator i = accounts.find(post.account);

                                                            ^

/Users/iphoting/Development/Utilities/ledger/src/account.h:313:8: note: 

      candidate function not viable: 'this' argument has type 'const

      ledger::account_compare', but method is not marked const

  bool operator() (const account_t& lhs, const account_t& rhs){

       ^

In file included from /Users/iphoting/Development/Utilities/ledger/src/output.cc:32:

In file included from /Users/iphoting/Development/Utilities/ledger/system.hh:102:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/map:418:17: error: 

      no matching function for call to object of type 'const

      ledger::account_compare'

        {return static_cast<const _Compare&>(*this)(__x.first, __y.first);}

                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/__tree:1596:17: note: 

      in instantiation of member function

      'std::__1::__map_value_compare<ledger::account_t *, unsigned long,

      ledger::account_compare, true>::operator()' requested here

            if (value_comp()(__v, __nd->__value_))

                ^

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/__tree:1850:36: note: 

      in instantiation of function template specialization

      'std::__1::__tree<std::__1::pair<ledger::account_t *, unsigned long>,

      std::__1::__map_value_compare<ledger::account_t *, unsigned long,

      ledger::account_compare, true>,

      std::__1::allocator<std::__1::pair<ledger::account_t *, unsigned long> >

      >::__find_equal<std::__1::pair<ledger::account_t *, unsigned long> >'

      requested here

    __node_base_pointer& __child = __find_equal(__parent, __v);

                                   ^

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/map:910:55: note: 

      in instantiation of member function

      'std::__1::__tree<std::__1::pair<ledger::account_t *, unsigned long>,

      std::__1::__map_value_compare<ledger::account_t *, unsigned long,

      ledger::account_compare, true>,

      std::__1::allocator<std::__1::pair<ledger::account_t *, unsigned long> >

      >::__insert_unique' requested here

        insert(const value_type& __v) {return __tree_.__insert_unique(__v);}

                                                      ^

/Users/iphoting/Development/Utilities/ledger/src/output.cc:296:14: note: in

      instantiation of member function 'std::__1::map<ledger::account_t *,

      unsigned long, ledger::account_compare,

      std::__1::allocator<std::__1::pair<ledger::account_t *const, unsigned

      long> > >::insert' requested here

    accounts.insert(accounts_pair(post.account, 1));

             ^

/Users/iphoting/Development/Utilities/ledger/src/account.h:313:8: note: 

      candidate function not viable: 'this' argument has type 'const

      ledger::account_compare', but method is not marked const

  bool operator() (const account_t& lhs, const account_t& rhs){

       ^

In file included from /Users/iphoting/Development/Utilities/ledger/src/output.cc:32:

In file included from /Users/iphoting/Development/Utilities/ledger/system.hh:102:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/map:421:17: error: 

      no matching function for call to object of type 'const

      ledger::commodity_compare'

        {return static_cast<const _Compare&>(*this)(__x.first, __y);}

                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/__tree:2085:14: note: 

      in instantiation of member function

      'std::__1::__map_value_compare<ledger::commodity_t *, unsigned long,

      ledger::commodity_compare, true>::operator()' requested here

        if (!value_comp()(__root->__value_, __v))

             ^

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/__tree:2011:20: note: 

      in instantiation of function template specialization

      'std::__1::__tree<std::__1::pair<ledger::commodity_t *, unsigned long>,

      std::__1::__map_value_compare<ledger::commodity_t *, unsigned long,

      ledger::commodity_compare, true>,

      std::__1::allocator<std::__1::pair<ledger::commodity_t *, unsigned long> >

      >::__lower_bound<ledger::commodity_t *>' requested here

    iterator __p = __lower_bound(__v, __root(), __end_node());

                   ^

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/map:950:68: note: 

      in instantiation of function template specialization

      'std::__1::__tree<std::__1::pair<ledger::commodity_t *, unsigned long>,

      std::__1::__map_value_compare<ledger::commodity_t *, unsigned long,

      ledger::commodity_compare, true>,

      std::__1::allocator<std::__1::pair<ledger::commodity_t *, unsigned long> >

      >::find<ledger::commodity_t *>' requested here

    iterator find(const key_type& __k)             {return __tree_.find(__k);}

                                                                   ^

/Users/iphoting/Development/Utilities/ledger/src/output.cc:365:66: note: in

      instantiation of member function 'std::__1::map<ledger::commodity_t *,

      unsigned long, ledger::commodity_compare,

      std::__1::allocator<std::__1::pair<ledger::commodity_t *const, unsigned

      long> > >::find' requested here

  std::map<commodity_t *, std::size_t>::iterator i = commodities.find(&comm);

                                                                 ^

/Users/iphoting/Development/Utilities/ledger/src/commodity.h:356:8: note: 

      candidate function not viable: 'this' argument has type 'const

      ledger::commodity_compare', but method is not marked const

  bool operator() (const commodity_t* lhs, const commodity_t* rhs){

       ^

In file included from /Users/iphoting/Development/Utilities/ledger/src/output.cc:32:

In file included from /Users/iphoting/Development/Utilities/ledger/system.hh:102:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/map:427:17: error: 

      no matching function for call to object of type 'const

      ledger::commodity_compare'

        {return static_cast<const _Compare&>(*this)(__x, __y.first);}

                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/__tree:2012:26: note: 

      in instantiation of member function

      'std::__1::__map_value_compare<ledger::commodity_t *, unsigned long,

      ledger::commodity_compare, true>::operator()' requested here

    if (__p != end() && !value_comp()(__v, *__p))

                         ^

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/map:950:68: note: 

      in instantiation of function template specialization

      'std::__1::__tree<std::__1::pair<ledger::commodity_t *, unsigned long>,

      std::__1::__map_value_compare<ledger::commodity_t *, unsigned long,

      ledger::commodity_compare, true>,

      std::__1::allocator<std::__1::pair<ledger::commodity_t *, unsigned long> >

      >::find<ledger::commodity_t *>' requested here

    iterator find(const key_type& __k)             {return __tree_.find(__k);}

                                                                   ^

/Users/iphoting/Development/Utilities/ledger/src/output.cc:365:66: note: in

      instantiation of member function 'std::__1::map<ledger::commodity_t *,

      unsigned long, ledger::commodity_compare,

      std::__1::allocator<std::__1::pair<ledger::commodity_t *const, unsigned

      long> > >::find' requested here

  std::map<commodity_t *, std::size_t>::iterator i = commodities.find(&comm);

                                                                 ^

/Users/iphoting/Development/Utilities/ledger/src/commodity.h:356:8: note: 

      candidate function not viable: 'this' argument has type 'const

      ledger::commodity_compare', but method is not marked const

  bool operator() (const commodity_t* lhs, const commodity_t* rhs){

       ^

In file included from /Users/iphoting/Development/Utilities/ledger/src/output.cc:32:

In file included from /Users/iphoting/Development/Utilities/ledger/system.hh:102:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/map:418:17: error: 

      no matching function for call to object of type 'const

      ledger::commodity_compare'

        {return static_cast<const _Compare&>(*this)(__x.first, __y.first);}

                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/__tree:1596:17: note: 

      in instantiation of member function

      'std::__1::__map_value_compare<ledger::commodity_t *, unsigned long,

      ledger::commodity_compare, true>::operator()' requested here

            if (value_comp()(__v, __nd->__value_))

                ^

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/__tree:1850:36: note: 

      in instantiation of function template specialization

      'std::__1::__tree<std::__1::pair<ledger::commodity_t *, unsigned long>,

      std::__1::__map_value_compare<ledger::commodity_t *, unsigned long,

      ledger::commodity_compare, true>,

      std::__1::allocator<std::__1::pair<ledger::commodity_t *, unsigned long> >

      >::__find_equal<std::__1::pair<ledger::commodity_t *, unsigned long> >'

      requested here

    __node_base_pointer& __child = __find_equal(__parent, __v);

                                   ^

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/map:910:55: note: 

      in instantiation of member function

      'std::__1::__tree<std::__1::pair<ledger::commodity_t *, unsigned long>,

      std::__1::__map_value_compare<ledger::commodity_t *, unsigned long,

      ledger::commodity_compare, true>,

      std::__1::allocator<std::__1::pair<ledger::commodity_t *, unsigned long> >

      >::__insert_unique' requested here

        insert(const value_type& __v) {return __tree_.__insert_unique(__v);}

                                                      ^

/Users/iphoting/Development/Utilities/ledger/src/output.cc:367:17: note: in

      instantiation of member function 'std::__1::map<ledger::commodity_t *,

      unsigned long, ledger::commodity_compare,

      std::__1::allocator<std::__1::pair<ledger::commodity_t *const, unsigned

      long> > >::insert' requested here

    commodities.insert(commodities_pair(&comm, 1));

                ^

/Users/iphoting/Development/Utilities/ledger/src/commodity.h:356:8: note: 

      candidate function not viable: 'this' argument has type 'const

      ledger::commodity_compare', but method is not marked const

  bool operator() (const commodity_t* lhs, const commodity_t* rhs){

       ^

6 errors generated.

make[2]: *** [src/CMakeFiles/libledger.dir/output.cc.o] Error 1

make[1]: *** [src/CMakeFiles/libledger.dir/all] Error 2

make: *** [all] Error 2



Thanks,

Ronald



Lifepillar

unread,
Oct 25, 2013, 11:54:00 AM10/25/13
to ledge...@googlegroups.com
In article <fdc6d68b-e4fd-44a1...@googlegroups.com>,
Ronald Ip <mys...@iphoting.com> wrote:

> Hello,
>
> After upgrading OS X from 10.8 to 10.9 and Xcode to 5.0.1 with the updated
> developer tools, there seems to be trouble building ledger.
> Any ideas on how this can be resolved?

No, but in the past I have had problems building Ledger with Clang. Ledger
should build fine with LLVM-GCC (or with plain old GCC), but Apple has dropped
LLVM-GCC with Xcode 5.

You may have more luck with Homebrew or MacPorts.

Life

Lifepillar

unread,
Oct 25, 2013, 1:34:01 PM10/25/13
to ledge...@googlegroups.com
In article <github-42B4E3....@news.gmane.org>,
Just tried this on a freshly installed Homebrew on OS X Mavericks with Xcode
5.0.1:

brew install ledger --HEAD

(using Clang), and it fails. But,

brew install apple-gcc42
brew install ledger --HEAD --use-gcc

builds just fine. All Ledger dependencies must be installed with --use-gcc, too
(which is done automatically if they are not already installed when you give the
command above, otherwise you'll have to remove them before installing ledger).

It seems that to build with Clang, Ledger's build system should be updated:
http://github.com/mxcl/homebrew/issues/11343.

Life

John Wiegley

unread,
Oct 25, 2013, 2:41:45 PM10/25/13
to ledge...@googlegroups.com
>>>>> Lifepillar <git...@lifepillar.com> writes:

> It seems that to build with Clang, Ledger's build system should be updated:
> http://github.com/mxcl/homebrew/issues/11343.

Just to note: I've been building Ledger with only Clang for over a year now,
so I suspect that it has more to do with some recent change in Clang.

John

Ronald Ip

unread,
Oct 25, 2013, 4:43:15 PM10/25/13
to ledge...@googlegroups.com
Hello,
It looks like the recent change from 10.8 -> 10.9 is the switch from /usr/lib/libstdc++.6.dylib to /usr/lib/libc++.1.dylib.

I don’t understand C++ enough to know if it is this switch among others that caused the failed build on 10.9/Clang.


Best regards,
Ronald
--
Ronald Ip mys...@iphoting.com
GPG: 1024D/71D71151 http://about.iphoting.com/iphoting.asc
Fingerprint: {6A7E AB1E A822 E621 4DEC 11C4 F355 0635 71D7 1151}


Ronald Ip

unread,
Oct 25, 2013, 5:09:40 PM10/25/13
to ledge...@googlegroups.com

>> Just to note: I've been building Ledger with only Clang for over a year now,
>> so I suspect that it has more to do with some recent change in Clang.
>>
>
> It looks like the recent change from 10.8 -> 10.9 is the switch from /usr/lib/libstdc++.6.dylib to /usr/lib/libc++.1.dylib.
>
> I don’t understand C++ enough to know if it is this switch among others that caused the failed build on 10.9/Clang.

An FYI update, I switched the stdlib to libstdc++ just to see what happens and it compiles past the error.
I know that libc++ and libstdc++ are not ABI compatible, so I’m not surprised that it fails to link with boost (built with libc++) in the linking stage.

The flags I used:
$ export CXXFLAGS="-stdlib=libstdc++"; export LDFLAGS="-stdlib=libstdc++”
$ ./acprep opt update
$ nice make

So I guess, the resolution would be to 1) get code compatibility with libc++ or 2) compile everything, including dependencies with libstdc++.


Thanks,

Ronald Ip

unread,
Oct 25, 2013, 6:29:38 PM10/25/13
to ledge...@googlegroups.com

On 26 Oct, 2013, at 5:09 am, Ronald Ip <mys...@iphoting.com> wrote:

>>> Just to note: I've been building Ledger with only Clang for over a year now,
>>> so I suspect that it has more to do with some recent change in Clang.
>>>
>>
>> It looks like the recent change from 10.8 -> 10.9 is the switch from /usr/lib/libstdc++.6.dylib to /usr/lib/libc++.1.dylib.
>>
>> I don’t understand C++ enough to know if it is this switch among others that caused the failed build on 10.9/Clang.
>
> An FYI update, I switched the stdlib to libstdc++ just to see what happens and it compiles past the error.
> I know that libc++ and libstdc++ are not ABI compatible, so I’m not surprised that it fails to link with boost (built with libc++) in the linking stage.
>
> The flags I used:
> $ export CXXFLAGS="-stdlib=libstdc++"; export LDFLAGS="-stdlib=libstdc++”
> $ ./acprep opt update
> $ nice make
>
> So I guess, the resolution would be to 1) get code compatibility with libc++ or 2) compile everything, including dependencies with libstdc++.

For what it’s worth, I found a solution. While everything looks like it works, I’ve got no idea if this breaks anything else unintentionally.

Referencing this:
http://stackoverflow.com/questions/13148513/does-stdmap-require-the-comparators-operator-to-be-const/

I made changes in `src/account.h` and `src/commodity.h` (see attached patch).

Cleaned up the tree with a fresh checkout and used default compilation options:
$ ./acprep opt update
[…]
Linking CXX executable ../ledger
[ 91%] Built target ledger
[…]
Compile passes. Yay!

$ nice make test
[…]
100% tests passed, 0 tests failed out of 298

Total Test time (real) = 45.86 sec

Hope this helps anyone else with the same issue.


Best regards,
0001-Make-operator-const.patch

Lifepillar

unread,
Oct 27, 2013, 12:53:42 PM10/27/13
to ledge...@googlegroups.com
In article <29F4252E-80CD-4A60...@iphoting.com>,
Good catch! The patch works for me, too!

Life

Craig Earls

unread,
Oct 30, 2013, 9:41:47 AM10/30/13
to ledge...@googlegroups.com
I pushed this change to master.  



--

---
You received this message because you are subscribed to the Google Groups "Ledger" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ledger-cli+...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.



--
Craig, Corona De Tucson, AZ
enderw88.wordpress.com

Matthew Harris

unread,
Oct 31, 2013, 5:15:55 PM10/31/13
to ledge...@googlegroups.com
It appears that Lifepillar added a patch to Brew to work around this and then Craig added the fix to Ledger itself so the patch is no longer needed. Right now I can't rebuild Ledger with Homebrew right now because the patch doesn't apply.

Life, could you please roll back your brew patch?


Matthew


On Wednesday, October 30, 2013 6:41:47 AM UTC-7, Craig Earls wrote:
I pushed this change to master.  
On Sun, Oct 27, 2013 at 9:53 AM, Lifepillar <git...@lifepillar.com> wrote:

Lifepillar

unread,
Nov 2, 2013, 5:15:47 PM11/2/13
to ledge...@googlegroups.com
In article <6202a50d-8efb-485c...@googlegroups.com>,
Matthew Harris <mharr...@gmail.com> wrote:

> It appears that Lifepillar added a patch to Brew to work around this and
> then Craig added the fix to Ledger itself so the patch is no longer needed.
> Right now I can't rebuild Ledger with Homebrew right now because the patch
> doesn't apply.
>
> Life, could you please roll back your brew patch?

I've submitted a pull request. As long as it is not merged, you may build Ledger
with:

brew install
https://raw.github.com/lifepillar/homebrew/ledger-rm-patch/Library/Formula/ledger
.rb --HEAD

Life

Reply all
Reply to author
Forward
0 new messages