214 lines
7.1 KiB
ObjectPascal
214 lines
7.1 KiB
ObjectPascal
//
|
|
// genPyCode.pp
|
|
//
|
|
// This file defines the script to auto-generate a sensible genPyCode
|
|
// for the user based on the Config.pp variables in effect at the time
|
|
// ppremake is run. The generated script will know which directories
|
|
// to generate its output to, as well as which source files to read
|
|
// for the input.
|
|
//
|
|
|
|
#define install_dir $[$[upcase $[PACKAGE]]_INSTALL]
|
|
#define install_lib_dir $[or $[INSTALL_LIB_DIR],$[install_dir]/lib]
|
|
#define install_bin_dir $[or $[INSTALL_BIN_DIR],$[install_dir]/bin]
|
|
#define install_igatedb_dir $[or $[INSTALL_IGATEDB_DIR],$[install_dir]/etc]
|
|
|
|
#define python $[PYTHON_COMMAND]
|
|
#if $[USE_DEBUG_PYTHON]
|
|
#define python $[PYTHON_DEBUG_COMMAND]
|
|
#endif
|
|
|
|
// If we're on Win32 without Cygwin, generate a genPyCode.bat file;
|
|
// for all other platforms, generate a genPyCode sh script. Although
|
|
// it's true that on non-Win32 platforms we don't need the script
|
|
// (since the python file itself could be made directly executable),
|
|
// we generate the script anyway to be consistent with Win32, which
|
|
// does require it.
|
|
|
|
#if $[eq $[PLATFORM],Win32]
|
|
|
|
#output genPyCode.bat
|
|
@echo off
|
|
rem #### Generated automatically by $[PPREMAKE] $[PPREMAKE_VERSION] from $[notdir $[THISFILENAME]].
|
|
rem ################################# DO NOT EDIT ###########################
|
|
|
|
$[python] -u $[osfilename $[install_bin_dir]/genPyCode.py] %1 %2 %3 %4 %5 %6 %7 %8 %9
|
|
#end genPyCode.bat
|
|
|
|
#else // Win32
|
|
|
|
#output genPyCode $[if $[>= $[PPREMAKE_VERSION],1.21],binary]
|
|
#! /bin/sh
|
|
#### Generated automatically by $[PPREMAKE] $[PPREMAKE_VERSION] from $[notdir $[THISFILENAME]].
|
|
################################# DO NOT EDIT ###########################
|
|
|
|
#if $[CTPROJS]
|
|
# This script was generated while the user was using the ctattach
|
|
# tools. That had better still be the case.
|
|
#if $[WINDOWS_PLATFORM]
|
|
$[python] -u `cygpath -w $DIRECT/built/bin/genPyCode.py` "$@"
|
|
#else
|
|
$[python] -u $DIRECT/built/bin/genPyCode.py "$@"
|
|
#endif
|
|
#else
|
|
$[python] -u '$[osfilename $[install_bin_dir]/genPyCode.py]' "$@"
|
|
#endif
|
|
#end genPyCode
|
|
|
|
#endif // Win32
|
|
|
|
#output genPyCode.py
|
|
#! /usr/bin/env $[python]
|
|
#### Generated automatically by $[PPREMAKE] $[PPREMAKE_VERSION] from $[notdir $[THISFILENAME]].
|
|
################################# DO NOT EDIT ###########################
|
|
|
|
import os
|
|
import sys
|
|
import glob
|
|
|
|
#if $[CTPROJS]
|
|
# This script was generated while the user was using the ctattach
|
|
# tools. That had better still be the case.
|
|
|
|
def deCygwinify(path):
|
|
if os.name in ['nt'] and path[0] == '/':
|
|
# On Windows, we may need to convert from a Cygwin-style path
|
|
# to a native Windows path.
|
|
|
|
# Check for a case like /i/ or /p/: this converts
|
|
# to i:/ or p:/.
|
|
|
|
dirs = path.split('/')
|
|
if len(dirs) > 2 and len(dirs[1]) == 1:
|
|
path = '%s:\%s' % (dirs[1], '\\'.join(dirs[2:]))
|
|
|
|
else:
|
|
# Otherwise, prepend $PANDA_ROOT and flip the slashes.
|
|
pandaRoot = os.getenv('PANDA_ROOT')
|
|
if pandaRoot:
|
|
path = os.path.normpath(pandaRoot + path)
|
|
|
|
return path
|
|
|
|
ctprojs = os.getenv('CTPROJS')
|
|
if not ctprojs:
|
|
print "You are no longer attached to any trees!"
|
|
sys.exit(1)
|
|
|
|
directDir = os.getenv('DIRECT')
|
|
if not directDir:
|
|
print "You are not attached to DIRECT!"
|
|
sys.exit(1)
|
|
|
|
directDir = deCygwinify(directDir)
|
|
|
|
# Make sure that direct.showbase.FindCtaPaths gets imported.
|
|
parent, base = os.path.split(directDir)
|
|
|
|
if parent not in sys.path:
|
|
sys.path.append(parent)
|
|
|
|
import direct.showbase.FindCtaPaths
|
|
|
|
#endif // CTPROJS
|
|
|
|
from direct.ffi import DoGenPyCode
|
|
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]
|
|
|
|
#if $[>= $[OPTIMIZE], 4]
|
|
FFIConstants.wantComments = 0
|
|
FFIConstants.wantTypeChecking = 0
|
|
#endif
|
|
|
|
DoGenPyCode.interrogateLib = r'libdtoolconfig'
|
|
DoGenPyCode.codeLibs = r'$[GENPYCODE_LIBS]'.split()
|
|
DoGenPyCode.native = $[if $[PYTHON_NATIVE],1,0]
|
|
|
|
#if $[not $[CTPROJS]]
|
|
// Since the user is not using ctattach, bake these variables in too.
|
|
DoGenPyCode.directDir = r'$[osfilename $[TOPDIR]]'
|
|
DoGenPyCode.outputCodeDir = r'$[osfilename $[install_lib_dir]/pandac]'
|
|
DoGenPyCode.outputHTMLDir = r'$[osfilename $[install_data_dir]/doc]'
|
|
DoGenPyCode.extensionsDir = r'$[osfilename $[TOPDIR]/src/$[extensions_name]]'
|
|
DoGenPyCode.etcPath = [r'$[osfilename $[install_igatedb_dir]]']
|
|
DoGenPyCode.pythonSourcePath = r'$[osfilename $[TOPDIR]]'
|
|
|
|
#else
|
|
# The user is expected to be using ctattach, so don't bake in the
|
|
# following four; these instead come from the dynamic settings set by
|
|
# ctattach.
|
|
|
|
DoGenPyCode.directDir = directDir
|
|
DoGenPyCode.outputCodeDir = os.path.join(directDir, 'built', 'lib', 'pandac')
|
|
DoGenPyCode.outputHTMLDir = os.path.join(directDir, 'built', 'shared', 'doc')
|
|
DoGenPyCode.extensionsDir = os.path.join(directDir, 'src', '$[extensions_name]')
|
|
DoGenPyCode.etcPath = []
|
|
DoGenPyCode.pythonSourcePath = []
|
|
|
|
#if $[CTA_GENERIC_GENPYCODE]
|
|
# Look for additional packages (other than the basic three)
|
|
# that the user might be dynamically attached to.
|
|
packages = []
|
|
for proj in ctprojs.split():
|
|
projName = proj.split(':')[0]
|
|
packages.append(projName)
|
|
packages.reverse()
|
|
|
|
for package in packages:
|
|
packageDir = os.getenv(package)
|
|
if packageDir:
|
|
packageDir = deCygwinify(packageDir)
|
|
etcDir = os.path.join(packageDir, 'etc')
|
|
try:
|
|
inFiles = glob.glob(os.path.join(etcDir, 'built', '*.in'))
|
|
except:
|
|
inFiles = []
|
|
if inFiles:
|
|
DoGenPyCode.etcPath.append(etcDir)
|
|
|
|
if package not in ['WINTOOLS', 'DTOOL', 'DIRECT', 'PANDA']:
|
|
DoGenPyCode.pythonSourcePath.append(packageDir)
|
|
|
|
libDir = os.path.join(packageDir, 'built', 'lib')
|
|
try:
|
|
files = os.listdir(libDir)
|
|
except:
|
|
files = []
|
|
for file in files:
|
|
if os.path.isfile(os.path.join(libDir, file)):
|
|
basename, ext = os.path.splitext(file)
|
|
|
|
# Try to import the library. If we can import it,
|
|
# instrument it.
|
|
try:
|
|
__import__(basename, globals(), locals())
|
|
isModule = 1
|
|
except:
|
|
isModule = 0
|
|
|
|
#
|
|
# RHH.... hack OPT2 .. py debug libraries...
|
|
#
|
|
if not isModule:
|
|
# debug py library magin naming in windows..
|
|
basename = basename.replace('_d','')
|
|
try:
|
|
__import__(basename, globals(), locals())
|
|
isModule = 1
|
|
except:
|
|
isModule = 0
|
|
|
|
if isModule:
|
|
if basename not in DoGenPyCode.codeLibs:
|
|
DoGenPyCode.codeLibs.append(basename)
|
|
#endif // CTA_GENERIC_GENPYCODE
|
|
#endif // CTPROJS
|
|
|
|
DoGenPyCode.run()
|
|
|
|
#end genPyCode.py
|