diff options
Diffstat (limited to 'docs/env.sh')
-rw-r--r-- | docs/env.sh | 444 |
1 files changed, 276 insertions, 168 deletions
diff --git a/docs/env.sh b/docs/env.sh index 8a82ad083..4cb056ec1 100644 --- a/docs/env.sh +++ b/docs/env.sh @@ -1,161 +1,33 @@ -#!/bin/sh +# This shell fragment is intended for use in `bash` or `zsh`. While it +# may work in other shells it is not meant to, and any misbehaviour is not +# considered a bug in that case. # -# NetSurf Library, tool and browser support script +# NetSurf Library, tool and browser development support script # -# Usage: source env.sh -# TARGET_ABI / HOST sets the target for library builds -# TARGET_WORKSPACE is the workspace directory to keep the sandboxes +# Copyright 2013-2017 Vincent Sanders <vince@netsurf-browser.org> +# Released under the MIT Licence # # This script allows NetSurf and its libraries to be built without # requiring installation into a system. # -# Copyright 2013 Vincent Sanders <vince@netsurf-browser.org> -# Released under the MIT Licence - -# parameters - -# The system doing the building -if [ "x${BUILD}" = "x" ]; then - BUILD=$(cc -dumpmachine) -fi - -# Get the host build if unset -if [ "x${HOST}" = "x" ]; then - if [ "x${TARGET_ABI}" = "x" ]; then - HOST=${BUILD} - else - HOST=${TARGET_ABI} - fi -else - HOST_CC_LIST="${HOST}-cc ${HOST}-gcc /opt/netsurf/${HOST}/cross/bin/${HOST}-cc /opt/netsurf/${HOST}/cross/bin/${HOST}-gcc" - for HOST_CC_V in $(echo ${HOST_CC_LIST});do - HOST_CC=$(/bin/which ${HOST_CC_V}) - if [ "x${HOST_CC}" != "x" ];then - break - fi - done - if [ "x${HOST_CC}" = "x" ];then - echo "Unable to execute host compiler for HOST=${HOST}. is it set correctly?" - return 1 - fi - - HOST_CC_MACHINE=$(${HOST_CC} -dumpmachine 2>/dev/null) - - if [ "${HOST_CC_MACHINE}" != "${HOST}" ];then - echo "Compiler dumpmachine differes from HOST setting" - return 2 - fi - unset HOST_CC_LIST HOST_CC_V HOST_CC HOST_CC_MACHINE -fi - -if [ "x${TARGET_WORKSPACE}" = "x" ]; then - TARGET_WORKSPACE=${HOME}/dev-netsurf/workspace -fi - -if [ "x${USE_CPUS}" = "x" ]; then - NCPUS=$(getconf _NPROCESSORS_ONLN 2>/dev/null || getconf NPROCESSORS_ONLN 2>/dev/null) - NCPUS="${NCPUS:-1}" - NCPUS=$((NCPUS * 2)) - USE_CPUS="-j${NCPUS}" -fi - -# The GTK version to build for (either 2 or 3 currently) -if [ "x${NETSURF_GTK_MAJOR}" = "x" ]; then - NETSURF_GTK_MAJOR=2 -fi - +# Usage: source env.sh +# +# Controlling variables +# HOST sets the target architecture for library builds +# BUILD sets the building machines architecture +# TARGET_WORKSPACE is the workspace directory to keep the sandboxes +# +# The use of HOST and BUILD here is directly comprable to the GCC +# usage as described at: +# http://gcc.gnu.org/onlinedocs/gccint/Configure-Terms.html +# ############################################################################### -# Setup environment +# OS Package installation ############################################################################### -echo "BUILD=${BUILD}" -echo "HOST=${HOST}" -echo "TARGET_WORKSPACE=${TARGET_WORKSPACE}" -echo "USE_CPUS=${USE_CPUS}" - -export PREFIX=${TARGET_WORKSPACE}/inst-${HOST} -export PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig:${PKG_CONFIG_PATH}:: -export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${PREFIX}/lib -export PATH=${PATH}:${PREFIX}/bin -export NETSURF_GTK_MAJOR - -# make tool -MAKE=make - -# NetSurf GIT repositories -NS_GIT="git://git.netsurf-browser.org" - -# Buildsystem: everything depends on this -NS_BUILDSYSTEM="buildsystem" - -# internal libraries all frontends require (order is important) -NS_INTERNAL_LIBS="libwapcaplet libparserutils libhubbub libdom libcss libnsgif libnsbmp libutf8proc libnsutils libnspsl libnslog" - -# The browser itself -NS_BROWSER="netsurf" - - -# add target specific libraries -case "${HOST}" in - i586-pc-haiku) - # tools required to build the browser for haiku (beos) - NS_TOOLS="nsgenbind" - # libraries required for the haiku target abi - NS_FRONTEND_LIBS="libsvgtiny" - ;; - *arwin*) - # tools required to build the browser for OS X - NS_TOOLS="" - # libraries required for the Darwin target abi - NS_FRONTEND_LIBS="libsvgtiny libnsfb" - ;; - arm-unknown-riscos) - # tools required to build the browser for RISC OS - NS_TOOLS="nsgenbind" - # libraries required for the risc os target abi - NS_FRONTEND_LIBS="libsvgtiny librufl libpencil librosprite" - ;; - *-atari-mint) - # tools required to build the browser for atari - NS_TOOLS="" - # libraries required for the atari frontend - NS_FRONTEND_LIBS="" - ;; - ppc-amigaos) - # default tools required to build the browser - NS_TOOLS="nsgenbind" - # default additional internal libraries - NS_FRONTEND_LIBS="libsvgtiny" - ;; - m68k-unknown-amigaos) - # default tools required to build the browser - NS_TOOLS="nsgenbind" - # default additional internal libraries - NS_FRONTEND_LIBS="libsvgtiny" - ;; - *-unknown-freebsd*) - # tools required to build the browser for freebsd - NS_TOOLS="" - # libraries required for the freebsd frontend - NS_FRONTEND_LIBS="" - # select gnu make - MAKE=gmake - ;; - *) - # default tools required to build the browser - NS_TOOLS="nsgenbind" - # default additional internal libraries - NS_FRONTEND_LIBS="libsvgtiny libnsfb" - ;; -esac - -export MAKE - -################ OS Package installation ################ - # deb packages for dpkg based systems -NS_DEV_DEB="build-essential pkg-config git gperf libcurl3-dev libssl-dev libpng-dev libjpeg-dev" +NS_DEV_DEB="build-essential pkg-config git gperf libcurl3-dev libpng-dev libjpeg-dev" NS_TOOL_DEB="flex bison libhtml-parser-perl" if [ "x${NETSURF_GTK_MAJOR}" = "x3" ]; then NS_GTK_DEB="libgtk-3-dev librsvg2-dev" @@ -166,26 +38,35 @@ fi # apt get commandline to install necessary dev packages ns-apt-get-install() { + LIBCURL_OPENSSL_CONFLICTS="$(/usr/bin/apt-cache show libcurl4-openssl-dev | grep Conflicts | grep -o libssl1.0-dev)" + if [ "x${LIBCURL_OPENSSL_CONFLICTS}" != "x" ]; then + NS_DEV_DEB="${NS_DEV_DEB} libssl-dev" + elif /usr/bin/apt-cache show libssl1.0-dev >/dev/null 2>&1; then + NS_DEV_DEB="${NS_DEV_DEB} libssl1.0-dev" + else + NS_DEV_DEB="${NS_DEV_DEB} libssl-dev" + fi sudo apt-get install $(echo ${NS_DEV_DEB} ${NS_TOOL_DEB} ${NS_GTK_DEB}) } -# RPM packages for rpm based systems (tested on fedora 20) -NS_DEV_RPM="git gcc pkgconfig libexpat-devel openssl-devel libcurl-devel perl-Digest-MD5-File libjpeg-devel libpng-devel" -NS_TOOL_RPM="flex bison" + +# packages for yum installer RPM based systems (tested on fedora 20) +NS_DEV_YUM_RPM="git gcc pkgconfig expat-devel openssl-devel gperf libcurl-devel perl-Digest-MD5-File libjpeg-devel libpng-devel" +NS_TOOL_YUM_RPM="flex bison" if [ "x${NETSURF_GTK_MAJOR}" = "x3" ]; then - NS_GTK_RPM="gtk3-devel librsvg2-devel" + NS_GTK_YUM_RPM="gtk3-devel librsvg2-devel" else - NS_GTK_RPM="gtk2-devel librsvg2-devel" + NS_GTK_YUM_RPM="gtk2-devel librsvg2-devel" fi # yum commandline to install necessary dev packages ns-yum-install() { - sudo yum -y install $(echo ${NS_DEV_RPM} ${NS_TOOL_RPM} ${NS_GTK_RPM}) + sudo yum -y install $(echo ${NS_DEV_YUM_RPM} ${NS_TOOL_YUM_RPM} ${NS_GTK_YUM_RPM}) } -# DNF RPM packages for rpm based systems (tested on fedora 25) +# packages for dnf installer RPM based systems (tested on fedora 25) NS_DEV_DNF_RPM="java-1.8.0-openjdk-headless gcc clang pkgconfig libcurl-devel libjpeg-devel expat-devel libpng-devel openssl-devel gperf perl-HTML-Parser" NS_TOOL_DNF_RPM="git flex bison ccache screen" if [ "x${NETSURF_GTK_MAJOR}" = "x3" ]; then @@ -201,12 +82,28 @@ ns-dnf-install() } +# packages for zypper installer RPM based systems (tested on openSUSE leap 42) +NS_DEV_ZYP_RPM="java-1_8_0-openjdk-headless gcc clang pkgconfig libcurl-devel libjpeg-devel libexpat-devel libpng-devel openssl-devel gperf perl-HTML-Parser" +NS_TOOL_ZYP_RPM="git flex bison gperf ccache screen" +if [ "x${NETSURF_GTK_MAJOR}" = "x3" ]; then + NS_GTK_ZYP_RPM="gtk3-devel" +else + NS_GTK_ZYP_RPM="gtk2-devel" +fi + +# zypper commandline to install necessary dev packages +ns-zypper-install() +{ + sudo zypper install -y $(echo ${NS_DEV_ZYP_RPM} ${NS_TOOL_ZYP_RPM} ${NS_GTK_ZYP_RPM}) +} + + +# Packages for Haiku install # Haiku secondary arch suffix: -# empty for primary (gcc2 on x86), -# "_x86" for gcc4 secondary. +# empty for primary (gcc2 on x86) or "_x86" for gcc4 secondary. HA=_x86 -# Haiku packages + NS_DEV_HPKG="devel:libcurl${HA} devel:libpng${HA} devel:libjpeg${HA} devel:libcrypto${HA} devel:libiconv${HA} devel:libexpat${HA} cmd:pkg_config${HA} cmd:gperf html_parser" # pkgman commandline to install necessary dev packages @@ -215,6 +112,7 @@ ns-pkgman-install() pkgman install $(echo ${NS_DEV_HPKG}) } + # MAC OS X NS_DEV_MACPORT="git expat openssl curl libjpeg-turbo libpng" @@ -223,6 +121,8 @@ ns-macport-install() PATH=/opt/local/bin:/opt/local/sbin:$PATH sudo /opt/local/bin/port install $(echo ${NS_DEV_MACPORT}) } + +# packages for FreeBSD install NS_DEV_FREEBSDPKG="gmake curl" # FreeBSD package install @@ -231,6 +131,7 @@ ns-freebsdpkg-install() pkg install $(echo ${NS_DEV_FREEBSDPKG}) } + # generic for help text NS_DEV_GEN="git, gcc, pkgconfig, expat library, openssl library, libcurl, perl, perl MD5 digest, libjpeg library, libpng library" NS_TOOL_GEN="flex tool, bison tool" @@ -240,11 +141,13 @@ else NS_GTK_GEN="gtk+ 2 toolkit library, librsvg2 library" fi -# Genertic OS package install +# Generic OS package install # looks for package managers and tries to use them if present ns-package-install() { - if [ -x "/usr/bin/apt-get" ]; then + if [ -x "/usr/bin/zypper" ]; then + ns-zypper-install + elif [ -x "/usr/bin/apt-get" ]; then ns-apt-get-install elif [ -x "/usr/bin/dnf" ]; then ns-dnf-install @@ -263,12 +166,189 @@ ns-package-install() fi } +############################################################################### +# Setup environment +############################################################################### + +# find which command used to find everything else on path +if [ -x /usr/bin/which ]; then + WHICH_CMD=/usr/bin/which +else + WHICH_CMD=/bin/which +fi + +# environment parameters + +# The system doing the building +if [ "x${BUILD}" = "x" ]; then + BUILD_CC=$(${WHICH_CMD} cc) + if [ $? -eq 0 ];then + BUILD=$(cc -dumpmachine) + else + echo "Unable to locate a compiler. Perhaps run ns-package-install" + return 1 + fi +fi + +# Get the host build if unset +if [ "x${HOST}" = "x" ]; then + if [ "x${TARGET_ABI}" = "x" ]; then + HOST=${BUILD} + else + HOST=${TARGET_ABI} + fi +else + HOST_CC_LIST="/opt/netsurf/${HOST}/cross/bin/${HOST}-cc /opt/netsurf/${HOST}/cross/bin/${HOST}-gcc ${HOST}-cc ${HOST}-gcc" + for HOST_CC_V in $(echo ${HOST_CC_LIST});do + HOST_CC=$(${WHICH_CMD} ${HOST_CC_V}) + if [ "x${HOST_CC}" != "x" ];then + break + fi + done + if [ "x${HOST_CC}" = "x" ];then + echo "Unable to execute host compiler for HOST=${HOST}. is it set correctly?" + return 1 + fi + + HOST_CC_MACHINE=$(${HOST_CC} -dumpmachine 2>/dev/null) + + if [ "${HOST_CC_MACHINE}" != "${HOST}" ];then + echo "Compiler dumpmachine differs from HOST setting" + return 2 + fi + + NS_ENV_CC="${HOST_CC}" + export NS_ENV_CC + + unset HOST_CC_LIST HOST_CC_V HOST_CC HOST_CC_MACHINE +fi + +# set up a default target workspace +if [ "x${TARGET_WORKSPACE}" = "x" ]; then + TARGET_WORKSPACE=${HOME}/dev-netsurf/workspace +fi + +# set up default parallelism +if [ "x${USE_CPUS}" = "x" ]; then + NCPUS=$(getconf _NPROCESSORS_ONLN 2>/dev/null || getconf NPROCESSORS_ONLN 2>/dev/null) + NCPUS="${NCPUS:-1}" + NCPUS=$((NCPUS * 2)) + USE_CPUS="-j${NCPUS}" +fi + +# The GTK version to build for (either 2 or 3 currently) +if [ "x${NETSURF_GTK_MAJOR}" = "x" ]; then + NETSURF_GTK_MAJOR=2 +fi + +# report to user +echo "BUILD=${BUILD}" +echo "HOST=${HOST}" +echo "TARGET_WORKSPACE=${TARGET_WORKSPACE}" +echo "USE_CPUS=${USE_CPUS}" + +export PREFIX=${TARGET_WORKSPACE}/inst-${HOST} +export BUILD_PREFIX=${TARGET_WORKSPACE}/inst-${BUILD} +export PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig:${PKG_CONFIG_PATH}:: +export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${PREFIX}/lib +export PATH=${PATH}:${BUILD_PREFIX}/bin +export NETSURF_GTK_MAJOR + +# make tool +MAKE=make + +# NetSurf GIT repositories +NS_GIT="git://git.netsurf-browser.org" + +# Buildsystem: everything depends on this +NS_BUILDSYSTEM="buildsystem" + +NS_TOOLS="" +NS_FRONTEND_LIBS="" + +BUILD_TARGET="${TARGET:-netsurf}" + +case "$BUILD_TARGET" in + libhubbub) + NS_INTERNAL_LIBS="libparserutils" + ;; + + libdom) + NS_INTERNAL_LIBS="libwapcaplet libparserutils libhubbub" + ;; + + libcss) + NS_INTERNAL_LIBS="libwapcaplet libparserutils" + ;; + + netsurf) + # internal libraries all frontends require (order is important) + NS_INTERNAL_LIBS="libwapcaplet libparserutils libhubbub libdom libcss libnsgif libnsbmp libutf8proc libnsutils libnspsl libnslog" + + # add target specific libraries + case "${HOST}" in + i586-pc-haiku) + # tools required to build the browser for haiku (beos) + NS_TOOLS="nsgenbind" + # libraries required for the haiku target abi + NS_FRONTEND_LIBS="libsvgtiny" + ;; + *arwin*) + # tools required to build the browser for OS X + NS_TOOLS="" + # libraries required for the Darwin target abi + NS_FRONTEND_LIBS="libsvgtiny libnsfb" + ;; + arm-unknown-riscos|arm-riscos-gnueabi*) + # tools required to build the browser for RISC OS + NS_TOOLS="nsgenbind" + # libraries required for the risc os target abi + NS_FRONTEND_LIBS="libsvgtiny librufl libpencil librosprite" + ;; + *-atari-mint) + # tools required to build the browser for atari + NS_TOOLS="" + # libraries required for the atari frontend + NS_FRONTEND_LIBS="" + ;; + ppc-amigaos) + # default tools required to build the browser + NS_TOOLS="nsgenbind" + # default additional internal libraries + NS_FRONTEND_LIBS="libsvgtiny" + ;; + m68k-unknown-amigaos) + # default tools required to build the browser + NS_TOOLS="nsgenbind" + # default additional internal libraries + NS_FRONTEND_LIBS="libsvgtiny" + ;; + *-unknown-freebsd*) + # tools required to build the browser for freebsd + NS_TOOLS="" + # libraries required for the freebsd frontend + NS_FRONTEND_LIBS="" + # select gnu make + MAKE=gmake + ;; + *) + # default tools required to build the browser + NS_TOOLS="nsgenbind" + # default additional internal libraries + NS_FRONTEND_LIBS="libsvgtiny libnsfb" + ;; + esac + ;; +esac + +export MAKE + ################ Development helpers ################ # git pull in all repos parameters are passed to git pull ns-pull() { - for REPO in $(echo ${NS_BUILDSYSTEM} ${NS_INTERNAL_LIBS} ${NS_FRONTEND_LIBS} ${NS_TOOLS} ${NS_BROWSER}) ; do + for REPO in $(echo ${NS_BUILDSYSTEM} ${NS_INTERNAL_LIBS} ${NS_FRONTEND_LIBS} ${NS_TOOLS} ${BUILD_TARGET}) ; do echo -n " GIT: Pulling ${REPO}: " if [ -f "${TARGET_WORKSPACE}/${REPO}/.git/config" ]; then (cd ${TARGET_WORKSPACE}/${REPO} && git pull $*; ) @@ -281,36 +361,63 @@ ns-pull() # clone all repositories ns-clone() { + SHALLOW="" + SKIP="" + while [ $# -gt 0 ] + do + case "$1" in + -d | --deps-only) SKIP="${BUILD_TARGET}" + shift + ;; + -s | --shallow) SHALLOW="--depth 1" + shift + ;; + -*) echo "Error: Unknown option: $1" >&2 + exit 1 + ;; + *) # No more options + break + ;; + esac + done + mkdir -p ${TARGET_WORKSPACE} - for REPO in $(echo ${NS_BUILDSYSTEM} ${NS_INTERNAL_LIBS} ${NS_FRONTEND_LIBS} ${NS_RISCOS_LIBS} ${NS_TOOLS} ${NS_BROWSER}) ; do + for REPO in $(echo ${NS_BUILDSYSTEM} ${NS_INTERNAL_LIBS} ${NS_FRONTEND_LIBS} ${NS_RISCOS_LIBS} ${NS_TOOLS} ${BUILD_TARGET}) ; do + [ "x${REPO}" != "x${SKIP}" ] || continue echo -n " GIT: Cloning ${REPO}: " if [ -f ${TARGET_WORKSPACE}/${REPO}/.git/config ]; then echo "Repository already present" else - (cd ${TARGET_WORKSPACE} && git clone ${NS_GIT}/${REPO}.git; ) + (cd ${TARGET_WORKSPACE} && git clone ${SHALLOW} ${NS_GIT}/${REPO}.git; ) fi done # put current env.sh in place in workspace - if [ ! -f "${TARGET_WORKSPACE}/env.sh" -a -f ${TARGET_WORKSPACE}/${NS_BROWSER}/docs/env.sh ]; then - cp ${TARGET_WORKSPACE}/${NS_BROWSER}/docs/env.sh ${TARGET_WORKSPACE}/env.sh + if [ "x$NS_BROWSER" = "x" ]; then + if [ ! -f "${TARGET_WORKSPACE}/env.sh" -a -f ${TARGET_WORKSPACE}/${NS_BROWSER}/docs/env.sh ]; then + cp ${TARGET_WORKSPACE}/${NS_BROWSER}/docs/env.sh ${TARGET_WORKSPACE}/env.sh + fi fi } # issues a make command to all libraries ns-make-libs() { - for REPO in $(echo ${NS_BUILDSYSTEM} ${NS_TOOLS}); do + for REPO in $(echo ${NS_BUILDSYSTEM} ${NS_INTERNAL_LIBS} ${NS_FRONTEND_LIBS}); do echo " MAKE: make -C ${REPO} $USE_CPUS $*" - ${MAKE} -C ${TARGET_WORKSPACE}/${REPO} $USE_CPUS $* + ${MAKE} -C ${TARGET_WORKSPACE}/${REPO} HOST=${HOST} $USE_CPUS $* if [ $? -ne 0 ]; then return $? fi done +} - for REPO in $(echo ${NS_INTERNAL_LIBS} ${NS_FRONTEND_LIBS}); do +# issues make command for all tools +ns-make-tools() +{ + for REPO in $(echo ${NS_BUILDSYSTEM} ${NS_TOOLS}); do echo " MAKE: make -C ${REPO} $USE_CPUS $*" - ${MAKE} -C ${TARGET_WORKSPACE}/${REPO} HOST=${HOST} $USE_CPUS $* + ${MAKE} -C ${TARGET_WORKSPACE}/${REPO} PREFIX=${BUILD_PREFIX} HOST=${BUILD} $USE_CPUS $* if [ $? -ne 0 ]; then return $? fi @@ -329,6 +436,7 @@ ns-pull-install() { ns-pull $* + ns-make-tools install ns-make-libs install } |