Commit 67c0cd22 authored by Maciej Suminski's avatar Maciej Suminski

Header containing GLSL source code is generated only after change of any of shader source files.

parent 618a5f0e
...@@ -4,6 +4,19 @@ ...@@ -4,6 +4,19 @@
# number of input files # number of input files
list( LENGTH inputFiles shadersNumber ) 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 # write header
file( WRITE ${outputFile} "// Do not edit this file, it is autogenerated by CMake. file( WRITE ${outputFile} "// Do not edit this file, it is autogenerated by CMake.
...@@ -14,28 +27,27 @@ const unsigned int shaders_number = ${shadersNumber}; ...@@ -14,28 +27,27 @@ const unsigned int shaders_number = ${shadersNumber};
const char *shaders_src[] = {\n" ) const char *shaders_src[] = {\n" )
foreach( inputFile ${inputFiles} ) foreach( inputFile ${inputFiles} )
# put the input file name into the output file # put the input file name into the output file
file( APPEND ${outputFile} "\n// ${inputFile}" ) file( APPEND ${outputFile} "\n// ${inputFile}" )
# process the input file # process the input file
file( READ ${inputFile} contents ) file( READ ${inputFile} contents )
# remove /* */ comments # remove /* */ comments
string( REGEX REPLACE "/\\*.*\\*/" "" contents "${contents}" ) string( REGEX REPLACE "/\\*.*\\*/" "" contents "${contents}" )
# remove // comments # remove // comments
string( REGEX REPLACE "//[^\n]*" "" contents "${contents}" ) string( REGEX REPLACE "//[^\n]*" "" contents "${contents}" )
# remove whitespaces at the beginning of each line # remove whitespaces at the beginning of each line
string( REGEX REPLACE "\n([\t ])*" "\n" contents "${contents}" ) string( REGEX REPLACE "\n([\t ])*" "\n" contents "${contents}" )
# remove unnecessary spaces # remove unnecessary spaces
string( REGEX REPLACE " *([\\*/+&\\|,=<>\(\)]) *" "\\1" contents "${contents}" ) string( REGEX REPLACE " *([\\*/+&\\|,=<>\(\)]) *" "\\1" contents "${contents}" )
# remove empty lines & wrap every line in "" and add '\n' at the end of each line # remove empty lines & wrap every line in "" and add '\n' at the end of each line
string( REGEX REPLACE "\n+" "\\\\n\"\n\"" contents "${contents}" ) string( REGEX REPLACE "\n+" "\\\\n\"\n\"" contents "${contents}" )
# remove unnecessary " & \n from the beginning and the end of contents # remove unnecessary " & \n from the beginning and the end of contents
string( REGEX REPLACE "^\\\\n\"" "" contents "${contents}" ) string( REGEX REPLACE "^\\\\n\"" "" contents "${contents}" )
string( REGEX REPLACE "\"$" "," contents "${contents}" ) string( REGEX REPLACE "\"$" "," contents "${contents}" )
file( APPEND ${outputFile} "${contents}" ) file( APPEND ${outputFile} "${contents}" )
endforeach( inputFile ${inputFiles} ) endforeach( inputFile ${inputFiles} )
# write footer # write footer
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment