diff --git a/docs/installing-solidity.rst b/docs/installing-solidity.rst index ea415f021..dbfa7a4c5 100644 --- a/docs/installing-solidity.rst +++ b/docs/installing-solidity.rst @@ -411,24 +411,13 @@ in Visual Studio 2019 Build Tools or Visual Studio 2019: .. _Visual Studio 2019: https://www.visualstudio.com/vs/ .. _Visual Studio 2019 Build Tools: https://www.visualstudio.com/downloads/#build-tools-for-visual-studio-2019 -Dependencies Helper Script --------------------------- - -We have a helper script which you can use to install all required external dependencies -on macOS, Windows and on numerous Linux distros. - -.. code-block:: bash - - ./scripts/install_deps.sh - -Or, on Windows: +We have a helper script which you can use to install all required external dependencies: .. code-block:: bat scripts\install_deps.ps1 -Note that the latter command will install ``boost`` and ``cmake`` to the ``deps`` subdirectory, while the former command -will attempt to install the dependencies globally. +This will install ``boost`` and ``cmake`` to the ``deps`` subdirectory. Clone the Repository -------------------- diff --git a/scripts/Dockerfile b/scripts/Dockerfile index 2b2de1e27..3a1c6a5a7 100644 --- a/scripts/Dockerfile +++ b/scripts/Dockerfile @@ -6,8 +6,7 @@ MAINTAINER chriseth WORKDIR /solidity # Build dependencies -ADD /scripts/install_deps.sh /solidity/scripts/install_deps.sh -RUN ./scripts/install_deps.sh +RUN apk update && apk add boost-dev boost-static build-base cmake git #Copy working directory on travis to the image COPY / $WORKDIR diff --git a/scripts/install_deps.sh b/scripts/install_deps.sh deleted file mode 100755 index 7540c8bdf..000000000 --- a/scripts/install_deps.sh +++ /dev/null @@ -1,400 +0,0 @@ -#!/usr/bin/env sh - -#------------------------------------------------------------------------------ -# Shell script for installing pre-requisite packages for solidity on a -# variety of Linux and other UNIX-derived platforms. -# -# This is an "infrastucture-as-code" alternative to the manual build -# instructions pages which we previously maintained at: -# https://docs.soliditylang.org/en/latest/installing-solidity.html -# -# The aim of this script is to simplify things down to the following basic -# flow for all supported operating systems: -# -# - git clone --recursive -# - ./scripts/install_deps.sh -# - cmake && make -# -# TODO - There is no support here yet for cross-builds in any form, only -# native builds. Expanding the functionality here to cover the mobile, -# wearable and SBC platforms covered by doublethink and EthEmbedded would -# also bring in support for Android, iOS, watchOS, tvOS, Tizen, Sailfish, -# Maemo, MeeGo and Yocto. -# -# The documentation for solidity is hosted at: -# -# https://docs.soliditylang.org -# -# ------------------------------------------------------------------------------ -# This file is part of solidity. -# -# solidity is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# solidity is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with solidity. If not, see -# -# (c) 2016 solidity contributors. -#------------------------------------------------------------------------------ - -set -e - -# Check for 'uname' and abort if it is not available. -uname -v > /dev/null 2>&1 || { echo >&2 "ERROR - solidity requires 'uname' to identify the platform."; exit 1; } - -# See http://unix.stackexchange.com/questions/92199/how-can-i-reliably-get-the-operating-systems-name -detect_linux_distro() { - if [ "$(command -v lsb_release)" ]; then - DISTRO=$(lsb_release -is) - elif [ -f /etc/os-release ]; then - # extract 'foo' from NAME=foo, only on the line with NAME=foo - DISTRO=$(sed -n -e 's/^NAME="\?\([^"]*\)"\?$/\1/p' /etc/os-release) - elif [ -f /etc/centos-release ]; then - DISTRO=CentOS - else - DISTRO='' - fi - echo "$DISTRO" -} - -case $(uname -s) in - -#------------------------------------------------------------------------------ -# macOS -#------------------------------------------------------------------------------ - - Darwin) - case $(sw_vers -productVersion | awk -F . '{print $1"."$2}') in - 10.9) - echo "Installing solidity dependencies on OS X 10.9 Mavericks." - ;; - 10.10) - echo "Installing solidity dependencies on OS X 10.10 Yosemite." - ;; - 10.11) - echo "Installing solidity dependencies on OS X 10.11 El Capitan." - ;; - 10.12) - echo "Installing solidity dependencies on macOS 10.12 Sierra." - ;; - 10.13) - echo "Installing solidity dependencies on macOS 10.13 High Sierra." - ;; - 10.14) - echo "Installing solidity dependencies on macOS 10.14 Mojave." - ;; - 10.15) - echo "Installing solidity dependencies on macOS 10.15 Catalina." - ;; - 11.0 | 11.1 | 11.2 | 11.3 | 11.4 | 11.5 | 11.6) - echo "Installing solidity dependencies on macOS 11.0 / 11.1 / 11.2 / 11.3 / 11.4 / 11.5 / 11.6 Big Sur." - ;; - *) - echo "Unsupported macOS version." - echo "We only support Mavericks, Yosemite, El Capitan, Sierra, High Sierra, Mojave, Catalina, and Big Sur." - exit 1 - ;; - esac - - # Check for Homebrew install and abort if it is not installed. - brew -v > /dev/null 2>&1 || { echo >&2 "ERROR - solidity requires a Homebrew install. See https://brew.sh."; exit 1; } - brew update - brew install boost - brew install cmake - if [ "$CI" = true ]; then - brew upgrade cmake - else - brew upgrade - fi - - ;; - -#------------------------------------------------------------------------------ -# FreeBSD -#------------------------------------------------------------------------------ - - FreeBSD) - echo "Installing solidity dependencies on FreeBSD." - echo "ERROR - 'install_deps.sh' doesn't have FreeBSD support yet." - echo "Please let us know if you see this error message, and we can work out what is missing." - echo "Drop us a message at https://gitter.im/ethereum/solidity-dev." - exit 1 - ;; - -#------------------------------------------------------------------------------ -# Linux -#------------------------------------------------------------------------------ - - Linux) - case $(detect_linux_distro) in - -#------------------------------------------------------------------------------ -# Arch Linux -#------------------------------------------------------------------------------ - - Arch*|ManjaroLinux) - #Arch - echo "Installing solidity dependencies on Arch Linux." - - # All our dependencies can be found in the Arch Linux official repositories. - # See https://wiki.archlinux.org/index.php/Official_repositories - sudo pacman -Syu \ - base-devel \ - boost \ - cmake \ - git \ - cvc4 - ;; - -#------------------------------------------------------------------------------ -# Alpine Linux -#------------------------------------------------------------------------------ - - "Alpine Linux") - #Alpine - echo "Installing solidity dependencies on Alpine Linux." - - # All our dependencies can be found in the Alpine Linux official repositories. - # See https://pkgs.alpinelinux.org/ - - apk update - apk add boost-dev boost-static build-base cmake git - - ;; - -#------------------------------------------------------------------------------ -# Debian -#------------------------------------------------------------------------------ - - Debian*|Raspbian) - #Debian - # shellcheck disable=SC1091 - . /etc/os-release - install_z3="" - case $VERSION_ID in - 8) - #jessie - echo "Installing solidity dependencies on Debian Jesse (8.x)." - ;; - 9) - #stretch - echo "Installing solidity dependencies on Debian Stretch (9.x)." - install_z3="libz3-dev" - ;; - 10) - #buster - echo "Installing solidity dependencies on Debian Buster (10.x)." - install_z3="libz3-dev" - ;; - *) - #other Debian - echo "Installing solidity dependencies on unknown Debian version." - echo "ERROR - This might not work, but we are trying anyway." - echo "Drop us a message at https://gitter.im/ethereum/solidity-dev" - install_z3="libz3-dev" - ;; - esac - - # Install "normal packages" - sudo apt-get -y update - sudo apt-get -y install \ - build-essential \ - cmake \ - g++ \ - gcc \ - git \ - libboost-all-dev \ - unzip \ - "$install_z3" - - - ;; - -#------------------------------------------------------------------------------ -# Fedora -#------------------------------------------------------------------------------ - - Fedora) - #Fedora - echo "Installing solidity dependencies on Fedora." - - # Install "normal packages" - # See https://fedoraproject.org/wiki/Package_management_system. - dnf install \ - autoconf \ - automake \ - boost-devel \ - boost-static \ - cmake \ - gcc \ - gcc-c++ \ - git \ - libtool - - ;; - -#------------------------------------------------------------------------------ -# OpenSUSE -#------------------------------------------------------------------------------ - - "openSUSE project") - #openSUSE - echo "Installing solidity dependencies on openSUSE." - echo "ERROR - 'install_deps.sh' doesn't have openSUSE support yet." - echo "See https://docs.soliditylang.org/en/latest/installing-solidity.html for manual instructions." - echo "If you would like to get 'install_deps.sh' working for openSUSE, that would be fantastic." - echo "See https://github.com/ethereum/webthree-umbrella/issues/552." - exit 1 - ;; -#------------------------------------------------------------------------------ -# Ubuntu -# -#------------------------------------------------------------------------------ - - Ubuntu|LinuxMint|Pop) - #LinuxMint is a distro on top of Ubuntu. - #Ubuntu - install_z3="" - case $(lsb_release -cs) in - trusty|qiana|rebecca|rafaela|rosa) - echo "Installing solidity dependencies on Ubuntu Trusty Tahr (14.04)." - echo "Or, you may also be running Linux Mint Qiana / Rebecca / Rafaela / Rosa (base: Ubuntu Trusty Tahr (14.04).)" - ;; - xenial|sarah|serena|sonya|sylvia) - echo "Installing solidity dependencies on Ubuntu Xenial Xerus (16.04)." - echo "Or, you may also be running Linux Mint Sarah / Serena / Sonya / Sylvia (base: Ubuntu Xenial Xerus (16.04).)" - install_z3="libz3-dev" - ;; - bionic) - echo "Installing solidity dependencies." - install_z3="libz3-dev" - ;; - focal) - echo "Installing solidity dependencies." - install_z3="libz3-dev" - ;; - hirsute) - echo "Installing solidity dependencies." - install_z3="libz3-dev" - ;; - betsy) - #do not try anything for betsy. - echo "Linux Mint Betsy is not supported at the moment as it runs off of Debian." - echo "We only support Sylvia, Sonya, Serena, Sarah, Rosa, Rafaela, Rebecca, and Qiana." - echo "See https://docs.soliditylang.org/en/latest/installing-solidity.html for manual instructions." - echo "If you would like to get your distro working, that would be fantastic." - echo "Drop us a message at https://gitter.im/ethereum/solidity-dev." - exit 1 - ;; - *) - #other Ubuntu - echo "ERROR - Unknown or unsupported Ubuntu version ($(lsb_release -cs))" - echo "ERROR - This might not work, but we are trying anyway." - echo "Please drop us a message at https://gitter.im/ethereum/solidity-dev." - echo "We only support Trusty, Xenial, Bionic, Focal, and Hirsute." - install_z3="libz3-dev" - ;; - esac - - sudo apt-get -y update - sudo apt-get -y install \ - build-essential \ - cmake \ - git \ - libboost-all-dev \ - "$install_z3" - if [ "$CI" = true ]; then - # install Z3 from PPA if the distribution does not provide it - if ! dpkg -l libz3-dev > /dev/null 2>&1 - then - sudo apt-add-repository -y ppa:hvr/z3 - sudo apt-get -y update - sudo apt-get -y install libz3-dev - fi - fi - ;; - -#------------------------------------------------------------------------------ -# CentOS -# CentOS needs some more testing. This is the general idea of packages -# needed, but some tweaking/improvements can definitely happen -#------------------------------------------------------------------------------ - CentOS*) - echo "Attention: CentOS 7 is currently not supported!"; - # FIXME: read -p and [[ ]] are bash features but our shebang says we're using sh - # shellcheck disable=SC2039 - read -p "This script will heavily modify your system in order to allow for compilation of Solidity. Are you sure? [Y/N]" -n 1 -r - # shellcheck disable=SC2039 - if [[ $REPLY =~ ^[Yy]$ ]]; then - # Make Sure we have the EPEL repos - sudo yum -y install epel-release - # Get g++ 4.8 - sudo rpm --import http://linuxsoft.cern.ch/cern/slc6X/i386/RPM-GPG-KEY-cern - wget -O /etc/yum.repos.d/slc6-devtoolset.repo http://linuxsoft.cern.ch/cern/devtoolset/slc6-devtoolset.repo - sudo yum -y install devtoolset-2-gcc devtoolset-2-gcc-c++ devtoolset-2-binutils - - # Enable the devtoolset2 usage so global gcc/g++ become the 4.8 one. - # As per https://gist.github.com/stephenturner/e3bc5cfacc2dc67eca8b, what you should do afterwards is - # to add this line: - # source /opt/rh/devtoolset-2/enable - # to your bashrc so that this happens automatically at login - scl enable devtoolset-2 bash - - # Get cmake - sudo yum -y remove cmake - sudo yum -y install cmake3 - sudo ln -s /usr/bin/cmake3 /usr/bin/cmake - - # Get latest boost thanks to this guy: http://vicendominguez.blogspot.de/2014/04/boost-c-library-rpm-packages-for-centos.html - sudo yum -y remove boost-devel - sudo wget https://bintray.com/vicendominguez/CentOS6/rpm -O /etc/yum.repos.d/bintray-vicendominguez-CentOS6.repo - sudo yum install boost-devel - else - echo "Aborted CentOS Solidity Dependency Installation"; - exit 1 - fi - - ;; - - - - - *) - -#------------------------------------------------------------------------------ -# Other (unknown) Linux -# Major and medium distros which we are missing would include Mint, CentOS, -# RHEL, Raspbian, Cygwin, OpenWrt, gNewSense, Trisquel and SteamOS. -#------------------------------------------------------------------------------ - - #other Linux - echo "ERROR - Unsupported or unidentified Linux distro." - echo "See https://docs.soliditylang.org/en/latest/installing-solidity.html for manual instructions." - echo "If you would like to get your distro working, that would be fantastic." - echo "Drop us a message at https://gitter.im/ethereum/solidity-dev." - exit 1 - ;; - esac - ;; - -#------------------------------------------------------------------------------ -# Other platform (not Linux, FreeBSD or macOS). -# Not sure what might end up here? -# Maybe OpenBSD, NetBSD, AIX, Solaris, HP-UX? -#------------------------------------------------------------------------------ - - *) - #other - echo "ERROR - Unsupported or unidentified operating system." - echo "See https://docs.soliditylang.org/en/latest/installing-solidity.html for manual instructions." - echo "If you would like to get your operating system working, that would be fantastic." - echo "Drop us a message at https://gitter.im/ethereum/solidity-dev." - ;; -esac