configurationengine/build-scripts/install_cone.py
author m2lahtel
Thu, 21 Oct 2010 16:36:53 +0300
changeset 5 d2c80f5cab53
parent 3 e7e0ae78773e
permissions -rw-r--r--
Updated to version 1.2.14
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     1
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     2
# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     3
# All rights reserved.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     4
# This component and the accompanying materials are made available
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     5
# under the terms of "Eclipse Public License v1.0"
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     6
# which accompanies this distribution, and is available
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     7
# at the URL "http://www.eclipse.org/legal/epl-v10.html".
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     8
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     9
# Initial Contributors:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    10
# Nokia Corporation - initial contribution.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    11
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    12
# Contributors:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    13
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    14
# Description: 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    15
#   Script for building and installing ConE into a specified directory.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    16
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    17
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    18
import sys, os, shutil, subprocess, optparse
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    19
import logging
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    20
log = logging.getLogger()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    21
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    22
import utils
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    23
utils.setup_logging('install_cone.log')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    24
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    25
ROOT_PATH = os.path.abspath(os.path.dirname(__file__))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    26
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    27
# The sub-directory of the main install directory where all required libraries
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    28
# etc. are installed
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    29
INSTALL_SUBDIR = 'configurationengine'
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    30
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    31
# The sub-directory for required libraries, platform-specific
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    32
if sys.platform == "win32":
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    33
    PLATFORM_SUBDIR = 'win'
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    34
else:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    35
    PLATFORM_SUBDIR = 'linux'
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    36
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    37
PYTHON_EXECUTABLE = 'python'
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    38
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    39
SOURCE_ROOT = os.path.abspath(os.path.join(ROOT_PATH, '../source'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    40
assert os.path.isdir(SOURCE_ROOT)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    41
SCRIPTS_SOURCE_ROOT = os.path.abspath(os.path.join(ROOT_PATH, '../source/scripts'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    42
assert os.path.isdir(SCRIPTS_SOURCE_ROOT)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    43
PLUGIN_SOURCE_ROOT = os.path.abspath(os.path.join(ROOT_PATH, '../source/plugins'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    44
assert os.path.isdir(PLUGIN_SOURCE_ROOT)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    45
TESTAUTOMATION_ROOT = os.path.abspath(os.path.join(SOURCE_ROOT, 'testautomation'))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    46
assert os.path.isdir(TESTAUTOMATION_ROOT)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    47
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    48
sys.path.insert(0, TESTAUTOMATION_ROOT)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    49
sys.path.append(PLUGIN_SOURCE_ROOT)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    50
from testautomation import plugin_utils
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    51
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    52
# Temporary directory where ConE eggs are built into
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    53
TEMP_CONE_EGG_DIR = os.path.join(ROOT_PATH, 'install-temp/cone-eggs')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    54
# Temporary directory where dependency lib eggs are copied
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    55
TEMP_LIB_EGG_DIR = os.path.join(ROOT_PATH, 'install-temp/dep-eggs')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    56
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    57
class BuildFailedError(RuntimeError):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    58
    pass
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    59
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    60
def find_cone_egg_sources(plugin_package):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    61
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    62
    Return a list of paths to the source directories to install.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    63
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    64
    paths = [SOURCE_ROOT,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    65
             SCRIPTS_SOURCE_ROOT]
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    66
    plugin_paths = plugin_utils.find_plugin_sources_by_package(PLUGIN_SOURCE_ROOT, plugin_package)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    67
    paths.extend(plugin_paths)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    68
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    69
    log.debug("ConE egg source paths:\n%s" % '\n'.join(paths))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    70
    return paths
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    71
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    72
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    73
def build_cone_eggs(source_paths, python_executable):
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    74
    log.info("Cleaning temporary ConE egg dir...")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    75
    utils.recreate_dir(TEMP_CONE_EGG_DIR)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    76
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    77
    log.info("Building ConE eggs...")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    78
    for source_path in source_paths:
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    79
        ok = utils.build_egg(source_path, TEMP_CONE_EGG_DIR, python_executable)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    80
        if not ok:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    81
            raise BuildFailedError()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    82
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    83
def retrieve_dep_eggs(plugin_package):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    84
    log.info("Cleaning temporary lib egg dir...")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    85
    utils.recreate_dir(TEMP_LIB_EGG_DIR)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    86
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    87
    log.info("Retrieving dependency eggs...")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    88
    def copy_eggs(source_dir):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    89
        log.debug("Copying eggs from '%s'..." % source_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    90
        for name in os.listdir(source_dir):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    91
            if name.endswith('.egg'):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    92
                if PLATFORM_SUBDIR == 'linux' and name.startswith('setuptools-0.6c11'):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    93
                    continue
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    94
                else:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    95
                    utils.copy_file(
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    96
                        source_path = os.path.join(source_dir, name),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    97
                        target_path = TEMP_LIB_EGG_DIR)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    98
   
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    99
    dep_dirs_by_package = [(None, os.path.join(ROOT_PATH, '../dep-eggs'))]
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   100
    dep_dirs_by_package.extend(plugin_utils.find_plugin_package_subpaths(PLUGIN_SOURCE_ROOT, 'dep-eggs', plugin_package))
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   101
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   102
    for package_name, dep_dir in dep_dirs_by_package:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   103
        copy_eggs(dep_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   104
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   105
def init_target_dir(target_dir, python_version):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   106
    BASE_DIR = os.path.normpath(os.path.join(target_dir, INSTALL_SUBDIR, PLATFORM_SUBDIR, python_version))
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   107
    LIB_DIR     = os.path.join(BASE_DIR, 'lib')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   108
    SCRIPT_DIR  = os.path.join(BASE_DIR, 'scripts')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   109
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   110
    utils.recreate_dir(BASE_DIR)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   111
    utils.recreate_dir(LIB_DIR)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   112
    utils.recreate_dir(SCRIPT_DIR)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   113
    return LIB_DIR, SCRIPT_DIR
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   114
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   115
def install_cone_eggs(target_dir, python_version):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   116
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   117
    Install ConE eggs into the given target directory.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   118
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   119
    log.info("Installing ConE eggs...")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   120
    LIB_DIR, SCRIPT_DIR = init_target_dir(target_dir, python_version)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   121
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   122
    # Collect the eggs to install
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   123
    eggs = ['setuptools'] # Setuptools are needed
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   124
        
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   125
    for name in os.listdir(TEMP_CONE_EGG_DIR):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   126
        if name.endswith('.egg'):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   127
            eggs.append(TEMP_CONE_EGG_DIR + '/' + name)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   128
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   129
    # Run easy_install to install the eggs
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   130
    for egg in eggs:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   131
        log.debug(egg)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   132
        
5
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   133
        command = ['easy_install-%s' % python_version,
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   134
                   '--find-links install-temp/dep-eggs',
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   135
                   '--install-dir "%s"' % LIB_DIR,
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   136
                   '--script-dir "%s"' % SCRIPT_DIR,
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   137
                   '--site-dirs "%s"' % LIB_DIR,
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   138
                   '--always-unzip']
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   139
        
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   140
        if PLATFORM_SUBDIR == 'win':
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   141
            # Use --always-copy on Windows to copy all needed libraries
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   142
            command.append('--always-copy')
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   143
        
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   144
        command.append('"' + egg + '"')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   145
        command = ' '.join(command)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   146
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   147
        log.debug(command)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   148
        ok = utils.run_command(command, env_overrides={'PYTHONPATH': LIB_DIR})
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   149
        if not ok:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   150
            raise BuildFailedError()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   151
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   152
def develop_install_cone_sources(source_paths, target_dir, python_version, python_executable):
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   153
    log.info("Installing ConE sources in develop mode...")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   154
    LIB_DIR, SCRIPT_DIR = init_target_dir(target_dir, python_version)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   155
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   156
    orig_workdir = os.getcwd()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   157
    try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   158
        for source_path in source_paths:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   159
            os.chdir(source_path)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   160
            command = ['%s setup.py develop' % python_executable,
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   161
                   '--find-links "%s"' % os.path.normpath(os.path.join(ROOT_PATH, 'install-temp/dep-eggs')),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   162
                   '--install-dir "%s"' % LIB_DIR,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   163
                   '--script-dir "%s"' % SCRIPT_DIR,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   164
                   '--site-dirs "%s"' % LIB_DIR,
5
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   165
                   ]
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   166
            command = ' '.join(command)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   167
            log.debug(command)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   168
            ok = utils.run_command(command, env_overrides={'PYTHONPATH': LIB_DIR})
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   169
            if not ok:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   170
                raise BuildFailedError()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   171
    finally:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   172
        os.chdir(orig_workdir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   173
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   174
def perform_build(target_dir, plugin_package, install_type, python_version, python_executable):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   175
    log.info("Target directory:  %s" % target_dir)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   176
    log.info("Plug-in package:   %r" % plugin_package)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   177
    log.info("Python version:    %s" % python_version)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   178
    log.info("Python executable: %s" % python_executable)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   179
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   180
    # Retrieve dependencies to the correct location
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   181
    retrieve_dep_eggs(plugin_package)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   182
    
5
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   183
    # Install the dependencies locally using either local copies or downloading from PyPi
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   184
    deps = ['Jinja2', 'lxml']
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   185
    for dep in deps:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   186
        command = ['easy_install-%s' % python_version,
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   187
                   '--find-links install-temp/dep-eggs']
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   188
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   189
        command.append(dep)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   190
        command = ' '.join(command)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   191
        log.debug(command)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   192
        ok = utils.run_command(command)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   193
        if not ok:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   194
            print "Warning: failed to run easy_install to install %s." % dep
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   195
        
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   196
        
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   197
    
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   198
    # Find paths to the sources to install
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   199
    source_paths = find_cone_egg_sources(plugin_package)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   200
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   201
    log.info("Creating install directory...")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   202
    if not os.path.exists(target_dir):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   203
        os.makedirs(target_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   204
    
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   205
    if install_type == 'build':
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   206
        build_cone_eggs(source_paths, python_executable)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   207
    if install_type == 'install':
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   208
        build_cone_eggs(source_paths, python_executable)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   209
        install_cone_eggs(target_dir, python_version)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   210
    else:
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   211
        develop_install_cone_sources(source_paths, target_dir, python_version, python_executable)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   212
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   213
    # Copy RELEASE.txt
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   214
    utils.copy_file(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   215
        source_path = os.path.join(SOURCE_ROOT, '..', 'RELEASE.TXT'),
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   216
        target_path = os.path.join(target_dir, INSTALL_SUBDIR, 'RELEASE.TXT'))
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   217
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   218
    # Copy cone.cmd or cone.sh, depending on the platform
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   219
    if sys.platform == "win32":
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   220
        sourcefile = targetfile = "cone.cmd"
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   221
    else:
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   222
        sourcefile = "cone.sh"
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   223
        targetfile = "cone"
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   224
    log.info("Copying %s" % sourcefile)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   225
    utils.copy_file(
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   226
        source_path = os.path.join(SOURCE_ROOT, sourcefile),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   227
        target_path = os.path.join(target_dir, targetfile))
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   228
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   229
def main():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   230
    parser = optparse.OptionParser()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   231
    parser.add_option("-t", "--target-dir",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   232
                      help="The directory where ConE is to be installed.")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   233
    parser.add_option("-p", "--plugin-package",\
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   234
                      help="The plug-in package to include in the installation.",\
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   235
                      default=None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   236
    parser.add_option("-i", "--install-type",\
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   237
                      help="The installation type, can be 'install' (the default) or 'develop'.",\
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   238
                      default='install')
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   239
    parser.add_option("--python-executable",\
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   240
                      help="The Python executable to run type, defaults to 'python'.",\
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   241
                      default='python')
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   242
    (options, args) = parser.parse_args()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   243
    if options.target_dir is None:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   244
        parser.error("Target directory must be given")
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   245
    if options.install_type not in ('install', 'build', 'develop'):
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   246
        parser.error("Invalid install type ('%s')" % options.install_type)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   247
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   248
    if not utils.run_command("%s --help" % options.python_executable):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   249
        log.critical("Could not run '%s'. Please make sure that you "\
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   250
                     "have Python installed and in your path." % options.python_executable)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   251
        return 1
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   252
    
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   253
    python_version = utils.get_python_version(options.python_executable)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   254
    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   255
    easy_install_cmd = "easy_install-%s" % python_version
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   256
    if not utils.run_command("%s --help" % easy_install_cmd):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   257
        log.critical("Could not run '%s'. Please make sure that you "\
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   258
                     "have setuptools installed and the Python scripts directory in your path."\
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   259
                     % easy_install_cmd)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   260
        return 1
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   261
    
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   262
    
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   263
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   264
    try:
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   265
        perform_build(options.target_dir, options.plugin_package, options.install_type, python_version, options.python_executable)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   266
    except BuildFailedError:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   267
        return 1
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   268
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   269
    return 0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   270
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   271
if __name__ == "__main__":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   272
    sys.exit(main())