integrate genPyCodeNative with genPyCode

This commit is contained in:
David Rose 2005-05-27 16:47:12 +00:00
parent e451e12df4
commit ae031f102a
18 changed files with 77 additions and 105 deletions

View File

@ -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:

View File

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

View File

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

View File

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

View File

@ -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 *

View File

@ -1 +1 @@
from PandaModules import *

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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,10 +251,17 @@ def run():
doErrorCheck()
# Ok, now we can start generating code
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
import direct.directbase.DirectStart
@ -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)

View File

@ -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)

View File

@ -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