[pypy-svn] r46260 - pypy/dist/pypy/translator/jvm

antocuni at codespeak.net antocuni at codespeak.net
Mon Sep 3 11:35:14 CEST 2007


Author: antocuni
Date: Mon Sep  3 11:35:13 2007
New Revision: 46260

Modified:
   pypy/dist/pypy/translator/jvm/genjvm.py
Log:
recompile *.java files only when needed.



Modified: pypy/dist/pypy/translator/jvm/genjvm.py
==============================================================================
--- pypy/dist/pypy/translator/jvm/genjvm.py	(original)
+++ pypy/dist/pypy/translator/jvm/genjvm.py	Mon Sep  3 11:35:13 2007
@@ -108,21 +108,27 @@
     def _compile_helper(self, clsnms):
         # HACK: compile the Java helper class.  Should eventually
         # use rte.py
-        tocompile = []
-        for clsnm in clsnms:
-            pypycls = self.classdir.join(clsnm + '.class')
-            if not pypycls.check():
-                tocompile.append(clsnm)
-        if tocompile:
-            thisdir = py.magic.autopath().dirpath()
-            javasrcs = [str(thisdir.join('src/pypy', clsnm + '.java')) for
-                        clsnm in tocompile]
-            self._invoke([getoption('javac'),
-                          '-nowarn',
-                          '-d', str(self.classdir)]+
-                         javasrcs,
-                         True)
-        
+        thisdir = py.magic.autopath().dirpath()
+        rootdir = thisdir.join('src')
+        srcdir = rootdir.join('pypy')
+        javafiles = srcdir.listdir('*.java')
+        classfiles = srcdir.listdir('*.class')
+
+        recompile = True
+        if classfiles:
+           last_modified_java = max([java.mtime() for java in javafiles])
+           last_modified_class = max([cls.mtime() for cls in classfiles])
+           if last_modified_java < last_modified_class:
+               recompile = False
+
+        if recompile:
+           log.red('Compiling java classes')               
+           javasrcs = [str(srcdir.join(clsnm + '.java')) for clsnm in clsnms]
+           self._invoke([getoption('javac'), '-nowarn', '-d', str(rootdir)] + javasrcs, True)
+
+        # copy .class files to classdir
+        for classfile in srcdir.listdir('*.class'):
+           classfile.copy(self.classdir.join('pypy'))
 
     def compile(self):
         """



More information about the Pypy-commit mailing list