164 lines
5.0 KiB
Bash
Executable File
164 lines
5.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
# Running Chromium via this script makes it possible to set Chromium as the
|
|
# default browser directly out of a compile, without needing to package it.
|
|
|
|
DESKTOP="chromium-devel"
|
|
TITLE="Chromium"
|
|
|
|
usage() {
|
|
echo "$0 [--gdb] [--help] [--man-page] [--] [chrome-options]"
|
|
echo
|
|
echo " --gdb Start within gdb"
|
|
echo " --help This help screen"
|
|
echo " --man-page Open the man page in the tree"
|
|
}
|
|
|
|
# Check to see if there is a desktop file of the given name.
|
|
exists_desktop_file() {
|
|
# Build a search list from $XDG_DATA_HOME and $XDG_DATA_DIRS, the latter
|
|
# of which can itself be a colon-separated list of directories to search.
|
|
search="${XDG_DATA_HOME:-$HOME/.local/share}:${XDG_DATA_DIRS:-/usr/local/share:/usr/share}"
|
|
IFS=:
|
|
for dir in $search; do
|
|
unset IFS
|
|
[ "$dir" -a -d "$dir/applications" ] || continue
|
|
[ -r "$dir/applications/$DESKTOP.desktop" ] && return
|
|
done
|
|
# Didn't find it in the search path.
|
|
return 1
|
|
}
|
|
|
|
# Checks a file to see if it's a 32 or 64-bit.
|
|
check_executable() {
|
|
out=$(file $(readlink -f $1) 2> /dev/null)
|
|
echo $out | grep -qs "ELF 32-bit LSB"
|
|
if [ $? = 0 ]; then
|
|
echo 32
|
|
return
|
|
fi
|
|
echo $out | grep -qs "ELF 64-bit LSB"
|
|
if [ $? = 0 ]; then
|
|
echo 64
|
|
return
|
|
fi
|
|
echo neither
|
|
}
|
|
|
|
# Generate a desktop file that will run this script.
|
|
generate_desktop_file() {
|
|
apps="${XDG_DATA_HOME:-$HOME/.local/share}/applications"
|
|
mkdir -p "$apps"
|
|
cat > "$apps/$DESKTOP.desktop" << EOF
|
|
[Desktop Entry]
|
|
Version=1.0
|
|
Encoding=UTF-8
|
|
Name=$TITLE
|
|
Exec=$CHROME_WRAPPER %U
|
|
Terminal=false
|
|
Icon=$HERE/product_logo_48.png
|
|
Type=Application
|
|
Categories=Application;Network;WebBrowser;
|
|
MimeType=text/html;text/xml;application/xhtml_xml;
|
|
EOF
|
|
}
|
|
|
|
# Let the wrapped binary know that it has been run through the wrapper.
|
|
export CHROME_WRAPPER="`readlink -f "$0"`"
|
|
export CHROME_DESKTOP="$DESKTOP.desktop"
|
|
|
|
HERE="`dirname "$CHROME_WRAPPER"`"
|
|
|
|
# We include some xdg utilities next to the binary, and we want to prefer them
|
|
# over the system versions when we know the system versions are very old. We
|
|
# detect whether the system xdg utilities are sufficiently new to be likely to
|
|
# work for us by looking for xdg-settings. If we find it, we leave $PATH alone,
|
|
# so that the system xdg utilities (including any distro patches) will be used.
|
|
if ! which xdg-settings &> /dev/null; then
|
|
# Old xdg utilities. Prepend $HERE to $PATH to use ours instead.
|
|
export PATH="$HERE:$PATH"
|
|
else
|
|
# Use system xdg utilities. But first create mimeapps.list if it doesn't
|
|
# exist; some systems have bugs in xdg-mime that make it fail without it.
|
|
xdg_app_dir="${XDG_DATA_HOME:-$HOME/.local/share/applications}"
|
|
mkdir -p "$xdg_app_dir"
|
|
[ -f "$xdg_app_dir/mimeapps.list" ] || touch "$xdg_app_dir/mimeapps.list"
|
|
fi
|
|
|
|
# Always use our ffmpeg and other shared libs.
|
|
export LD_LIBRARY_PATH="$HERE:$HERE/lib:$HERE/lib.target${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}"
|
|
|
|
MISSING_LIBS=$(ldd "$HERE/chrome" 2> /dev/null |grep "not found$" | cut -d" " -f 1|sed 's/\t//')
|
|
CHROME_ARCH=$(check_executable "$HERE/chrome")
|
|
uname -m | grep -qs x86_64
|
|
if [ $? = 1 ]; then
|
|
LIBDIRS="/lib /lib32 /usr/lib /usr/lib32"
|
|
else
|
|
LIBDIRS="/lib64 /lib /usr/lib64 /usr/lib"
|
|
fi
|
|
|
|
echo $MISSING_LIBS | grep -qs libbz2.so.1.0
|
|
if [ $? = 0 ]; then
|
|
for dir in $LIBDIRS
|
|
do
|
|
if [ -e "$dir/libbz2.so.1" ]; then
|
|
LIB_ARCH=$(check_executable "$dir/libbz2.so.1")
|
|
if [ "$CHROME_ARCH" = "$LIB_ARCH" ]; then
|
|
ln -snf "$dir/libbz2.so.1" "$HERE/libbz2.so.1.0"
|
|
break;
|
|
fi
|
|
fi
|
|
done
|
|
fi
|
|
|
|
for lib in libnspr4.so.0d libnss3.so.1d libnssutil3.so.1d libplc4.so.0d libplds4.so.0d libsmime3.so.1d libssl3.so.1d
|
|
do
|
|
echo $MISSING_LIBS | grep -qs $lib
|
|
if [ $? = 0 ]; then
|
|
reallib=$(echo $lib | sed 's/\.[01]d$//')
|
|
for dir in $LIBDIRS
|
|
do
|
|
if [ -e "$dir/$reallib" ]; then
|
|
LIB_ARCH=$(check_executable "$dir/$reallib")
|
|
if [ "$CHROME_ARCH" = "$LIB_ARCH" ]; then
|
|
ln -snf "$dir/$reallib" "$HERE/$lib"
|
|
break;
|
|
fi
|
|
fi
|
|
done
|
|
fi
|
|
done
|
|
|
|
# Custom version string for this release. This can be used to add a downstream
|
|
# vendor string or release channel information.
|
|
export CHROME_VERSION_EXTRA="custom"
|
|
|
|
exists_desktop_file || generate_desktop_file
|
|
|
|
CMD_PREFIX=
|
|
ARGS=()
|
|
while [ "$#" -gt 0 ]; do
|
|
case "$1" in
|
|
"--")
|
|
shift
|
|
break ;;
|
|
"--gdb")
|
|
CMD_PREFIX="gdb --args" ;;
|
|
"--help")
|
|
usage
|
|
exit 0 ;;
|
|
"--man-page")
|
|
exec man "$HERE/../../chrome/app/resources/manpage.1.in" ;;
|
|
*)
|
|
ARGS=( "${ARGS[@]}" "$1" ) ;;
|
|
esac
|
|
shift
|
|
done
|
|
set -- "${ARGS[@]}" "$@"
|
|
|
|
exec $CMD_PREFIX "$HERE/chrome" "$@"
|