How to install Boost.Python using homebrew (on OSX)? - python-2.7

I'm trying to install Robot Operating System (ROS) Melodic on my mac (macOS 11.5.1). While compiling cv_bridge package, the compiler spit out an error related to the Boost.Python:
$ ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release -DCMAKE_MACOSX_RPATH=ON -DCMAKE_INSTALL_RPATH=$HOME/ros_catkin_ws/install_isolated/lib -DCMAKE_PREFIX_PATH="/usr/local/Cellar/qt#5/5.15.2;${HOME}/ros_catkin_ws/install_isolated" -DCMAKE_CXX_STANDARD=17 --pkg cv_bridge
.......... (some log messages are skipped)
-- The C compiler identification is AppleClang 12.0.5.12050022
-- The CXX compiler identification is AppleClang 12.0.5.12050022
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Using CATKIN_DEVEL_PREFIX: /Users/yj/ros_catkin_ws/devel_isolated/cv_bridge
-- Using CMAKE_PREFIX_PATH: /usr/local/Cellar/qt#5/5.15.2;/Users/yj/ros_catkin_ws/install_isolated
-- This workspace overlays: /Users/yj/ros_catkin_ws/install_isolated
-- Found PythonInterp: /Library/Frameworks/Python.framework/Versions/2.7/bin/python2 (found suitable version "2.7.16", minimum required is "2")
-- Using PYTHON_EXECUTABLE: /Library/Frameworks/Python.framework/Versions/2.7/bin/python2
-- Using default Python package layout
-- Found PY_em: /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/em.pyc
-- Using empy: /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/em.pyc
-- Using CATKIN_ENABLE_TESTING: ON
-- Call enable_testing()
-- Using CATKIN_TEST_RESULTS_DIR: /Users/yj/ros_catkin_ws/build_isolated/cv_bridge/test_results
-- Found gtest: gtests will be built
-- Using Python nosetests: /Library/Frameworks/Python.framework/Versions/2.7/bin/nosetests-2.7
-- catkin 0.7.29
-- BUILD_SHARED_LIBS is on
-- Found PythonLibs: /Library/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib (found version "2.7.16")
CMake Error at /usr/local/lib/cmake/Boost-1.76.0/BoostConfig.cmake:141 (find_package):
Could not find a package configuration file provided by "boost_python"
(requested version 1.76.0) with any of the following names:
boost_pythonConfig.cmake
boost_python-config.cmake
Add the installation prefix of "boost_python" to CMAKE_PREFIX_PATH or set
"boost_python_DIR" to a directory containing one of the above files. If
"boost_python" provides a separate development package or SDK, be sure it
has been installed.
Call Stack (most recent call first):
/usr/local/lib/cmake/Boost-1.76.0/BoostConfig.cmake:258 (boost_find_component)
/usr/local/Cellar/cmake/3.21.1/share/cmake/Modules/FindBoost.cmake:594 (find_package)
CMakeLists.txt:9 (find_package)
-- Configuring incomplete, errors occurred!
See also "/Users/yj/ros_catkin_ws/build_isolated/cv_bridge/CMakeFiles/CMakeOutput.log".
See also "/Users/yj/ros_catkin_ws/build_isolated/cv_bridge/CMakeFiles/CMakeError.log".
Traceback (most recent call last):
File "./src/catkin/bin/catkin_make_isolated", line 169, in <module>
main()
File "./src/catkin/bin/catkin_make_isolated", line 164, in main
override_build_tool_check=opts.override_build_tool_check,
File "./src/catkin/bin/../python/catkin/builder.py", line 1071, in build_workspace_isolated
_print_build_error(package, e)
File "./src/catkin/bin/../python/catkin/builder.py", line 810, in _print_build_error
cprint("#{rf}#!<==#| Failed to process package '#!#{bf}" + package.name + "#|': \n " + e_msg)
File "./src/catkin/bin/../python/catkin/builder.py", line 128, in cprint
print(fmt(msg), end=end)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/catkin_pkg/terminal_color.py", line 126, in fmt
return t.substitute(_ansi) + ansi('reset')
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/string.py", line 176, in substitute
return self.pattern.sub(convert, self.template)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/string.py", line 173, in convert
self._invalid(mo)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/string.py", line 146, in _invalid
(lineno, colno))
ValueError: Invalid placeholder in string: line 2, col 437
It looks that the CMake was attempting to find the Boost.Python module, but it couldn't. I never installed it. So, I typed the following command to install the Boost.Python:
$ brew install boost-python
The homebrew responded:
$ brew install boost-python
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 2 taps (osrf/simulation and homebrew/core).
==> New Formulae
cruft pari-galdata pari-seadata-big
eigenpy pari-galpol singularity
newrelic-infra-agent pari-seadata spot
==> Updated Formulae
Updated 43 formulae.
Error: boost-python has been disabled because it does not build!
It looks not possible to install the boost-python formula through homebrew. Then, how can I install it?
This is a short brief of my system configuration:
OS: macOS Big Sur (11.5.1)
Boost library is installed by homebrew (brew install boost)
boost version: 1.76.0
python version: 2.7.16
cmake version: 3.21.1
Edit 1
As #BTables said, I tried this command: brew install boost --with-python
It looks removed. My homebrew version is 3.2.8.
$ brew install boost --with-python
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 2 taps (osrf/simulation and homebrew/core).
==> Updated Formulae
Updated 121 formulae.
Usage: brew install [options] formula|cask [...]
Install a formula or cask. Additional options specific to a formula may be
appended to the command.
Unless HOMEBREW_NO_INSTALL_CLEANUP is set, brew cleanup will then be run for
the installed formulae or, every 30 days, for all formulae.
-d, --debug If brewing fails, open an interactive
debugging session with access to IRB or a
shell inside the temporary build directory.
-f, --force Install formulae without checking for
previously installed keg-only or
non-migrated versions. When installing
casks, overwrite existing files (binaries
and symlinks are excluded, unless
originally from the same cask).
-v, --verbose Print the verification and postinstall
steps.
--formula, --formulae Treat all named arguments as formulae.
--env Disabled other than for internal Homebrew
use.
--ignore-dependencies An unsupported Homebrew development flag to
skip installing any dependencies of any
kind. If the dependencies are not already
present, the formula will have issues. If
you're not developing Homebrew, consider
adjusting your PATH rather than using this
flag.
--only-dependencies Install the dependencies with specified
options but do not install the formula
itself.
--cc Attempt to compile using the specified
compiler, which should be the name of the
compiler's executable, e.g. gcc-7 for GCC
7. In order to use LLVM's clang, specify
llvm_clang. To use the Apple-provided
clang, specify clang. This option will
only accept compilers that are provided by
Homebrew or bundled with macOS. Please do
not file issues if you encounter errors
while using this option.
-s, --build-from-source Compile formula from source even if a
bottle is provided. Dependencies will still
be installed from bottles if they are
available.
--force-bottle Install from a bottle if it exists for the
current or newest version of macOS, even if
it would not normally be used for
installation.
--include-test Install testing dependencies required to
run brew test formula.
--HEAD If formula defines it, install the HEAD
version, aka. main, trunk, unstable,
master.
--fetch-HEAD Fetch the upstream repository to detect if
the HEAD installation of the formula is
outdated. Otherwise, the repository's HEAD
will only be checked for updates when a new
stable or development version has been
released.
--keep-tmp Retain the temporary files created during
installation.
--build-bottle Prepare the formula for eventual bottling
during installation, skipping any
post-install steps.
--bottle-arch Optimise bottles for the specified
architecture rather than the oldest
architecture supported by the version of
macOS the bottles are built on.
--display-times Print install times for each formula at the
end of the run.
-i, --interactive Download and patch formula, then open a
shell. This allows the user to run
./configure --help and otherwise
determine how to turn the software package
into a Homebrew package.
-g, --git Create a Git repository, useful for
creating patches to the software.
--cask, --casks Treat all named arguments as casks.
--[no-]binaries Disable/enable linking of helper
executables (default: enabled).
--require-sha Require all casks to have a checksum.
--[no-]quarantine Disable/enable quarantining of downloads
(default: enabled).
--skip-cask-deps Skip installing cask dependencies.
--appdir Target location for Applications (default:
/Applications).
--colorpickerdir Target location for Color Pickers (default:
~/Library/ColorPickers).
--prefpanedir Target location for Preference Panes
(default: ~/Library/PreferencePanes).
--qlplugindir Target location for QuickLook Plugins
(default: ~/Library/QuickLook).
--mdimporterdir Target location for Spotlight Plugins
(default: ~/Library/Spotlight).
--dictionarydir Target location for Dictionaries (default:
~/Library/Dictionaries).
--fontdir Target location for Fonts (default:
~/Library/Fonts).
--servicedir Target location for Services (default:
~/Library/Services).
--input-methoddir Target location for Input Methods (default:
~/Library/Input Methods).
--internet-plugindir Target location for Internet Plugins
(default: ~/Library/Internet Plug-Ins).
--audio-unit-plugindir Target location for Audio Unit Plugins
(default:
~/Library/Audio/Plug-Ins/Components).
--vst-plugindir Target location for VST Plugins (default:
~/Library/Audio/Plug-Ins/VST).
--vst3-plugindir Target location for VST3 Plugins (default:
~/Library/Audio/Plug-Ins/VST3).
--screen-saverdir Target location for Screen Savers (default:
~/Library/Screen Savers).
--language Comma-separated list of language codes to
prefer for cask installation. The first
matching language is used, otherwise it
reverts to the cask's default language. The
default value is the language of your
system.
-q, --quiet Make some output more quiet.
-h, --help Show this message.
Error: invalid option: --with-python
$ brew --version
Homebrew 3.2.8
Homebrew/homebrew-core (git revision 6614f2a9b0; last commit 2021-08-18)

