xref: /aosp_15_r20/external/protobuf/update_file_lists.sh (revision 1b3f573f81763fcece89efc2b6a5209149e44ab8)
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