--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/buildutils/javacpp.py Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,217 @@
+#
+# 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
+import os.path
+import sys
+import subprocess
+import shutil
+import re
+import types
+import zipfile
+
+from os.path import abspath
+
+"""
+#ifdef __JAVA_API_ENHANCEMENTS_SECURITY
+#if defined (CHAPI_SUPPORT)
+#ifdef __JAVA_API_ENHANCEMENTS_SECURITY
+#ifdef RD_JAVA_VOLUME_CONTROL
+#ifdef BLUETOOTH11
+#ifdef BLUETOOTH10
+#ifdef MIDP20BUILD
+#ifdef TESTBUILD
+#ifdef LCDUI_DEBUG
+#ifdef TRACE_GRAPHICS
+#ifdef GRAPHICS_BUFFER_DRAWPIXELS
+#ifndef XDEBUG
+#ifdef DEBUG
+#ifdef RD_JAVA_OMA_DRM_V2
+#ifdef _APIEXT_SECURITY_
+#ifdef BLUETOOTH_MASTER_SUPPORT
+#ifdef RD_JAVA_VMPORT_LAYER_IN_USE
+#ifdef RD_JAVA_LC
+
+
+"""
+
+def main():
+ try:
+ source = sys.argv[1]
+ destination = sys.argv[2]
+ print "source = "+source+", destination = "+destination
+ javaCpp(source, destination)
+ except:
+ print "Error during javaCpp "
+ traceback.print_exc()
+ sys.exit(-1)
+
+
+def javaCpp(sourceDirs, destinationDir):
+
+ # Find all .java-files to preprocess. If any two or more files represent
+ # the same class, discard the ones specified first using jsourcetree.
+ dirs = sourceDirs.strip().split(":")
+ #dirs = ["/s60/mw/java/javalegacy/j2me/components/lcduib/src/epoc/classes",
+ # "/s60/mw/java/javaextensions/supplements/nokialcdui/javasrc"
+ # ]
+ allJavas = {}
+ for d in dirs:
+ # Get all .java-files under sourcetree
+ print "DIR = "+d
+ javas = getJavaFiles(d)
+
+ for file in javas:
+ allJavas[file] = os.path.abspath(os.path.join(d, file))
+
+ for file in allJavas.keys():
+ # File name for preprocessed Java file
+ cppFile = os.path.join(destinationDir, file)
+
+ # File name to original Java file
+ javaFile = allJavas[file]
+
+ if not uptodate(javaFile, cppFile):
+ doCpp(javaFile, cppFile)
+
+
+def getJavaFiles(javasDir):
+ startDir = os.path.abspath(javasDir)
+
+ files = []
+ suffix = ".java"
+
+ 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)
+ arg.append(res)
+
+ os.path.walk(startDir, callBack, files)
+
+ return files
+
+
+def doCpp(
+ srcFile,
+ dstFile):
+
+ macros = [
+ 'JDEBUG(aMessage)=',
+ 'JDEBUG_STATIC(aMessage)=',
+ 'JPRINT(aMessage)=',
+ 'JASSERT(aAssertion)=',
+ 'JASSERT_STATIC(aAssertion)=',
+ 'JASSERT_TXT(aAssertion,aMessage)=',
+ 'JASSERT_TXT_STATIC(aAssertion,aMessage)=',
+ 'JSOURCEDEBUG(aSourceCode)=',
+ 'RD_JAVA_OMJ',
+ 'RD_JAVA_OMA_DRM_V2',
+ 'RD_JAVA_VOLUME_CONTROL'
+ ]
+
+ if not os.path.exists(dstFile):
+ makeDirs(dstFile, isFile = True)
+
+ # Use cpp defined on environment CPPCMD, as the cpp/gcc varies between symsee, abld, sbs,
+ # linux, ...
+ if "CPPCMD" in os.environ:
+ cmd = os.environ["CPPCMD"]
+
+ else:
+ cmd = " ".join([
+ 'gcc', # Generic GCC
+ '-E', # Preprocess only
+ '-undef', # Do not predefine any macros
+ '-P', # Do not generate #line directives
+ '-x', 'assembler-with-cpp', # Language as C++
+ '-w', # No warnings
+ '-traditional-cpp']) # Use traditional precompilation
+
+ cmd = cmd + " " + " ".join(
+ ["-D" + m for m in macros] +
+ [srcFile, "-o", dstFile])
+
+ doExecute(cmd)
+
+def doExecute(
+ cmd,
+ *args,
+ **kwd):
+ """Any arguments are passed directly to subprocess.call(). """
+
+
+ # Construct string to be displayed on screen
+ """
+ msg = ""
+ if kwd.has_key('cwd'):
+ msg = "[" + kwd['cwd'] + "] "
+ if type(cmd) == types.StringType:
+ msg += cmd
+ elif type(cmd) == types.ListType:
+ msg += " ".join(cmd)
+ else:
+ raise Error, "Invalid type %s for cmd argument" % type(cmd)
+ sys.stderr.write("cmd = %s\n" % msg)
+ """
+ kwd['args'] = cmd
+
+ process = subprocess.Popen(*args, **kwd)
+ return
+
+def uptodate(source, target):
+
+ if not os.path.exists(target):
+ return False
+
+ try:
+ fileTimeSrc = os.path.getmtime(source)
+ fileTimeDst = os.path.getmtime(target)
+ if fileTimeSrc > fileTimeDst :
+ result = False
+ else:
+ result = True
+
+ except:
+ # One or more files don't exist
+ result = False
+
+ return result
+
+def makeDirs(directory, isFile = False):
+ """ Creates a directory if it doesn't exist.
+
+ Doesn't do anything if the directory already exists.
+
+ If isFile is True, the last element of the directory path is assumed to be
+ a file and is discarded from the path to be created. """
+
+ if isFile:
+ directory = os.path.dirname(directory)
+
+ try:
+ os.makedirs(directory)
+ except:
+ pass
+
+if __name__ == "__main__":
+ main()