emotion源码包里有个SConstruct.py脚本,用来实现对emotion/src下源码的解释,最后生成emotion这个二进制的可执行文件。它的内容如下:
# The author disclaims copyright to the included source code. It is placed in
# the public domain. In place of a lengthy legal notice, here is a blessing:
#
# May you do good and not evil.
# May you find forgiveness for yourself and forgive others.
# May you share freely, never taking more than you give.
#
# $Id: SConstruct.py,v 1.30 2003/10/04 23:50:22 pyromage Exp $
#
import os
from string import *
def CheckQt (context, qtdir, qt = 'qt'):
context.Message ('Checking for ' + qt + ' in ' + qtdir + ' ... ')
# save old environment
oldlibs = context.env['LIBS']
oldlibpath = context.env['LIBPATH']
oldcpppath = context.env['CPPPATH']
# update environment to try stuff
context.env.Append(LIBS=qt, LIBPATH=qtdir+'/lib',
CPPPATH=qtdir+'/include')
# try to link in the new env
ret = context.TryLink("""
#include <qapp.h>
int main(int argc, char **argv) {
QApplication qapp (argc, argv);
return 0;
}
""", ".cpp")
# cleanup env if we failed
if not ret:
context.env.Replace (LIBS=oldlibs)
context.env.Replace (LIBPATH=oldlibpath)
context.env.Replace (CPPPATH=oldcpppath)
context.Result(ret)
return ret
######################################################################
CacheDir ('.cache')
env = Environment()
# Initialize the environment with empty variables
env.Append (LIBS='')
env.Append (LIBPATH='')
env.Append (CPPPATH='')
env.Append (CXXFLAGS='-g')
conf = Configure (env, {'CheckQt' : CheckQt})
# Check for Qt
haveqt = 0
mocprog = "moc"
if(os.environ.has_key ('QTDIR')):
if (conf.CheckQt (os.environ['QTDIR'], 'qt') or
conf.CheckQt (os.environ['QTDIR'], 'qt-mt')):
haveqt = 1
mocprog = os.environ['QTDIR'] + '/bin/moc'
if (not haveqt):
print '*** Qt is required to build emotion, but was not found. Try'
print '*** running ./configure with different values.'
print '***'
print '*** You did run ./configure, right?'
Exit(1)
env = conf.Finish()
# Initialize a Builder that knows how to use moc to make source files
moc = Builder (action=mocprog + " -o $TARGET $SOURCE", suffix=".moc.cpp",
src_suffix=".h")
env.Append(BUILDERS = {'QtMoc' : moc } )
# Source files to be generated by moc
mocadvancedoptions = env.QtMoc(source = '#/src/advancedoptions.h' )
mocconsoledialog = env.QtMoc(source = '#/src/consoledialog.h' )
moccontroller = env.QtMoc(source = '#/src/controller.h' )
mocdvddialog = env.QtMoc(source = '#/src/dvddialog.h' )
mocimagebutton = env.QtMoc(source = '#/src/imagebutton.h' )
mocmainwindow = env.QtMoc(source = '#/src/mainwindow.h' )
mocmixer = env.QtMoc(source = '#/src/mixer.h' )
mocmplayer = env.QtMoc(source = '#/src/mplayer.h' )
mocoptionsdialog = env.QtMoc(source = '#/src/optionsdialog.h' )
mocopendialog = env.QtMoc(source = '#/src/opendialog.h' )
mocplaylist = env.QtMoc(source = '#/src/playlist.h' )
mocplaylistmodel = env.QtMoc(source = '#/src/playlistmodel.h' )
# Complete list of sources needed to build
emotionSources = [
'#/src/aboutdialog.cpp',
'#/src/advancedoptions.cpp',
mocadvancedoptions,
'#/src/configuration.cpp',
'#/src/console.cpp',
'#/src/consoledialog.cpp',
mocconsoledialog,
'#/src/controller.cpp',
moccontroller,
'#/src/dvddialog.cpp',
mocdvddialog,
'#/src/emotionapp.cpp',
'#/src/errormediator.cpp',
'#/src/exception.cpp',
'#/src/fileconfiguration.cpp',
'#/src/globalconfiguration.cpp',
'#/src/iconset.cpp',
'#/src/imagebutton.cpp',
mocimagebutton,
'#/src/main.cpp',
'#/src/mainwindow.cpp',
mocmainwindow,
'#/src/mixer.cpp',
mocmixer,
'#/src/mplayer.cpp',
mocmplayer,
'#/src/mplayerfile.cpp',
'#/src/opendialog.cpp',
mocopendialog,
'#/src/optionsdialog.cpp',
mocoptionsdialog,
'#/src/playlist.cpp',
mocplaylist,
'#/src/playlistmodel.cpp',
mocplaylistmodel,
'#/src/playoptions.cpp',
'#/src/sighandler.cpp',
]
env.Program(target='emotion', source=emotionSources)
# Setup default target
Default('emotion')
在这个脚本里有几个关键步骤:
CacheDir ('.cache')
env = Environment()
conf = Configure (env, {'CheckQt' : CheckQt})
env = conf.Finish()
env.Program(target='emotion', source=emotionSources)
Default('emotion')
像这些函数都是pthon内置的吗?查了很多python的资料,都没有找到相关说明,比如Environment(),Configure(),Default()这些都是什么东东?
向各位高手求助!多谢!
|
|