@@ -106,6 +106,41 @@ def is_system_toolchain(tc_name):
106106 return tc_name in [DUMMY_TOOLCHAIN_NAME , SYSTEM_TOOLCHAIN_NAME ]
107107
108108
109+ def env_vars_external_module (name , version , metadata ):
110+ """
111+ Determine $EBROOT* and/or $EBVERSION* environment variables that can be set for external module,
112+ based on the provided name, version and metadata.
113+ """
114+ env_vars = {}
115+
116+ # define $EBROOT env var for install prefix, picked up by get_software_root
117+ prefix = metadata .get ('prefix' )
118+ if prefix is not None :
119+ # the prefix can be specified in a number of ways
120+ # * name of environment variable (+ optional relative path to combine it with; format: <name>/<relpath>
121+ # * filepath (assumed if environment variable is not defined)
122+ parts = prefix .split (os .path .sep )
123+ env_var = parts [0 ]
124+ if env_var in os .environ :
125+ prefix = os .environ [env_var ]
126+ rel_path = os .path .sep .join (parts [1 :])
127+ if rel_path :
128+ prefix = os .path .join (prefix , rel_path , '' )
129+
130+ _log .debug ("Derived prefix for software named %s from $%s (rel path: %s): %s" ,
131+ name , env_var , rel_path , prefix )
132+ else :
133+ _log .debug ("Using specified path as prefix for software named %s: %s" , name , prefix )
134+
135+ env_vars [get_software_root_env_var_name (name )] = prefix
136+
137+ # define $EBVERSION env var for software version, picked up by get_software_version
138+ if version is not None :
139+ env_vars [get_software_version_env_var_name (name )] = version
140+
141+ return env_vars
142+
143+
109144class Toolchain (object ):
110145 """General toolchain class"""
111146
@@ -512,30 +547,9 @@ def _simulated_load_dependency_module(self, name, version, metadata, verbose=Fal
512547
513548 self .log .debug ("Defining $EB* environment variables for software named %s" , name )
514549
515- # define $EBROOT env var for install prefix, picked up by get_software_root
516- prefix = metadata .get ('prefix' )
517- if prefix is not None :
518- # the prefix can be specified in a number of ways
519- # * name of environment variable (+ optional relative path to combine it with; format: <name>/<relpath>
520- # * filepath (assumed if environment variable is not defined)
521- parts = prefix .split (os .path .sep )
522- env_var = parts [0 ]
523- if env_var in os .environ :
524- prefix = os .environ [env_var ]
525- rel_path = os .path .sep .join (parts [1 :])
526- if rel_path :
527- prefix = os .path .join (prefix , rel_path , '' )
528-
529- self .log .debug ("Derived prefix for software named %s from $%s (rel path: %s): %s" ,
530- name , env_var , rel_path , prefix )
531- else :
532- self .log .debug ("Using specified path as prefix for software named %s: %s" , name , prefix )
533-
534- setvar (get_software_root_env_var_name (name ), prefix , verbose = verbose )
535-
536- # define $EBVERSION env var for software version, picked up by get_software_version
537- if version is not None :
538- setvar (get_software_version_env_var_name (name ), version , verbose = verbose )
550+ env_vars = env_vars_external_module (name , version , metadata )
551+ for key in env_vars :
552+ setvar (key , env_vars [key ], verbose = verbose )
539553
540554 def _load_toolchain_module (self , silent = False ):
541555 """Load toolchain module."""
0 commit comments