plasmodic/ecto

build failure on mavericks

wjwwood opened this issue · 14 comments

When building ecto for indigo on OS X 10.9 "mavericks" I get this:

[ecto]: ==> '/Users/william/indigo/build/ecto/cmi_env.sh /usr/bin/make -j4 -l4' in '/Users/william/indigo/build/ecto'
Scanning dependencies of target ecto
[  0%] Building CXX object src/lib/CMakeFiles/ecto.dir/abi.cpp.o
[  1%] Building CXX object src/lib/CMakeFiles/ecto.dir/tendril.cpp.o
In file included from /Users/william/indigo/src/ecto/src/lib/tendril.cpp:30:
In file included from /usr/local/include/boost/date_time/posix_time/posix_time.hpp:24:
In file included from /usr/local/include/boost/date_time/posix_time/time_formatters.hpp:12:
In file included from /usr/local/include/boost/date_time/gregorian/gregorian.hpp:34:
In file included from /usr/local/include/boost/date_time/gregorian/parsers.hpp:13:
/usr/local/include/boost/date_time/date_parsing.hpp:50:30: error: too many arguments provided to function-like macro invocation
        std::tolower(inp[i], loc);
                             ^
/System/Library/Frameworks/Python.framework/Headers/pyport.h:729:9: note: macro 'tolower' defined here
#define tolower(c) towlower(btowc(c))
        ^
In file included from /Users/william/indigo/src/ecto/src/lib/tendril.cpp:30:
In file included from /usr/local/include/boost/date_time/posix_time/posix_time.hpp:24:
In file included from /usr/local/include/boost/date_time/posix_time/time_formatters.hpp:12:
In file included from /usr/local/include/boost/date_time/gregorian/gregorian.hpp:34:
In file included from /usr/local/include/boost/date_time/gregorian/parsers.hpp:13:
/usr/local/include/boost/date_time/date_parsing.hpp:44:14: error: assigning to 'value_type' (aka 'char') from incompatible type '<overloaded function type>'
      inp[i] =
             ^
/usr/include/ctype.h:292:1: note: candidate function
tolower(int _c)
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/__locale:756:1: note: candidate function
tolower(_CharT __c, const locale& __loc)
^
2 errors generated.
make[2]: *** [src/lib/CMakeFiles/ecto.dir/tendril.cpp.o] Error 1
make[1]: *** [src/lib/CMakeFiles/ecto.dir/all] Error 2
make: *** [all] Error 2

Looks like a collision with a macro in the Python headers.

hmm, can you try an #include <locale> in src/lib/tendril.cpp , right before the #include <boost/date_time/posix_time/posix_time.hpp> . Thx.

You need to ```` back tick quote things in <> otherwise they go away... I can't read your message.

noooob. Done.

I get the same error.

hmmmm, so <locale> defines tolower with two arguments. But somehow, boost does not include it. Same if you put it at the very top of the file ?

That doesn't work either. The problem is that Python totally clobers it with that line:

#define tolower(c) towlower(btowc(c))

Adding #undef tolower after #include <boost/python.hpp> gets further, leading to this C++11 error:

Scanning dependencies of target ecto
[  1%] [  2%] Building CXX object src/lib/CMakeFiles/ecto.dir/tendril.cpp.o
[  3%] [  4%] Building CXX object src/lib/CMakeFiles/ecto.dir/util.cpp.o
Building CXX object src/lib/CMakeFiles/ecto.dir/log.cpp.o
Building CXX object src/lib/CMakeFiles/ecto.dir/except.cpp.o
/Users/william/indigo/src/ecto/src/lib/util.cpp:30:10: fatal error: 'tr1/unordered_map' file not found
#include <tr1/unordered_map>
         ^
1 error generated.

oh write, what's your compiler ? clang ? And you're on strict C++11 ?

Mavericks is clang and c++11 strict.

I pushed a fix for TR1 and the undef. Please pull and test

Now this with your patch:

[  1%] Building CXX object src/lib/CMakeFiles/ecto.dir/rethrow.cpp.o
In file included from /Users/william/indigo/src/ecto/src/lib/rethrow.cpp:31:
In file included from /Users/william/indigo/src/ecto/include/ecto/scheduler.hpp:32:
In file included from /Users/william/indigo/src/ecto/include/ecto/profile.hpp:36:
In file included from /usr/local/include/boost/date_time/posix_time/posix_time.hpp:24:
In file included from /usr/local/include/boost/date_time/posix_time/time_formatters.hpp:12:
In file included from /usr/local/include/boost/date_time/gregorian/gregorian.hpp:34:
In file included from /usr/local/include/boost/date_time/gregorian/parsers.hpp:13:
/usr/local/include/boost/date_time/date_parsing.hpp:50:30: error: too many arguments provided to function-like macro invocation
        std::tolower(inp[i], loc);
                             ^
