| OLD | NEW |
| (Empty) |
| 1 #!/bin/bash | |
| 2 # | |
| 3 # Helper to do build so you don't have to remember all the steps/args. | |
| 4 | |
| 5 | |
| 6 set -eu | |
| 7 | |
| 8 # Some base locations. | |
| 9 readonly ScriptDir=$(dirname "$(echo $0 | sed -e "s,^\([^/]\),$(pwd)/\1,")") | |
| 10 readonly ProtoRootDir="${ScriptDir}/../.." | |
| 11 | |
| 12 printUsage() { | |
| 13 NAME=$(basename "${0}") | |
| 14 cat << EOF | |
| 15 usage: ${NAME} [OPTIONS] | |
| 16 | |
| 17 This script does the common build steps needed. | |
| 18 | |
| 19 OPTIONS: | |
| 20 | |
| 21 General: | |
| 22 | |
| 23 -h, --help | |
| 24 Show this message | |
| 25 -c, --clean | |
| 26 Issue a clean before the normal build. | |
| 27 -a, --autogen | |
| 28 Start by rerunning autogen & configure. | |
| 29 -r, --regenerate-descriptors | |
| 30 The descriptor.proto is checked in generated, cause it to regenerate. | |
| 31 -j #, --jobs # | |
| 32 Force the number of parallel jobs (useful for debugging build issues). | |
| 33 --skip-xcode | |
| 34 Skip the invoke of Xcode to test the runtime on both iOS and OS X. | |
| 35 --skip-xcode-ios | |
| 36 Skip the invoke of Xcode to test the runtime on iOS. | |
| 37 --skip-xcode-osx | |
| 38 Skip the invoke of Xcode to test the runtime on OS X. | |
| 39 | |
| 40 EOF | |
| 41 } | |
| 42 | |
| 43 header() { | |
| 44 echo "" | |
| 45 echo "========================================================================
" | |
| 46 echo " ${@}" | |
| 47 echo "========================================================================
" | |
| 48 } | |
| 49 | |
| 50 # Thanks to libtool, builds can fail in odd ways and since it eats some output | |
| 51 # it can be hard to spot, so force error output if make exits with a non zero. | |
| 52 wrapped_make() { | |
| 53 set +e # Don't stop if the command fails. | |
| 54 make $* | |
| 55 MAKE_EXIT_STATUS=$? | |
| 56 if [ ${MAKE_EXIT_STATUS} -ne 0 ]; then | |
| 57 echo "Error: 'make $*' exited with status ${MAKE_EXIT_STATUS}" | |
| 58 exit ${MAKE_EXIT_STATUS} | |
| 59 fi | |
| 60 set -e | |
| 61 } | |
| 62 | |
| 63 NUM_MAKE_JOBS=$(/usr/sbin/sysctl -n hw.ncpu) | |
| 64 if [[ "${NUM_MAKE_JOBS}" -lt 4 ]] ; then | |
| 65 NUM_MAKE_JOBS=4 | |
| 66 fi | |
| 67 | |
| 68 DO_AUTOGEN=no | |
| 69 DO_CLEAN=no | |
| 70 REGEN_CPP_DESCRIPTORS=no | |
| 71 DO_XCODE_IOS_TESTS=yes | |
| 72 DO_XCODE_OSX_TESTS=yes | |
| 73 while [[ $# != 0 ]]; do | |
| 74 case "${1}" in | |
| 75 -h | --help ) | |
| 76 printUsage | |
| 77 exit 0 | |
| 78 ;; | |
| 79 -c | --clean ) | |
| 80 DO_CLEAN=yes | |
| 81 ;; | |
| 82 -a | --autogen ) | |
| 83 DO_AUTOGEN=yes | |
| 84 ;; | |
| 85 -r | --regenerate-cpp-descriptors ) | |
| 86 REGEN_CPP_DESCRIPTORS=yes | |
| 87 ;; | |
| 88 -j | --jobs ) | |
| 89 shift | |
| 90 NUM_MAKE_JOBS="${1}" | |
| 91 ;; | |
| 92 --skip-xcode ) | |
| 93 DO_XCODE_IOS_TESTS=no | |
| 94 DO_XCODE_OSX_TESTS=no | |
| 95 ;; | |
| 96 --skip-xcode-ios ) | |
| 97 DO_XCODE_IOS_TESTS=no | |
| 98 ;; | |
| 99 --skip-xcode-osx ) | |
| 100 DO_XCODE_OSX_TESTS=no | |
| 101 ;; | |
| 102 -*) | |
| 103 echo "ERROR: Unknown option: ${1}" 1>&2 | |
| 104 printUsage | |
| 105 exit 1 | |
| 106 ;; | |
| 107 *) | |
| 108 echo "ERROR: Unknown argument: ${1}" 1>&2 | |
| 109 printUsage | |
| 110 exit 1 | |
| 111 ;; | |
| 112 esac | |
| 113 shift | |
| 114 done | |
| 115 | |
| 116 # Into the proto dir. | |
| 117 pushd "${ProtoRootDir}" | |
| 118 | |
| 119 # if no Makefile, force the autogen. | |
| 120 if [[ ! -f Makefile ]] ; then | |
| 121 DO_AUTOGEN=yes | |
| 122 fi | |
| 123 | |
| 124 if [[ "${DO_AUTOGEN}" == "yes" ]] ; then | |
| 125 header "Running autogen & configure" | |
| 126 ./autogen.sh | |
| 127 ./configure CXXFLAGS="-mmacosx-version-min=10.9 -Wnon-virtual-dtor -Woverloade
d-virtual -Wunused-const-variable -Wunused-function" | |
| 128 fi | |
| 129 | |
| 130 if [[ "${DO_CLEAN}" == "yes" ]] ; then | |
| 131 header "Cleaning" | |
| 132 wrapped_make clean | |
| 133 if [[ "${DO_XCODE_IOS_TESTS}" == "yes" ]] ; then | |
| 134 XCODEBUILD_CLEAN_BASE_IOS=( | |
| 135 xcodebuild | |
| 136 -project objectivec/ProtocolBuffers_iOS.xcodeproj | |
| 137 -scheme ProtocolBuffers | |
| 138 ) | |
| 139 "${XCODEBUILD_CLEAN_BASE_IOS[@]}" -configuration Debug clean | |
| 140 "${XCODEBUILD_CLEAN_BASE_IOS[@]}" -configuration Release clean | |
| 141 fi | |
| 142 if [[ "${DO_XCODE_OSX_TESTS}" == "yes" ]] ; then | |
| 143 XCODEBUILD_CLEAN_BASE_OSX=( | |
| 144 xcodebuild | |
| 145 -project objectivec/ProtocolBuffers_OSX.xcodeproj | |
| 146 -scheme ProtocolBuffers | |
| 147 ) | |
| 148 "${XCODEBUILD_CLEAN_BASE_OSX[@]}" -configuration Debug clean | |
| 149 "${XCODEBUILD_CLEAN_BASE_OSX[@]}" -configuration Release clean | |
| 150 fi | |
| 151 fi | |
| 152 | |
| 153 if [[ "${REGEN_CPP_DESCRIPTORS}" == "yes" ]] ; then | |
| 154 header "Regenerating the C++ descriptor sources." | |
| 155 ./generate_descriptor_proto.sh -j "${NUM_MAKE_JOBS}" | |
| 156 fi | |
| 157 | |
| 158 header "Building" | |
| 159 # Can't issue these together, when fully parallel, something sometimes chokes | |
| 160 # at random. | |
| 161 wrapped_make -j "${NUM_MAKE_JOBS}" all | |
| 162 wrapped_make -j "${NUM_MAKE_JOBS}" check | |
| 163 | |
| 164 header "Ensuring the ObjC descriptors are current." | |
| 165 # Find the newest input file (protos, compiler, and the generator script). | |
| 166 # (these patterns catch some extra stuff, but better to over sample than under) | |
| 167 readonly NewestInput=$(find \ | |
| 168 src/google/protobuf/*.proto \ | |
| 169 src/.libs src/*.la src/protoc \ | |
| 170 objectivec/generate_descriptors_proto.sh \ | |
| 171 -type f -print0 \ | |
| 172 | xargs -0 stat -f "%m %N" \ | |
| 173 | sort -n | tail -n1 | cut -f2- -d" ") | |
| 174 # Find the oldest output file. | |
| 175 readonly OldestOutput=$(find \ | |
| 176 "${ProtoRootDir}/objectivec/google" \ | |
| 177 -type f -print0 \ | |
| 178 | xargs -0 stat -f "%m %N" \ | |
| 179 | sort -n -r | tail -n1 | cut -f2- -d" ") | |
| 180 # If the newest input is newer than the oldest output, regenerate. | |
| 181 if [[ "${NewestInput}" -nt "${OldestOutput}" ]] ; then | |
| 182 echo ">> Newest input is newer than oldest output, regenerating." | |
| 183 objectivec/generate_descriptors_proto.sh -j "${NUM_MAKE_JOBS}" | |
| 184 else | |
| 185 echo ">> Newest input is older than oldest output, no need to regenerating." | |
| 186 fi | |
| 187 | |
| 188 header "Checking on the ObjC Runtime Code" | |
| 189 objectivec/DevTools/pddm_tests.py | |
| 190 if ! objectivec/DevTools/pddm.py --dry-run objectivec/*.[hm] objectivec/Tests/*.
[hm] ; then | |
| 191 echo "" | |
| 192 echo "Update by running:" | |
| 193 echo " objectivec/DevTools/pddm.py objectivec/*.[hm] objectivec/Tests/*.[hm]
" | |
| 194 exit 1 | |
| 195 fi | |
| 196 | |
| 197 if [[ "${DO_XCODE_IOS_TESTS}" == "yes" ]] ; then | |
| 198 XCODEBUILD_TEST_BASE_IOS=( | |
| 199 xcodebuild | |
| 200 -project objectivec/ProtocolBuffers_iOS.xcodeproj | |
| 201 -scheme ProtocolBuffers | |
| 202 # Don't need to worry about form factors or retina/non retina; | |
| 203 # just pick a mix of OS Versions and 32/64 bit. | |
| 204 -destination "platform=iOS Simulator,name=iPhone 4s,OS=7.1" # 32bit | |
| 205 -destination "platform=iOS Simulator,name=iPhone 6,OS=8.3" # 64bit | |
| 206 -destination "platform=iOS Simulator,name=iPad 2,OS=7.1" # 32bit | |
| 207 -destination "platform=iOS Simulator,name=iPad Air,OS=8.3" # 64bit | |
| 208 ) | |
| 209 header "Doing Xcode iOS build/tests - Debug" | |
| 210 "${XCODEBUILD_TEST_BASE_IOS[@]}" -configuration Debug test | |
| 211 header "Doing Xcode iOS build/tests - Release" | |
| 212 "${XCODEBUILD_TEST_BASE_IOS[@]}" -configuration Release test | |
| 213 # Don't leave the simulator in the developer's face. | |
| 214 killall "iOS Simulator" | |
| 215 fi | |
| 216 if [[ "${DO_XCODE_OSX_TESTS}" == "yes" ]] ; then | |
| 217 XCODEBUILD_TEST_BASE_OSX=( | |
| 218 xcodebuild | |
| 219 -project objectivec/ProtocolBuffers_OSX.xcodeproj | |
| 220 -scheme ProtocolBuffers | |
| 221 # Since the ObjC 2.0 Runtime is required, 32bit OS X isn't supported. | |
| 222 -destination "platform=OS X,arch=x86_64" # 64bit | |
| 223 ) | |
| 224 header "Doing Xcode OS X build/tests - Debug" | |
| 225 "${XCODEBUILD_TEST_BASE_OSX[@]}" -configuration Debug test | |
| 226 header "Doing Xcode OS X build/tests - Release" | |
| 227 "${XCODEBUILD_TEST_BASE_OSX[@]}" -configuration Release test | |
| 228 fi | |
| OLD | NEW |