@ -85,12 +85,10 @@ function(ly_get_gem_load_dependencies ly_GEM_LOAD_DEPENDENCIES ly_TARGET)
set ( ${ ly_GEM_LOAD_DEPENDENCIES } ${ all_gem_load_dependencies } PARENT_SCOPE )
endfunction ( )
# ! l y _ g e t _ g e m _ m o d u l e _ r o o t s : U s e s t h e s u p p l i e d g e m _ t a r g e t t o l o o k u p t h e n e a r e s t g e m . j s o n f i l e a b o v e t h e S O U R C E _ D I R
# I f a g e m . j s o n f i l e i s f o u n d i t i s a d d e d a s g e m m o d u l e r o o t a n d t h e n q u e r i e d f o r a d d i t i o n a l g e m m o d u l e r o o t
# b y l o o k i n g u p t h e " g e m _ m o d u l e _ r o o t " k e y
# ! l y _ g e t _ g e m _ m o d u l e _ r o o t : U s e s t h e s u p p l i e d g e m _ t a r g e t t o l o o k u p t h e n e a r e s t g e m . j s o n f i l e a b o v e t h e S O U R C E _ D I R
#
# \ a r g : gem_target ( TARGET ) - T a r g e t t o l o o k u p w a r d s f r o m u s i n g i t s S O U R C E _ D I R p r o p e r t y
function ( ly_get_gem_module_root s output_gem_module_root s gem_target )
function ( ly_get_gem_module_root output_gem_module_root gem_target )
unset ( gem_module_roots )
get_property ( gem_source_dir TARGET ${ gem_target } PROPERTY SOURCE_DIR )
@ -109,76 +107,13 @@ function(ly_get_gem_module_roots output_gem_module_roots gem_target)
if ( EXISTS ${ candidate_gem_dir } /gem.json )
set ( gem_source_dir ${ candidate_gem_dir } )
file ( READ ${ gem_source_dir } /gem.json gem_json_data )
string ( JSON module_root_count ERROR_VARIABLE gem_json_error LENGTH ${ gem_json_data } gem_module_roots )
if ( module_root_count GREATER 0 )
math ( EXPR module_root_range "${module_root_count}-1" )
# C o n v e r t t h e p a t h s t h e r e l a t i v e p a t h s t o a b s o l u t e p a t h s u s i n g t h e e n g i n e r o o t
# a s t h e b a s e d i r e c t o r y
foreach ( module_root_index RANGE ${ module_root_range } )
string ( JSON module_root ERROR_VARIABLE gem_json_error GET ${ gem_json_data } gem_module_roots ${ module_root_index } )
file ( REAL_PATH ${ module_root } gem_absolute_module_root BASE_DIRECTORY ${ gem_source_dir } )
list ( APPEND gem_module_roots ${ gem_absolute_module_root } )
endforeach ( )
endif ( )
endif ( )
# Pr e p e n d t h e r e l a t i v e p a t h f r o m t h e E n g i n e R o o t t o t h e g e m _ m o d u l e _ r o o t s l i s t
list ( PREPEND gem_module_roots ${ gem_source_dir } )
set ( ${ output_gem_module_root s} ${ gem_module_roots } PARENT_SCOPE )
# S e t t h e g e m m o d u l e r o o t o u t p u t d i r e c t o r y t o t h e l o c a t i o n w i t h t h e g e m . j s o n f i l e w i t h i n i t o r
# t h e s u p p l i e d g e m _ t a r g e t S O U R C E _ D I R l o c a t i o n i f n o g e m . j s o n f i l e w a s f o u n d
set ( ${ output_gem_module_root } ${ gem_source_dir } PARENT_SCOPE )
endfunction ( )
# ! l y _ f i n d _ b e s t _ g e m _ m o d u l e _ r o o t s : A t t e m p t s t o f i n d t h e g e m m o d u l e r o o t w h i c h i s t h e c l o s e s t a n c e s t o r d i r e c t o r y
# t o t h e g e m _ t a r g e t u s i n g t h e s u p p l i e d g e m _ m o d u l e _ r o o t s
# I f a g e m . j s o n f i l e i s f o u n d i t i s a d d e d a s g e m m o d u l e r o o t a n d t h e n q u e r i e d f o r a d d i t i o n a l g e m m o d u l e r o o t
# b y l o o k i n g u p t h e " g e m _ m o d u l e _ r o o t " k e y
# \ a r g : gem_target ( TARGET ) - T a r g e t t o w h o s e S O U R C E _ D I R p r o p e r t y i s c o m p a r e d a g a i n s t t h e m o d u l e r o o t s
# \ a r g : gem_module_roots ( list:PATH ) - l i s t o f a b s o l u t e g e m m o d u l e r o o t s t o s e a r c h f o r n e a r e s t a n c e s t o r
function ( ly_find_best_gem_module_root output_module_root gem_target gem_module_roots )
get_property ( module_root_cached DIRECTORY PROPERTY gem_module_root_ ${ gem_target } SET )
if ( module_root_cached )
get_property ( module_root_prop DIRECTORY PROPERTY gem_module_root_ ${ gem_target } )
set ( ${ output_module_root } ${ module_root_prop } PARENT_SCOPE )
return ( )
endif ( )
# A n o p t i m i z a t i o n f o r t h e c a s e w h e r e t h e r e i s o n l y o n e g e m _ m o d u l e _ r o o t s . T h e o u t p u t _ m o d u l e _ r o o t i s s e t t o t h a t
list ( LENGTH gem_module_roots gem_module_roots_count )
if ( gem_module_roots_count EQUAL 1 )
list ( GET gem_module_roots 0 best_module_root )
set_property ( DIRECTORY PROPERTY gem_module_root_ ${ gem_target } ${ best_module_root } )
set ( ${ output_module_root } ${ best_module_root } PARENT_SCOPE )
return ( )
endif ( )
get_property ( gem_source_dir TARGET ${ gem_target } PROPERTY SOURCE_DIR )
# s h o r t e s t _ p r e f i x i s u s e d t o s t o r e t h e s h o r t e s t p r e f i x f r o m a g e m m o d u l e r o o t t o t h e g e m s o u r c e d i r
# I n i t i a l i z e d t o 1 0 0 0 0 t o m a k e s u r e i t i s l a r g e r t h a n a n y f i l e p a t h l e n g t h
set ( shortest_prefix "10000" )
unset ( best_module_root )
foreach ( gem_module_root ${ gem_module_roots } )
file ( RELATIVE_PATH relative_to_module_root ${ gem_module_root } ${ gem_source_dir } )
# i f t h e g e m S O U R C E _ D I R i s n o t r e l a t i v e t o t h e m o d u l e r o o t t h e n c o n t i n u e
if ( relative_to_module_root MATCHES [[^\.\./]] OR IS_ABSOLUTE ${ relative_to_module_root } )
continue ( )
endif ( )
# U p d a t e t h e s h o r t e s t p r e f i x
string ( LENGTH "${relative_to_module_root}" module_to_source_dir_length )
if ( module_to_source_dir_length LESS shortest_prefix )
set ( best_module_root ${ gem_module_root } )
set ( shortest_prefix "${module_to_source_dir_length}" )
endif ( )
endforeach ( )
# A s s i g n t h e b e s t _ m o d u l e _ r o o t p a t h t o t h e o u t p u t v a r i a b l e a n d s t o r e d i t i n a D I R E C T O R Y p r o p e r t y f o r c a c h i n g
if ( best_module_root )
set_property ( DIRECTORY PROPERTY gem_module_root_ ${ gem_target } ${ best_module_root } )
set ( ${ output_module_root } ${ best_module_root } PARENT_SCOPE )
endif ( )
endfunction ( )
# ! l y _ d e l a y e d _ g e n e r a t e _ s e t t i n g s _ r e g i s t r y : G e n e r a t e s a . s e t r e g f i l e f o r e a c h t a r g e t w i t h d e p e n d e n c i e s
# a d d e d t o i t v i a l y _ a d d _ t a r g e t _ d e p e n d e n c i e s
@ -219,9 +154,8 @@ function(ly_delayed_generate_settings_registry)
message ( FATAL_ERROR "Dependency ${gem_target} from ${target} does not exist" )
endif ( )
ly_get_gem_module_roots ( gem_module_roots ${ gem_target } )
ly_find_best_gem_module_root ( best_gem_module_root "${gem_target}" "${gem_module_roots}" )
file ( RELATIVE_PATH gem_module_root_relative_to_engine_root ${ LY_ROOT_FOLDER } ${ best_gem_module_root } )
ly_get_gem_module_root ( gem_module_root ${ gem_target } )
file ( RELATIVE_PATH gem_module_root_relative_to_engine_root ${ LY_ROOT_FOLDER } ${ gem_module_root } )
# S t r i p t a r g e t n a m e s p a c e f r o m g e m t a r g e t s b e f o r e c o n f i g u r i n g t h e m i n t o t h e j s o n t e m p l a t e
ly_strip_target_namespace ( TARGET ${ gem_target } OUTPUT_VARIABLE stripped_gem_target )