From 26c6c2b01a7507038f051bcdde9fcb41c7cc4d1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Sun, 19 Mar 2017 14:26:27 +0100 Subject: [PATCH 1/2] Fix linking order for builtin freetype Before this change the libfreetype_builtin.a lib would be appended at the very end of the linking flags, after system libs such as -lX11 or -lkernel32. --- modules/freetype/SCsub | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/modules/freetype/SCsub b/modules/freetype/SCsub index e4dd1c36a05..5b1e1c189f9 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") From 6aee289b3efea1d4f44fbcaa7d97ce276d17214e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Sun, 19 Mar 2017 12:54:11 +0100 Subject: [PATCH 2/2] Travis: Run clang-format static check Commits or PRs that do not respect the clang-format style that we enforce will fail the test. Adding ubuntu-toolchain-r-test as its libstdc++ is necessary to install libllvm-3.9. --- .travis.yml | 14 ++++++++++++- misc/travis/clang-format.sh | 40 +++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100755 misc/travis/clang-format.sh diff --git a/.travis.yml b/.travis.yml index ca110a3073f..6be9f1f603a 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 00000000000..5ecc1b37d8e --- /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 '\n" +exit 1