diff -r 000000000000 -r 2e8eeb919028 configurationengine/build-scripts/export_bat.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/configurationengine/build-scripts/export_bat.py Thu Mar 11 17:04:37 2010 +0200 @@ -0,0 +1,183 @@ +# +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# + +import sys, os, shutil, imp +import logging +from optparse import OptionParser + +log = logging.getLogger() + +ROOT_PATH = os.path.abspath(os.path.dirname(__file__)) +SOURCE_ROOT = os.path.normpath(os.path.join(ROOT_PATH, '../source')) +SCRIPTS_SOURCE_ROOT = os.path.normpath(os.path.join(SOURCE_ROOT, 'scripts')) +PLUGIN_SOURCE_ROOT = os.path.normpath(os.path.join(SOURCE_ROOT, 'plugins')) +TESTAUTOMATION_ROOT = os.path.normpath(os.path.join(SOURCE_ROOT, 'testautomation')) +assert os.path.exists(SOURCE_ROOT) +assert os.path.exists(SCRIPTS_SOURCE_ROOT) +assert os.path.exists(PLUGIN_SOURCE_ROOT) +assert os.path.exists(TESTAUTOMATION_ROOT) + +sys.path.append(PLUGIN_SOURCE_ROOT) +import plugin_utils + +sys.path.append(TESTAUTOMATION_ROOT) +import testautomation +from testautomation.copy_dir import copy_dir + +import utils +utils.setup_logging('export_bat.log') + + +def read_export_function_from_file(file_path): + if not os.path.exists(file_path): + return None + + m = imp.load_source( + file_path.replace('\\', '__') + .replace('/', '__') + .replace(':', '_') + .replace('.', '_') + .replace(' ', '_'), + file_path) + + try: + return m.export_standalone + except AttributeError: + return None + +def find_egg_file(dir, name, python_version): + """ + Returns the name of an egg file in the given directory that starts with the + given name and is for the given Python version. + + >>> find_egg_file('dep-eggs', 'simplejson', '2.5') + 'simplejson-2.0.9-py2.5-win32.egg' + >>> find_egg_file('dep-eggs', 'simplejson', '2.6') + 'simplejson-2.0.9-py2.6-win32.egg' + """ + for filename in os.listdir(dir): + if filename.startswith(name) and 'py' + python_version in filename: + return filename + return None + +def main(argv): + # ----------- + # Parse args + # ----------- + + parser = OptionParser() + parser.add_option("-t", "--target-dir", + help="The directory where the test are to be exported.") + parser.add_option("-p", "--plugin-package", + help="The plug-in package for exporting plug-in integration tests.", + default=None) + (options, args) = parser.parse_args() + if options.target_dir is None: + parser.error("Target directory must be given") + + PYTHON_VERSION = utils.get_python_version() + + TARGET_PATH = options.target_dir + PLUGIN_PACKAGE = options.plugin_package + log.info("Target directory: %s" % TARGET_PATH) + log.info("Plug-in package: %r" % PLUGIN_PACKAGE) + log.info("Python version: %s" % PYTHON_VERSION) + + log.info("Cleaning target directory...") + utils.recreate_dir(TARGET_PATH) + + + # ------------------------- + # Export script test files + # ------------------------- + + log.info("Copying script test files...") + SCRIPT_TESTS_DIR = os.path.join(SCRIPTS_SOURCE_ROOT, 'tests') + assert os.path.exists(SCRIPT_TESTS_DIR) + copy_dir(source_dir = SCRIPT_TESTS_DIR, + target_dir = os.path.join(TARGET_PATH, 'tests'), + dir_ignore_functions = [lambda d: d in ('.svn', 'temp', 'export_standalone')], + file_ignore_functions = [lambda f: f == 'cone.log' or f.endswith('.pyc')]) + + log.info("Copying script test overlay files...") + copy_dir(source_dir = os.path.join(ROOT_PATH, "export-bat/scripts-tests-overlay"), + target_dir = TARGET_PATH, + dir_ignore_functions = [lambda d: d == '.svn']) + + + + # -------------------------------------- + # Export plug-in integration test files + # -------------------------------------- + + log.info("Exporting plug-in integration test files...") + subpaths_by_package = plugin_utils.find_plugin_package_subpaths('integration-test', PLUGIN_PACKAGE) + for package_name, tests_path in subpaths_by_package: + log.debug(" Package: %s" % package_name) + log.debug(" Path: %s" % tests_path) + + log.debug(" Copying test files...") + target_path = os.path.join(TARGET_PATH, 'plugin-tests', package_name + '_tests') + copy_dir(source_dir = tests_path, + target_dir = target_path, + dir_ignore_functions = [lambda d: d in ('.svn', 'temp')], + file_ignore_functions = [lambda f: f in ('cone.log', 'export_standalone.py') or f.endswith('.pyc')]) + + log.debug(" Copying overlay files...") + overlay_path = os.path.join('export-bat/plugin-integration-test-overlay') + copy_dir(source_dir = overlay_path, + target_dir = target_path, + dir_ignore_functions = [lambda d: d == '.svn']) + + log.debug(" Exporting extra data...") + func = read_export_function_from_file(os.path.join(tests_path, 'export_standalone.py')) + if func: + log.debug(" Executing export function...") + func(target_path) + + + TARGET_EGGS_DIR = os.path.join(TARGET_PATH, 'eggs') + + # --------------------------- + # Copy needed dependency eggs + # --------------------------- + + log.info("Copying library eggs...") + DEP_EGGS_DIR = os.path.normpath(os.path.join(ROOT_PATH, '../dep-eggs')) + assert os.path.isdir(DEP_EGGS_DIR) + DEPENDENCIES = ['simplejson', 'Jinja2'] + for dep in DEPENDENCIES: + egg_file_name = find_egg_file(DEP_EGGS_DIR, dep, PYTHON_VERSION) + if egg_file_name is None: + log.critical("Could not find egg file for dependency '%s' from '%s'" % (dep, DEP_EGGS_DIR)) + return 1 + source_path = os.path.join(DEP_EGGS_DIR, egg_file_name) + target_path = os.path.join(TARGET_EGGS_DIR, egg_file_name) + utils.copy_file(source_path, target_path) + + + # ------------------ + # Build needed eggs + # ------------------ + + log.info("Building eggs...") + utils.build_egg(os.path.join(SOURCE_ROOT), TARGET_EGGS_DIR) + utils.build_egg(os.path.join(SOURCE_ROOT, 'testautomation'), TARGET_EGGS_DIR) + + return 0 + +if __name__ == "__main__": + sys.exit(main(sys.argv))