Browse Source

integrate genPyCodeNative with genPyCode

David Rose 20 years ago
parent
commit
ae031f102a

+ 4 - 4
direct/src/actor/Actor.py

@@ -773,10 +773,10 @@ class Actor(PandaObject, NodePath):
         # Store a dictionary of jointName : node to list the controls
         # requested for joints.  The controls will actually be applied
         # later, when we load up the animations in bindAnim().
-        if self.__controlJoints.has_key(bundle):
-            self.__controlJoints[bundle][jointName] = node
+        if self.__controlJoints.has_key(bundle.this):
+            self.__controlJoints[bundle.this][jointName] = node
         else:
-            self.__controlJoints[bundle] = { jointName : node }
+            self.__controlJoints[bundle.this] = { jointName : node }
 
         return node
             
@@ -1361,7 +1361,7 @@ class Actor(PandaObject, NodePath):
 
         # Are there any controls requested for joints in this bundle?
         # If so, apply them.
-        controlDict = self.__controlJoints.get(bundle, None)
+        controlDict = self.__controlJoints.get(bundle.this, None)
         if controlDict:
             for jointName, node in controlDict.items():
                 if node:

+ 1 - 1
direct/src/extensions_native/EggGroupNode_extensions.py

@@ -1,5 +1,5 @@
 from extension_native_helpers import *
-from libdirect import *
+from libpandaegg import *
 ####################################################################
 #Dtool_funcToMethod(func, class)        
 #del func

+ 1 - 1
direct/src/extensions_native/EggPrimitive_extensions.py

@@ -1,5 +1,5 @@
 from extension_native_helpers import *
-from libdirect import *
+from libpandaegg import *
 ####################################################################
 #Dtool_funcToMethod(func, class)        
 #del func

+ 1 - 1
direct/src/extensions_native/Mat3_extensions.py

@@ -1,5 +1,5 @@
 from extension_native_helpers import *
-from libdirect import *
+from libpanda import *
 ####################################################################
 #Dtool_funcToMethod(func, class)        
 #del func

+ 0 - 12
direct/src/extensions_native/PandaModules.py

@@ -1,12 +0,0 @@
-from libpandaexpressModules import *
-from libpandaModules import *
-from libpandaphysicsModules import *
-from libdirectModules import *
-from libpandafxModules import *
-from libpandaeggModules import *
-from libotpModules import *
-from libtoontownModules import *
-from libpiratesModules import *
-
-
-

+ 1 - 1
direct/src/extensions_native/__init__.py

@@ -1 +1 @@
-from PandaModules import *
+

+ 0 - 3
direct/src/extensions_native/libdirectModules.py

@@ -1,3 +0,0 @@
-from libdirect import *
-
-from direct.extensions_native import CInterval_extensions 

+ 0 - 5
direct/src/extensions_native/libotpModules.py

@@ -1,5 +0,0 @@
-try:
-    from libotp import *
-except ImportError , e:
-    print " ** Warning * Failed to load -->", e    
-

+ 0 - 6
direct/src/extensions_native/libpandaModules.py

@@ -1,6 +0,0 @@
-from libpanda import *
-
-## import pathing files..
-from direct.extensions_native import NodePathCollection_extensions 
-from direct.extensions_native import NodePath_extensions 
-

+ 0 - 1
direct/src/extensions_native/libpandaeggModules.py

@@ -1 +0,0 @@
-from libpandaegg import *

+ 0 - 4
direct/src/extensions_native/libpandaexpressModules.py

@@ -1,4 +0,0 @@
-from libpandaexpress import *
-
-from direct.extensions_native import HTTPChannel_extensions 
-#from direct.extensions_native import ConfigVariableDouble_extensions 

+ 0 - 1
direct/src/extensions_native/libpandafxModules.py

@@ -1 +0,0 @@
-from libpandafx import *

+ 0 - 1
direct/src/extensions_native/libpandaphysicsModules.py

@@ -1 +0,0 @@
-from libpandaphysics import *

+ 0 - 4
direct/src/extensions_native/libpiratesModules.py

@@ -1,4 +0,0 @@
-try:
-    from libpirates import *
-except ImportError , e:
-    print " ** Warning * Failed to load -->", e    

+ 0 - 5
direct/src/extensions_native/libtoontownModules.py

@@ -1,5 +0,0 @@
-try:
-    from libtoontown import *
-except ImportError , e:
-    print " ** Warning * Failed to load -->", e    
-

+ 62 - 7
direct/src/ffi/DoGenPyCode.py

@@ -6,6 +6,7 @@ import getopt
 import sys
 import os
 import glob
+import types
 from direct.ffi import FFIConstants
 
 # Define a help string for the user
@@ -56,6 +57,7 @@ etcPath = []
 doSqueeze = True
 deleteSourceAfterSqueeze = True
 generateManual = False
+native = False  # This is set by genPyCode.py
 
 def doGetopts():
     global outputDir
@@ -80,7 +82,7 @@ def doGetopts():
 
     # Extract the args the user passed in
     try:
-        opts, pargs = getopt.getopt(sys.argv[1:], 'hvOd:x:i:e:rnsgtpom')
+        opts, pargs = getopt.getopt(sys.argv[1:], 'hvOd:x:Ni:e:rnsgtpom')
     except Exception, e:
         # User passed in a bad option, print the error and the help, then exit
         print e
@@ -184,6 +186,55 @@ def doErrorCheck():
         FFIConstants.notify.debug('Generating code for: ' + `codeLibs`)
         FFIConstants.CodeModuleNameList = codeLibs
 
+def generateNativeWrappers():
+    # Empty out the codeDir of unnecessary crud from previous runs
+    # before we begin.
+    for file in os.listdir(outputDir):
+        pathname = os.path.join(outputDir, file)
+        if not os.path.isdir(pathname):
+            os.unlink(pathname)
+
+    # Generate __init__.py
+    initFilename = os.path.join(outputDir, '__init__.py')
+    init = open(initFilename, 'w')
+
+    # Generate PandaModules.py
+    pandaModulesFilename = os.path.join(outputDir, 'PandaModules.py')
+    pandaModules = open(pandaModulesFilename, 'w')
+
+    # Copy in any helper classes from the extensions_native directory
+    extensionHelperFiles = [ 'extension_native_helpers.py' ]
+    for name in extensionHelperFiles:
+        inFilename = os.path.join(extensionsDir, name)
+        outFilename = os.path.join(outputDir, name)
+        if os.path.exists(inFilename):
+            inFile = open(inFilename, 'r')
+            outFile = open(outFilename, 'w')
+            outFile.write(inFile.read())
+
+    # Generate a series of "libpandaModules.py" etc. files, one for
+    # each named module.
+    for moduleName in FFIConstants.CodeModuleNameList:
+        print 'Importing code library: ' + moduleName
+        exec('import %s as module' % moduleName)
+
+        pandaModules.write('from %sModules import *\n' % (moduleName))
+
+        moduleModulesFilename = os.path.join(outputDir, '%sModules.py' % (moduleName))
+        moduleModules = open(moduleModulesFilename, 'w')
+
+        moduleModules.write('from %s import *\n\n' % (moduleName))
+
+        # Now look for extensions
+        for className, classDef in module.__dict__.items():
+            if type(classDef) == types.TypeType:
+                extensionFilename = os.path.join(extensionsDir, '%s_extensions.py' % (className))
+                if os.path.exists(extensionFilename):
+                    print '  Found extensions for class: %s' % (className)
+                    extension = open(extensionFilename, 'r')
+                    moduleModules.write(extension.read())
+                    moduleModules.write('\n')
+        
 
 def run():
     global outputDir
@@ -200,9 +251,16 @@ def run():
     doErrorCheck()
 
     # Ok, now we can start generating code
-    from direct.ffi import FFIInterrogateDatabase
-    db = FFIInterrogateDatabase.FFIInterrogateDatabase(etcPath = etcPath)
-    db.generateCode(outputDir, extensionsDir)
+    if native:
+        generateNativeWrappers()
+
+    else:
+        from direct.ffi import FFIInterrogateDatabase
+        db = FFIInterrogateDatabase.FFIInterrogateDatabase(etcPath = etcPath)
+        db.generateCode(outputDir, extensionsDir)
+
+        if doSqueeze:
+            db.squeezeGeneratedCode(outputDir, deleteSourceAfterSqueeze)
 
     if generateManual:
         import epydoc.cli
@@ -211,6 +269,3 @@ def run():
         cmd = ["epydoc","-n","Panda3D","-o",mandir,"--docformat","panda","--ignore-param-mismatch",outputDir,directDir]
         sys.argv = cmd
         epydoc.cli.cli()
-
-    if doSqueeze:
-        db.squeezeGeneratedCode(outputDir,deleteSourceAfterSqueeze)

+ 5 - 2
direct/src/ffi/genPyCode.pp

@@ -107,12 +107,15 @@ from direct.ffi import FFIConstants
 
 # The following parameters were baked in to this script at the time
 # ppremake was run in Direct.
+#define extensions_name $[if $[PYTHON_NATIVE],extensions_native,extensions]
+
 DoGenPyCode.outputDir = r'$[osfilename $[install_lib_dir]/pandac]'
-DoGenPyCode.extensionsDir = r'$[osfilename $[TOPDIR]/src/extensions]'
+DoGenPyCode.extensionsDir = r'$[osfilename $[TOPDIR]/src/$[extensions_name]]'
 DoGenPyCode.interrogateLib = r'libdtoolconfig'
 DoGenPyCode.codeLibs = r'$[GENPYCODE_LIBS]'.split()
 DoGenPyCode.etcPath = [r'$[osfilename $[install_igatedb_dir]]']
 DoGenPyCode.directDir = r'$[osfilename $[TOPDIR]]'
+DoGenPyCode.native = $[if $[PYTHON_NATIVE],1,0]
 
 #if $[>= $[OPTIMIZE], 4]
 FFIConstants.wantComments = 0
@@ -125,7 +128,7 @@ FFIConstants.wantTypeChecking = 0
 # on the baked-in stuff--replace it with the dynamic settings from
 # ctattach.
 DoGenPyCode.outputDir = os.path.join(directDir, 'lib', 'pandac')
-DoGenPyCode.extensionsDir = os.path.join(directDir, 'src', 'extensions')
+DoGenPyCode.extensionsDir = os.path.join(directDir, 'src', '$[extensions_name]')
 DoGenPyCode.etcPath = []
 
 # Look for additional packages (other than the basic three)

+ 2 - 46
direct/src/ffi/genPyCodeNative

@@ -1,48 +1,4 @@
 #! /bin/sh
 
-if [ -z "${DIRECT}" ]; then
-    if [ -d "direct" ]; then
-        echo "$0: \$DIRECT is not defined, using ./direct/ instead."
-        DIRECT="direct"
-    else
-        echo "$0: \$DIRECT is not defined and there is no ./direct/ at cwd.  exiting."
-        exit 1
-    fi
-fi
-
-if [ -z "${INSTALL_DIR}" ]; then
-    if [ -n "${DIRECT}" -a -d "${DIRECT}" ]; then
-
-        # echo "$0: \$INSTALL_DIR is not defined, using \$DIRECT (${DIRECT}) instead."
-        INSTALL_DIR="${DIRECT}"
-    else
-        echo "$0: \$INSTALL_DIR is not defined and \$DIRECT is not a suitable default.  exiting."
-        exit 1
-    fi
-fi
-
-if [ ! -e ${INSTALL_DIR}/lib/pandac ]; then
-  mkdir ${INSTALL_DIR}/lib/pandac || exit
-fi
-
-if [ -d ${INSTALL_DIR}/lib/pandac ]; then
-
-    rm `find ${INSTALL_DIR}/lib/pandac/. -maxdepth 1 -type f -print`
-    
-    cp ${DIRECT}/src/extensions_native/PandaModules.py            ${INSTALL_DIR}/lib/pandac/.
-    cp ${DIRECT}/src/extensions_native/libpandaModules.py         ${INSTALL_DIR}/lib/pandac/.
-    cp ${DIRECT}/src/extensions_native/libpandaphysicsModules.py  ${INSTALL_DIR}/lib/pandac/.
-    cp ${DIRECT}/src/extensions_native/__init__.py*               ${INSTALL_DIR}/lib/pandac/.
-    cp ${DIRECT}/src/extensions_native/libpandaeggModules.py      ${INSTALL_DIR}/lib/pandac/.      
-    cp ${DIRECT}/src/extensions_native/libpiratesModules.py       ${INSTALL_DIR}/lib/pandac/.
-    cp ${DIRECT}/src/extensions_native/libdirectModules.py        ${INSTALL_DIR}/lib/pandac/.
-    cp ${DIRECT}/src/extensions_native/libpandaexpressModules.py  ${INSTALL_DIR}/lib/pandac/.     
-    cp ${DIRECT}/src/extensions_native/libtoontownModules.py      ${INSTALL_DIR}/lib/pandac/.
-    cp ${DIRECT}/src/extensions_native/libotpModules.py           ${INSTALL_DIR}/lib/pandac/.
-    cp ${DIRECT}/src/extensions_native/libpandafxModules.py       ${INSTALL_DIR}/lib/pandac/.
-else
-    echo "$0: \"${INSTALL_DIR}/lib/pandac\" is not a directory"
-    exit 1
-fi
-
-echo "$0: finished."
+echo "genPyCodeNative is now deprecated; just use genPyCode."
+exit 1