1*1b3f573fSAndroid Build Coastguard Worker#!/bin/bash -u 2*1b3f573fSAndroid Build Coastguard Worker 3*1b3f573fSAndroid Build Coastguard Worker# This script copies source file lists from src/Makefile.am to cmake files. 4*1b3f573fSAndroid Build Coastguard Worker 5*1b3f573fSAndroid Build Coastguard Workerget_variable_value() { 6*1b3f573fSAndroid Build Coastguard Worker local FILENAME=$1 7*1b3f573fSAndroid Build Coastguard Worker local VARNAME=$2 8*1b3f573fSAndroid Build Coastguard Worker awk " 9*1b3f573fSAndroid Build Coastguard Worker BEGIN { start = 0; } 10*1b3f573fSAndroid Build Coastguard Worker /^$VARNAME =/ { start = 1; } 11*1b3f573fSAndroid Build Coastguard Worker { if (start) { print \$0; } } 12*1b3f573fSAndroid Build Coastguard Worker /\\\\\$/ { next; } 13*1b3f573fSAndroid Build Coastguard Worker { start = 0; } 14*1b3f573fSAndroid Build Coastguard Worker " $FILENAME \ 15*1b3f573fSAndroid Build Coastguard Worker | sed "s/^$VARNAME =//" \ 16*1b3f573fSAndroid Build Coastguard Worker | sed "s/[ \\]//g" \ 17*1b3f573fSAndroid Build Coastguard Worker | grep -v "^\\$" \ 18*1b3f573fSAndroid Build Coastguard Worker | grep -v "^$" \ 19*1b3f573fSAndroid Build Coastguard Worker | LC_ALL=C sort | uniq 20*1b3f573fSAndroid Build Coastguard Worker} 21*1b3f573fSAndroid Build Coastguard Worker 22*1b3f573fSAndroid Build Coastguard Workerget_header_files() { 23*1b3f573fSAndroid Build Coastguard Worker get_variable_value $@ | grep '\.h$' 24*1b3f573fSAndroid Build Coastguard Worker} 25*1b3f573fSAndroid Build Coastguard Worker 26*1b3f573fSAndroid Build Coastguard Workerget_source_files() { 27*1b3f573fSAndroid Build Coastguard Worker get_variable_value $@ | grep "cc$\|inc$" 28*1b3f573fSAndroid Build Coastguard Worker} 29*1b3f573fSAndroid Build Coastguard Worker 30*1b3f573fSAndroid Build Coastguard Workerget_proto_files() { 31*1b3f573fSAndroid Build Coastguard Worker get_variable_value $@ | grep "pb.cc$" | sed "s/pb.cc/proto/" 32*1b3f573fSAndroid Build Coastguard Worker} 33*1b3f573fSAndroid Build Coastguard Worker 34*1b3f573fSAndroid Build Coastguard Workersort_files() { 35*1b3f573fSAndroid Build Coastguard Worker for FILE in $@; do 36*1b3f573fSAndroid Build Coastguard Worker echo $FILE 37*1b3f573fSAndroid Build Coastguard Worker done | LC_ALL=C sort | uniq 38*1b3f573fSAndroid Build Coastguard Worker} 39*1b3f573fSAndroid Build Coastguard Worker 40*1b3f573fSAndroid Build Coastguard WorkerMAKEFILE=src/Makefile.am 41*1b3f573fSAndroid Build Coastguard Worker 42*1b3f573fSAndroid Build Coastguard Worker[ -f "$MAKEFILE" ] || { 43*1b3f573fSAndroid Build Coastguard Worker echo "Cannot find: $MAKEFILE" 44*1b3f573fSAndroid Build Coastguard Worker exit 1 45*1b3f573fSAndroid Build Coastguard Worker} 46*1b3f573fSAndroid Build Coastguard Worker 47*1b3f573fSAndroid Build Coastguard Worker# Extract file lists from src/Makefile.am 48*1b3f573fSAndroid Build Coastguard WorkerGZHEADERS=$(get_variable_value $MAKEFILE GZHEADERS) 49*1b3f573fSAndroid Build Coastguard WorkerLIBPROTOBUF_HEADERS=$(get_variable_value $MAKEFILE nobase_include_HEADERS | grep -v /compiler/) 50*1b3f573fSAndroid Build Coastguard WorkerLIBPROTOBUF_HEADERS=$(sort_files $GZHEADERS $LIBPROTOBUF_HEADERS) 51*1b3f573fSAndroid Build Coastguard WorkerLIBPROTOBUF_LITE_SOURCES=$(get_source_files $MAKEFILE libprotobuf_lite_la_SOURCES) 52*1b3f573fSAndroid Build Coastguard WorkerLIBPROTOBUF_SOURCES=$(get_source_files $MAKEFILE libprotobuf_la_SOURCES) 53*1b3f573fSAndroid Build Coastguard WorkerLIBPROTOC_SOURCES=$(get_source_files $MAKEFILE libprotoc_la_SOURCES) 54*1b3f573fSAndroid Build Coastguard WorkerLIBPROTOC_HEADERS=$(get_variable_value $MAKEFILE nobase_include_HEADERS | grep /compiler/) 55*1b3f573fSAndroid Build Coastguard WorkerLITE_PROTOS=$(get_proto_files $MAKEFILE protoc_lite_outputs) 56*1b3f573fSAndroid Build Coastguard WorkerPROTOS=$(get_proto_files $MAKEFILE protoc_outputs) 57*1b3f573fSAndroid Build Coastguard WorkerWKT_PROTOS=$(get_variable_value $MAKEFILE nobase_dist_proto_DATA) 58*1b3f573fSAndroid Build Coastguard WorkerCOMMON_TEST_SOURCES=$(get_source_files $MAKEFILE COMMON_TEST_SOURCES) 59*1b3f573fSAndroid Build Coastguard WorkerCOMMON_LITE_TEST_SOURCES=$(get_source_files $MAKEFILE COMMON_LITE_TEST_SOURCES) 60*1b3f573fSAndroid Build Coastguard WorkerTEST_SOURCES=$(get_source_files $MAKEFILE protobuf_test_SOURCES) 61*1b3f573fSAndroid Build Coastguard WorkerNON_MSVC_TEST_SOURCES=$(get_source_files $MAKEFILE NON_MSVC_TEST_SOURCES) 62*1b3f573fSAndroid Build Coastguard WorkerLITE_TEST_SOURCES=$(get_source_files $MAKEFILE protobuf_lite_test_SOURCES) 63*1b3f573fSAndroid Build Coastguard WorkerLITE_ARENA_TEST_SOURCES=$(get_source_files $MAKEFILE protobuf_lite_arena_test_SOURCES) 64*1b3f573fSAndroid Build Coastguard WorkerTEST_PLUGIN_SOURCES=$(get_source_files $MAKEFILE test_plugin_SOURCES) 65*1b3f573fSAndroid Build Coastguard Worker 66*1b3f573fSAndroid Build Coastguard Worker################################################################################ 67*1b3f573fSAndroid Build Coastguard Worker# Update cmake files. 68*1b3f573fSAndroid Build Coastguard Worker################################################################################ 69*1b3f573fSAndroid Build Coastguard Worker 70*1b3f573fSAndroid Build Coastguard WorkerCMAKE_DIR=cmake 71*1b3f573fSAndroid Build Coastguard WorkerEXTRACT_INCLUDES_BAT=cmake/extract_includes.bat.in 72*1b3f573fSAndroid Build Coastguard Worker[ -d "$CMAKE_DIR" ] || { 73*1b3f573fSAndroid Build Coastguard Worker echo "Cannot find: $CMAKE_DIR" 74*1b3f573fSAndroid Build Coastguard Worker exit 1 75*1b3f573fSAndroid Build Coastguard Worker} 76*1b3f573fSAndroid Build Coastguard Worker 77*1b3f573fSAndroid Build Coastguard Worker[ -f "$EXTRACT_INCLUDES_BAT" ] || { 78*1b3f573fSAndroid Build Coastguard Worker echo "Cannot find: $EXTRACT_INCLUDES_BAT" 79*1b3f573fSAndroid Build Coastguard Worker exit 1 80*1b3f573fSAndroid Build Coastguard Worker} 81*1b3f573fSAndroid Build Coastguard Worker 82*1b3f573fSAndroid Build Coastguard Workerset_cmake_value() { 83*1b3f573fSAndroid Build Coastguard Worker local FILENAME=$1 84*1b3f573fSAndroid Build Coastguard Worker local VARNAME=$2 85*1b3f573fSAndroid Build Coastguard Worker local PREFIX=$3 86*1b3f573fSAndroid Build Coastguard Worker shift 87*1b3f573fSAndroid Build Coastguard Worker shift 88*1b3f573fSAndroid Build Coastguard Worker shift 89*1b3f573fSAndroid Build Coastguard Worker awk -v values="$*" -v prefix="$PREFIX" " 90*1b3f573fSAndroid Build Coastguard Worker BEGIN { start = 0; } 91*1b3f573fSAndroid Build Coastguard Worker /^set\\($VARNAME/ { 92*1b3f573fSAndroid Build Coastguard Worker start = 1; 93*1b3f573fSAndroid Build Coastguard Worker print \$0; 94*1b3f573fSAndroid Build Coastguard Worker len = split(values, vlist, \" \"); 95*1b3f573fSAndroid Build Coastguard Worker for (i = 1; i <= len; ++i) { 96*1b3f573fSAndroid Build Coastguard Worker printf(\" \"); 97*1b3f573fSAndroid Build Coastguard Worker if (vlist[i] !~ /^\\\$/) { 98*1b3f573fSAndroid Build Coastguard Worker printf(\"%s\", prefix); 99*1b3f573fSAndroid Build Coastguard Worker } 100*1b3f573fSAndroid Build Coastguard Worker printf(\"%s\\n\", vlist[i]); 101*1b3f573fSAndroid Build Coastguard Worker } 102*1b3f573fSAndroid Build Coastguard Worker next; 103*1b3f573fSAndroid Build Coastguard Worker } 104*1b3f573fSAndroid Build Coastguard Worker start && /^\\)/ { 105*1b3f573fSAndroid Build Coastguard Worker start = 0; 106*1b3f573fSAndroid Build Coastguard Worker } 107*1b3f573fSAndroid Build Coastguard Worker !start { 108*1b3f573fSAndroid Build Coastguard Worker print \$0; 109*1b3f573fSAndroid Build Coastguard Worker } 110*1b3f573fSAndroid Build Coastguard Worker " $FILENAME > /tmp/$$ 111*1b3f573fSAndroid Build Coastguard Worker cp /tmp/$$ $FILENAME 112*1b3f573fSAndroid Build Coastguard Worker} 113*1b3f573fSAndroid Build Coastguard Worker 114*1b3f573fSAndroid Build Coastguard Worker 115*1b3f573fSAndroid Build Coastguard Worker# Replace file lists in cmake files. 116*1b3f573fSAndroid Build Coastguard WorkerCMAKE_PREFIX="\${protobuf_SOURCE_DIR}/src/" 117*1b3f573fSAndroid Build Coastguard Workerset_cmake_value $CMAKE_DIR/libprotobuf-lite.cmake libprotobuf_lite_files $CMAKE_PREFIX $LIBPROTOBUF_LITE_SOURCES 118*1b3f573fSAndroid Build Coastguard Workerset_cmake_value $CMAKE_DIR/libprotobuf.cmake libprotobuf_files $CMAKE_PREFIX $LIBPROTOBUF_SOURCES 119*1b3f573fSAndroid Build Coastguard Workerset_cmake_value $CMAKE_DIR/libprotoc.cmake libprotoc_files $CMAKE_PREFIX $LIBPROTOC_SOURCES 120*1b3f573fSAndroid Build Coastguard Workerset_cmake_value $CMAKE_DIR/libprotoc.cmake libprotoc_headers $CMAKE_PREFIX $LIBPROTOC_HEADERS 121*1b3f573fSAndroid Build Coastguard Workerset_cmake_value $CMAKE_DIR/tests.cmake lite_test_protos "" $LITE_PROTOS 122*1b3f573fSAndroid Build Coastguard Workerset_cmake_value $CMAKE_DIR/tests.cmake tests_protos "" $PROTOS 123*1b3f573fSAndroid Build Coastguard Workerset_cmake_value $CMAKE_DIR/tests.cmake common_test_files $CMAKE_PREFIX '${common_lite_test_files}' $COMMON_TEST_SOURCES 124*1b3f573fSAndroid Build Coastguard Workerset_cmake_value $CMAKE_DIR/tests.cmake common_lite_test_files $CMAKE_PREFIX $COMMON_LITE_TEST_SOURCES 125*1b3f573fSAndroid Build Coastguard Workerset_cmake_value $CMAKE_DIR/tests.cmake tests_files $CMAKE_PREFIX $TEST_SOURCES 126*1b3f573fSAndroid Build Coastguard Workerset_cmake_value $CMAKE_DIR/tests.cmake non_msvc_tests_files $CMAKE_PREFIX $NON_MSVC_TEST_SOURCES 127*1b3f573fSAndroid Build Coastguard Workerset_cmake_value $CMAKE_DIR/tests.cmake lite_test_files $CMAKE_PREFIX $LITE_TEST_SOURCES 128*1b3f573fSAndroid Build Coastguard Workerset_cmake_value $CMAKE_DIR/tests.cmake lite_arena_test_files $CMAKE_PREFIX $LITE_ARENA_TEST_SOURCES 129*1b3f573fSAndroid Build Coastguard Worker 130*1b3f573fSAndroid Build Coastguard Worker# Generate extract_includes.bat 131*1b3f573fSAndroid Build Coastguard Workerecho "mkdir include" > $EXTRACT_INCLUDES_BAT 132*1b3f573fSAndroid Build Coastguard Workerfor INCLUDE in $LIBPROTOBUF_HEADERS $LIBPROTOC_HEADERS $WKT_PROTOS; do 133*1b3f573fSAndroid Build Coastguard Worker INCLUDE_DIR=$(dirname "$INCLUDE") 134*1b3f573fSAndroid Build Coastguard Worker while [ ! "$INCLUDE_DIR" = "." ]; do 135*1b3f573fSAndroid Build Coastguard Worker echo "mkdir include\\${INCLUDE_DIR//\//\\}" 136*1b3f573fSAndroid Build Coastguard Worker INCLUDE_DIR=$(dirname "$INCLUDE_DIR") 137*1b3f573fSAndroid Build Coastguard Worker done 138*1b3f573fSAndroid Build Coastguard Workerdone | sort | uniq >> $EXTRACT_INCLUDES_BAT 139*1b3f573fSAndroid Build Coastguard Workerfor INCLUDE in $(sort_files $LIBPROTOBUF_HEADERS $LIBPROTOC_HEADERS) $WKT_PROTOS; do 140*1b3f573fSAndroid Build Coastguard Worker WINPATH=${INCLUDE//\//\\} 141*1b3f573fSAndroid Build Coastguard Worker echo "copy \"\${PROTOBUF_SOURCE_WIN32_PATH}\\..\\src\\$WINPATH\" include\\$WINPATH" >> $EXTRACT_INCLUDES_BAT 142*1b3f573fSAndroid Build Coastguard Workerdone 143*1b3f573fSAndroid Build Coastguard Worker 144*1b3f573fSAndroid Build Coastguard Worker################################################################################ 145*1b3f573fSAndroid Build Coastguard Worker# Update bazel BUILD files. 146*1b3f573fSAndroid Build Coastguard Worker################################################################################ 147*1b3f573fSAndroid Build Coastguard Worker 148*1b3f573fSAndroid Build Coastguard Workerset_bazel_value() { 149*1b3f573fSAndroid Build Coastguard Worker local FILENAME=$1 150*1b3f573fSAndroid Build Coastguard Worker local VARNAME=$2 151*1b3f573fSAndroid Build Coastguard Worker local PREFIX=$3 152*1b3f573fSAndroid Build Coastguard Worker shift 153*1b3f573fSAndroid Build Coastguard Worker shift 154*1b3f573fSAndroid Build Coastguard Worker shift 155*1b3f573fSAndroid Build Coastguard Worker awk -v values="$*" -v prefix="$PREFIX" " 156*1b3f573fSAndroid Build Coastguard Worker BEGIN { start = 0; } 157*1b3f573fSAndroid Build Coastguard Worker /# AUTOGEN\\($VARNAME\\)/ { 158*1b3f573fSAndroid Build Coastguard Worker start = 1; 159*1b3f573fSAndroid Build Coastguard Worker print \$0; 160*1b3f573fSAndroid Build Coastguard Worker # replace \$0 with indent. 161*1b3f573fSAndroid Build Coastguard Worker sub(/#.*/, \"\", \$0) 162*1b3f573fSAndroid Build Coastguard Worker len = split(values, vlist, \" \"); 163*1b3f573fSAndroid Build Coastguard Worker for (i = 1; i <= len; ++i) { 164*1b3f573fSAndroid Build Coastguard Worker printf(\"%s\\\"%s%s\\\",\n\", \$0, prefix, vlist[i]); 165*1b3f573fSAndroid Build Coastguard Worker } 166*1b3f573fSAndroid Build Coastguard Worker next; 167*1b3f573fSAndroid Build Coastguard Worker } 168*1b3f573fSAndroid Build Coastguard Worker start && /\]/ { 169*1b3f573fSAndroid Build Coastguard Worker start = 0 170*1b3f573fSAndroid Build Coastguard Worker } 171*1b3f573fSAndroid Build Coastguard Worker !start { 172*1b3f573fSAndroid Build Coastguard Worker print \$0; 173*1b3f573fSAndroid Build Coastguard Worker } 174*1b3f573fSAndroid Build Coastguard Worker " $FILENAME > /tmp/$$ 175*1b3f573fSAndroid Build Coastguard Worker cp /tmp/$$ $FILENAME 176*1b3f573fSAndroid Build Coastguard Worker} 177*1b3f573fSAndroid Build Coastguard Worker 178*1b3f573fSAndroid Build Coastguard Worker 179*1b3f573fSAndroid Build Coastguard WorkerBAZEL_BUILD=./BUILD 180*1b3f573fSAndroid Build Coastguard WorkerBAZEL_PREFIX="src/" 181*1b3f573fSAndroid Build Coastguard Workerif [ -f "$BAZEL_BUILD" ]; then 182*1b3f573fSAndroid Build Coastguard Worker set_bazel_value $BAZEL_BUILD protobuf_lite_srcs $BAZEL_PREFIX $LIBPROTOBUF_LITE_SOURCES 183*1b3f573fSAndroid Build Coastguard Worker set_bazel_value $BAZEL_BUILD protobuf_srcs $BAZEL_PREFIX $LIBPROTOBUF_SOURCES 184*1b3f573fSAndroid Build Coastguard Worker set_bazel_value $BAZEL_BUILD protoc_lib_srcs $BAZEL_PREFIX $LIBPROTOC_SOURCES 185*1b3f573fSAndroid Build Coastguard Worker set_bazel_value $BAZEL_BUILD lite_test_protos "" $LITE_PROTOS 186*1b3f573fSAndroid Build Coastguard Worker set_bazel_value $BAZEL_BUILD well_known_protos "" $WKT_PROTOS 187*1b3f573fSAndroid Build Coastguard Worker set_bazel_value $BAZEL_BUILD test_protos "" $PROTOS 188*1b3f573fSAndroid Build Coastguard Worker set_bazel_value $BAZEL_BUILD common_test_srcs $BAZEL_PREFIX $COMMON_LITE_TEST_SOURCES $COMMON_TEST_SOURCES 189*1b3f573fSAndroid Build Coastguard Worker set_bazel_value $BAZEL_BUILD test_srcs $BAZEL_PREFIX $TEST_SOURCES 190*1b3f573fSAndroid Build Coastguard Worker set_bazel_value $BAZEL_BUILD non_msvc_test_srcs $BAZEL_PREFIX $NON_MSVC_TEST_SOURCES 191*1b3f573fSAndroid Build Coastguard Worker set_bazel_value $BAZEL_BUILD test_plugin_srcs $BAZEL_PREFIX $TEST_PLUGIN_SOURCES 192*1b3f573fSAndroid Build Coastguard Workerelse 193*1b3f573fSAndroid Build Coastguard Worker echo "Skipped BUILD file update." 194*1b3f573fSAndroid Build Coastguard Workerfi 195*1b3f573fSAndroid Build Coastguard Worker 196