Revision: 3936
Author: janne.t.harkonen
Date: Thu Aug 26 05:53:45 2010
Log: Create manifest on fly, version tweaks, compile py->$py.class, cleanup
http://code.google.com/p/robotframework/source/detail?r=3936

Modified:
 /trunk/package.py

=======================================
--- /trunk/package.py   Wed Aug 25 00:41:43 2010
+++ /trunk/package.py   Thu Aug 26 05:53:45 2010
@@ -55,15 +55,16 @@
 import time
 import subprocess
 import zipfile
+from glob import glob


-ROOT_PATH = os.path.dirname(__file__)
+ROOT_PATH = os.path.abspath(os.path.dirname(__file__))
 DIST_PATH = os.path.join(ROOT_PATH, 'dist')
 BUILD_PATH = os.path.join(ROOT_PATH, 'build')
 ROBOT_PATH = os.path.join(ROOT_PATH, 'src', 'robot')
 JAVA_SRC_ROOT = os.path.join(ROOT_PATH, 'src', 'java')
 JAVA_PKG = ('org', 'robotframework')
-JYTHON_JAR = os.path.join(ROOT_PATH, 'ext-lib', 'jython.jar')
+JYTHON_JAR = glob(os.path.join(ROOT_PATH, 'ext-lib', 'jython-standalone-*.jar'))[0]
 SETUP_PATH = os.path.join(ROOT_PATH, 'setup.py')
 VERSION_PATH = os.path.join(ROBOT_PATH, 'version.py')
 VERSIONS = [re.compile('^2\.\d+(\.\d+)?$'), 'trunk', 'keep']
@@ -122,6 +123,8 @@
_update_version(version_number, '%d%02d%02d' % time.localtime()[:3])
     else:
_update_version(version_number, _verify_version(release_tag, RELEASES))
+    from version import get_version
+    return get_version(sep='-')

 def _verify_version(given, valid):
     for item in valid:
@@ -177,16 +180,9 @@
         print os.path.abspath(os.path.join(DIST_PATH, path))

 def jar(*version_info):
-    version(*version_info)
-    _check_jython()
-    _clean()
+    ver = version(*version_info)
     _compile_java_classes()
-    _create_jar_distribution()
-    _announce()
-
-def _check_jython():
-    if not os.path.isfile(JYTHON_JAR):
-        raise ValueError()
+    _create_jar_distribution(ver)

 def _compile_java_classes():
     source_path = os.path.join(JAVA_SRC_ROOT, *JAVA_PKG)
@@ -195,12 +191,14 @@
     print 'Compiling %d source files' % len(source_files)
     subprocess.call(['javac', '-cp', JYTHON_JAR]  + source_files)

-def _create_jar_distribution():
+def _create_jar_distribution(version):
     tmpdir = _create_tmpdir()
     _copy_files_to(tmpdir)
-    jar_path = _create_jar_file()
+    _create_manifest(tmpdir, version)
+    jar_path = _create_jar_file(version)
     _fill_jar(tmpdir, jar_path)
     shutil.rmtree(tmpdir)
+    print 'Created %s based on %s' % (jar_path, JYTHON_JAR)

 def _create_tmpdir():
     tmpdir = os.path.join(ROOT_PATH, 'tmp-jar-dir')
@@ -210,19 +208,30 @@
     return tmpdir

 def _copy_files_to(tmpdir):
-    for srcdir, todir in [ (ROBOT_PATH,
-                            os.path.join(tmpdir, 'Lib', 'robot')),
-                           (os.path.join(JAVA_SRC_ROOT, *JAVA_PKG),
-                            os.path.join(tmpdir, 'org', 'robotframework')),
-                           (os.path.join(JAVA_SRC_ROOT, 'META-INF'),
-                            os.path.join(tmpdir, 'META-INF')) ]:
-        shutil.copytree(srcdir, todir)
-
-def _create_jar_file():
-    from version import get_version
- jar_path = os.path.join(DIST_PATH, 'robot-%s.jar' % get_version(sep='-'))
+    for srcdir, todir in [(ROBOT_PATH,
+                           os.path.join(tmpdir, 'Lib', 'robot')),
+                          (os.path.join(JAVA_SRC_ROOT, *JAVA_PKG),
+                           os.path.join(tmpdir, 'org', 'robotframework'))]:
+        # pyc files must be excluded so that compileall works properly.
+ shutil.copytree(srcdir, todir, ignore=shutil.ignore_patterns('*.pyc*')) + subprocess.call(['java', '-jar', JYTHON_JAR, '-m', 'compileall', tmpdir])
+
+def _create_manifest(tmpdir, version):
+    mffile = os.path.join(tmpdir, 'META-INF', 'MANIFEST.MF')
+    os.mkdir(os.path.dirname(mffile))
+    open(mffile, 'w').write('''Manifest-Version: 1.0
+Main-Class: org.robotframework.RobotFramework
+Specification-Version: 2
+Implementation-Version: %s''' % version)
+
+def _create_jar_file(version):
+    jar_path = os.path.join(DIST_PATH, 'robotframework-%s.jar' % version)
     if not os.path.exists(DIST_PATH):
         os.mkdir(DIST_PATH)
+ for path in [os.path.join(DIST_PATH, name) for name in os.listdir(DIST_PATH)]:
+        if path.endswith('.jar'):
+            print 'removing old jarfile', path
+            os.remove(path)
     shutil.copyfile(JYTHON_JAR, jar_path)
     return jar_path

@@ -235,6 +244,8 @@
 def _copy_files_to_jar(tmpdir, dirname, jar):
     for root, _, files in os.walk(os.path.join(tmpdir, dirname)):
         for name in files:
+            if not name.endswith(('.class', '.MF')):
+                continue
             source = os.path.join(root, name)
             target = source.replace(tmpdir+os.sep, '')
             print 'Adding %s' % target

Reply via email to