diff --git a/release-tools/create_installer.py b/release-tools/create_installer.py index 8b108634fd9d047040c0a67f1d50507704fb9587..e5af43f41cd3573a73330dac0ec4f8d806965b11 100644 --- a/release-tools/create_installer.py +++ b/release-tools/create_installer.py @@ -89,8 +89,10 @@ OFFLINE_MODE = False TESTCLIENT_MODE = False ARCHIVE_LOCATION_RESOLVER = None SDK_COMPONENT_LIST = [] +SDK_COMPONENT_LIST_SKIPPED = [] SDK_COMPONENT_IGNORE_LIST = [] USE_OLD_REPOGEN_SYNTAX = False +STRICT_MODE = True INSTALLER_NAMING_SCHEME_COMPILER = '' INSTALLER_NAMING_SCHEME_TARGET_ARCH = '' @@ -201,6 +203,7 @@ def parse_cmd_line(): global INSTALLER_NAMING_SCHEME_TARGET_ARCH global LICENSE_TYPE global CONFIGURATIONS_DIR + global STRICT_MODE MAIN_CONFIG_NAME = sys.argv[1] if(arg_count > 2): @@ -233,6 +236,11 @@ def parse_cmd_line(): values = argument.split('=') if values[1] != '': CONFIGURATIONS_DIR = values[1] + elif argument.find('strict_mode') >= 0: + values = item.split('=') + tmp = values[1] + if tmp == 'false' or tmp == 'no': + STRICT_MODE = False else: print '*** Unsupported argument given: ' + argument sys.exit(-1) @@ -648,6 +656,7 @@ def finalize_package_archives(sdk_component): def parse_component_data(configuration_file, configurations_base_path): """Parse SDK component data""" global SDK_COMPONENT_LIST + global SDK_COMPONENT_LIST_SKIPPED global SDK_COMPONENT_IGNORE_LIST print ' -> Reading target configuration file: ' + configuration_file configuration = ConfigParser.ConfigParser() @@ -665,7 +674,21 @@ def parse_component_data(configuration_file, configurations_base_path): if section.startswith(PACKAGE_NAMESPACE): if section not in SDK_COMPONENT_IGNORE_LIST: sdk_component = SdkComponent(section, configuration, PACKAGES_DIR_NAME_LIST, ARCHIVE_LOCATION_RESOLVER) - SDK_COMPONENT_LIST.append(sdk_component) + # if online installer, we are interested only about the root component! + if not OFFLINE_MODE and not sdk_component.is_root_component(): + continue + + # validate component + sdk_component.validate() + if sdk_component.is_valid(): + SDK_COMPONENT_LIST.append(sdk_component) + else: + if STRICT_MODE: + print sdk_component.error_msg() + sys.exit(-1) + else: + print '!!! Ignored component in non-strict mode (missing archive data or metadata?): ' + section + SDK_COMPONENT_LIST_SKIPPED.append(sdk_component) # check for extra configuration files if defined extra_conf_list = bldinstallercommon.safe_config_key_fetch(configuration, 'ExtraPackageConfigurationFiles', 'file_list') if extra_conf_list: @@ -959,6 +982,19 @@ def create_mac_disk_image(): bldinstallercommon.do_execute_sub_process(cmd_args, SCRIPT_ROOT_DIR, True) +def print_warnings(): + # check if any components were skipped + if SDK_COMPONENT_LIST_SKIPPED: + print '' + print 'Warning! The following components were not included in offline' + print ' installer or in online repository. The reason may be that' + print ' the script was run in non-strict mode and the packages' + print ' had incomplete metadata or the archive (.7z) was missing?' + print '' + for item in SDK_COMPONENT_LIST_SKIPPED: + print '*** ' + item.package_name + + ############################################################## # All main build steps ############################################################## @@ -994,6 +1030,8 @@ def create_installer(): # for mac we need some extra work if bldinstallercommon.is_mac_platform(): create_mac_disk_image() + # print warning messages if encountered any problems + print_warnings() ############################################################## diff --git a/release-tools/sdkcomponent.py b/release-tools/sdkcomponent.py index 0e6acbb017d0f8fca30b249faa90dccb0d597a37..faf9e3b33fa69b1208ff0d6209b871cb90322194 100644 --- a/release-tools/sdkcomponent.py +++ b/release-tools/sdkcomponent.py @@ -69,17 +69,16 @@ class SdkComponent: if self.archive_uri.startswith('http'): res = bldinstallercommon.is_content_url_valid(self.archive_uri) if not res: - print '*** Archive check fail! ***\n*** Unable to locate archive: ' + self.archive_uri - sys.exit(-1) + return '*** Archive check fail! ***\n*** Unable to locate archive: ' + self.archive_uri elif not os.path.isfile(self.archive_uri): - print '*** Archive check fail! ***\n*** Unable to locate archive: ' + self.archive_uri - sys.exit(-1) + return '*** Archive check fail! ***\n*** Unable to locate archive: ' + self.archive_uri def __init__(self, section_name, target_config, packages_full_path_list, archive_location_resolver): self.static_component = bldinstallercommon.safe_config_key_fetch(target_config, section_name, 'static_component') self.root_component = bldinstallercommon.safe_config_key_fetch(target_config, section_name, 'root_component') self.package_name = section_name + self.packages_full_path_list = packages_full_path_list self.archives = bldinstallercommon.safe_config_key_fetch(target_config, section_name, 'archives') self.archives = self.archives.replace(' ', '') self.archive_server_name = bldinstallercommon.safe_config_key_fetch(target_config, section_name, 'archive_server_name') @@ -92,10 +91,21 @@ class SdkComponent: self.sorting_priority = bldinstallercommon.safe_config_key_fetch(target_config, section_name, 'sorting_priority') self.downloadable_arch_list_qs = [] self.pkg_template_dir = '' + self.sanity_check_error_msg = '' + self.target_config = target_config + self.archive_location_resolver = archive_location_resolver + + + def is_root_component(self): + if self.root_component == 'yes' or self.root_component == 'true': + return True + return False + + def validate(self): # look up correct package template directory from list found = False - for item in packages_full_path_list: - template_full_path = os.path.normpath(item + os.sep + section_name) + for item in self.packages_full_path_list: + template_full_path = os.path.normpath(item + os.sep + self.package_name) if os.path.exists(template_full_path): if not (found): # take the first match @@ -108,37 +118,56 @@ class SdkComponent: print '*** Only one template for package should exist!' print '*** Fix your configuration! Abort!' sys.exit(-1) - self.parse_archives(target_config, archive_location_resolver) - self.check_component_data(target_config) + self.parse_archives(self.target_config, self.archive_location_resolver) + self.check_component_data(self.target_config) def check_component_data(self, target_config): if self.static_component: if not os.path.isfile(self.static_component): self.sanity_check_fail(self.package_name, 'Unable to locate given static package: ' + self.static_component) + return # no more checks needed for static component return if not self.package_name: self.sanity_check_fail(self.package_name, 'Undefined package name?') + return if self.archives and not self.target_install_base: self.sanity_check_fail(self.package_name, 'Undefined target_install_base?') + return if self.version and not self.version_tag: self.sanity_check_fail(self.package_name, 'Undefined version_tag?') + return if self.version_tag and not self.version: self.sanity_check_fail(self.package_name, 'Undefined version?') + return if self.package_default not in ['true', 'false', 'script']: self.package_default = 'false' # check that package template exists if not os.path.exists(self.pkg_template_dir): self.sanity_check_fail(self.package_name, 'Package template dir does not exist: ' + self.pkg_template_dir) + return # next check that archive locations exist for archive in self.downloadable_archive_list: - archive.check_archive_data() + error_msg = archive.check_archive_data() + if error_msg: + self.sanity_check_fail(self.package_name, error_msg) + return def sanity_check_fail(self, component_name, message): - print '\n*** Sanity check fail! ***\n*** Component: [' + component_name + ']\n*** ' + message - sys.exit(-1) + self.sanity_check_error_msg = '*** Sanity check fail! ***\n*** Component: [' + component_name + ']\n*** ' + message + + + def is_valid(self): + if self.sanity_check_error_msg: + return False + else: + return True + + + def error_msg(self): + return self.sanity_check_error_msg def parse_archives(self, target_config, archive_location_resolver):