# get KERNEL installation path
kernel_info = src.product.get_product_config(config, "KERNEL")
kernel_base_name=os.path.basename(kernel_info.install_dir)
- if kernel_base_name.startswith("config"):
- # case of kernel installed in base. We remove "config-i"
+ if kernel_info.install_mode == "base":
+ # case of kernel installed in base. the kernel install dir name is different in the archive
kernel_base_name=os.path.basename(os.path.dirname(kernel_info.install_dir))
kernel_root_dir = os.path.join(binaries_dir_name, kernel_base_name)
:return: the list of path of the produced environment files
:rtype: List
'''
+
+ # set base mode to "no" for the archive - save current mode to restore it at the end
+ if "base" in config.APPLICATION:
+ base_setting=config.APPLICATION.base
+ else:
+ base_setting="maybe"
+ config.APPLICATION.base="no"
+
# create an environment file writer
writer = src.environment.FileEnvWriter(config,
logger,
stat.S_IXGRP |
stat.S_IXOTH)
+ # restore modified setting by its initial value
+ config.APPLICATION.base=base_setting
+
return filepath
def produce_install_bin_file(config,
config.APPLICATION.properties.mesa_launcher_in_package == "yes") :
generate_mesa_launcher=True
+ # first loop on products : filter products, analyse properties,
+ # and store the information that will be used to create the archive in the second loop
for prod_name, prod_info in l_product_info:
# skip product with property not_in_package set to yes
if src.get_property_in_product_cfg(prod_info, "not_in_package") == "yes":
or not src.product.product_compiles(prod_info)):
continue
#
- # products with single_fir property will be installed in the PRODUCTS directory of the archive
+ # products with single_dir property will be installed in the PRODUCTS directory of the archive
is_single_dir=(src.appli_test_property(config,"single_install_dir", "yes") and \
src.product.product_test_property(prod_info,"single_install_dir", "yes"))
if src.product.check_installation(config, prod_info):
- l_install_dir.append((prod_name, prod_info.name, prod_info.install_dir, is_single_dir))
+ l_install_dir.append((prod_name, prod_info.name, prod_info.install_dir,
+ is_single_dir, prod_info.install_mode))
else:
l_not_installed.append(prod_name)
config.INTERNAL.config.install_dir,
name_cpp)
if os.path.exists(install_dir):
- l_install_dir.append((name_cpp, name_cpp, install_dir, False))
+ l_install_dir.append((name_cpp, name_cpp, install_dir, False, "value"))
else:
l_not_installed.append(name_cpp)
# construct the correlation table between the product names, there
# actual install directories and there install directory in archive
d_products = {}
- for prod_name, prod_info_name, install_dir, is_single_dir in l_install_dir:
+ for prod_name, prod_info_name, install_dir, is_single_dir, install_mode in l_install_dir:
prod_base_name=os.path.basename(install_dir)
- if prod_base_name.startswith("config"):
- # case of a products installed in base. Because the archive is in base:no mode,
- # we replace "config-i" by the product name or by PRODUCTS if single-dir
+ if install_mode == "base":
+ # case of a products installed in base.
+ # because the archive is in base:no mode, the name of the install dir is different inside archive
+ # we set it to the product name or by PRODUCTS if single-dir
if is_single_dir:
prod_base_name=config.INTERNAL.config.single_install_dir
else:
# message to the user in case of non existing path.)
prod_info.install_dir = version
prod_info.get_source = "fixed"
+ prod_info.install_mode = "fixed"
# Check if the product is defined as native in the application
if prod_info is not None:
prod_info.install_dir = prod_info.install_dir_save
# Set the install_dir key
- prod_info.install_dir = get_install_dir(config, version, prod_info)
+ prod_info.install_dir,prod_info.install_mode = get_install_dir(config, version, prod_info)
return prod_info
:param product_info Config: The configuration specific to
the product
- :return: The path of the product installation
- :rtype: str
+ :return: The path of the product installation and the mode of the install directory (base/implicit/fixed/value)
+ :rtype: str,str
"""
install_dir = ""
in_base = False
+
# prod_info.base : corresponds to what is specified in application pyconf (either from the global key base, or from a product dict)
# prod_info.install_dir : corresponds to what is specified in product pyconf (usually "base" for prerequisites)
if ( ("install_dir" in prod_info and prod_info.install_dir == "base") # product is declared as base in its own config
if in_base:
install_dir = get_base_install_dir(config, prod_info, version)
+ install_mode = "base"
else:
- if "install_dir" not in prod_info or prod_info.install_dir == "base":
+ if ("install_mode" in prod_info and prod_info.install_mode in ["implicit", "base"]) or\
+ ("install_dir" not in prod_info or prod_info.install_dir == "base"):
+ # the check to "base" comes from the package case were base mode is changed dynamically
+ # to create a package launcher.
+
# Set it to the default value (in application directory)
+ install_mode = "implicit"
if ( src.appli_test_property(config,"single_install_dir", "yes") and
src.product.product_test_property(prod_info,"single_install_dir", "yes")):
# when single_install_dir mode is activated in tha application
prod_info.name)
else:
install_dir = prod_info.install_dir
+ install_mode = "value"
- return install_dir
+ return install_dir,install_mode
def get_base_install_dir(config, prod_info, version):
"""Compute the installation directory of a product in base