I was facing the same issue, I tried the following command and I worked:
$ brew install boost-python3

Don't know if ROS's cmake is set up to detect/use it since your other detections are for python2, but there is a another cask for python3: brew install boost-python3

Run brew install boost --with-python then do brew install boost-python.
I would also like to warn you that running Melodic(or really any OSX release of ROS) isn't something I would recommend. Specifically with OSX, the build is pretty experimental and not exactly stable or complete.

Update 2022
As #minari kotori mentioned, brew install boost --with-python does not build.
However, you can try building both boost and boost-python from source:
brew install --build-from-source -vd boost boost-python
If this doesn't work, you can try if boost_python3 solves your problem:
brew install boost
and then
brew install boost_python3.
Worked for me on macOS Monterey.

Related

cmake error libcurl not found, but libcurl4 is installed

I am trying to compile the Springlobby version 268 client from the open source game TA-Spring. However the newest version (271) compiles just fine. But when I try to compile version 268 I get the CMake-error:
CMake Error at /usr/share/cmake-3.18/Modules/FindCURL.cmake:163 (message):
CURL: Required feature libcurl is not found
Call Stack (most recent call first):
src/CMakeLists.txt:127 (FIND_PACKAGE)
I am compiling on Debian testing and tried the libraries libcurl4-openssl-dev, libcurl-gnutls-dev and libcurl4-nss-dev all without success.
game: https://springrts.com
lobby 0.271: https://github.com/springlobby/springlobby
lobby 0.268: https://github.com/springlobby/springlobby/tree/0.268
install from source: https://github.com/springlobby/springlobby/wiki/Installfromsource
Building the lobby from git repo:
git clone --recursive https://github.com/springlobby/springlobby.git
cd springlobby
cmake .
make
make install
The Springlobby version 271 uses libcurl4-openssl-dev but version 268 seemingly links to an older libcurl.
Version 268 incorrectly calls find_package (src/CMakeLists.txt:127):
FIND_PACKAGE( CURL REQUIRED libcurl )
The last parameter libcurl is interpreted (according to find_package documentation) as the element of COMPONENTS list, and in case of FindCURL.cmake it is treated as PROTOCOL/FEATURE specification. Obviously, libcurl means neither protocol nor feature.
Commit https://github.com/springlobby/springlobby/commit/252c4cb156c1442ed9b4faec3f26265bc7c295ff fixes this call to
FIND_PACKAGE(CURL REQUIRED)
The Springlobby 0.268 supports the older lobby servers with most players on it as well as the newer ones.
So in case you want to compile and use the older 0.268 Springlobby, you have to git clone the current version like I already wrote and then cherry pick the older version by:
git checkout 0.268
Apply the posted fix by Tsyvarev in src/CMakeLists.txt, line 127. But you also have to add:
#include <string>
to the files src/battlelist.h and src/utils/sortutil.h below the includes at the top of these files.

Issue: No package 'libcrypto' found

I saw this issue "No package 'libcrypto' found". The same error I fixed multiple months ago was to follow this solution: https://github.com/scipr-lab/libsnark/issues/99
I tried this solution today however it doesn't work anymore. (I also tried"brew install openssl, brew info openssl") No luck.
Have you seen this before? Would you help take a look?
-- Checking for module 'libcrypto'
-- No package 'libcrypto' found
CMake Error at /usr/local/Cellar/cmake/3.15.4/share/cmake/Modules/FindPkgConfig.cmake:458 (message):
A required package was not found
Call Stack (most recent call first):
/usr/local/Cellar/cmake/3.15.4/share/cmake/Modules/FindPkgConfig.cmake:637 (_pkg_check_modules_internal)
PlaylistParser/src/CMakeLists.txt:2 (pkg_check_modules)
-- Configuring incomplete, errors occurred!
brew info openssl says the following: (for me, might be different for you if your version is different)
openssl#1.1 is keg-only, which means it was not symlinked into /usr/local,
because openssl/libressl is provided by macOS so don't link an incompatible version.
If you need to have openssl#1.1 first in your PATH run:
echo 'export PATH="/usr/local/opt/openssl#1.1/bin:$PATH"' >> ~/.zshrc
For compilers to find openssl#1.1 you may need to set:
export LDFLAGS="-L/usr/local/opt/openssl#1.1/lib"
export CPPFLAGS="-I/usr/local/opt/openssl#1.1/include"
For pkg-config to find openssl#1.1 you may need to set:
export PKG_CONFIG_PATH="/usr/local/opt/openssl#1.1/lib/pkgconfig"
Since your CMake script seems to use pkg-config, you only need to execute the last statement before you run cmake.
When I run ./install_prereq install-unpackaged command, I'd got the following error.
configure: error: Package requirements (libcrypto >= 1.0.1) were not
met:
No package 'libcrypto' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables crypto_CFLAGS and
crypto_LIBS to avoid the need to call pkg-config. See the pkg-config
man page for more details.
Then I run the following command and the problem was solved;
yum install openssl-devel

