You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
3.5 KiB
94 lines
3.5 KiB
#!/bin/bash
|
|
# Copyright 2018 The Chromium Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
# This script does two checks on the state of the copied chromium directories:
|
|
# 1. Ensure all files present are in their appropriate BUILD.gn.
|
|
# 2. Ensure all .h files with a corresponding .cc file in chromium have their
|
|
# .cc copied here.
|
|
#
|
|
# This should be run with your working directory at the root of the chromium
|
|
# clone.
|
|
# Usage: clone_helper.sh <ninja build dir> <chromium src directory>
|
|
# [run existence check]
|
|
|
|
# Both of the loops below will insert any files they want to add to a BUILD.gn
|
|
# at the end of the first 'sources =' block in the file. It will insert it with
|
|
# only two spaces instead of four, so you can find files inserted by the script
|
|
# and adjust them as necessary.
|
|
function add_source_file() {
|
|
sed ":a;/sources = \[/bb;n;ba; :b;/^ \]/bc;n;bb; :c; s#^ \]# \"$1\",\n ]#; :d;n;bd" -i "$2"
|
|
}
|
|
|
|
ninja_dir=$1
|
|
chromium_dir=$2
|
|
|
|
# The following check can be skipped by not passing a path to gn to the script,
|
|
# since this operation is slow and can be considered more of a "clean up" than
|
|
# really iterative.
|
|
if [ $# -eq 3 ]; then
|
|
gn_path=$3
|
|
# Ensure all .h,.cc, and .c files under the directory xyz are in xyz/BUILD.gn.
|
|
# This helps ensure we don't have extra files laying around in directories
|
|
# that aren't tracked in the build files. Currently, base/ is an exception to
|
|
# this test because it is a submodule.
|
|
for d in build crypto net testing url; do
|
|
diff -u \
|
|
<(find $d -type f \
|
|
-name '*.h' -o -name '*.cc' -o -name '*.c' | sort | \
|
|
sed '/net\/third_party\/quic/d') \
|
|
<($gn_path desc $1 $d:\* sources | \
|
|
sed '/^\s*\/\//!d;s/^\s*\/\/third_party\/chromium_quic\/src\///' | \
|
|
sort)
|
|
done
|
|
exit
|
|
fi
|
|
|
|
# This loops tries to catch the simplest class of build errors: missing includes
|
|
# relative to the src directory and .cc files named identically to .h files.
|
|
# This will not catch things like:
|
|
# - Third-party dependencies which include things relative to their own source
|
|
# directory.
|
|
# - Platform-specific implementation files (e.g. xyz.h and xyz_posix.cc).
|
|
while :; do
|
|
# Ensure all .h files with a matching .cc in chromium are copied here and
|
|
# placed in xyz/BUILD.gn. This helps eliminate some obvious linking errors.
|
|
for f in $(find crypto net testing url -name '*.h'); do
|
|
cc_file=$(echo $f | cut -f1 -d.).cc
|
|
[ ! -e $cc_file ] || continue
|
|
[ -e $chromium_dir/$cc_file ] || continue
|
|
mkdir -p $(dirname $cc_file)
|
|
d=$(echo $f | cut -f1 -d/)
|
|
cp $chromium_dir/$cc_file $(dirname $cc_file)
|
|
if [ -e $cc_file ]; then
|
|
echo "$cc_file >> $d/BUILD.gn"
|
|
rel_file=$(echo $cc_file | cut -f2- -d/)
|
|
add_source_file "$rel_file" $d/BUILD.gn
|
|
fi
|
|
done
|
|
|
|
# Try to build what we have so far and fix any obvious include errors. If we
|
|
# were able to add an include to fix the error, we loop again to potentially
|
|
# add a new .cc file and try again.
|
|
output=$(ninja -C $ninja_dir)
|
|
if echo "$output" | grep -q "#include \""; then
|
|
f=$(echo "$output" | grep -m1 "#include" |\
|
|
sed 's/^.*#include "\([^"]\+\)".*$/\1/')
|
|
mkdir -p $(dirname $f)
|
|
echo $f
|
|
if cp $chromium_dir/$f $(dirname $f) || \
|
|
cp $chromium_dir/out/Default/gen/$f $(dirname $f); then
|
|
b=$(echo $f | cut -f1 -d/)/BUILD.gn
|
|
echo "$f >> $b"
|
|
add_source_file "$(echo $f | cut -f2- -d/)" $b
|
|
else
|
|
echo -e "$output"
|
|
break
|
|
fi
|
|
else
|
|
echo -e "$output"
|
|
break
|
|
fi
|
|
done
|