#!/usr/bin/env bash

# On Linux systems, this script needs to be run with root rights.
if [ `uname` != "Darwin" ] && [ $UID -ne 0 ]; then
    sudo $0
    exit 0
fi

function printNotSupportedMessageAndExit() {
    echo
    echo "Currently this script only works for distributions supporting apt-get and yum."
    echo "Please add support for your distribution: http://webkit.org/b/110693"
    echo
    exit 1
}

function checkInstaller {
    # apt-get - Debian based distributions
    apt-get --version &> /dev/null
    if [ $? -eq 0 ]; then
        installDependenciesWithApt
        exit 0
    fi

    # dnf - Fedora
    dnf --version &> /dev/null
    if [ $? -eq 0 ]; then
        installDependenciesWithDnf
        exit 0
    fi

    # pacman - Arch Linux
    # pacman --version and pacman --help both return non-0
    pacman -Ss &> /dev/null
    if [ $? -eq 0 ]; then
        installDependenciesWithPacman
        exit 0
    fi

    if [ `uname` = "Darwin" ]; then
       installDependenciesWithBrew
       exit 0
    fi

    printNotSupportedMessageAndExit
}

function installDependenciesWithBrew {
    brew &> /dev/null
    if [ $? -gt 1 ]; then
        echo "Please install HomeBrew. Instructions on http://brew.sh"
        exit 1
    fi

    brew install autoconf \
         automake \
         cmake \
         enchant \
         gettext \
         gobject-introspection \
         intltool \
         itstool \
         libcroco \
         libgcrypt \
         libgpg-error \
         libtasn1 \
         libtiff \
         libtool \
         ninja \
         pango \
         pkg-config \
         sqlite \
         webp \
         xz
}

# If the package $1 is available, prints it. Otherwise prints $2.
# Useful for handling when a package is renamed on new versions of Debian/Ubuntu.
function aptIfElse {
    if apt-cache show $1 &>/dev/null; then
        echo $1
    else
        echo $2
    fi
}

function installDependenciesWithApt {
    # These are dependencies necessary for building WebKitGTK.
    packages=" \
        autoconf \
        automake \
        autopoint \
        autotools-dev \
        bubblewrap \
        cmake \
        gawk \
        geoclue-2.0 \
        gnome-common \
        gperf \
        gtk-doc-tools \
        intltool \
        itstool \
        libasound2-dev \
        libatk1.0-dev \
        libedit-dev \
        libenchant-dev \
        libevent-dev \
        libfaad-dev \
        libffi-dev \
        libfile-copy-recursive-perl \
        $(aptIfElse libgcrypt20-dev libgcrypt11-dev) \
        libgirepository1.0-dev \
        libgl1-mesa-dev \
        libgl1-mesa-glx \
        libgtk-3-dev \
        libgstreamer1.0-dev \
        libgstreamer-plugins-bad1.0-dev \
        libgstreamer-plugins-base1.0-dev \
        libgudev-1.0-dev \
        libhyphen-dev \
        libjpeg-dev \
        libmount-dev \
        libmpg123-dev \
        libnotify-dev \
        libopenjp2-7-dev \
        libopus-dev \
        libpango1.0-dev \
        libpng-dev \
        libpulse-dev \
        librsvg2-dev \
        libseccomp-dev \
        libsecret-1-dev \
        libsoup2.4-dev \
        libsqlite3-dev \
        libsrtp2-dev \
        libsystemd-dev \
        libtasn1-6-dev \
        libtheora-dev \
        libtool \
        libvorbis-dev \
        libvpx-dev \
        libupower-glib-dev \
        libwebp-dev \
        libwoff-dev \
        libxcomposite-dev \
        libxt-dev \
        libxtst-dev \
        libxslt1-dev \
        libwayland-dev \
        ninja-build \
        patch \
        ruby \
        xfonts-utils"

    # These are dependencies necessary for running tests.
    packages="$packages \
        apache2 \
        curl \
        cups-daemon \
        dbus-x11 \
        gdb \
        fonts-liberation \
        hunspell \
        hunspell-en-us \
        hunspell-en-gb \
        libapache2-mod-bw \
        libapache2-mod-php \
        php-json \
        libcgi-pm-perl \
        libgpg-error-dev \
        psmisc \
        pulseaudio-utils \
        python-gi \
        python-psutil \
        python-yaml \
        ruby \
        ruby-json \
        ruby-highline \
        weston \
        xvfb"

    # These are dependencies necessary for building with the Flatpak SDK.
    packages="$packages \
        flatpak"

    # These are dependencies necessary for building the jhbuild.
    packages="$packages \
        bison \
        flex \
        git \
        gobject-introspection \
        gsettings-desktop-schemas-dev \
        icon-naming-utils \
        libcroco3-dev \
        libcups2-dev \
        libdrm-dev \
        libegl1-mesa-dev \
        libepoxy-dev \
        libevdev-dev \
        libexpat1-dev \
        libfdk-aac-dev \
        libgbm-dev \
        libgles2-mesa-dev \
        libgnutls28-dev \
        libgpg-error-dev \
        libjson-glib-dev \
        libinput-dev \
        libmtdev-dev \
        liborc-0.4-dev \
        libp11-kit-dev \
        libpciaccess-dev \
        libproxy-dev \
        libpsl-dev \
        libssl-dev \
        libtiff5-dev \
        libunistring-dev \
        libv4l-dev \
        libxcb-composite0-dev \
        libxcb-xfixes0-dev \
        libxfont-dev \
        libxfont2 \
        libxkbfile-dev \
        libxkbcommon-x11-dev \
        libtool-bin \
        libudev-dev \
        libxml-libxml-perl \
        python-dev \
        python3-setuptools \
        ragel \
        uuid-dev \
        x11proto-bigreqs-dev \
        x11proto-composite-dev \
        x11proto-gl-dev \
        x11proto-input-dev \
        x11proto-randr-dev \
        x11proto-resource-dev \
        x11proto-scrnsaver-dev \
        x11proto-video-dev \
        x11proto-xcmisc-dev \
        x11proto-xf86dri-dev \
        xfonts-utils \
        xtrans-dev \
        xutils-dev \
        yasm"

    # These are dependencies necessary for using webkit-patch
    packages="$packages \
        git-svn \
        python3-secretstorage \
        subversion"

    apt-get install $packages

    # Ubuntu Bionic doesn't ship pipenv. So fallback to the pip3 install path.
    if apt-cache show pipenv &>/dev/null; then
        apt-get install pipenv
    else
        apt-get install -y python3-pip
        pip3 install pipenv
    fi
}

