📄 build.py
字号:
################################################################################ build.py# by Sailesh@xten.com## Usage: python build.py## A Python script to build unit tests on the Mac using command line tools.# Currently this script will not work if you are logged in remotely# using SSH. This can be fixed by removing dependencies to cmdide.## Setup:## This script requires having CodeWarrior's command line tools installed.# Follow the instructions in "Command Line Tools" directory of your# CodeWarrior installation folder.## The install script assumes that your shell is tcsh. If you're using# bash, the standard shell on OS X, then you'll need to convert the# file mwvars to using bash syntax.## Next, in your .tcshrc or .bashrc file, change "source mwvars" to# "source mwvars bsd". This causes the command line tools to use# BSD headers and libraries.## Finally, there is one bug in the mwvars file we have to fix.# For the environment variable MWCMacOSXPPCIncludes, append:# "$CWINSTALL"/MacOS\ X\ Support/Headers/PPC\ Specific################################################################################import osimport sys# GLOBAL VARIABLESIDE_PATH = None # path to CodeWarrior IDEcpp_compiler = None # path to c++ compilerproj_compiler = None # path to ide compiler, it compiles .mcp filescpp_options = None # options to mwcc, c++ compilerld_options = None # options to mwld, linker################################################################################ sets the path to the c++ compiler and setup up any environment variables###############################################################################def setup_environment(): global IDE_PATH global cpp_compiler global proj_compiler # make sure we know where the CodeWarrior IDE is IDE_PATH = os.environ.get("CWINSTALL") if IDE_PATH == None: print "Error: unable to locate CodeWarrior IDE install location." print "Please follow the setup directions at the top of this script." sys.exit(1) # add the compiler to the path cpp_compiler_path = IDE_PATH + "/../Other Metrowerks Tools/Command Line Tools" old_path = os.environ['PATH'] os.environ['PATH'] = old_path + ":" + cpp_compiler_path # setup an explicit path to mwcc, the c++ compiler cpp_compiler = "\"" + cpp_compiler_path + "/mwcc" + "\"" # setup an explicit path to cmdide, the compiler that takes a .mcp file proj_compiler = "\"" + cpp_compiler_path + "/cmdide" + "\"" ################################################################################ setup compiler and linker options###############################################################################def setup_options(): global cpp_options global ld_options # enable wchar_t support cpp_options = " -wchar_t on" # adopt GCC #include semantics cpp_options += " -gccinc" # add sip directory to our include search path cpp_options += " -I../../.." # prefix file to set some macros cpp_options += " -I." cpp_options += " -include prefix.h" # link against ares and resiprocate # see build_dependencies for more info ld_options = " -l../../../Output/aresdebug.lib" ld_options += " -l../../../Output/resiprocatedebug.lib" # security libraries ld_options += " -l /usr/local/lib" ld_options += " -llibssl.a" ld_options += " -llibcrypto.a" # system libraries ld_options += " -llibgcc.a" ld_options += " -lMSL_All_Mach-O_D.lib" # Mac OS X frameworks ld_options += " -framework CoreFoundation" ld_options += " -framework Security"################################################################################ builds ares and resiprocate if they're not already there###############################################################################def build_dependencies(): global proj_compiler # we use cmdide to build .mcp files # the path to cmdide is created in setup_environment() if proj_compiler == None: print "Error: need to call setup_environment first" sys.exit(1) # command line options # -b => build target, -q => quit IDE after building # -z => switch to named target # NOTE: If we put "-q" when we build the first target then # there may be a problem building the 2nd target. This is because # the command line tool tries to open the 2nd target before the 1st IDE # has finished. os.system(proj_compiler + " -proj -z ResiprocateDebug -b ../../../sip.mcp") os.system(proj_compiler + " -proj -z AresDebug -b -q ../../../sip.mcp")################################################################################ build each test program# output file name is always "input_source.out"###############################################################################def build_tests(test_programs): global cpp_options global ld_options global cpp_compiler # set up the compiler setup_environment() setup_options() build_dependencies() # invoke the compiler for curTest in test_programs: outputName = curTest + ".out" options = cpp_options + ld_options + " -o " + outputName os.system(cpp_compiler + options + " " + curTest)################################################################################ removes .o and .out files from sip/resiprocrate/test###############################################################################def run_tests(test_programs): for curTest in test_programs: outputName = curTest + ".out" # TODO: execute outputName and check if test succeeded################################################################################ removes .o and .out files from sip/resiprocrate/test###############################################################################def clean(test_programs): for curTest in test_programs: outputName = curTest + ".out" objectName = curTest + ".o" os.system("rm " + outputName); os.system("rm " + objectName);################################################################################ main################################################################################ TODO: add more test files heretest_programs = ["../testCorruption.cxx", \ "../testCoders.cxx", \ "../testMacSecurity.cxx" \ ]build_tests(test_programs)run_tests(test_programs)clean(test_programs)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -