Hi,

I have one amd64 machine now on post clang, now running sysutils/facter with:
facter -p

to also evaluate the puppet facts, it bails out on me as like:

2017-08-01 23:56:58.825508 WARN  puppetlabs.facter - Could not initialize 
locale, even with LC_* variables cleared. Continuing without localization 
support
2017-08-01 23:57:03.604949 FATAL puppetlabs.facter - unhandled exception: 
ctype_byname<char>::ctype_byname failed to construct for C

With my minimal C++ knowledge, I found "catch throw" in gdb, and figured that 
the 'C' comes from the
name of the locale, so I set environment and ran it like with:

2017-08-01 23:56:58.825508 WARN  puppetlabs.facter - Could not initialize 
locale, even with LC_* variables cleared. Continuing without localization 
support
2017-08-01 23:57:03.604949 FATAL puppetlabs.facter - unhandled exception: 
boost::too_many_args: format-string referred to less arguments than were passed

However, 'catch throw' does seem to end up always at the same spot in the 
program, so I see where
the unhandled exception is not handled, but where is it actually caused?
With my little C++ knowledge, I don't seem to see it:

LANG=C LC_ALL=C egdb /usr/local/bin/facter
GNU gdb (GDB) 7.12.1
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-unknown-openbsd6.1".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/local/bin/facter...done.
(gdb) catch throw
Catchpoint 1 (throw)
(gdb) r -p
Starting program: /usr/local/bin/facter -p
Catchpoint 1 (exception thrown), __cxa_throw (thrown_object=0x17eb74b24a80, 
tinfo=0x17eba8d5cc80 <typeinfo for std::runtime_error>, dest=0x17eba8b0f790 
<std::runtime_error::~runtime_error()>)
    at /usr/src/lib/libcxxabi/src/cxa_exception.cpp:223
223         __cxa_eh_globals *globals = __cxa_get_globals();
(gdb) bt
#0  __cxa_throw (thrown_object=0x17eb74b24a80, tinfo=0x17eba8d5cc80 <typeinfo 
for std::runtime_error>, dest=0x17eba8b0f790 
<std::runtime_error::~runtime_error()>)
    at /usr/src/lib/libcxxabi/src/cxa_exception.cpp:223
#1  0x000017eb7705728c in std::__1::collate_byname<char>::collate_byname 
(this=0x17ebd07b1b60, name=..., refs=<optimized out>) at 
/usr/src/lib/libcxx/src/locale.cpp:662
#2  0x000017eb77053643 in std::__1::locale::__imp::__imp (this=0x17ec13f9b200, 
name=..., refs=<optimized out>) at /usr/src/lib/libcxx/src/locale.cpp:210
#3  0x000017eb77056844 in std::__1::locale::locale (this=0x7f7ffffd2900, 
name=0x7f7ffffd2a21 "C") at /usr/src/lib/libcxx/src/locale.cpp:509
#4  0x000017eb41e9d09a in 
boost::locale::impl_std::std_localization_backend::loadable 
(this=0x17eb58725500, name=...) at libs/locale/src/std/std_backend.cpp:152
#5  0x000017eb41e9c457 in 
boost::locale::impl_std::std_localization_backend::prepare_data 
(this=0x17eb58725500) at libs/locale/src/std/std_backend.cpp:98
#6  0x000017eb41e9ace8 in 
boost::locale::impl_std::std_localization_backend::install 
(this=0x17eb58725500, base=..., category=1, type=1) at 
libs/locale/src/std/std_backend.cpp:164
#7  0x000017eb41e0f2e1 in 
boost::locale::localization_backend_manager::impl::actual_backend::install 
(this=0x17eb311d2c00, l=..., category=1, type=1)
    at libs/locale/src/shared/localization_backend.cpp:145
#8  0x000017eb41dfdeec in boost::locale::generator::generate 
(this=0x7f7ffffd3bd8, base=..., id=...) at 
libs/locale/src/shared/generator.cpp:141
#9  0x000017eb41dfd5fb in boost::locale::generator::generate 
(this=0x7f7ffffd3bd8, id=...) at libs/locale/src/shared/generator.cpp:116
#10 0x000017eb93708624 in boost::locale::generator::operator() 
(this=0x7f7ffffd3bd8, id=...) at 
/usr/local/include/boost/locale/generator.hpp:202
#11 0x000017eb9370704c in leatherman::locale::get_locale (id=..., domain=..., 
paths=...) at 
/home/ports/pobj/amd64/leatherman-1.0.0/leatherman-1.0.0/locale/src/locale.cc:48
#12 0x000017ebc99ef748 in setup_logging_internal (os=..., use_locale=true) at 
/home/ports/pobj/amd64/facter-3.7.0/facter-3.7.0/lib/src/logging/logging.cc:20
#13 0x000017ebc99eea0e in facter::logging::setup_logging (os=...) at 
/home/ports/pobj/amd64/facter-3.7.0/facter-3.7.0/lib/src/logging/logging.cc:64
#14 0x000017e915502b98 in main (argc=2, argv=0x7f7ffffd93e8) at 
/home/ports/pobj/amd64/facter-3.7.0/facter-3.7.0/exe/facter.cc:136

If someone has a cluebat or can point me into the right direction, I'm all ears.
The only thing I can see, that leatherman, as well as boost is involved, and 
that all circles around LOCALE settings.

So, when building facter, telling it that leatherman doesn't support locale, 
fixes the problem, but I don't think that this is a proper solution.
So if someone has a pointer to the above, let me know.

Sebastian

Index: Makefile
===================================================================
RCS file: /cvs/ports/sysutils/facter/Makefile,v
retrieving revision 1.46
diff -u -p -u -r1.46 Makefile
--- Makefile    26 Jul 2017 22:45:30 -0000      1.46
+++ Makefile    1 Aug 2017 22:22:42 -0000
@@ -8,7 +8,7 @@ DISTNAME =              facter-${VERSION}
 SHARED_LIBS +=         facter                    3.1 # 3.2
 PKGSPEC =              facter->=3.0,<4.0
 CATEGORIES =           sysutils
-REVISION =             0
+REVISION =             1

 MAINTAINER =           Sebastian Reitenbach <[email protected]>

@@ -40,6 +40,7 @@ LIB_DEPENDS =         devel/boost>=1.58 \
 BUILD_DEPENDS =                devel/gettext-tools

 CONFIGURE_ARGS+=       
-DFACTER_RUBY="${LOCALBASE}/lib/libruby${MODRUBY_BINREV}.so" \
+                       -DLEATHERMAN_USE_LOCALES:Bool=No \
                        
-DRUBY_LIB_INSTALL="${PREFIX}/lib/ruby/vendor_ruby/${MODRUBY_REV}" \
                        -DWITHOUT_JRUBY:Bool=Yes

Reply via email to