function installDependenciesWithPacman {
    # These are dependencies necessary for building WebKitGTK.
    packages=" \
        alsa-lib \
        autoconf \
        automake \
        bubblewrap \
        cmake \
        libedit \
        libffi \
        file \
        findutils \
        gawk \
        gcc \
        gettext \
        gnome-common \
        gperf \
        grep \
        groff \
        gstreamer \
        gst-plugins-bad \
        gst-plugins-base-libs \
        gzip \
        hyphen \
        libevent \
        libtool \
        m4 \
        make \
        patch \
        pkg-config \
        sed \
        texinfo \
        util-linux \
        which \
        gtk-doc \
        intltool \
        itstool \
        atk \
        enchant \
        faad2 \
        geoclue2 \
        gobject-introspection \
        mesa \
        mesa-libgl \
        gtk3 \
        libsystemd \
        libjpeg-turbo \
        mpg123 \
        openjpeg2 \
        opus \
        pango \
        perl-file-copy-recursive \
        libgcrypt \
        libnotify \
        libpng \
        libpulse \
        librsvg \
        libseccomp \
        libsecret \
        libsoup \
        libsrtp \
        libsystemd \
        sqlite \
        libtasn1 \
        libtheora \
        libtool \
        libvorbis \
        libvpx \
        libwebp \
        libxcomposite \
        libxt \
        libxslt \
        libxtst \
        upower \
        ninja \
        ruby \
        util-linux \
        xorg-font-utils \
        wayland \
        woff2"

    # These are dependencies necessary for running tests.
    # Note: apache-mod_bw, ruby-json, and ruby-highline are available in the AUR
    packages="$packages \
        apache \
        curl \
        cups \
        gdb \
        hunspell \
        hunspell-en \
        hunspell-en_GB \
        php-apache \
        libgpg-error \
        psmisc \
        pulseaudio \
        python-gobject \
        python2-psutil \
        python2-yaml \
        ruby \
        ttf-liberation \
        weston \
        xorg-server-xvfb"

    # These are dependencies necessary for building with the Flatpak SDK.
    packages="$packages \
        flatpak \
        python-pipenv"

    # These are dependencies necessary for building the jhbuild.
    # Note: Could not find libegl-mesa
    packages="$packages \
        bison \
        expat \
        flex \
        git \
        gnutls \
        gobject-introspection \
        gsettings-desktop-schemas \
        icon-naming-utils \
        libcroco \
        libcups \
        libdrm \
        libepoxy \
        libevdev \
        libfdk-aac \
        libgpg-error \
        libinput \
        p11-kit \
        libpciaccess \
        libproxy \
        libpsl \
        libtiff \
        libunistring-dev \
        libxfixes \
        libxfont2 \
        libxcb \
        libxkbfile \
        libxkbcommon-x11 \
        mtdev \
        orc \
        perl-xml-libxml\
        python2 \
        python2-lxml \
        python-setuptools \
        ragel \
        bigreqsproto \
        compositeproto \
        glproto \
        inputproto \
        randrproto \
        resourceproto \
        scrnsaverproto \
        videoproto \
        xcmiscproto \
        xf86driproto \
        xorg-font-utils \
        xorg-util-macros \
        xtrans \
        yasm"

    # These are dependencies necessary for using webkit-patch
    packages="$packages \
        python-secretstorage \
        svn"
    pacman -S --needed $packages

	cat <<-EOF

The following packages are available from AUR, and needed for running tests:

    apache-mod_bw ruby-json ruby-highline

Instructions on how to use the AUR can be found on the Arch Wiki:

    https://wiki.archlinux.org/index.php/Arch_User_Repository

You will also need to follow the instructions on the wiki to make 'python'
call python2 in the WebKit folder:

    https://wiki.archlinux.org/index.php/Python#Dealing_with_version_problem_in_build_scripts

Alternatively, you may use a Python 2.x virtualenv while hacking on WebKitGTK:

    https://wiki.archlinux.org/index.php/Python/Virtual_environment

EOF
}