/System/Library/Frameworks/Python.framework/Headers/pyport.h:729:9: note: macro 'tolower' defined here
#define tolower(c) towlower(btowc(c))
        ^
In file included from /Users/william/indigo/src/ecto/src/lib/rethrow.cpp:31:
In file included from /Users/william/indigo/src/ecto/include/ecto/scheduler.hpp:32:
In file included from /Users/william/indigo/src/ecto/include/ecto/profile.hpp:36:
In file included from /usr/local/include/boost/date_time/posix_time/posix_time.hpp:24:
In file included from /usr/local/include/boost/date_time/posix_time/time_formatters.hpp:12:
In file included from /usr/local/include/boost/date_time/gregorian/gregorian.hpp:34:
In file included from /usr/local/include/boost/date_time/gregorian/parsers.hpp:13:
/usr/local/include/boost/date_time/date_parsing.hpp:44:14: error: assigning to 'value_type' (aka 'char') from incompatible type '<overloaded function type>'
      inp[i] =
             ^
/usr/include/ctype.h:292:1: note: candidate function
tolower(int _c)
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/__locale:756:1: note: candidate function
tolower(_CharT __c, const locale& __loc)
^
In file included from /Users/william/indigo/src/ecto/src/lib/rethrow.cpp:30:
In file included from /Users/william/indigo/src/ecto/include/ecto/python.hpp:36:
In file included from /usr/local/include/boost/python.hpp:28:
In file included from /usr/local/include/boost/python/exception_translator.hpp:10:
In file included from /usr/local/include/boost/bind.hpp:22:
/usr/local/include/boost/bind/bind.hpp:69:22: error: type 'void (*)(const boost::exception_ptr &) __attribute__((noreturn))' cannot be used prior to '::' because it has no members
    typedef typename F::result_type type;
                     ^
/usr/local/include/boost/bind/bind_template.hpp:15:22: note: in instantiation of template class 'boost::_bi::result_traits<boost::_bi::unspecified, void (*)(const boost::exception_ptr &) __attribute__((noreturn))>' requested here
    typedef typename result_traits<R, F>::type result_type;
                     ^
/Users/william/indigo/src/ecto/src/lib/rethrow.cpp:47:41: note: in instantiation of template class 'boost::_bi::bind_t<boost::_bi::unspecified, void (*)(const boost::exception_ptr &) __attribute__((noreturn)), boost::_bi::list1<boost::_bi::value<boost::exception_ptr> > >' requested here
        boost::python::handle_exception(boost::bind(&boost::rethrow_exception, rethrowable_in_interpreter_thread));
                                        ^
3 errors generated.
make[2]: *** [src/lib/CMakeFiles/ecto.dir/rethrow.cpp.o] Error 1
make[1]: *** [src/lib/CMakeFiles/ecto.dir/all] Error 2
make: *** [all] Error 2

With your patch I get this:

[  1%] Building CXX object src/lib/CMakeFiles/ecto.dir/rethrow.cpp.o
In file included from /Users/william/indigo/src/ecto/src/lib/rethrow.cpp:31:
In file included from /Users/william/indigo/src/ecto/include/ecto/scheduler.hpp:32:
In file included from /Users/william/indigo/src/ecto/include/ecto/profile.hpp:36:
In file included from /usr/local/include/boost/date_time/posix_time/posix_time.hpp:24:
In file included from /usr/local/include/boost/date_time/posix_time/time_formatters.hpp:12:
In file included from /usr/local/include/boost/date_time/gregorian/gregorian.hpp:34:
In file included from /usr/local/include/boost/date_time/gregorian/parsers.hpp:13:
/usr/local/include/boost/date_time/date_parsing.hpp:50:30: error: too many arguments provided to function-like macro invocation
        std::tolower(inp[i], loc);
                             ^
/System/Library/Frameworks/Python.framework/Headers/pyport.h:729:9: note: macro 'tolower' defined here
#define tolower(c) towlower(btowc(c))
        ^
In file included from /Users/william/indigo/src/ecto/src/lib/rethrow.cpp:31:
In file included from /Users/william/indigo/src/ecto/include/ecto/scheduler.hpp:32:
In file included from /Users/william/indigo/src/ecto/include/ecto/profile.hpp:36:
In file included from /usr/local/include/boost/date_time/posix_time/posix_time.hpp:24:
In file included from /usr/local/include/boost/date_time/posix_time/time_formatters.hpp:12:
In file included from /usr/local/include/boost/date_time/gregorian/gregorian.hpp:34:
In file included from /usr/local/include/boost/date_time/gregorian/parsers.hpp:13:
/usr/local/include/boost/date_time/date_parsing.hpp:44:14: error: assigning to 'value_type' (aka 'char') from incompatible type '<overloaded function type>'
      inp[i] =
             ^
