#!/bin/sh # $Id: chromium_1337.SlackBuild,v 1.5 2014/10/11 17:54:06 root Exp root $ # Copyright 2013, 2014 Eric Hameleers, Eindhoven, NL # All rights reserved. # # Permission to use, copy, modify, and distribute this software for # any purpose with or without fee is hereby granted, provided that # the above copyright notice and this permission notice appear in all # copies. # # THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 AUTHORS AND COPYRIGHT HOLDERS AND THEIR # 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. # # ----------------------------------------------------------------------------- # # Slackware SlackBuild script # =========================== # By: Eric Hameleers # For: chromium # Descr: Open Source version of Chrome Web Browser # URL: http://www.chromium.org/ # Build needs: - multilib gcc & glibc for compiling the Native Client (64-bit); # - libelf with '-D_FILE_OFFSET_BITS=64' added to CFLAGS (32-bit); # - ninja. # - Internet access (for downloading the nacl/pnacl toolchain bins) # - On Slackware 13.37 additionally: mozilla-nss, python27. # Needs: # Changelog: # 31.0.1650.57-1: # 18/nov/2013 by Eric Hameleers # * Initial build. # 31.0.1650.63-1: # 18/Nov/2013 by Eric Hameleers # 31.0.1650.67-1: # 19/dec/2013 by Eric Hameleers # * Update comes with several security fixes. # 32.0.1700.77-1: # 14/jan/2014 by Eric Hameleers # * Update comes with several security fixes. # 32.0.1700.102-1: # 29/jan/2014 by Eric Hameleers # * Update comes with several security fixes. # 32.0.1700.107-1: # 04/feb/2014 by Eric Hameleers # * Update. # 33.0.1750.117-1: # 21/feb/2014 by Eric Hameleers # * Update comes with several security fixes. # 33.0.1750.146-1: # 04/mar/2014 by Eric Hameleers # * Update comes with several security fixes. # 33.0.1750.149-1: # 11/mar/2014 by Eric Hameleers # * Update comes with several security fixes. # 33.0.1750.152-1: # 18/mar/2014 by Eric Hameleers # * Update comes with several security fixes. # 34.0.1847.116-1: # 09/apr/2014 by Eric Hameleers # * Update comes with several security fixes. # 34.0.1847.132-1: # 25/apr/2014 by Eric Hameleers # * Update. # 34.0.1847.137-1: # 14/may/2014 by Eric Hameleers # * Update. # 35.0.1916.114-1: # 20/may/2014 by Eric Hameleers # * Update comes with several security fixes. # 35.0.1916.153-1: # 16/jun/2014 by Eric Hameleers # * Update comes with several security fixes. # 37.0.2062.94-1: # 05/sep/2014 by Eric Hameleers # * Update comes with security fixes, New: an embedded PDF viewer. # 38.0.2125.101-1: # 11/oct/2014 by Eric Hameleers # * Update comes with security fixes. # # Run 'sh chromium.SlackBuild' to build a Slackware package. # The package (.txz) and .txt file as well as build logs are created in /tmp . # Install it using 'installpkg'. # # ----------------------------------------------------------------------------- PRGNAM=chromium VERSION=${VERSION:-38.0.2125.101} BUILD=${BUILD:-1} NUMJOBS=${NUMJOBS:" -j4 "} TAG=${TAG:-alien} # You can build without NaCl (native client) if you set USE_NACL to "0", # but you'll lose some Chrome functionality like using in-browser applications: USE_NACL=${USE_NACL:-0} DOCS="AUTHORS LICENSE README*" # Where do we look for sources? SRCDIR=$(cd $(dirname $0); pwd) # Place to build (TMP) package (PKG) and output (OUTPUT) the program: TMP=${TMP:-/tmp/build} PKG=$TMP/package-$PRGNAM OUTPUT=${OUTPUT:-/tmp} # Visible directory listing of anything Chrome related is: # http://gsdview.appspot.com/ # Official location (non-browsable) of the above is: # https://commondatastorage.googleapis.com/ # This package is built with Alien's Google API keys for Chromium. # The keys are contained in the file "chromium_apikeys". # If you want to rebuild this package, you can use my API keys, however: # you are not allowed to re-distribute these keys!! # You can also obtain your own, see: # http://www.chromium.org/developers/how-tos/api-keys # Or else you can simply compile without API keys. This will disable stuff like # browser sync and other functionality which accesses Google APIs. # The following variables must be set: # _google_api_key # _google_default_client_id # _google_default_client_secret if [ -f ${HOME}/.chromium_apikeys ]; then . ${HOME}/.chromium_apikeys elif [ -f ${SRCDIR}/chromium_apikeys ]; then . ${SRCDIR}/chromium_apikeys else _google_api_key=" " _google_default_client_id=" " _google_default_client_secret=" " cat <&1 | tee -a $OUTPUT/patch-${PRGNAM}.log # Prevent crashes when accessing google.com and youtube.com just because # this is not an official build: cat $SRCDIR/patches/chromium_secure_referrer.patch | patch -p1 --verbose \ 2>&1 | tee -a $OUTPUT/patch-${PRGNAM}.log # Adapt for Slackware 13.37 older X.Org without multitouch: cat $SRCDIR/patches/chromium_xi2_mt.patch | patch -p0 --verbose \ 2>&1 | tee -a $OUTPUT/patch-${PRGNAM}.log # Adapt for Slackware 13.37 older glibc cat $SRCDIR/patches/chromium_glibc213.patch | patch -p1 --verbose \ 2>&1 | tee -a $OUTPUT/patch-${PRGNAM}.log # Use Python 2.7: find . -type f -exec sed -i -r \ -e 's|/usr/bin/python$|&2.7|g' \ -e 's|(/usr/bin/python2)\.4$|\1.7|g' \ {} + # There are still a lot of relative calls which need a workaround mkdir $TMP/tmp-$PRGNAM/python27-path ln -s /usr/bin/python2.7 $TMP/tmp-$PRGNAM/python27-path/python # Care for the old gcc-4.6 we use: sed -i -e "s/define HAVE_PRAGMA_DEPRECATED 1/define HAVE_PRAGMA_DEPRECATED 0/g" $(grep -rl "define HAVE_PRAGMA_DEPRECATED 1" third_party/) chown -R root:root . chmod -R u+w,go+r-w,a+X-s . echo Building ... if [ ${USE_NACL} -eq 1 ]; then DNACL=0 else DNACL=1 fi export -n LDFLAGS="$SLKLDFLAGS" export -n CFLAGS="$SLKCFLAGS" export CXXFLAGS="$SLKCFLAGS -fpermissive" export PATH="$TMP/tmp-$PRGNAM/python27-path:$PATH" _chromium_conf=( -Dgoogle_api_key=$_google_api_key -Dgoogle_default_client_id=$_google_default_client_id -Dgoogle_default_client_secret=$_google_default_client_secret -Dclang=0 -Ddisable_glibc=1 -Dffmpeg_branding=Chrome -Dicu_use_data_file_flag=0 -Dlinux_sandbox_path=/usr/lib${LIBDIRSUFFIX}/${PRGNAM}/chrome_sandbox -Dlinux_strip_binary=1 -Dlinux_use_bundled_binutils=0 -Dlinux_use_bundled_gold=0 -Dlinux_use_gold_binary=0 -Dlinux_use_gold_flags=0 -Dlogging_like_official_build=1 -Dproprietary_codecs=1 -Dremove_webcore_debug_symbols=1 -Dusb_ids_path=/usr/share/usb.ids -Duse_allocator=none -Duse_gconf=0 -Duse_gnome_keyring=0 -Duse_kerberos=0 -Duse_pulseaudio=0 -Duse_xi2_mt=0 -Duse_system_bzip2=0 -Duse_system_flac=0 -Duse_system_ffmpeg=0 -Duse_system_harfbuzz=0 -Duse_system_icu=0 -Duse_system_libevent=0 -Duse_system_libjpeg=0 -Duse_system_libpng=0 -Duse_system_libxml=0 -Duse_system_libxstl=0 -Duse_system_nspr=1 -Duse_system_opus=0 -Duse_system_snappy=0 -Duse_system_openssl=1 -Duse_system_xdg_utils=1 -Duse_system_yasm=0 -Duse_system_zlib=0 -Dwerror= -Drelease_extra_cflags="$CFLAGS" -Dtarget_arch=${TARGETARCH} -Ddisable_nacl=${DNACL} -Ddisable_sse2=${DSSE} ) #-Dlinux_link_gsettings=1 #-Dlinux_link_libpci=1 #-Dlinux_link_pulseaudio=0 # Download the NaCL toolchains: if [ ${USE_NACL} -eq 1 ]; then # We do not need arm_trusted on x86: build/download_nacl_toolchains.py --packages nacl_x86_newlib,pnacl_newlib,pnacl_translator \ 2>&1 | tee $OUTPUT/nacl_dl-${PRGNAM}.log fi # Do not make the build fail, see Chromium issue #386097: third_party/libaddressinput/chromium/tools/update-strings.py \ 2>&1 | tee $OUTPUT/update_strings-${PRGNAM}.log # Unbundle the libraries which we use from the system: build/linux/unbundle/replace_gyp_files.py "${_chromium_conf[@]}" \ 2>&1 | tee $OUTPUT/configure-${PRGNAM}.log # Generate the ninja build files: build/gyp_chromium --depth=. "${_chromium_conf[@]}" \ 2>&1 | tee $OUTPUT/gyp-${PRGNAM}.log ninja $NUMJOBS -C out/Release chrome chrome_sandbox chromedriver 2>&1 | tee $OUTPUT/ninja-${PRGNAM}.log # Manually install everything: # The main binary: install -D out/Release/chrome $PKG/usr/lib${LIBDIRSUFFIX}/${PRGNAM}/chromium # The sandbox: install -D -m4755 -o root -g root out/Release/chrome_sandbox \ $PKG/usr/lib${LIBDIRSUFFIX}/${PRGNAM}/chrome-sandbox # The Chromium implementation of the WebDriver wire protocol # (automated testing of web apps): install -D out/Release/chromedriver $PKG/usr/lib${LIBDIRSUFFIX}/${PRGNAM}/chromedriver # Copy over the remaining binaries: cp -a \ out/Release/{*.pak,libffmpegsumo.so,libpdf.so} \ $PKG/usr/lib${LIBDIRSUFFIX}/${PRGNAM}/ if [ ${USE_NACL} -eq 1 ]; then # Native Client files: cp -a \ out/Release/nacl_helper{,_bootstrap} \ out/Release/{nacl_irt_*.nexe} \ $PKG/usr/lib${LIBDIRSUFFIX}/${PRGNAM}/ if [ -f out/Release/libppGoogleNaClPluginChrome.so ] then cp -a \ out/Release/libppGoogleNaClPluginChrome.so \ $PKG/usr/lib${LIBDIRSUFFIX}/${PRGNAM}/ fi fi # Manually strip binaries so that 'nacl_irt_*.nexe' is left intact strip --strip-unneeded \ $PKG/usr/lib${LIBDIRSUFFIX}/${PRGNAM}/{chromium,chrome-sandbox} \ $PKG/usr/lib${LIBDIRSUFFIX}/${PRGNAM}/chromedriver \ $PKG/usr/lib${LIBDIRSUFFIX}/${PRGNAM}/libffmpegsumo.so \ $PKG/usr/lib${LIBDIRSUFFIX}/${PRGNAM}/libpdf.so if [ ${USE_NACL} -eq 1 ]; then strip --strip-unneeded \ $PKG/usr/lib${LIBDIRSUFFIX}/${PRGNAM}/nacl_helper{,_bootstrap} if [ -f $PKG/usr/lib${LIBDIRSUFFIX}/${PRGNAM}/libppGoogleNaClPluginChrome.so ] then strip --strip-unneeded \ $PKG/usr/lib${LIBDIRSUFFIX}/${PRGNAM}/libppGoogleNaClPluginChrome.so fi fi # Add locales: cp -a out/Release/locales $PKG/usr/lib${LIBDIRSUFFIX}/${PRGNAM}/ # Add resource files: cp -a out/Release/resources $PKG/usr/lib${LIBDIRSUFFIX}/${PRGNAM}/ # Install a man page: install -D -m0644 out/Release/chrome.1 $PKG/usr/man/man1/chromium.1 # Without this file, chromium refuses to start: cp -a third_party/icu/source/data/in/icudtl.dat $PKG/usr/lib${LIBDIRSUFFIX}/${PRGNAM}/ # Install a wrapper script: install -D -m0755 $SRCDIR/chromium.sh $PKG/usr/bin/chromium sed -i -e "s/@LIBDIRSUFFIX@/${LIBDIRSUFFIX}/g" $PKG/usr/bin/chromium # Make the chromedriver available in the $PATH : ln -s ../lib${LIBDIRSUFFIX}/${PRGNAM}/chromedriver $PKG/usr/bin/ # Install desktop icons: for size in 16 32; do install -D -m0644 \ chrome/app/theme/default_100_percent/chromium/product_logo_$size.png \ $PKG/usr/share/icons/hicolor/${size}x${size}/apps/chromium.png done for size in 22 24 48 64 128 256; do install -D -m0644 \ chrome/app/theme/chromium/product_logo_$size.png \ $PKG/usr/share/icons/hicolor/${size}x${size}/apps/chromium.png done # Add a desktop file: install -D -m0644 \ $SRCDIR/${PRGNAM}.desktop $PKG/usr/share/applications/${PRGNAM}.desktop # Move the 'default' file into place, # this allows users to override command-line options: install -D -m0644 $SRCDIR/${PRGNAM}.default $PKG/etc/default/${PRGNAM}.new # Add this to the doinst.sh: mkdir -p $PKG/install cat <> $PKG/install/doinst.sh # Handle the incoming configuration files: config() { for infile in \$1; do NEW="\$infile" OLD="\`dirname \$NEW\`/\`basename \$NEW .new\`" # If there's no config file by that name, mv it over: if [ ! -r \$OLD ]; then mv \$NEW \$OLD elif [ "\`cat \$OLD | md5sum\`" = "\`cat \$NEW | md5sum\`" ]; then # toss the redundant copy rm \$NEW fi # Otherwise, we leave the .new copy for the admin to consider... done } config etc/default/${PRGNAM}.new # Update the desktop database: if [ -x usr/bin/update-desktop-database ]; then chroot . /usr/bin/update-desktop-database usr/share/applications > /dev/null 2>&1 fi # Update hicolor theme cache: if [ -d usr/share/icons/hicolor ]; then if [ -x /usr/bin/gtk-update-icon-cache ]; then chroot . /usr/bin/gtk-update-icon-cache -f -t usr/share/icons/hicolor 1> /dev/null 2> /dev/null fi fi # Update the mime database: if [ -x usr/bin/update-mime-database ]; then chroot . /usr/bin/update-mime-database usr/share/mime >/dev/null 2>&1 fi EOINS # Add documentation: mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION cp -a $DOCS $PKG/usr/doc/$PRGNAM-$VERSION || true cat $SRCDIR/$(basename $0) > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild chown -R root:root $PKG/usr/doc/$PRGNAM-$VERSION find $PKG/usr/doc -type f -exec chmod 644 {} \; # Compress the man page(s): if [ -d $PKG/usr/man ]; then find $PKG/usr/man -type f -name "*.?" -exec gzip -9f {} \; for i in $(find $PKG/usr/man -type l -name "*.?") ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done fi # Add a package description: mkdir -p $PKG/install cat $SRCDIR/slack-desc > $PKG/install/slack-desc # Build the package: cd $PKG makepkg --linkadd y --chown n $OUTPUT/${PRGNAM}-${VERSION}-${ARCH}-${BUILD}${TAG}.${PKGTYPE:-txz} 2>&1 | tee $OUTPUT/makepkg-${PRGNAM}.log cd $OUTPUT md5sum ${PRGNAM}-${VERSION}-${ARCH}-${BUILD}${TAG}.${PKGTYPE:-txz} > ${PRGNAM}-${VERSION}-${ARCH}-${BUILD}${TAG}.${PKGTYPE:-txz}.md5 cd - cat $PKG/install/slack-desc | grep "^${PRGNAM}" > $OUTPUT/${PRGNAM}-${VERSION}-${ARCH}-${BUILD}${TAG}.txt # Restore the original umask: umask ${_UMASK_}