|
#!/bin/bash |
|
# Software License Agreement (BSD) |
|
# |
|
# Author Mike Purvis <[email protected]> |
|
# Copyright (c) 2014-2016, Clearpath Robotics, Inc., All rights reserved. |
|
# |
|
# Redistribution and use in source and binary forms, with or without modification, are permitted provided that |
|
# the following conditions are met: |
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions and the |
|
# following disclaimer. |
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the |
|
# following disclaimer in the documentation and/or other materials provided with the distribution. |
|
# * Neither the name of Clearpath Robotics nor the names of its contributors may be used to endorse or |
|
# promote products derived from this software without specific prior written permission. |
|
# |
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED |
|
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A |
|
# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR |
|
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED |
|
# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
|
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
|
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
|
# POSSIBILITY OF SUCH DAMAGE. |
|
|
|
ROS_DISTRO=${ROS_DISTRO:-melodic} |
|
ROS_CONFIGURATION=${ROS_CONFIGURATION:-desktop_full} |
|
ROS_EXTRA_PACKAGES=${ROS_EXTRA_PACKAGES:-} |
|
ROS_INSTALL_DIR=${ROS_INSTALL_DIR:-/opt/ros/${ROS_DISTRO}} |
|
|
|
do_install() |
|
{ |
|
set -e |
|
|
|
# Homebrew |
|
if ! hash brew 2>/dev/null; then |
|
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" |
|
echo export PATH='/usr/local/bin:$PATH' >> ~/.bash_profile |
|
source ~/.bash_profile |
|
brew doctor |
|
fi |
|
brew update |
|
|
|
# XQuartz |
|
if ! hash xquartz 2>/dev/null; then |
|
brew install caskroom/cask/brew-cask |
|
brew cask install xquartz |
|
echo "Log out and in to finalize XQuartz setup." |
|
exit 0 |
|
fi |
|
|
|
# Check for pip packages in the system Python directory. |
|
if [ $(ls /Library/Python/2.7/site-packages/ | wc -l) -gt 1 ]; then |
|
echo "These instructions are about to install Python from Homebrew. However, there are already" |
|
echo "pip packages installed against the system python, in the following path:" |
|
echo |
|
echo " /Library/Python/2.7/site-packages/" |
|
echo |
|
echo "If you have problems, please uninstall these packages:" |
|
echo |
|
echo " for i in \$( pip freeze ); do sudo -H pip uninstall -y \$i; done" |
|
echo |
|
echo "Then delete the build directory and start over again from scratch." |
|
fi |
|
|
|
# Check for root-owned stuff in /usr/local |
|
if [ $(find /usr/local/* -maxdepth 3 -type d -user root | wc -l) -gt 1 ]; then |
|
echo "Looks like you have some stuff owned by the root user in /usr/local. The installation can" |
|
echo "continue, but if there are pip packages which were installed using sudo, this will be a" |
|
echo "problem if rosdep tries to update them. If you have issues installing dependencies, consider" |
|
echo "nuking your Homebrew installation and starting from scratch:" |
|
echo |
|
echo " https://gist.github.com/mxcl/1173223" |
|
echo |
|
echo "Alternatively, you could try chowning the contents of /usr/local to yourself:" |
|
echo |
|
echo " sudo chown -R $USER:admin /usr/local/*" |
|
fi |
|
|
|
# Brewed Python |
|
if [ ! "$(which python2)" = "/usr/local/bin/python2" ]; then |
|
brew install python |
|
mkdir -p ~/Library/Python/2.7/lib/python/site-packages |
|
echo "$(brew --prefix)/lib/python2.7/site-packages" >> ~/Library/Python/2.7/lib/python/site-packages/homebrew.pth |
|
fi |
|
|
|
# Gives us console_bridge, urdfdom, and gtest. |
|
brew tap ros/deps |
|
|
|
# This tap gives us formulae for Gazebo and its dependencies, including SDF. |
|
brew tap osrf/simulation |
|
|
|
# ROS infrastructure tools |
|
brew install libyaml || true |
|
pip2 install -U setuptools rosdep rosinstall_generator wstool rosinstall catkin_tools bloom empy sphinx pycurl |
|
|
|
# Rosdep has an issue detecting that qt5 is correctly installed, so preinstall it. This is a keg-only formula, |
|
# so add its location to the prefix path in order for workspace packages to be able to find it. |
|
brew install qt5 pyqt5 sip |
|
export CMAKE_PREFIX_PATH=$(brew --prefix qt5) |
|
|
|
# This hack is required to make qt_gui_cpp compile correctly. See https://github.com/mikepurvis/ros-install-osx/pull/84#issuecomment-338209466 |
|
pushd /usr/local/share/sip |
|
if [ ! -e PyQt5 ]; then |
|
ln -s Qt5 PyQt5 |
|
fi |
|
popd |
|
|
|
# Get homebrew's opencv3 from a bottle so that we don't have to build it. |
|
brew install opencv3 |
|
|
|
# Mock out python and pip so that we get the brewed versions when rosdep and other programs call them. |
|
# Mock out pip so that we get the brewed pip2 when rosdep calls it to make an installation. |
|
export PATH=$(pwd)/shim:$PATH |
|
|
|
# Initialize and update rosdep |
|
if [ ! -d /etc/ros/rosdep/ ]; then |
|
echo "This sudo prompt is to initialize rosdep (creates the /etc/ros/rosdep path)." |
|
sudo rosdep init |
|
fi |
|
if [ ! -f /etc/ros/rosdep/sources.list.d/10-ros-install-osx.list ]; then |
|
echo "This sudo prompt adds the the brewed python rosdep yaml to /etc/ros/rosdep/sources.list.d/10-ros-install-osx.list" |
|
sudo sh -c "echo 'yaml file://$(pwd)/rosdeps.yaml osx' > /etc/ros/rosdep/sources.list.d/10-ros-install-osx.list" |
|
fi |
|
rosdep update |
|
|
|
# Remove previous workspace if present, create and enter new one. |
|
WS=${ROS_DISTRO}_${ROS_CONFIGURATION}_ws |
|
if [ -d "$WS" ]; then |
|
rm -rf "$WS" |
|
fi |
|
mkdir $WS |
|
cd $WS |
|
|
|
# Standard source install |
|
rosinstall_generator ${ROS_CONFIGURATION} ${ROS_EXTRA_PACKAGES} --rosdistro ${ROS_DISTRO} --deps --tar > ${WS}.rosinstall |
|
wstool init src |
|
pushd src |
|
# Avoid downloading opencv3; we already installed it from homebrew. |
|
wstool merge file://$(pwd)/../${WS}.rosinstall |
|
#wstool remove opencv3 |
|
wstool update -j8 |
|
|
|
# See: https://github.com/ros/catkin/pull/784 |
|
if [ -d catkin ]; then |
|
curl https://raw.githubusercontent.com/ros/catkin/8a47f4eceb4954beb4a5b38b50793d0bbe2c96cf/cmake/catkinConfig.cmake.in > catkin/cmake/catkinConfig.cmake.in |
|
fi |
|
|
|
# Pending release: https://github.com/ros-visualization/rviz/pull/1165 |
|
if [ -d rviz ]; then |
|
curl https://raw.githubusercontent.com/mikepurvis/rviz/21eac2bcc061bb623fd17aa449f6215c493b27f2/CMakeLists.txt > rviz/CMakeLists.txt |
|
fi |
|
|
|
if [ -d image_pipeline ]; then |
|
# Pending merge and release: https://github.com/ros-perception/image_pipeline/pull/303 |
|
curl https://raw.githubusercontent.com/mikepurvis/image_pipeline/d308d00aed5b66961f9e13ab7a50660a24be7c7f/image_proc/CMakeLists.txt > image_pipeline/image_proc/CMakeLists.txt |
|
curl https://raw.githubusercontent.com/mikepurvis/image_pipeline/d308d00aed5b66961f9e13ab7a50660a24be7c7f/stereo_image_proc/CMakeLists.txt > image_pipeline/stereo_image_proc/CMakeLists.txt |
|
|
|
# Pending merge and release: https://github.com/ros-perception/image_pipeline/pull/304 |
|
curl https://raw.githubusercontent.com/mbreyer/image_pipeline/4bf67d3c861cb157e8174f67250680263b18d2b7/image_publisher/CMakeLists.txt > image_pipeline/image_publisher/CMakeLists.txt |
|
fi |
|
|
|
# Package dependencies. |
|
rosdep install --from-paths . --ignore-src --rosdistro ${ROS_DISTRO} -y --as-root pip:no |
|
popd |
|
|
|
# Clean out or create the install directory. |
|
if [ -d ${ROS_INSTALL_DIR} ]; then |
|
rm -rf ${ROS_INSTALL_DIR}/* |
|
else |
|
echo "This sudo prompt is to create and chown ${ROS_INSTALL_DIR}." |
|
sudo mkdir -p ${ROS_INSTALL_DIR} |
|
sudo chown $USER ${ROS_INSTALL_DIR} |
|
fi |
|
|
|
# OpenSSL |
|
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/opt/openssl/lib/pkgconfig" |
|
|
|
# Parallel build. |
|
catkin config --install \ |
|
--install-space ${ROS_INSTALL_DIR} \ |
|
--cmake-args \ |
|
-DCATKIN_ENABLE_TESTING=1 \ |
|
-DCMAKE_BUILD_TYPE=Release \ |
|
-DCMAKE_FIND_FRAMEWORK=LAST \ |
|
-DPYTHON_EXECUTABLE=$(which python2) \ |
|
-DPYTHON_LIBRARY=$(python2 -c "import sys; print sys.prefix")/lib/libpython2.7.dylib \ |
|
-DPYTHON_INCLUDE_DIR=$(python2 -c "import sys; print sys.prefix")/include/python2.7 \ |
|
-DCMAKE_CXX_STANDARD=14 |
|
catkin build --limit-status-rate 1 |
|
|
|
echo "Installation successful, please source the ROS workspace:" |
|
echo |
|
echo " source ${ROS_INSTALL_DIR}/setup.bash" |
|
echo |
|
|
|
# Check for SIP if on OSX/macOS 10.11 (El Capitan) or later |
|
if [[ `sw_vers -productVersion` > "10.10" ]] |
|
then |
|
if `csrutil status | grep -q enabled` |
|
then |
|
echo "You have System Integrity Protection enabled." |
|
echo |
|
echo "This prevents DYLD_LIBRARY_PATH from being exported to subshells" |
|
echo "Please add: export DYLD_LIBRARY_PATH=\$DYLD_LIBRARY_PATH:/opt/ros/\$ROS_DISTRO/lib" |
|
echo "To the start of /opt/ros/$ROS_DISTRO/bin/rosrun to work around the issue." |
|
fi |
|
fi |
|
} |
|
|
|
do_install |
Lifesafer!! Thanks!