configurationengine/source/testautomation/testautomation/build_egg_info.py
author m2lahtel
Tue, 10 Aug 2010 14:29:28 +0300
changeset 3 e7e0ae78773e
permissions -rw-r--r--
ConE 1.2.11 release
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     1
#
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     2
# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     3
# All rights reserved.
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     4
# This component and the accompanying materials are made available
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     5
# under the terms of "Eclipse Public License v1.0"
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     6
# which accompanies this distribution, and is available
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     7
# at the URL "http://www.eclipse.org/legal/epl-v10.html".
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     8
#
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     9
# Initial Contributors:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    10
# Nokia Corporation - initial contribution.
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    11
#
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    12
# Contributors:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    13
#
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    14
# Description: 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    15
#
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    16
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    17
# Script for generating the egg-info directories for all needed plug-ins.
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    18
#
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    19
# This is needed, because running some of the tests from Eclipse or
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    20
# command line requires the egg-info dirs to be present for the plug-ins
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    21
# to be found.
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    22
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    23
import sys, os, subprocess, shutil
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    24
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    25
ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    26
DEBUG = False
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    27
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    28
def generate_egg_info(path):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    29
    """Generate egg-info for the given plug-in path if possible and necessary."""
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    30
    if not os.path.isdir(path) or "setup.py" not in os.listdir(path):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    31
        return
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    32
    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    33
    # Check if egg-info has already been generated
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    34
    for name in os.listdir(path):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    35
        egg_info_path = os.path.join(path, name)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    36
        if os.path.isdir(egg_info_path) and name.endswith('.egg-info'):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    37
            # xxx.egg-info is present in the directory, check if it is old
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    38
            setup_py_path = os.path.join(path, 'setup.py')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    39
            if os.stat(setup_py_path).st_mtime < os.stat(egg_info_path).st_mtime:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    40
                if DEBUG: print "No need to generate egg-info for '%s'" % path
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    41
                return
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    42
            else:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    43
                if DEBUG: print "egg-info for '%s' is out of date, removing old and generating new" % path
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    44
                shutil.rmtree(egg_info_path)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    45
    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    46
    # Run the egg-info generation command
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    47
    orig_workdir = os.getcwd()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    48
    try:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    49
        if DEBUG: print "Generating egg-info for '%s'..." % path
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    50
        os.chdir(path)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    51
        p = subprocess.Popen("python setup.py egg_info", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    52
        out, err = p.communicate()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    53
        if p.returncode != 0:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    54
            print >>sys.stderr, "Could not generate egg-info for '%s'!" % path
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    55
            print >>sys.stderr, "Command stdout output:"
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    56
            print >>sys.stderr, out
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    57
            print >>sys.stderr, "Command stderr output:"
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    58
            print >>sys.stderr, err
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    59
        else:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    60
            if DEBUG:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    61
                print "Done"
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    62
                print "Command output:"
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    63
                print out
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    64
    finally:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    65
        os.chdir(orig_workdir)