• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/bin/bash
2
3if [ $# -ne 2 ]; then
4  cat <<EOF
5Usage: $0 <TARGET> <VERSION_NUMBER>
6
7TARGET: protoc | protoc-gen-javalite
8
9Example:
10  $ $0 protoc 3.0.0
11  $ $0 protoc-gen-javalite 3.0.0
12
13This script will create .zip packages suitable to be included in the github
14release page. It requires all protoc executables to be present in the
15protoc-artifacts/ directory. If the target is protoc, well-known type .proto
16files will also be included. Each invocation will create 8 zip packages:
17  dist/<TARGET>-<VERSION_NUMBER>-win32.zip
18  dist/<TARGET>-<VERSION_NUMBER>-win64.zip
19  dist/<TARGET>-<VERSION_NUMBER>-osx-x86_64.zip
20  dist/<TARGET>-<VERSION_NUMBER>-linux-x86_32.zip
21  dist/<TARGET>-<VERSION_NUMBER>-linux-x86_64.zip
22  dist/<TARGET>-<VERSION_NUMBER>-linux-aarch_64.zip
23  dist/<TARGET>-<VERSION_NUMBER>-linux-ppcle_64.zip
24  dist/<TARGET>-<VERSION_NUMBER>-linux-s390_64.zip
25EOF
26  exit 1
27fi
28
29TARGET=$1
30VERSION_NUMBER=$2
31
32# <zip file name> <binary file name> pairs.
33declare -a FILE_NAMES=( \
34  win32.zip windows-x86_32.exe \
35  win64.zip windows-x86_64.exe \
36  osx-x86_64.zip osx-x86_64.exe \
37  linux-x86_32.zip linux-x86_32.exe \
38  linux-x86_64.zip linux-x86_64.exe \
39  linux-aarch_64.zip linux-aarch_64.exe \
40  linux-ppcle_64.zip linux-ppcle_64.exe \
41  linux-s390_64.zip linux-s390_64.exe \
42)
43
44# List of all well-known types to be included.
45declare -a WELL_KNOWN_TYPES=(           \
46  google/protobuf/descriptor.proto      \
47  google/protobuf/any.proto             \
48  google/protobuf/api.proto             \
49  google/protobuf/duration.proto        \
50  google/protobuf/empty.proto           \
51  google/protobuf/field_mask.proto      \
52  google/protobuf/source_context.proto  \
53  google/protobuf/struct.proto          \
54  google/protobuf/timestamp.proto       \
55  google/protobuf/type.proto            \
56  google/protobuf/wrappers.proto        \
57  google/protobuf/compiler/plugin.proto \
58)
59
60set -e
61
62# A temporary working directory to put all files.
63DIR=$(mktemp -d)
64
65# Copy over well-known types.
66mkdir -p ${DIR}/include/google/protobuf/compiler
67for PROTO in ${WELL_KNOWN_TYPES[@]}; do
68  cp -f ../src/${PROTO} ${DIR}/include/${PROTO}
69done
70
71# Create a readme file.
72cat <<EOF > ${DIR}/readme.txt
73Protocol Buffers - Google's data interchange format
74Copyright 2008 Google Inc.
75https://developers.google.com/protocol-buffers/
76
77This package contains a precompiled binary version of the protocol buffer
78compiler (protoc). This binary is intended for users who want to use Protocol
79Buffers in languages other than C++ but do not want to compile protoc
80themselves. To install, simply place this binary somewhere in your PATH.
81
82If you intend to use the included well known types then don't forget to
83copy the contents of the 'include' directory somewhere as well, for example
84into '/usr/local/include/'.
85
86Please refer to our official github site for more installation instructions:
87  https://github.com/protocolbuffers/protobuf
88EOF
89
90mkdir -p dist
91mkdir -p ${DIR}/bin
92# Create a zip file for each binary.
93for((i=0;i<${#FILE_NAMES[@]};i+=2));do
94  ZIP_NAME=${FILE_NAMES[$i]}
95  if [ ${ZIP_NAME:0:3} = "win" ]; then
96    BINARY="$TARGET.exe"
97  else
98    BINARY="$TARGET"
99  fi
100  BINARY_NAME=${FILE_NAMES[$(($i+1))]}
101  cp $BINARY_NAME ${DIR}/bin/$BINARY
102  TARGET_ZIP_FILE=`pwd`/dist/$TARGET-${VERSION_NUMBER}-${ZIP_NAME}
103  pushd $DIR &> /dev/null
104  chmod +x bin/$BINARY
105  if [ "$TARGET" = "protoc" ]; then
106    zip -r ${TARGET_ZIP_FILE} include bin readme.txt &> /dev/null
107  else
108    zip -r ${TARGET_ZIP_FILE} bin &> /dev/null
109  fi
110  rm  bin/$BINARY
111  popd &> /dev/null
112  echo "[INFO] Successfully created ${TARGET_ZIP_FILE}"
113done
114