OpenCV WebAssembly

I try to run this tutorial, http://videocortex.io/2017/opencv-web-app/, to build and try out OpenCV WebAssembly. But I can´t get over step "The Build System" I´ve build emscripten 1.38.21, installed Python 2.7.5.3_64bit and CMAKE 3.13.2 but get an error in the end:
Did I missed something?
When I run emcc -v I get some error´s also:
WARNING:root:LLVM version appears incorrect (seeing "6.0", expected
"3.7") ERROR:root:Emscripten, llvm and clang versions do not match,
this is dangerous (1.35.0, "1.38.21", "1.38.21") ERROR:root:Make sure
to use the same branch in each repo, and to be up-to-date on each. See
http://kripken.github.io/emscripten-site/docs/building_from_source/LLVM-Backend.html
INFO:root:(Emscripten: Running sanity checks) emcc (Emscripten
gcc/clang-like replacement + linker emulating GNU ld) 1.35.0 clang
version 6.0.1 (emscripten 1.38.21 : 1.38.21) Target:
x86_64-pc-windows-msvc Thread model: posix InstalledDir:
D:\Repositories\emsdk\clang\e1.38.21_64bit WARNING:root:LLVM version
appears incorrect (seeing "6.0", expected "3.7")
ERROR:root:Emscripten, llvm and clang versions do not match, this is
dangerous (1.35.0, "1.38.21", "1.38.21") ERROR:root:Make sure to use
the same branch in each repo, and to be up-to-date on each. See
http://kripken.github.io/emscripten-site/docs/building_from_source/LLVM-Backend.html
INFO:root:(Emscripten: Running sanity checks)
Someone has successfully compiled OpenCV to WebAssembly. You can visit the GitHub repository and follow the steps:
Get the source code:
git clone https://github.com/ucisysarch/opencvjs.git
cd opencvjs
git clone https://github.com/opencv/opencv
cd opencv
git checkout 3.1.0
Install Emscripten:
./emsdk update
./emsdk install sdk-incoming-64bit --shallow
./emsdk activate sdk-incoming-64bit
source ./emsdk_env.sh
Build OpenCV to WebAssembly.
python make.py --wasm

