• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/bin/bash
2
3# Copyright (c) 2011 The Chromium Authors. All rights reserved.
4# Use of this source code is governed by a BSD-style license that can be
5# found in the LICENSE file.
6
7# Running Chromium via this script makes it possible to set Chromium as the
8# default browser directly out of a compile, without needing to package it.
9
10DESKTOP="chromium-devel"
11TITLE="Chromium"
12
13usage() {
14  echo "$0 [--gdb] [--help] [--man-page] [--] [chrome-options]"
15  echo
16  echo "        --gdb                   Start within gdb"
17  echo "        --help                  This help screen"
18  echo "        --man-page              Open the man page in the tree"
19}
20
21# Check to see if there is a desktop file of the given name.
22exists_desktop_file() {
23    # Build a search list from $XDG_DATA_HOME and $XDG_DATA_DIRS, the latter
24    # of which can itself be a colon-separated list of directories to search.
25    search="${XDG_DATA_HOME:-$HOME/.local/share}:${XDG_DATA_DIRS:-/usr/local/share:/usr/share}"
26    IFS=:
27    for dir in $search; do
28        unset IFS
29        [ "$dir" -a -d "$dir/applications" ] || continue
30        [ -r "$dir/applications/$DESKTOP.desktop" ] && return
31    done
32    # Didn't find it in the search path.
33    return 1
34}
35
36# Checks a file to see if it's a 32 or 64-bit.
37check_executable() {
38    out=$(file $(readlink -f $1) 2> /dev/null)
39    echo $out | grep -qs "ELF 32-bit LSB"
40    if [ $? = 0 ]; then
41        echo 32
42        return
43    fi
44    echo $out | grep -qs "ELF 64-bit LSB"
45    if [ $? = 0 ]; then
46        echo 64
47        return
48    fi
49    echo neither
50}
51
52# Generate a desktop file that will run this script.
53generate_desktop_file() {
54    apps="${XDG_DATA_HOME:-$HOME/.local/share}/applications"
55    mkdir -p "$apps"
56    cat > "$apps/$DESKTOP.desktop" << EOF
57[Desktop Entry]
58Version=1.0
59Encoding=UTF-8
60Name=$TITLE
61Exec=$CHROME_WRAPPER %U
62Terminal=false
63Icon=$HERE/product_logo_48.png
64Type=Application
65Categories=Application;Network;WebBrowser;
66MimeType=text/html;text/xml;application/xhtml_xml;
67EOF
68}
69
70# Let the wrapped binary know that it has been run through the wrapper.
71export CHROME_WRAPPER="`readlink -f "$0"`"
72export CHROME_DESKTOP="$DESKTOP.desktop"
73
74HERE="`dirname "$CHROME_WRAPPER"`"
75
76# We include some xdg utilities next to the binary, and we want to prefer them
77# over the system versions when we know the system versions are very old. We
78# detect whether the system xdg utilities are sufficiently new to be likely to
79# work for us by looking for xdg-settings. If we find it, we leave $PATH alone,
80# so that the system xdg utilities (including any distro patches) will be used.
81if ! which xdg-settings &> /dev/null; then
82  # Old xdg utilities. Prepend $HERE to $PATH to use ours instead.
83  export PATH="$HERE:$PATH"
84else
85  # Use system xdg utilities. But first create mimeapps.list if it doesn't
86  # exist; some systems have bugs in xdg-mime that make it fail without it.
87  xdg_app_dir="${XDG_DATA_HOME:-$HOME/.local/share/applications}"
88  mkdir -p "$xdg_app_dir"
89  [ -f "$xdg_app_dir/mimeapps.list" ] || touch "$xdg_app_dir/mimeapps.list"
90fi
91
92# Always use our ffmpeg and other shared libs.
93export LD_LIBRARY_PATH="$HERE:$HERE/lib:$HERE/lib.target${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}"
94
95MISSING_LIBS=$(ldd "$HERE/chrome" 2> /dev/null |grep "not found$" | cut -d" " -f 1|sed 's/\t//')
96CHROME_ARCH=$(check_executable "$HERE/chrome")
97uname -m | grep -qs x86_64
98if [ $? = 1 ]; then
99    LIBDIRS="/lib /lib32 /usr/lib /usr/lib32"
100else
101    LIBDIRS="/lib64 /lib /usr/lib64 /usr/lib"
102fi
103
104echo $MISSING_LIBS | grep -qs libbz2.so.1.0
105if [ $? = 0 ]; then
106    for dir in $LIBDIRS
107    do
108        if [ -e "$dir/libbz2.so.1" ]; then
109            LIB_ARCH=$(check_executable "$dir/libbz2.so.1")
110            if [ "$CHROME_ARCH" = "$LIB_ARCH" ]; then
111                ln -snf "$dir/libbz2.so.1" "$HERE/libbz2.so.1.0"
112                break;
113            fi
114        fi
115    done
116fi
117
118for lib in libnspr4.so.0d libnss3.so.1d libnssutil3.so.1d libplc4.so.0d libplds4.so.0d libsmime3.so.1d libssl3.so.1d
119do
120    echo $MISSING_LIBS | grep -qs $lib
121    if [ $? = 0 ]; then
122        reallib=$(echo $lib | sed 's/\.[01]d$//')
123        for dir in $LIBDIRS
124        do
125            if [ -e "$dir/$reallib" ]; then
126                LIB_ARCH=$(check_executable "$dir/$reallib")
127                if [ "$CHROME_ARCH" = "$LIB_ARCH" ]; then
128                    ln -snf "$dir/$reallib" "$HERE/$lib"
129                    break;
130                fi
131            fi
132        done
133    fi
134done
135
136# Custom version string for this release. This can be used to add a downstream
137# vendor string or release channel information.
138export CHROME_VERSION_EXTRA="custom"
139
140exists_desktop_file || generate_desktop_file
141
142CMD_PREFIX=
143ARGS=()
144while [ "$#" -gt 0 ]; do
145    case "$1" in
146    "--")
147        shift
148        break ;;
149    "--gdb")
150        CMD_PREFIX="gdb --args" ;;
151    "--help")
152        usage
153        exit 0 ;;
154    "--man-page")
155        exec man "$HERE/../../chrome/app/resources/manpage.1.in" ;;
156    *)
157        ARGS=( "${ARGS[@]}" "$1" ) ;;
158    esac
159    shift
160done
161set -- "${ARGS[@]}" "$@"
162
163exec $CMD_PREFIX "$HERE/chrome" "$@"
164