mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-01 09:23:03 -04:00
omitted file
This commit is contained in:
parent
f144196ffe
commit
cff6a5b6f3
183
direct/src/ffi/DoGenPyCode.py
Normal file
183
direct/src/ffi/DoGenPyCode.py
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
""" This module implements genPyCode, which is itself a generated
|
||||||
|
script with a few default parameters filled in. This module allows
|
||||||
|
the user to specify alternate parameters on the command line. """
|
||||||
|
|
||||||
|
import getopt
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
import glob
|
||||||
|
from direct.ffi import FFIConstants
|
||||||
|
|
||||||
|
# Define a help string for the user
|
||||||
|
helpString ="""
|
||||||
|
genPyCode -h
|
||||||
|
genPyCode
|
||||||
|
genPyCode [opts] -i libdtoolconfig libcode1 libcode2 ...
|
||||||
|
|
||||||
|
This script generates Python wrappers to interface with the C++
|
||||||
|
libraries that have already been run through interrogate. It is
|
||||||
|
necessary to run this script after building the Panda tools for the
|
||||||
|
first time, or after any major change in which some of the interface
|
||||||
|
may have changed.
|
||||||
|
|
||||||
|
The default options are baked into genPyCode by ppremake and need not
|
||||||
|
be specified. However, it is possible to override these on the
|
||||||
|
command line if you need to fine-tune the behavior of genPyCode for
|
||||||
|
some reason. Most often, the only needed change will be to add one or
|
||||||
|
more additional libraries to the list of libraries instrumented by
|
||||||
|
default.
|
||||||
|
|
||||||
|
|
||||||
|
Options:
|
||||||
|
-h print this message
|
||||||
|
-v verbose
|
||||||
|
-d dir directory to write output code
|
||||||
|
-x dir directory to pull extension code from
|
||||||
|
-i lib interrogate library
|
||||||
|
-e dir directory to search for *.in files (may be repeated)
|
||||||
|
-O no C++ comments or assertion statements
|
||||||
|
-n Don't use squeezeTool to squeeze the result into one .pyz file
|
||||||
|
|
||||||
|
Any additional names listed on the command line are taken to be names
|
||||||
|
of libraries that are to be instrumented.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Initialize variables
|
||||||
|
outputDir = ''
|
||||||
|
extensionsDir = ''
|
||||||
|
interrogateLib = ''
|
||||||
|
codeLibs = []
|
||||||
|
doSqueeze = True
|
||||||
|
etcPath = []
|
||||||
|
|
||||||
|
def doGetopts():
|
||||||
|
global outputDir
|
||||||
|
global extensionsDir
|
||||||
|
global interrogateLib
|
||||||
|
global codeLibs
|
||||||
|
global doSqueeze
|
||||||
|
global etcPath
|
||||||
|
|
||||||
|
# These options are allowed but are ignored (they are deprecated with
|
||||||
|
# the new genPyCode script):
|
||||||
|
|
||||||
|
# -g adds libgateway
|
||||||
|
# -t adds libtoontown
|
||||||
|
# -p adds libpirates
|
||||||
|
# -o adds libopt
|
||||||
|
|
||||||
|
FFIConstants.notify.setDebug(0)
|
||||||
|
FFIConstants.notify.setInfo(0)
|
||||||
|
|
||||||
|
# Extract the args the user passed in
|
||||||
|
try:
|
||||||
|
opts, pargs = getopt.getopt(sys.argv[1:], 'hvOd:x:i:e:ngtpo')
|
||||||
|
except Exception, e:
|
||||||
|
# User passed in a bad option, print the error and the help, then exit
|
||||||
|
print e
|
||||||
|
print helpString
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
# Store the option values into our variables
|
||||||
|
for opt in opts:
|
||||||
|
flag, value = opt
|
||||||
|
if (flag == '-h'):
|
||||||
|
print helpString
|
||||||
|
sys.exit()
|
||||||
|
elif (flag == '-v'):
|
||||||
|
if not FFIConstants.notify.getInfo():
|
||||||
|
FFIConstants.notify.setInfo(1)
|
||||||
|
else:
|
||||||
|
FFIConstants.notify.setDebug(1)
|
||||||
|
elif (flag == '-d'):
|
||||||
|
outputDir = value
|
||||||
|
elif (flag == '-x'):
|
||||||
|
extensionsDir = value
|
||||||
|
elif (flag == '-i'):
|
||||||
|
interrogateLib = value
|
||||||
|
elif (flag == '-e'):
|
||||||
|
etcPath.append(value)
|
||||||
|
elif (flag == '-O'):
|
||||||
|
FFIConstants.wantComments = 0
|
||||||
|
FFIConstants.wantTypeChecking = 0
|
||||||
|
elif (flag == '-n'):
|
||||||
|
doSqueeze = False
|
||||||
|
elif (flag in ['-g', '-t', '-p', '-o']):
|
||||||
|
FFIConstants.notify.warning("option is deprecated: %s" % (flag))
|
||||||
|
|
||||||
|
else:
|
||||||
|
FFIConstants.notify.error('illegal option: ' + flag)
|
||||||
|
|
||||||
|
# Check for old, no-longer-used parameter:
|
||||||
|
invalidParameters = [
|
||||||
|
'linux', 'win-debug', 'win-release', 'win-publish',
|
||||||
|
'install', 'release'
|
||||||
|
]
|
||||||
|
if pargs and pargs[0] in invalidParameters:
|
||||||
|
FFIConstants.notify.warning("parameter is deprecated: %s" % (pargs[0]))
|
||||||
|
del pargs[0]
|
||||||
|
|
||||||
|
# Store the program arguments into the codeLibs
|
||||||
|
codeLibs += pargs
|
||||||
|
|
||||||
|
def doErrorCheck():
|
||||||
|
global outputDir
|
||||||
|
global extensionsDir
|
||||||
|
global interrogateLib
|
||||||
|
global codeLibs
|
||||||
|
global doSqueeze
|
||||||
|
global etcPath
|
||||||
|
|
||||||
|
# Now do some error checking and verbose output
|
||||||
|
if (not interrogateLib):
|
||||||
|
FFIConstants.notify.error('You must specify an interrogate library (-i lib)')
|
||||||
|
else:
|
||||||
|
FFIConstants.notify.debug('Setting interrogate library to: ' + interrogateLib)
|
||||||
|
FFIConstants.InterrogateModuleName = interrogateLib
|
||||||
|
|
||||||
|
if (not outputDir):
|
||||||
|
FFIConstants.notify.info('Setting output directory to current directory')
|
||||||
|
outputDir = '.'
|
||||||
|
elif (not os.path.exists(outputDir)):
|
||||||
|
FFIConstants.notify.info('Directory does not exist, creating: ' + outputDir)
|
||||||
|
os.mkdir(outputDir)
|
||||||
|
FFIConstants.notify.info('Setting output directory to: ' + outputDir)
|
||||||
|
else:
|
||||||
|
FFIConstants.notify.info('Setting output directory to: ' + outputDir)
|
||||||
|
|
||||||
|
|
||||||
|
if (not extensionsDir):
|
||||||
|
FFIConstants.notify.debug('Setting extensions directory to current directory')
|
||||||
|
extensionsDir = '.'
|
||||||
|
elif (not os.path.exists(extensionsDir)):
|
||||||
|
FFIConstants.notify.error('Directory does not exist: ' + extensionsDir)
|
||||||
|
else:
|
||||||
|
FFIConstants.notify.debug('Setting extensions directory to: ' + extensionsDir)
|
||||||
|
|
||||||
|
|
||||||
|
if (not codeLibs):
|
||||||
|
FFIConstants.notify.error('You must specify one or more libraries to generate code from')
|
||||||
|
else:
|
||||||
|
FFIConstants.notify.debug('Generating code for: ' + `codeLibs`)
|
||||||
|
FFIConstants.CodeModuleNameList = codeLibs
|
||||||
|
|
||||||
|
|
||||||
|
def run():
|
||||||
|
global outputDir
|
||||||
|
global extensionsDir
|
||||||
|
global interrogateLib
|
||||||
|
global codeLibs
|
||||||
|
global doSqueeze
|
||||||
|
global etcPath
|
||||||
|
|
||||||
|
doGetopts()
|
||||||
|
doErrorCheck()
|
||||||
|
|
||||||
|
# Ok, now we can start generating code
|
||||||
|
from direct.ffi import FFIInterrogateDatabase
|
||||||
|
db = FFIInterrogateDatabase.FFIInterrogateDatabase(etcPath = etcPath)
|
||||||
|
db.generateCode(outputDir, extensionsDir)
|
||||||
|
|
||||||
|
if doSqueeze:
|
||||||
|
db.squeezeGeneratedCode(outputDir)
|
Loading…
x
Reference in New Issue
Block a user