## 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/pythonimport sysimport tracebackimport osimport os.pathimport sysimport subprocessimport shutilimport reimport typesimport zipfilefrom 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 filesdef 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) returndef 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 resultdef 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: passif __name__ == "__main__": main()