| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 | 
							- #!/bin/bash
 
- #
 
- # Helper to do build so you don't have to remember all the steps/args.
 
- set -eu
 
- # Some base locations.
 
- readonly ScriptDir=$(dirname "$(echo $0 | sed -e "s,^\([^/]\),$(pwd)/\1,")")
 
- readonly ProtoRootDir="${ScriptDir}/../.."
 
- printUsage() {
 
-   NAME=$(basename "${0}")
 
-   cat << EOF
 
- usage: ${NAME} [OPTIONS]
 
- This script does the common build steps needed.
 
- OPTIONS:
 
-  General:
 
-    -h, --help
 
-          Show this message
 
-    -c, --clean
 
-          Issue a clean before the normal build.
 
-    -a, --autogen
 
-          Start by rerunning autogen & configure.
 
-    -r, --regenerate-descriptors
 
-          The descriptor.proto is checked in generated, cause it to regenerate.
 
-    -j #, --jobs #
 
-          Force the number of parallel jobs (useful for debugging build issues).
 
-    --skip-xcode
 
-          Skip the invoke of Xcode to test the runtime on both iOS and OS X.
 
-    --skip-xcode-ios
 
-          Skip the invoke of Xcode to test the runtime on iOS.
 
-    --skip-xcode-osx
 
-          Skip the invoke of Xcode to test the runtime on OS X.
 
- EOF
 
- }
 
- header() {
 
-   echo ""
 
-   echo "========================================================================"
 
-   echo "    ${@}"
 
-   echo "========================================================================"
 
- }
 
- # Thanks to libtool, builds can fail in odd ways and since it eats some output
 
- # it can be hard to spot, so force error output if make exits with a non zero.
 
- wrapped_make() {
 
-   set +e  # Don't stop if the command fails.
 
-   make $*
 
-   MAKE_EXIT_STATUS=$?
 
-   if [ ${MAKE_EXIT_STATUS} -ne 0 ]; then
 
-     echo "Error: 'make $*' exited with status ${MAKE_EXIT_STATUS}"
 
-     exit ${MAKE_EXIT_STATUS}
 
-   fi
 
-   set -e
 
- }
 
- NUM_MAKE_JOBS=$(/usr/sbin/sysctl -n hw.ncpu)
 
- if [[ "${NUM_MAKE_JOBS}" -lt 4 ]] ; then
 
-   NUM_MAKE_JOBS=4
 
- fi
 
- DO_AUTOGEN=no
 
- DO_CLEAN=no
 
- REGEN_CPP_DESCRIPTORS=no
 
- DO_XCODE_IOS_TESTS=yes
 
- DO_XCODE_OSX_TESTS=yes
 
- while [[ $# != 0 ]]; do
 
-   case "${1}" in
 
-     -h | --help )
 
-       printUsage
 
-       exit 0
 
-       ;;
 
-     -c | --clean )
 
-       DO_CLEAN=yes
 
-       ;;
 
-     -a | --autogen )
 
-       DO_AUTOGEN=yes
 
-       ;;
 
-     -r | --regenerate-cpp-descriptors )
 
-       REGEN_CPP_DESCRIPTORS=yes
 
-       ;;
 
-     -j | --jobs )
 
-       shift
 
-       NUM_MAKE_JOBS="${1}"
 
-       ;;
 
-     --skip-xcode )
 
-       DO_XCODE_IOS_TESTS=no
 
-       DO_XCODE_OSX_TESTS=no
 
-       ;;
 
-     --skip-xcode-ios )
 
-       DO_XCODE_IOS_TESTS=no
 
-       ;;
 
-     --skip-xcode-osx )
 
-       DO_XCODE_OSX_TESTS=no
 
-       ;;
 
-     -*)
 
-       echo "ERROR: Unknown option: ${1}" 1>&2
 
-       printUsage
 
-       exit 1
 
-       ;;
 
-     *)
 
-       echo "ERROR: Unknown argument: ${1}" 1>&2
 
-       printUsage
 
-       exit 1
 
-       ;;
 
-   esac
 
-   shift
 
- done
 
- # Into the proto dir.
 
- pushd "${ProtoRootDir}"
 
- # if no Makefile, force the autogen.
 
- if [[ ! -f Makefile ]] ; then
 
-   DO_AUTOGEN=yes
 
- fi
 
- if [[ "${DO_AUTOGEN}" == "yes" ]] ; then
 
-   header "Running autogen & configure"
 
-   ./autogen.sh
 
-   ./configure CXXFLAGS="-mmacosx-version-min=10.9 -Wnon-virtual-dtor -Woverloaded-virtual -Wunused-const-variable -Wunused-function"
 
- fi
 
- if [[ "${DO_CLEAN}" == "yes" ]] ; then
 
-   header "Cleaning"
 
-   wrapped_make clean
 
-   if [[ "${DO_XCODE_IOS_TESTS}" == "yes" ]] ; then
 
-     XCODEBUILD_CLEAN_BASE_IOS=(
 
-       xcodebuild
 
-         -project objectivec/ProtocolBuffers_iOS.xcodeproj
 
-         -scheme ProtocolBuffers
 
-     )
 
-   "${XCODEBUILD_CLEAN_BASE_IOS[@]}" -configuration Debug clean
 