function installDependenciesWithDnf {
    # These are dependencies necessary for building WebKitGTK.
    packages=" \
        atk-devel \
        alsa-lib-devel \
        autoconf \
        automake \
        bubblewrap \
        cairo-devel \
        cmake \
        enchant-devel \
        gcc-c++ \
        geoclue2-devel \
        gettext-devel \
        gobject-introspection-devel \
        gperf \
        gstreamer1-devel \
        gstreamer1-plugins-bad-free-devel \
        gstreamer1-plugins-base-devel \
        gtk-doc \
        gtk3-devel \
        hyphen-devel \
        intltool \
        json-glib-devel \
        libXt-devel \
        libXtst-devel \
        libxslt-devel \
        libedit-devel \
        libevent-devel \
        libffi-devel \
        libgcrypt-devel \
        libgudev1-devel \
        libjpeg-turbo-devel \
        libmount-devel \
        libnotify-devel \
        libpng-devel \
        libseccomp-devel \
        libsecret-devel \
        libsoup-devel \
        libsrtp-devel \
        libtasn1-devel \
        libtheora-devel \
        libv4l-devel \
        libvorbis-devel \
        libvpx-devel \
        libwebp-devel \
        libwayland-client-devel \
        libwayland-server-devel \
        mesa-libGL-devel \
        ninja-build \
        openjpeg2-devel \
        openssl-devel \
        opus-devel \
        patch \
        pcre-devel \
        perl-File-Copy-Recursive \
        perl-JSON-PP \
        perl-Switch \
        perl-Time-HiRes \
        perl-version \
        pulseaudio-libs-devel \
        python-devel \
        redhat-rpm-config \
        ruby \
        sqlite-devel \
        systemd-devel \
        upower-devel \
        woff2-devel"

    # These are dependencies necessary for running tests.
    packages="$packages \
        curl \
        cups \
        dbus-x11 \
        gdb \
        hunspell-en \
        hunspell-en-GB \
        httpd \
        liberation-fonts \
        libgpg-error-devel \
        mod_bw \
        mod_ssl \
        perl-CGI \
        php \
        php-json \
        psmisc \
        pulseaudio-utils \
        pygobject3-base \
        python2-psutil \
        python2-yaml \
        ruby \
        rubygem-json \
        rubygem-highline \
        weston-devel \
        xorg-x11-server-Xvfb"

    # These are dependencies necessary for building with the Flatpak SDK.
    packages="$packages \
        flatpak \
        pipenv"

    # These are dependencies necessary for building the jhbuild.
    packages="$packages \
        bison \
        cups-devel \
        docbook-utils \
        expat-devel \
        fdk-aac-devel \
        flex \
        git \
        gnutls-devel \
        gobject-introspection \
        gsettings-desktop-schemas-devel \
        icon-naming-utils \
        itstool \
        libXfont2-devel \
        libcroco-devel \
        libdrm-devel \
        libepoxy-devel \
        libevdev-devel
        libgpg-error-devel \
        libinput-devel \
        libp11-devel \
        libpciaccess-devel \
        libproxy-devel \
        libpsl-devel \
        libtiff-devel \
        libunistring-devel \
        libuuid-devel \
        libxcb-devel \
        libxkbfile-devel \
        libxkbcommon-x11-devel \
        mesa-libEGL-devel \
        mtdev-devel \
        orc-devel \
        perl-XML-LibXML \
        python3-setuptools \
        ragel \
        systemd-devel \
        xorg-x11-font-utils \
        xorg-x11-proto-devel \
        xorg-x11-util-macros \
        xorg-x11-xtrans-devel \
        yasm"

    # These are dependencies necessary for using webkit-patch
    packages="$packages
        git-svn \
        python3-secretstorage \
        subversion"

    dnf install $packages
}

checkInstaller