Protobuf 3.0.0-alpha-1 not compiling on windows

I'm trying to compile protobuf 3.0.0 alpha 1 on Windows using MinGW 4.9.2 & MSYS.
According to the instructions I'm supposed to:
./configure
make
make check
make install
I added --prefix=/c/path/to/mingw to configure (How to build Google's protobuf in Windows using MinGW?) but it didnt help.
It fails at make with the message:
CDPATH="${ZSH_VERSION+.}:" && cd . && /bin/sh /home/Markus/protobuf-3.0.0-alpha-
1/missing aclocal-1.14 -I m4
/home/Markus/protobuf-3.0.0-alpha-1/missing: line 81: aclocal-1.14: command not
found
WARNING: 'aclocal-1.14' is missing on your system.
You should only need it if you modified 'acinclude.m4' or
'configure.ac' or m4 files included by 'configure.ac'.
The 'aclocal' program is part of the GNU Automake package:
<http://www.gnu.org/software/automake>
It also requires GNU Autoconf, GNU m4 and Perl in order to run:
<http://www.gnu.org/software/autoconf>
<http://www.gnu.org/software/m4/>
<http://www.perl.org/>
make: *** [aclocal.m4] Error 127
I've tried installing Automake but it doesnt come with aclocal.
Also today at work i managed to get it working on the first try with a bare MinGW & MSYS.
It looks like you need to install autoconf (which is separate from automake, though they are often used together). You may also need to install libtool.

How to install Modular Boost?

Because I need to test some experimental features of Boost, I would like to install Boost from the Modular Boost repository.
I followed the instructions on https://svn.boost.org/trac/boost/wiki/TryModBoost and the b2 command failed:
./b2 headers
/home/wichtounet/src/modular-boost/tools/build/src/build/feature.jam:493: in feature.validate-value-string from module feature
error: "none" is not a known value of feature <optimization>
error: legal values: "off" "speed" "space"
/home/wichtounet/src/modular-boost/tools/build/src/build/property.jam:273: in validate1 from module property
/home/wichtounet/src/modular-boost/tools/build/src/build/property.jam:299: in property.validate from module property
/home/wichtounet/src/modular-boost/tools/build/src/tools/builtin.jam:377: in variant from module builtin
/usr/share/boost-build/site-config.jam:9: in modules.load from module site-config
/home/wichtounet/src/modular-boost/tools/build/src/build-system.jam:249: in load-config from module build-system
/home/wichtounet/src/modular-boost/tools/build/src/build-system.jam:351: in load-configuration-files from module build-system
/home/wichtounet/src/modular-boost/tools/build/src/build-system.jam:524: in load from module build-system
/home/wichtounet/src/modular-boost/tools/build/src/kernel/modules.jam:289: in import from module modules
/home/wichtounet/src/modular-boost/tools/build/src/kernel/bootstrap.jam:139: in boost-build from module
/home/wichtounet/src/modular-boost/boost-build.jam:17: in module scope from module
I tried adding optimization=speed on the command line, but it didn't changed a thing. I tried the master and develop branches. I tried with clang and gcc toolset.
Does someone has an idea how to install Modular Boost ?
Is there some configuration that is necessary (and where) ? Or is there another procedure to follow ?
EDIT: It seems that it comes from the /usr/share/boost-build/site-config.jam file that is probably installed by Gentoo. I need to be able to tell b2 to ignore this file.
I turned out that this was caused by a Gentoo configuration file. I just had to ignore the file with:
./b2 --ignore-site-config
I use modular boost to get all revisions of boost at my fingertips. Together with ccache I can just switch the boost library version at a whim and I use this procedure for this:
export BOOST_VER=boost-1.55.0
git checkout --force "$BOOST_VER"
git submodule foreach 'git checkout --force "$BOOST_VER" || true'
./bootstrap.sh && ./b2 headers
That's after initial cloning as per the documentation:
git clone --recursive git#github.com:boostorg/boost.git modular-boost
My system is
Linux desktop 3.11.0-18-generic #32-Ubuntu SMP Tue Feb 18 21:11:14 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 13.10
Release: 13.10
Codename: saucy
git version 1.8.3.2