#!/usr/bin/env bash # Copyright © 2015 by RowenStipe # Copyright © 2016-2019 by The qTox Project Contributors # # This program is libre 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. # # This program 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 this program. If not, see . # This uses the same process as doing it manually but with a few varients # Use: ./qTox-Mac-Deployer-ULTIMATE.sh -h set -e # Your home DIR really (Most of this happens in it) {DONT USE: ~ } SUBGIT="" #Change this to define a 'sub' git folder e.g. "-Patch" #Applies to $QTOX_DIR, $BUILD_DIR, and $DEPLOY_DIR folders for organization puropses if [[ $TRAVIS = true ]] then MAIN_DIR="${TRAVIS_BUILD_DIR}" QTOX_DIR="${MAIN_DIR}" else # the directory which qTox is cloned in, wherever that is MAIN_DIR="$(dirname $(readlink -f $0))/../.." QTOX_DIR="${MAIN_DIR}/qTox${SUBGIT}" fi QT_DIR="/usr/local/Cellar/qt5" # Folder name of QT install # Figure out latest version QT_VER=($(ls ${QT_DIR} | sed -n -e 's/^\([0-9]*\.([0-9]*\.([0-9]*\).*/\1/' -e '1p;$p')) QT_DIR_VER="${QT_DIR}/${QT_VER[1]}" TOXCORE_DIR="${MAIN_DIR}/toxcore" # Change to Git location TOX_EXT_DIR="${MAIN_DIR}/toxext" TOX_EXT_MESSAGES_DIR="${MAIN_DIR}/tox_extension_messages" LIB_INSTALL_PREFIX="${QTOX_DIR}/libs" [[ ! -e "${LIB_INSTALL_PREFIX}" ]] \ && mkdir -p "${LIB_INSTALL_PREFIX}" BUILD_DIR="${MAIN_DIR}/qTox-Mac_Build${SUBGIT}" DEPLOY_DIR="${MAIN_DIR}/qTox-Mac_Deployed${SUBGIT}" # helper function to "pretty-print" fcho() { local msg="$1"; shift printf "\n$msg\n" "$@" } build_toxcore() { echo "Starting Toxcore build and install" cd $TOXCORE_DIR echo "Now working in: ${PWD}" local LS_DIR="/usr/local/Cellar/libsodium/" #Figure out latest version local LS_VER=($(ls ${LS_DIR} | sed -n -e 's/^\([0-9]*\.([0-9]*\.([0-9]*\).*/\1/' -e '1p;$p')) local LS_DIR_VER="${LS_DIR}/${LS_VER[1]}" [[ $TRAVIS != true ]] \ && sleep 3 mkdir -p _build && cd _build fcho "Starting cmake ..." #Make sure the correct version of libsodium is used cmake -DBOOTSTRAP_DAEMON=OFF -DLIBSODIUM_CFLAGS="-I${LS_DIR_VER}/include/" -DLIBSODIUM_LDFLAGS="L${LS_DIR_VER}/lib/" -DCMAKE_INSTALL_PREFIX="${LIB_INSTALL_PREFIX}" .. make clean &> /dev/null fcho "Compiling toxcore." make > /dev/null || exit 1 fcho "Installing toxcore." make install > /dev/null || exit 1 } build_toxext() { echo "Starting Toxext build and install" cd $TOX_EXT_DIR echo "Now working in: ${PWD}" [[ $TRAVIS != true ]] \ && sleep 3 mkdir _build && cd _build fcho "Starting cmake ..." PKG_CONFIG_PATH="${LIB_INSTALL_PREFIX}"/lib/pkgconfig cmake -DCMAKE_INSTALL_PREFIX="${LIB_INSTALL_PREFIX}" .. make clean &> /dev/null fcho "Compiling toxext." make > /dev/null || exit 1 fcho "Installing toxext." make install > /dev/null || exit 1 } build_tox_extension_messages() { echo "Starting tox_extension_messages build and install" cd $TOX_EXT_MESSAGES_DIR echo "Now working in: ${PWD}" [[ $TRAVIS != true ]] \ && sleep 3 mkdir _build && cd _build fcho "Starting cmake ..." PKG_CONFIG_PATH="${LIB_INSTALL_PREFIX}"/lib/pkgconfig cmake -DCMAKE_INSTALL_PREFIX="${LIB_INSTALL_PREFIX}" .. make clean &> /dev/null fcho "Compiling tox_extension_messages." make > /dev/null || exit 1 fcho "Installing tox_extension_messages." make install > /dev/null || exit 1 } install() { fcho "==============================" fcho "This script will install the necessary applications and libraries needed to compile qTox properly." fcho "Note that this is not a 100 percent automated install it just helps simplify the process for less experienced or lazy users." if [[ $TRAVIS = true ]] then echo "Oh... It's just Travis...." else read -n1 -rsp $'Press any key to continue or Ctrl+C to exit...\n' fi # osx 10.13 High Sierra doesn't come with a /usr/local/sbin, yet it is needed by some brew packages NEEDED_DEP_DIR="/usr/local/sbin" if [[ $TRAVIS = true ]] then sudo mkdir -p $NEEDED_DEP_DIR sudo chown -R $(whoami) $NEEDED_DEP_DIR elif [[ ! -d $NEEDED_DEP_DIR ]] then fcho "The direcory $NEEDED_DEP_DIR must exist for some development packages." read -r -p "Would you like to create it now, and set the owner to $(whoami)? [y/N] " response if [[ $response =~ ^([yY][eE][sS]|[yY])$ ]] then sudo mkdir $NEEDED_DEP_DIR sudo chown -R $(whoami) $NEEDED_DEP_DIR else fcho "Cannot proceed without $NEEDED_DEP_DIR. Exiting." exit 0 fi fi #fcho "Installing x-code Command line tools ..." #xcode-select --install if [[ -e /usr/local/bin/brew ]] then fcho "Homebrew already installed!" else fcho "Installing homebrew ..." ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" fi if [[ $TRAVIS != true ]] then fcho "Updating brew formulas ..." brew update fi fcho "Getting home brew formulas ..." if [[ $TRAVIS != true ]] then brew bundle install -f ./osx/Brewfile fi fcho "Starting git repo checks ..." #cd $MAIN_DIR # just in case # Toxcore if [[ -e $TOXCORE_DIR/.git/index ]] then fcho "Toxcore git repo already in place !" cd $TOXCORE_DIR git pull else fcho "Cloning Toxcore git ... " git clone --branch v0.2.12 --depth=1 https://github.com/toktok/c-toxcore "$TOXCORE_DIR" fi # toxext if [[ -e $TOX_EXT_DIR/.git/index ]] then fcho "ToxExt git repo already in place !" cd $TOX_EXT_DIR git pull else fcho "Cloning ToxExt git ... " git clone --branch v0.0.3 --depth=1 https://github.com/toxext/toxext "$TOX_EXT_DIR" fi # tox_extension_messages if [[ -e $TOX_EXT_MESSAGES_DIR/.git/index ]] then fcho "ToxExt git repo already in place !" cd $TOX_EXT_MESSAGES_DIR git pul else fcho "Cloning tox_extension_messages git ... " git clone --branch v0.0.3 --depth=1 https://github.com/toxext/tox_extension_messages "$TOX_EXT_MESSAGES_DIR" fi # qTox if [[ $TRAVIS = true ]] then fcho "Travis... You already have qTox..." else if [[ -e $QTOX_DIR/.git/index ]] then fcho "qTox git repo already in place !" cd $QTOX_DIR git pull else fcho "Cloning qTox git ... " git clone https://github.com/qTox/qTox.git fi fi if [[ $TRAVIS != true ]] then fcho "If all went well you should now have all the tools needed to compile qTox!" fi # toxcore build if [[ $TRAVIS = true ]] then build_toxcore else read -r -p "Would you like to install toxcore now? [y/N] " response if [[ $response =~ ^([yY][eE][sS]|[yY])$ ]] then build_toxcore else fcho "You can simply use the -u command and say [Yes/n] when prompted" fi fi # toxext build if [[ $TRAVIS = true ]] then build_toxext else read -r -p "Would you like to install toxext now? [y/N] " response if [[ $response =~ ^([yY][eE][sS]|[yY])$ ]] then build_toxext else fcho "You can simply use the -u command and say [Yes/n] when prompted" fi fi # tox_extension_messages build if [[ $TRAVIS = true ]] then build_tox_extension_messages else read -r -p "Would you like to install tox_extension_messages now? [y/N] " response if [[ $response =~ ^([yY][eE][sS]|[yY])$ ]] then build_tox_extension_messages else fcho "You can simply use the -u command and say [Yes/n] when prompted" fi fi QT_VER=($(ls ${QT_DIR} | sed -n -e 's/^\([0-9]*\.([0-9]*\.([0-9]*\).*/\1/' -e '1p;$p')) QT_DIR_VER="${QT_DIR}/${QT_VER[1]}" # put required by qTox libs/headers in `libs/` cd "${QTOX_DIR}" sudo ./bootstrap-osx.sh } update() { fcho "------------------------------" fcho "Starting update process ..." #First update Toxcore from git cd $TOXCORE_DIR fcho "Now in ${PWD}" fcho "Pulling ..." # make sure that pull can be applied, i.e. clean up files from any # changes that could have been applied to them git checkout -f git pull read -r -p "Did Toxcore update from git? [y/N] " response if [[ $response =~ ^([yY][eE][sS]|[yY])$ ]] then build_toxcore else fcho "Moving on!" fi #Now let's update qTox! cd $QTOX_DIR fcho "Now in ${PWD}" fcho "Pulling ..." # make sure that pull can be applied, i.e. clean up files from any # changes that could have been applied to them git checkout -f git pull read -r -p "Did qTox update from git? [y/N] " response if [[ $response =~ ^([yY][eE][sS]|[yY])$ ]] then fcho "Starting OSX bootstrap ..." sudo ./bootstrap-osx.sh else fcho "Moving on!" fi } build() { fcho "------------------------------" fcho "Starting build process ..." rm -rf $BUILD_DIR rm -rf $DEPLOY_DIR mkdir $BUILD_DIR cd $BUILD_DIR fcho "Now working in ${PWD}" fcho "Starting cmake ..." if [[ $TRAVIS = true ]] then STRICT_OPTIONS="ON" else STRICT_OPTIONS="OFF" fi cmake -H$QTOX_DIR -B. \ -DUPDATE_CHECK=ON \ -DSPELL_CHECK=OFF \ -DSTRICT_OPTIONS="${STRICT_OPTIONS}" \ -DCMAKE_PREFIX_PATH="$(brew --prefix qt5);${LIB_INSTALL_PREFIX}" make -j$(sysctl -n hw.ncpu) } deploy() { fcho "------------------------------" fcho "starting deployment process ..." cd $BUILD_DIR if [ ! -d $BUILD_DIR ] then fcho "Error: Build directory not detected, please run -ubd, or -b before deploying" exit 0 fi mkdir $DEPLOY_DIR make install cp -r $BUILD_DIR/qTox.app $DEPLOY_DIR/qTox.app } bootstrap() { fcho "------------------------------" fcho "starting bootstrap process ..." #Toxcore build_toxcore build_toxext build_tox_extension_messages #Boot Strap fcho "Running: sudo ${QTOX_DIR}/bootstrap-osx.sh" cd $QTOX_DIR sudo ./bootstrap-osx.sh } dmgmake() { fcho "------------------------------" fcho "Starting DMG creation" cp $BUILD_DIR/qTox.dmg $QTOX_DIR/ } helpme() { echo "This script was created to help ease the process of compiling and creating a distributable qTox package for OSX systems." echo "The available commands are:" echo "-h | --help -- This help text." echo "-i | --install -- A slightly automated process for getting an OSX machine ready to build Toxcore and qTox." echo "-u | --update -- Check for updates and build Toxcore from git & update qTox from git." echo "-b | --build -- Builds qTox in: ${BUILD_DIR}" echo "-d | --deploy -- Makes a distributable qTox.app file in: ${DEPLOY_DIR}" echo "-bs | --bootstrap -- Performs bootstrap steps." fcho "Issues with Toxcore or qTox should be reported to their respective repos: https://github.com/toktok/c-toxcore | https://github.com/qTox/qTox" exit 0 } case "$1" in -h | --help) helpme exit ;; -i | --install) install exit ;; -u | --update) update exit ;; -b | --build) build exit ;; -d | --deploy) deploy exit ;; -bs | --bootstrap) bootstrap exit ;; -dmg) dmgmake exit ;; *) ;; esac fcho "Oh dear! You seemed to of started this script improperly! Use -h to get available commands and information!" echo " " say -v Kathy -r 255 "Oh dear! You seemed to of started this script improperly! Use -h to get available commands and information!" exit 0