/usr/include/ctype.h:292:1: note: candidate function
tolower(int _c)
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/__locale:756:1: note: candidate function
tolower(_CharT __c, const locale& __loc)
^
In file included from /Users/william/indigo/src/ecto/src/lib/rethrow.cpp:30:
In file included from /Users/william/indigo/src/ecto/include/ecto/python.hpp:36:
In file included from /usr/local/include/boost/python.hpp:28:
In file included from /usr/local/include/boost/python/exception_translator.hpp:10:
In file included from /usr/local/include/boost/bind.hpp:22:
/usr/local/include/boost/bind/bind.hpp:69:22: error: type 'void (*)(const boost::exception_ptr &) __attribute__((noreturn))' cannot be used prior to '::' because it has no members
    typedef typename F::result_type type;
                     ^
/usr/local/include/boost/bind/bind_template.hpp:15:22: note: in instantiation of template class 'boost::_bi::result_traits<boost::_bi::unspecified, void (*)(const boost::exception_ptr &) __attribute__((noreturn))>' requested here
    typedef typename result_traits<R, F>::type result_type;
                     ^
/Users/william/indigo/src/ecto/src/lib/rethrow.cpp:47:41: note: in instantiation of template class 'boost::_bi::bind_t<boost::_bi::unspecified, void (*)(const boost::exception_ptr &) __attribute__((noreturn)), boost::_bi::list1<boost::_bi::value<boost::exception_ptr> > >' requested here
        boost::python::handle_exception(boost::bind(&boost::rethrow_exception, rethrowable_in_interpreter_thread));
                                        ^
3 errors generated.
make[2]: *** [src/lib/CMakeFiles/ecto.dir/rethrow.cpp.o] Error 1
make[1]: *** [src/lib/CMakeFiles/ecto.dir/all] Error 2
make: *** [all] Error 2

@wjwwood please confirm as I am about to make a release. Thx

Nope:

william@dosa ~/indigo/src
% rm -rf ecto

william@dosa ~/indigo/src
% git clone https://github.com/plasmodic/ecto.git
Cloning into 'ecto'...
remote: Reusing existing pack: 17892, done.
remote: Counting objects: 56, done.
remote: Compressing objects: 100% (55/55), done.
remote: Total 17948 (delta 20), reused 0 (delta 0)
Receiving objects: 100% (17948/17948), 25.16 MiB | 4.79 MiB/s, done.
Resolving deltas: 100% (7493/7493), done.
Checking connectivity... done

william@dosa ~/indigo/src
% cd ecto

william@dosa ~/indigo/src/ecto (git:master:82dacc0)
% git log -4
commit 82dacc01a4ee3c606c80c05bd0a0a405275b604a
Author: Vincent Rabaud <vincent.rabaud@gmail.com>
Date:   Sat Mar 1 14:49:16 2014 +0100

    fixes #245 according to http://bugs.python.org/issue10910

commit 4e26e80d7a3d54cf4d8fe499684372826c661e78
Author: Vincent Rabaud <vincent.rabaud@gmail.com>
Date:   Sat Mar 1 13:33:09 2014 +0100

    trust catkin to handle the version number

commit 8e354b5aa8281ea8117fc93adb290998b7810be7
Author: Vincent Rabaud <vincent.rabaud@gmail.com>
Date:   Sat Mar 1 13:12:43 2014 +0100

    trust catkin to handle ecto_LIBRARIES

commit 5bef1006f4c5b0d5f2beac73f351b431a2b47709
Author: Vincent Rabaud <vincent.rabaud@gmail.com>
Date:   Tue Feb 25 22:10:04 2014 +0100

    fixes part of #245

william@dosa ~/indigo/src/ecto (git:master:82dacc0)
% cd ...

