1 #!/bin/bash -e 2 3 # Copyright (c) 2012 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 SCRIPTDIR="$(dirname "$(readlink -f "$0")")" 8 PACKAGE_NAME="chrome-remote-desktop" 9 10 guess_filename() { 11 ARCH=$(dpkg-architecture | awk -F '=' '/DEB_BUILD_ARCH=/{print $2}') 12 VERSION_FULL=$(get_version_full) 13 echo ${PACKAGE_NAME}_${VERSION_FULL}_${ARCH}.deb 14 } 15 16 get_version_full() { 17 src_root=${src_root:-./../../../..} 18 remoting_version_path=$src_root/remoting/VERSION 19 chrome_version_path=$src_root/chrome/VERSION 20 version_helper=$src_root/chrome/tools/build/version.py 21 22 # TODO(lambroslambrou): Refactor to share the logic with remoting.gyp. 23 version_major=$($version_helper -f $chrome_version_path \ 24 -f $remoting_version_path -t "@MAJOR@") 25 version_minor=$($version_helper -f $remoting_version_path \ 26 -t "@REMOTING_PATCH@") 27 version_build=$($version_helper -f $chrome_version_path \ 28 -f $remoting_version_path -t "@BUILD@") 29 version_patch=$($version_helper -f $chrome_version_path \ 30 -f $remoting_version_path -t "@PATCH@") 31 version_full="$version_major.$version_minor.$version_build.$version_patch" 32 echo $version_full 33 } 34 35 usage() { 36 echo "usage: $(basename $0) [-hp] [-o path] [-s path]" 37 echo "-h this help message" 38 echo "-p just print the expected DEB filename that this will build." 39 echo "-s path to the top of the src tree." 40 echo "-o path to write the DEB file to." 41 } 42 43 while getopts ":s:o:ph" OPTNAME 44 do 45 case $OPTNAME in 46 s ) 47 src_root="$(readlink -f "$OPTARG")" 48 ;; 49 o ) 50 OUTPUT_PATH="$(readlink -f "$OPTARG")" 51 ;; 52 p ) 53 PRINTDEBNAME=1 54 ;; 55 h ) 56 usage 57 exit 0 58 ;; 59 \: ) 60 echo "'-$OPTARG' needs an argument." 61 usage 62 exit 1 63 ;; 64 * ) 65 echo "invalid command-line option: $OPTARG" 66 usage 67 exit 1 68 ;; 69 esac 70 done 71 shift $(($OPTIND - 1)) 72 73 # This just prints the expected package filename, then exits. It's needed so the 74 # gyp packaging target can track the output file, to know whether or not it 75 # needs to be built/rebuilt. 76 if [[ -n "$PRINTDEBNAME" ]]; then 77 guess_filename 78 exit 0 79 fi 80 81 # TODO: Make this all happen in a temp dir to keep intermediate files out of the 82 # build tree? 83 cd "$SCRIPTDIR" 84 85 if [[ -z "$version_full" ]]; then 86 version_full=$(get_version_full) 87 fi 88 89 if [[ ! "$version_full" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then 90 echo "Error: Invalid \$version_full value: $version_full" >&2 91 exit 1 92 fi 93 94 # Include revision information in changelog when building from a local 95 # git-based checkout. 96 merge_head="$(git merge-base HEAD origin/git-svn 2>/dev/null || true)" 97 if [[ -n "$merge_head" ]]; then 98 revision="$(git svn find-rev "$merge_head" 2>/dev/null || true)" 99 else 100 # Official builders still use svn-based builds. 101 revision="$(svn info . | awk '/^Revision: /{print $2}')" 102 fi 103 if [[ -n "$revision" ]]; then 104 revision_text="(r$revision)" 105 fi 106 107 echo "Building version $version_full $revision_text" 108 109 # Create a fresh debian/changelog. 110 export DEBEMAIL="The Chromium Authors <chromium-dev (at] chromium.org>" 111 rm -f debian/changelog 112 debchange --create \ 113 --package "$PACKAGE_NAME" \ 114 --newversion "$version_full" \ 115 --force-distribution \ 116 --distribution unstable \ 117 "New Debian package $revision_text" 118 119 # TODO(mmoss): This is a workaround for a problem where dpkg-shlibdeps was 120 # resolving deps using some of our build output shlibs (i.e. 121 # out/Release/lib.target/libfreetype.so.6), and was then failing with: 122 # dpkg-shlibdeps: error: no dependency information found for ... 123 # It's not clear if we ever want to look in LD_LIBRARY_PATH to resolve deps, 124 # but it seems that we don't currently, so this is the most expediant fix. 125 SAVE_LDLP=$LD_LIBRARY_PATH 126 unset LD_LIBRARY_PATH 127 dpkg-buildpackage -b -us -uc 128 LD_LIBRARY_PATH=$SAVE_LDLP 129 130 if [[ "$OUTPUT_PATH" ]]; then 131 mv ../${PACKAGE_NAME}_*.deb "$OUTPUT_PATH"/ 132 mv ../${PACKAGE_NAME}_*.changes "$OUTPUT_PATH"/ 133 fi 134