diff --git a/CMakeModules/Shaders.cmake b/CMakeModules/Shaders.cmake index f4566dd622..68036f9728 100644 --- a/CMakeModules/Shaders.cmake +++ b/CMakeModules/Shaders.cmake @@ -4,6 +4,19 @@ # number of input files list( LENGTH inputFiles shadersNumber ) +# check if GLSL source files were updated since the last time +set( update "FALSE" ) +foreach( inputFile ${inputFiles} ) + if( ${inputFile} IS_NEWER_THAN ${outputFile} ) + set( update "TRUE" ) + endif( ${inputFile} IS_NEWER_THAN ${outputFile} ) +endforeach( inputFile ${inputFiles} ) + +if( NOT update ) + message( "Headers are up-to-date" ) + return() +endif( NOT update ) + # write header file( WRITE ${outputFile} "// Do not edit this file, it is autogenerated by CMake. @@ -14,28 +27,27 @@ const unsigned int shaders_number = ${shadersNumber}; const char *shaders_src[] = {\n" ) foreach( inputFile ${inputFiles} ) - # put the input file name into the output file - file( APPEND ${outputFile} "\n// ${inputFile}" ) - - # process the input file - file( READ ${inputFile} contents ) - - # remove /* */ comments - string( REGEX REPLACE "/\\*.*\\*/" "" contents "${contents}" ) - # remove // comments - string( REGEX REPLACE "//[^\n]*" "" contents "${contents}" ) - # remove whitespaces at the beginning of each line - string( REGEX REPLACE "\n([\t ])*" "\n" contents "${contents}" ) - # remove unnecessary spaces - string( REGEX REPLACE " *([\\*/+&\\|,=<>\(\)]) *" "\\1" contents "${contents}" ) - # remove empty lines & wrap every line in "" and add '\n' at the end of each line - string( REGEX REPLACE "\n+" "\\\\n\"\n\"" contents "${contents}" ) - # remove unnecessary " & \n from the beginning and the end of contents - string( REGEX REPLACE "^\\\\n\"" "" contents "${contents}" ) - string( REGEX REPLACE "\"$" "," contents "${contents}" ) + # put the input file name into the output file + file( APPEND ${outputFile} "\n// ${inputFile}" ) - file( APPEND ${outputFile} "${contents}" ) + # process the input file + file( READ ${inputFile} contents ) + # remove /* */ comments + string( REGEX REPLACE "/\\*.*\\*/" "" contents "${contents}" ) + # remove // comments + string( REGEX REPLACE "//[^\n]*" "" contents "${contents}" ) + # remove whitespaces at the beginning of each line + string( REGEX REPLACE "\n([\t ])*" "\n" contents "${contents}" ) + # remove unnecessary spaces + string( REGEX REPLACE " *([\\*/+&\\|,=<>\(\)]) *" "\\1" contents "${contents}" ) + # remove empty lines & wrap every line in "" and add '\n' at the end of each line + string( REGEX REPLACE "\n+" "\\\\n\"\n\"" contents "${contents}" ) + # remove unnecessary " & \n from the beginning and the end of contents + string( REGEX REPLACE "^\\\\n\"" "" contents "${contents}" ) + string( REGEX REPLACE "\"$" "," contents "${contents}" ) + + file( APPEND ${outputFile} "${contents}" ) endforeach( inputFile ${inputFiles} ) # write footer