william@dosa ~/indigo
% ~/devel/catkin/bin/pcmi ecto -p1 -j1
----------------------------------------------------------
Workspace:                   /Users/william/indigo
Buildspace:                  /Users/william/indigo/build
Develspace:                  /Users/william/indigo/devel
Installspace:                /Users/william/indigo/install
DESTDIR:                     None
----------------------------------------------------------
Merge Develspaces:           False
Install Packages:            False
Isolate Installs:            False
----------------------------------------------------------
Additional CMake Args:       None
Additional Make Args:        -j1
Additional catkin Make Args: None
----------------------------------------------------------
Found '140' packages in 0.3 seconds.
Starting ==> catkin
[catkin]: ==> '/Users/william/indigo/build/catkin/cmi_env.sh /usr/bin/make cmake_check_build_system' in '/Users/william/indigo/build/catkin'
[catkin]: ==> '/Users/william/indigo/build/catkin/cmi_env.sh /usr/bin/make -j1' in '/Users/william/indigo/build/catkin'
Finished <== catkin [ 0.1 seconds ]
Starting ==> ecto
[ecto]: ==> '/Users/william/indigo/build/ecto/cmi_env.sh /usr/bin/make cmake_check_build_system' in '/Users/william/indigo/build/ecto'
-- Using CATKIN_DEVEL_PREFIX: /Users/william/indigo/devel/ecto
-- Using CMAKE_PREFIX_PATH: /Users/william/indigo/devel/catkin
-- This workspace overlays: /Users/william/indigo/devel/catkin
-- Using PYTHON_EXECUTABLE: /usr/bin/python
-- Using default Python package layout
-- Using CATKIN_ENABLE_TESTING: ON
-- Call enable_testing()
-- Using CATKIN_TEST_RESULTS_DIR: /Users/william/indigo/build/ecto/test_results
-- Found gtest: gtests will be built
-- catkin 0.6.1
-- Boost version: 1.55.0
-- Boost version: 1.55.0
-- Found the following Boost libraries:
--   date_time
--   python
--   regex
--   serialization
--   system
--   thread
-- Boost version 1.55.0
-- ecto commit:       82dacc01a4ee3c606c80c05bd0a0a405275b604a
-- ecto tag (long):   0.6.1-4-g82dacc0
-- ecto tag (short):  0.6.1
-- ecto last_mod:     Sat, 1 Mar 2014 14:49:16 +0100
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/william/indigo/build/ecto
[ecto]: ==> '/Users/william/indigo/build/ecto/cmi_env.sh /usr/bin/make -j1' in '/Users/william/indigo/build/ecto'
Scanning dependencies of target ecto
[  0%] Building CXX object src/lib/CMakeFiles/ecto.dir/abi.cpp.o
[  1%] Building CXX object src/lib/CMakeFiles/ecto.dir/cell.cpp.o
[  2%] Building CXX object src/lib/CMakeFiles/ecto.dir/edge.cpp.o
[  3%] Building CXX object src/lib/CMakeFiles/ecto.dir/tendril.cpp.o
In file included from /Users/william/indigo/src/ecto/src/lib/tendril.cpp:31:
In file included from /usr/local/include/boost/date_time/posix_time/posix_time.hpp:24:
In file included from /usr/local/include/boost/date_time/posix_time/time_formatters.hpp:12:
In file included from /usr/local/include/boost/date_time/gregorian/gregorian.hpp:34:
In file included from /usr/local/include/boost/date_time/gregorian/parsers.hpp:13:
/usr/local/include/boost/date_time/date_parsing.hpp:50:30: error: too many arguments provided to function-like macro invocation
        std::tolower(inp[i], loc);
                             ^
/System/Library/Frameworks/Python.framework/Headers/pyport.h:729:9: note: macro 'tolower' defined here
#define tolower(c) towlower(btowc(c))
        ^
In file included from /Users/william/indigo/src/ecto/src/lib/tendril.cpp:31:
In file included from /usr/local/include/boost/date_time/posix_time/posix_time.hpp:24:
In file included from /usr/local/include/boost/date_time/posix_time/time_formatters.hpp:12:
In file included from /usr/local/include/boost/date_time/gregorian/gregorian.hpp:34:
In file included from /usr/local/include/boost/date_time/gregorian/parsers.hpp:13:
/usr/local/include/boost/date_time/date_parsing.hpp:44:14: error: assigning to 'value_type' (aka 'char') from incompatible type '<overloaded function type>'
      inp[i] =
             ^
/usr/include/ctype.h:292:1: note: candidate function
tolower(int _c)
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/__locale:756:1: note: candidate function
tolower(_CharT __c, const locale& __loc)
^
2 errors generated.
make[2]: *** [src/lib/CMakeFiles/ecto.dir/tendril.cpp.o] Error 1
make[1]: *** [src/lib/CMakeFiles/ecto.dir/all] Error 2
make: *** [all] Error 2
[cmi] There were errors:

Failed to build package 'ecto' because the following command:

    # Command run in directory: /Users/william/indigo/build/ecto
    /Users/william/indigo/build/ecto/cmi_env.sh /usr/bin/make -j1

Exited with return code: 2
[cmi] Runtime: 24.4 seconds