barbieri pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=47920696342c62276c8159ebcc9d0381e2faee41
commit 47920696342c62276c8159ebcc9d0381e2faee41 Author: Gustavo Sverzut Barbieri <[email protected]> Date: Fri Jan 27 13:34:25 2017 -0200 cmake: fix make-clean as add_custom_command() deletes output files. there is no way to mark output file as "precious", then cmake's suggestion is to use add_custom_target() instead. However that will always execute, so our generator script needs to be smarter and only touch stuff when actually needed. --- src/lib/ector/CMakeLists.txt | 7 ++++--- src/lib/ector/gl/shader/gen_shaders.sh | 35 +++++++++++++++++++++++----------- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/src/lib/ector/CMakeLists.txt b/src/lib/ector/CMakeLists.txt index 71daae7..fa62634 100644 --- a/src/lib/ector/CMakeLists.txt +++ b/src/lib/ector/CMakeLists.txt @@ -105,8 +105,7 @@ set(SOURCES software/ector_software_surface.c ) -add_custom_command( - OUTPUT ${EFL_LIB_SOURCE_DIR}/gl/shader/ector_gl_shaders.x +add_custom_target(ector-update-shaders COMMAND /bin/sh ${EFL_LIB_SOURCE_DIR}/gl/shader/gen_shaders.sh DEPENDS ${EFL_LIB_SOURCE_DIR}/gl/shader/gen_shaders.sh @@ -114,5 +113,7 @@ add_custom_command( ${EFL_LIB_SOURCE_DIR}/gl/shader/vertex.glsl ${EFL_LIB_SOURCE_DIR}/gl/shader/include.glsl WORKING_DIRECTORY "${EFL_LIB_SOURCE_DIR}" - COMMENT "SHADERS ${EFL_LIB_SOURCE_DIR}/gl/shader/ector_gl_shaders.x" + COMMENT "SHADERS src/lib/ector/gl/shader/ector_gl_shaders.x (if needed)" ) + +set(DEPENDENCIES ector-update-shaders) diff --git a/src/lib/ector/gl/shader/gen_shaders.sh b/src/lib/ector/gl/shader/gen_shaders.sh index c0192c3..9656e67 100755 --- a/src/lib/ector/gl/shader/gen_shaders.sh +++ b/src/lib/ector/gl/shader/gen_shaders.sh @@ -10,30 +10,43 @@ OUTPUT="$DIR/ector_gl_shaders.x" if ! git rev-parse 2>> /dev/null >> /dev/null ; then exit 0 ; fi if git diff --quiet --exit-code -- "$DIR" then - touch "$OUTPUT" + for f in gen_shaders.sh fragment.glsl vertex.glsl include.glsl; do + if [ "$DIR/$f" -nt "$OUTPUT" ]; then + touch "$OUTPUT" + break + fi + done exit 0 fi -exec 1<&- -exec 1>"$OUTPUT" - # Write header -printf "/* DO NOT MODIFY THIS FILE AS IT IS AUTO-GENERATED */\n" -printf "/* IF IT IS CHANGED PLEASE COMMIT THE CHANGES */\n\n" +rm -f "$OUTPUT.tmp" +cat <<EOF >> $OUTPUT.tmp +/* DO NOT MODIFY THIS FILE AS IT IS AUTO-GENERATED */ +/* IF IT IS CHANGED PLEASE COMMIT THE CHANGES */ + +EOF for SHD in fragment vertex ; do m4 "$DIR/include.glsl" "$DIR/$SHD.glsl" > "$SHD.tmp" OIFS="$IFS" - IFS=`printf '\n+'` - IFS=${IFS%+} - printf "static const char "$SHD"_glsl[] =" + IFS=$'\n' + echo -n "static const char ${SHD}_glsl[] =" >> "$OUTPUT.tmp" for LINE in `cat "$SHD.tmp"` ; do - printf "\n \"$LINE\\\n\"" + printf "\n \"$LINE\\\n\"" >> "$OUTPUT.tmp" done - printf ";\n\n" + printf ";\n\n" >> "$OUTPUT.tmp" IFS="$OIFS" rm "$SHD.tmp" done +if ! cmp "$OUTPUT" "$OUTPUT.tmp" >/dev/null 2>/dev/null; then + echo "$OUTPUT updated, please 'git commit' it." + rm -f "$OUTPUT" + mv "$OUTPUT.tmp" "$OUTPUT" +else + rm -f "$OUTPUT.tmp" +fi + --
