@ -491,7 +491,11 @@ function(yaml_save)
@@ -491,7 +491,11 @@ function(yaml_save)
zephyr_get_scoped ( genex ${ ARG_YAML_NAME } GENEX )
zephyr_get_scoped ( json_content ${ ARG_YAML_NAME } JSON )
to_yaml ( "${json_content}" 0 yaml_out ${ genex } )
if ( genex )
to_yaml ( "${json_content}" 0 yaml_out DIRECT_GENEX )
else ( )
to_yaml ( "${json_content}" 0 yaml_out DIRECT )
endif ( )
if ( EXISTS ${ yaml_file } )
FILE ( RENAME ${ yaml_file } ${ yaml_file } .bak )
@ -529,20 +533,42 @@ function(yaml_save)
@@ -529,20 +533,42 @@ function(yaml_save)
cmake_path ( SET yaml_path "${yaml_file}" )
cmake_path ( GET yaml_path STEM yaml_file_no_ext )
set ( expanded_file ${ yaml_file_no_ext } _ ${ genex_save_count } .json )
set ( expanded_file ${ yaml_file_no_ext } _ ${ genex_save_count } .yaml )
set_property ( TARGET ${ save_target } PROPERTY expanded_file ${ expanded_file } )
# c o m m e n t t h i s t o k e e p t h e t e m p o r a r y f i l e s
set_property ( TARGET ${ save_target } APPEND PROPERTY temp_files ${ expanded_file } )
FILE ( GENERATE OUTPUT ${ expanded_file }
C O N T E N T " $ { j s o n _ c o n t e n t } "
)
to_yaml ( "${json_content}" 0 yaml_out TEMP_GENEX )
FILE ( GENERATE OUTPUT ${ expanded_file } CONTENT "${yaml_out}" )
endif ( )
endfunction ( )
function ( to_yaml in_json level yaml genex )
function ( to_yaml in_json level yaml mode )
zephyr_string ( ESCAPE json "${in_json}" )
if ( mode STREQUAL "DIRECT" )
# D i r e c t o u t p u t m o d e , n o g e n e x e s : w r i t e a s t a n d a r d Y A M L
set ( expand_lists TRUE )
set ( escape_quotes TRUE )
set ( comment_genexes FALSE )
elseif ( mode STREQUAL "DIRECT_GENEX" OR mode STREQUAL "FINAL_GENEX" )
# D i r e c t o u t p u t m o d e w i t h g e n e x e s e n a b l e d , o r f i n a l w r i t e o f p o s t - p r o c e s s e d
# f i l e : w r i t e a s t a n d a r d Y A M L , c o m m e n t e n t r i e s w i t h g e n e x e s i f t h e y a r e
# ( s t i l l ) p r e s e n t i n t h e f i l e
set ( expand_lists TRUE )
set ( escape_quotes TRUE )
set ( comment_genexes TRUE )
elseif ( mode STREQUAL "TEMP_GENEX" )
# T e m p o r a r y o u t p u t m o d e f o r g e n e x e x p a n s i o n : s a v e s i n g l e q u o t e s w i t h n o
# s p e c i a l p r o c e s s i n g , s i n c e t h e y w i l l b e f i x e d u p b y y a m l - f i l t e r . c m a k e
set ( expand_lists FALSE )
set ( escape_quotes FALSE )
set ( comment_genexes FALSE )
else ( )
message ( FATAL_ERROR "to_yaml(... ${mode} ) is malformed." )
endif ( )
if ( level GREATER 0 )
math ( EXPR level_dec "${level} - 1" )
set ( indent_ ${ level } "${indent_${level_dec}} " )
@ -564,7 +590,7 @@ function(to_yaml in_json level yaml genex)
@@ -564,7 +590,7 @@ function(to_yaml in_json level yaml genex)
# J S O N o b j e c t - > Y A M L d i c t i o n a r y
set ( ${ yaml } "${${yaml}}${indent_${level}}${member}:\n" )
math ( EXPR sublevel "${level} + 1" )
to_yaml ( "${subjson}" ${ sublevel } ${ yaml } ${ genex } )
to_yaml ( "${subjson}" ${ sublevel } ${ yaml } ${ mode } )
elseif ( type STREQUAL ARRAY )
# J S O N a r r a y - > Y A M L l i s t
set ( ${ yaml } "${${yaml}}${indent_${level}}${member}:" )
@ -581,13 +607,15 @@ function(to_yaml in_json level yaml genex)
@@ -581,13 +607,15 @@ function(to_yaml in_json level yaml genex)
string ( JSON length ERROR_VARIABLE ignore LENGTH "${item}" )
if ( length )
set ( non_indent_yaml )
to_yaml ( "${item}" 0 non_indent_yaml FALSE )
to_yaml ( "${item}" 0 non_indent_yaml ${ mode } )
string ( REGEX REPLACE "\n$" "" non_indent_yaml "${non_indent_yaml}" )
string ( REPLACE "\n" "\n${indent_${level}} " indent_yaml "${non_indent_yaml}" )
set ( ${ yaml } "${${yaml}}${indent_${level}} - ${indent_yaml}\n" )
else ( )
# A s s u m e a s t r i n g , e s c a p e s i n g l e q u o t e s .
string ( REPLACE "'" "''" item "${item}" )
# A s s u m e a s t r i n g , e s c a p e s i n g l e q u o t e s w h e n required ( see comment below ) .
if ( escape_quotes )
string ( REPLACE "'" "''" item "${item}" )
endif ( )
set ( ${ yaml } "${${yaml}}${indent_${level}} - '${item}'\n" )
endif ( )
endforeach ( )
@ -597,13 +625,17 @@ function(to_yaml in_json level yaml genex)
@@ -597,13 +625,17 @@ function(to_yaml in_json level yaml genex)
# - w i t h u n e x p a n d e d g e n e r a t o r e x p r e s s i o n s : s a v e a s Y A M L c o m m e n t
# - i f i t m a t c h e s t h e s p e c i a l p r e f i x : c o n v e r t t o Y A M L l i s t
# - o t h e r w i s e : s a v e a s Y A M L s c a l a r
# S i n g l e q u o t e s m u s t b e e s c a p e d i n t h e v a l u e .
string ( REPLACE "'" "''" subjson "${subjson}" )
if ( subjson MATCHES "\\$<.*>" AND ${ genex } )
# S i n g l e q u o t e s m u s t b e e s c a p e d i n t h e v a l u e _ u n l e s s _ t h i s w i l l b e u s e d
# t o e x p a n d g e n e r a t o r e x p r e s s i o n s , b e c a u s e t h e n t h e e s c a p i n g w i l l b e
# a d d r e s s e d o n c e i n t h e y a m l - f i l t e r . c m a k e s c r i p t .
if ( escape_quotes )
string ( REPLACE "'" "''" subjson "${subjson}" )
endif ( )
if ( subjson MATCHES "\\$<.*>" AND comment_genexes )
# Y e t u n e x p a n d e d g e n e r a t o r e x p r e s s i o n : s a v e a s c o m m e n t
string ( SUBSTRING ${ indent_${level } } 1 -1 short_indent )
set ( ${ yaml } "${${yaml}}#${short_indent}${member}: '${subjson}'\n" )
elseif ( subjson MATCHES "^@YAML-LIST@" )
elseif ( subjson MATCHES "^@YAML-LIST@" AND expand_lists )
# L i s t - a s - s t r i n g : c o n v e r t t o l i s t
set ( ${ yaml } "${${yaml}}${indent_${level}}${member}:" )
list ( POP_FRONT subjson )