-   "${XCODEBUILD_CLEAN_BASE_IOS[@]}" -configuration Release clean
 
-   fi
 
-   if [[ "${DO_XCODE_OSX_TESTS}" == "yes" ]] ; then
 
-     XCODEBUILD_CLEAN_BASE_OSX=(
 
-       xcodebuild
 
-         -project objectivec/ProtocolBuffers_OSX.xcodeproj
 
-         -scheme ProtocolBuffers
 
-     )
 
-   "${XCODEBUILD_CLEAN_BASE_OSX[@]}" -configuration Debug clean
 
-   "${XCODEBUILD_CLEAN_BASE_OSX[@]}" -configuration Release clean
 
-   fi
 
- fi
 
- if [[ "${REGEN_CPP_DESCRIPTORS}" == "yes" ]] ; then
 
-   header "Regenerating the C++ descriptor sources."
 
-   ./generate_descriptor_proto.sh -j "${NUM_MAKE_JOBS}"
 
- fi
 
- header "Building"
 
- # Can't issue these together, when fully parallel, something sometimes chokes
 
- # at random.
 
- wrapped_make -j "${NUM_MAKE_JOBS}" all
 
- wrapped_make -j "${NUM_MAKE_JOBS}" check
 
- header "Ensuring the ObjC descriptors are current."
 
- # Find the newest input file (protos, compiler, and the generator script).
 
- # (these patterns catch some extra stuff, but better to over sample than under)
 
- readonly NewestInput=$(find \
 
-    src/google/protobuf/*.proto \
 
-    src/.libs src/*.la src/protoc \
 
-    objectivec/generate_descriptors_proto.sh \
 
-       -type f -print0 \
 
-       | xargs -0 stat -f "%m %N" \
 
-       | sort -n | tail -n1 | cut -f2- -d" ")
 
- # Find the oldest output file.
 
- readonly OldestOutput=$(find \
 
-       "${ProtoRootDir}/objectivec/google" \
 
-       -type f -print0 \
 
-       | xargs -0 stat -f "%m %N" \
 
-       | sort -n -r | tail -n1 | cut -f2- -d" ")
 
- # If the newest input is newer than the oldest output, regenerate.
 
- if [[ "${NewestInput}" -nt "${OldestOutput}" ]] ; then
 
-   echo ">> Newest input is newer than oldest output, regenerating."
 
-   objectivec/generate_descriptors_proto.sh -j "${NUM_MAKE_JOBS}"
 
- else
 
-   echo ">> Newest input is older than oldest output, no need to regenerating."
 
- fi
 
- header "Checking on the ObjC Runtime Code"
 
- objectivec/DevTools/pddm_tests.py
 
- if ! objectivec/DevTools/pddm.py --dry-run objectivec/*.[hm] objectivec/Tests/*.[hm] ; then
 
-   echo ""
 
-   echo "Update by running:"
 
-   echo "   objectivec/DevTools/pddm.py objectivec/*.[hm] objectivec/Tests/*.[hm]"
 
-   exit 1
 
- fi
 
- if [[ "${DO_XCODE_IOS_TESTS}" == "yes" ]] ; then
 
-   XCODEBUILD_TEST_BASE_IOS=(
 
-     xcodebuild
 
-       -project objectivec/ProtocolBuffers_iOS.xcodeproj
 
-       -scheme ProtocolBuffers
 
-       # Don't need to worry about form factors or retina/non retina;
 
-       # just pick a mix of OS Versions and 32/64 bit.
 
-       -destination "platform=iOS Simulator,name=iPhone 4s,OS=7.1" # 32bit
 
-       -destination "platform=iOS Simulator,name=iPhone 6,OS=8.3" # 64bit
 
-       -destination "platform=iOS Simulator,name=iPad 2,OS=7.1" # 32bit
 
-       -destination "platform=iOS Simulator,name=iPad Air,OS=8.3" # 64bit
 
-   )
 
-   header "Doing Xcode iOS build/tests - Debug"
 
-   "${XCODEBUILD_TEST_BASE_IOS[@]}" -configuration Debug test
 
-   header "Doing Xcode iOS build/tests - Release"
 
-   "${XCODEBUILD_TEST_BASE_IOS[@]}" -configuration Release test
 
-   # Don't leave the simulator in the developer's face.
 
-   killall "iOS Simulator"
 
- fi
 
- if [[ "${DO_XCODE_OSX_TESTS}" == "yes" ]] ; then
 
-   XCODEBUILD_TEST_BASE_OSX=(
 
-     xcodebuild
 
-       -project objectivec/ProtocolBuffers_OSX.xcodeproj
 
-       -scheme ProtocolBuffers
 
-       # Since the ObjC 2.0 Runtime is required, 32bit OS X isn't supported.
 
-       -destination "platform=OS X,arch=x86_64" # 64bit
 
-   )
 
-   header "Doing Xcode OS X build/tests - Debug"
 
-   "${XCODEBUILD_TEST_BASE_OSX[@]}" -configuration Debug test
 
-   header "Doing Xcode OS X build/tests - Release"
 
-   "${XCODEBUILD_TEST_BASE_OSX[@]}" -configuration Release test
 
- fi
 
 
  |