From f0dba7f0a9e2830aa24c97d6b5b8428b00a21243 Mon Sep 17 00:00:00 2001 From: crouzet Date: Thu, 4 Mar 2021 14:50:50 +0100 Subject: [PATCH] =?utf8?q?sat=20#18868=20:=20compl=C3=A9ment=20pour=20pouv?= =?utf8?q?oir=20produite=20et=20utiliser=20des=20archives=20produites=20en?= =?utf8?q?=20mode=20base=20au=20format=20'module'?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- commands/package.py | 33 ++++++++++++++++++++++++--------- src/product.py | 19 ++++++++++++++----- 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/commands/package.py b/commands/package.py index 1e275cf..5cc26e6 100644 --- a/commands/package.py +++ b/commands/package.py @@ -235,8 +235,8 @@ def produce_relative_launcher(config, # 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) @@ -383,6 +383,14 @@ def produce_relative_env_files(config, :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, @@ -432,6 +440,9 @@ def produce_relative_env_files(config, 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, @@ -591,6 +602,8 @@ def binary_package(config, logger, options, tmp_working_dir): 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": @@ -611,11 +624,12 @@ def binary_package(config, logger, options, tmp_working_dir): 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) @@ -627,7 +641,7 @@ def binary_package(config, logger, options, tmp_working_dir): 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) @@ -690,11 +704,12 @@ WARNING: existing binaries directory from previous detar installation: # 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: diff --git a/src/product.py b/src/product.py index c5e956b..5bb0c16 100644 --- a/src/product.py +++ b/src/product.py @@ -204,6 +204,7 @@ def get_product_config(config, product_name, with_install_dir=True): # 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: @@ -367,7 +368,7 @@ Please provide a 'compil_script' key in its definition.""") % product_name 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 @@ -493,11 +494,12 @@ def get_install_dir(config, version, 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 @@ -511,9 +513,15 @@ def get_install_dir(config, version, prod_info): 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 @@ -537,8 +545,9 @@ def get_install_dir(config, version, prod_info): 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 -- 2.39.2