Header containing GLSL source code is generated only after change of any of shader source files.
This commit is contained in:
parent
618a5f0e75
commit
67c0cd2205
|
@ -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};
|
||||||
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
|
|
||||||
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}" )
|
# 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} )
|
endforeach( inputFile ${inputFiles} )
|
||||||
|
|
||||||
# write footer
|
# write footer
|
||||||
|
|
Loading…
Reference in New Issue