diff --git a/direct/src/actor/Actor.py b/direct/src/actor/Actor.py index 87c3219dcd..cf939bfe07 100644 --- a/direct/src/actor/Actor.py +++ b/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: diff --git a/direct/src/extensions_native/EggGroupNode_extensions.py b/direct/src/extensions_native/EggGroupNode_extensions.py index 4b92c1dde5..6ec21fa604 100644 --- a/direct/src/extensions_native/EggGroupNode_extensions.py +++ b/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 diff --git a/direct/src/extensions_native/EggPrimitive_extensions.py b/direct/src/extensions_native/EggPrimitive_extensions.py index cd4d4ffdbc..09c43ab02b 100644 --- a/direct/src/extensions_native/EggPrimitive_extensions.py +++ b/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 diff --git a/direct/src/extensions_native/Mat3_extensions.py b/direct/src/extensions_native/Mat3_extensions.py index 0fd3929711..2396a1933d 100755 --- a/direct/src/extensions_native/Mat3_extensions.py +++ b/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 diff --git a/direct/src/extensions_native/PandaModules.py b/direct/src/extensions_native/PandaModules.py deleted file mode 100755 index 3b4952329d..0000000000 --- a/direct/src/extensions_native/PandaModules.py +++ /dev/null @@ -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 * - - - diff --git a/direct/src/extensions_native/__init__.py b/direct/src/extensions_native/__init__.py index b63f52ffd3..8b13789179 100644 --- a/direct/src/extensions_native/__init__.py +++ b/direct/src/extensions_native/__init__.py @@ -1 +1 @@ -from PandaModules import * + diff --git a/direct/src/extensions_native/libdirectModules.py b/direct/src/extensions_native/libdirectModules.py deleted file mode 100644 index fe9d65c7cd..0000000000 --- a/direct/src/extensions_native/libdirectModules.py +++ /dev/null @@ -1,3 +0,0 @@ -from libdirect import * - -from direct.extensions_native import CInterval_extensions \ No newline at end of file diff --git a/direct/src/extensions_native/libotpModules.py b/direct/src/extensions_native/libotpModules.py deleted file mode 100644 index dd5f0cfdf6..0000000000 --- a/direct/src/extensions_native/libotpModules.py +++ /dev/null @@ -1,5 +0,0 @@ -try: - from libotp import * -except ImportError , e: - print " ** Warning * Failed to load -->", e - diff --git a/direct/src/extensions_native/libpandaModules.py b/direct/src/extensions_native/libpandaModules.py deleted file mode 100644 index e14f885da9..0000000000 --- a/direct/src/extensions_native/libpandaModules.py +++ /dev/null @@ -1,6 +0,0 @@ -from libpanda import * - -## import pathing files.. -from direct.extensions_native import NodePathCollection_extensions -from direct.extensions_native import NodePath_extensions - diff --git a/direct/src/extensions_native/libpandaeggModules.py b/direct/src/extensions_native/libpandaeggModules.py deleted file mode 100644 index 12de5b636c..0000000000 --- a/direct/src/extensions_native/libpandaeggModules.py +++ /dev/null @@ -1 +0,0 @@ -from libpandaegg import * \ No newline at end of file diff --git a/direct/src/extensions_native/libpandaexpressModules.py b/direct/src/extensions_native/libpandaexpressModules.py deleted file mode 100644 index 7aa88b6604..0000000000 --- a/direct/src/extensions_native/libpandaexpressModules.py +++ /dev/null @@ -1,4 +0,0 @@ -from libpandaexpress import * - -from direct.extensions_native import HTTPChannel_extensions -#from direct.extensions_native import ConfigVariableDouble_extensions \ No newline at end of file diff --git a/direct/src/extensions_native/libpandafxModules.py b/direct/src/extensions_native/libpandafxModules.py deleted file mode 100644 index 3ab28a1cc9..0000000000 --- a/direct/src/extensions_native/libpandafxModules.py +++ /dev/null @@ -1 +0,0 @@ -from libpandafx import * \ No newline at end of file diff --git a/direct/src/extensions_native/libpandaphysicsModules.py b/direct/src/extensions_native/libpandaphysicsModules.py deleted file mode 100644 index 48a413bccd..0000000000 --- a/direct/src/extensions_native/libpandaphysicsModules.py +++ /dev/null @@ -1 +0,0 @@ -from libpandaphysics import * \ No newline at end of file diff --git a/direct/src/extensions_native/libpiratesModules.py b/direct/src/extensions_native/libpiratesModules.py deleted file mode 100644 index 6866fb867a..0000000000 --- a/direct/src/extensions_native/libpiratesModules.py +++ /dev/null @@ -1,4 +0,0 @@ -try: - from libpirates import * -except ImportError , e: - print " ** Warning * Failed to load -->", e diff --git a/direct/src/extensions_native/libtoontownModules.py b/direct/src/extensions_native/libtoontownModules.py deleted file mode 100644 index 9af4478f26..0000000000 --- a/direct/src/extensions_native/libtoontownModules.py +++ /dev/null @@ -1,5 +0,0 @@ -try: - from libtoontown import * -except ImportError , e: - print " ** Warning * Failed to load -->", e - diff --git a/direct/src/ffi/DoGenPyCode.py b/direct/src/ffi/DoGenPyCode.py index 21ef5e4d62..fdb4ae7a31 100644 --- a/direct/src/ffi/DoGenPyCode.py +++ b/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) diff --git a/direct/src/ffi/genPyCode.pp b/direct/src/ffi/genPyCode.pp index 8a1379daad..1d33cdf2b9 100644 --- a/direct/src/ffi/genPyCode.pp +++ b/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) diff --git a/direct/src/ffi/genPyCodeNative b/direct/src/ffi/genPyCodeNative index e6eb781628..243c95b72c 100755 --- a/direct/src/ffi/genPyCodeNative +++ b/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