mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-30 16:58:40 -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