summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRĂ©mi Verschelde <rverschelde@gmail.com>2017-03-19 16:10:12 +0100
committerGitHub <noreply@github.com>2017-03-19 16:10:12 +0100
commit9061d6f8ce8c393653204b7565d7af3fe0c3c084 (patch)
treebe22de13672fd870a76a63fc1d5172716b0d2fcb
parent6e476f87330f58d900c2e2e8556fdfb1bde910ec (diff)
parent6aee289b3efea1d4f44fbcaa7d97ce276d17214e (diff)
Merge pull request #8076 from akien-mga/travis-clang-format
Travis: Add clang-format test to ensure code quality
-rw-r--r--.travis.yml14
-rwxr-xr-xmisc/travis/clang-format.sh40
-rw-r--r--modules/freetype/SCsub32
3 files changed, 67 insertions, 19 deletions
diff --git a/.travis.yml b/.travis.yml
index ca110a3073..6be9f1f603 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -18,6 +18,8 @@ env:
- GODOT_TARGET=windows
matrix:
+ include:
+ - env: STATIC_CHECKS=yes
exclude:
- os: linux
env: GODOT_TARGET=iphone
@@ -42,6 +44,9 @@ matrix:
addons:
apt:
+ sources:
+ - ubuntu-toolchain-r-test
+ - llvm-toolchain-trusty-3.9
packages:
- build-essential
- scons
@@ -65,6 +70,9 @@ addons:
- g++-mingw-w64-x86-64
- mingw-w64
+ # For style checks.
+ - clang-format-3.9
+
before_script:
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew update; brew install scons; fi
@@ -75,4 +83,8 @@ before_script:
fi
script:
- - scons platform=$GODOT_TARGET CXX=$CXX openssl=builtin
+ - if [ "$STATIC_CHECKS" = "yes" ]; then
+ sh ./misc/travis/clang-format.sh;
+ else
+ scons platform=$GODOT_TARGET CXX=$CXX openssl=builtin;
+ fi
diff --git a/misc/travis/clang-format.sh b/misc/travis/clang-format.sh
new file mode 100755
index 0000000000..5ecc1b37d8
--- /dev/null
+++ b/misc/travis/clang-format.sh
@@ -0,0 +1,40 @@
+#!/bin/sh
+
+CLANG_FORMAT=clang-format-3.9
+
+if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
+ # Check the whole commit range against $TRAVIS_BRANCH, the base merge branch
+ # We could use $TRAVIS_COMMIT_RANGE but it doesn't play well with force pushes
+ RANGE="$(git rev-parse $TRAVIS_BRANCH) HEAD"
+else
+ # Test only the last commit
+ RANGE=HEAD
+fi
+
+FILES=$(git diff-tree --no-commit-id --name-only -r $RANGE | grep -v thirdparty/ | grep -e "\.cpp$" -e "\.h$" -e "\.inc$")
+echo "Checking files:\n$FILES"
+
+# create a random filename to store our generated patch
+prefix="static-check-clang-format"
+suffix="$(date +%s)"
+patch="/tmp/$prefix-$suffix.patch"
+
+for file in $FILES; do
+ "$CLANG_FORMAT" -style=file "$file" | \
+ diff -u "$file" - | \
+ sed -e "1s|--- |--- a/|" -e "2s|+++ -|+++ b/$file|" >> "$patch"
+done
+
+# if no patch has been generated all is ok, clean up the file stub and exit
+if [ ! -s "$patch" ] ; then
+ printf "Files in this commit comply with the clang-format rules.\n"
+ rm -f "$patch"
+ exit 0
+fi
+
+# a patch has been created, notify the user and exit
+printf "\n*** The following differences were found between the code to commit "
+printf "and the clang-format rules:\n\n"
+cat "$patch"
+printf "\n*** Aborting, please fix your commit(s) with 'git commit --amend' or 'git rebase -i <hash>'\n"
+exit 1
diff --git a/modules/freetype/SCsub b/modules/freetype/SCsub
index e4dd1c36a0..5b1e1c189f 100644
--- a/modules/freetype/SCsub
+++ b/modules/freetype/SCsub
@@ -2,7 +2,7 @@
Import('env')
-# Not building in a separate env as core needs it
+# Not building in a separate env as scene needs it
# Thirdparty source files
if (env['builtin_freetype'] != 'no'):
@@ -64,24 +64,20 @@ if (env['builtin_freetype'] != 'no'):
if (env['builtin_libpng'] != 'no'):
env.Append(CPPPATH=["#thirdparty/libpng"])
- """ FIXME: Remove this commented code if Windows can handle the monolithic lib
- # fix for Windows' shell miserably failing on long lines, split in two libraries
- half1 = []
- half2 = []
- for x in thirdparty_sources:
- if (x.find("src/base") != -1 and x.find("src/sfnt") != -1):
- half1.append(x)
- else:
- half2.append(x)
-
- lib = env.Library("freetype_builtin1", half2)
- env.Append(LIBS = [lib])
- lib = env.Library("freetype_builtin2", half1)
- env.Append(LIBS = [lib])
- """
-
lib = env.Library("freetype_builtin", thirdparty_sources)
- env.Append(LIBS=[lib])
+ # Needs to be appended to arrive after libscene in the linker call,
+ # but we don't want it to arrive *after* system libs, so manual hack
+ # LIBS contains first SCons Library objects ("SCons.Node.FS.File object")
+ # and then plain strings for system library. We insert between the two.
+ inserted = False
+ print(env["LIBS"])
+ for idx, linklib in enumerate(env["LIBS"]):
+ if isinstance(linklib, basestring): # first system lib such as "X11", otherwise SCons lib object
+ env["LIBS"].insert(idx, lib)
+ inserted = True
+ break
+ if not inserted:
+ env.Append(LIBS=[lib])
# Godot source files
env.add_source_files(env.modules_sources, "*.cpp")