build/buildutils/generateOdcFile.py
branchRCL_3
changeset 14 04becd199f91
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/build/buildutils/generateOdcFile.py	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,110 @@
+#
+# 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: 
+#
+#! /usr/bin/python
+
+import sys
+import traceback
+import os
+
+
+
+def main():
+    tmpExtension = ".cpp"
+    try:
+        odcFileName  = sys.argv[1]
+        javaPeerDll  = sys.argv[2]
+        classesDir   = sys.argv[3]
+        sysPropsFile = sys.argv[4]
+
+        genOdcFile(odcFileName, 
+                   javaPeerDll,
+                   getClasses(classesDir),
+                   getProperties(sysPropsFile))
+
+    except:
+        print "Error during ODC generation!"
+        traceback.print_exc()
+        sys.exit(-1)
+
+def getProperties(sysPropsFile):
+
+    contents = []
+    try:
+        f = open(sysPropsFile, 'r')
+        contents = f.readlines()
+        f.close()
+    except IOError:
+        pass                           
+    return contents
+
+
+def getClasses(classesDir):
+    startDir = os.path.abspath(classesDir)
+
+    files = []
+    suffix = ".class"
+
+    def callBack(arg, dirname, files):
+        # Remove startDir-part from dirname
+        dirname = dirname[len(startDir) + 1:]
+        for file in files:
+            if file.endswith(suffix):
+                # replace '\' with '/' and strip the class name.
+                res = os.path.join(dirname, file).replace("\\","/").rsplit("/",1)[0]
+                arg.append(res)
+            
+    os.path.walk(startDir, callBack, files)
+    
+    return files
+
+def genOdcFile( odcFileName,
+                javaPeerDll, 
+                classes, 
+                properties = []):
+
+    # If a list of classes was given instead of packages, strip class names and
+    # remove duplicates
+    classes = list(set([c for c in classes]))
+
+    lines = [    
+        "[container]",
+        "name=" + javaPeerDll,
+        "type=JXESL",
+        "",
+        "[packages]"]
+    lines.extend([p.replace(".", "/") for p in sorted(classes)])    
+    lines.append("")
+    lines.append("[properties]")
+    
+    # Append system properties, but only if there are classes
+    # (classes may be missing if component sources has been excluded
+    # from release, which means that properties should not be written
+    # either)
+    if classes:
+        for property in properties:
+            property = property.strip()
+            if not property:
+                continue
+            lines.append("-D" + property)
+    lines.append("")
+
+    f = open(odcFileName, 'w')
+    f.write("\n".join(lines))
+    f.close()
+
+        
+if __name__ == "__main__":
+    main()