ó pŽ¸Qc@s{dZdZddlZddlmZddlmZddlmZddl m Z d„Z d efd „ƒYZ dS( s´distutils.command.build_clib Implements the Distutils 'build_clib' command, to build a C/C++ library that is included in the module distribution and needed by an extension module.s$Id$i˙˙˙˙N(tCommand(tDistutilsSetupError(tcustomize_compiler(tlogcCsddlm}|ƒdS(Ni˙˙˙˙(tshow_compilers(tdistutils.ccompilerR(R((s2/sys/lib/python2.7/distutils/command/build_clib.pyRst build_clibcBsƒeZdZdddddgZdd gZdddefgZd„Zd„Z d„Z d„Z d„Z d„Z d„ZRS(s/build C/C++ libraries used by Python extensionss build-clib=tbs%directory to build C/C++ libraries tos build-temp=tts,directory to put temporary build by-productstdebugtgs"compile with debugging informationtforcetfs2forcibly build everything (ignore file timestamps)s compiler=tcsspecify the compiler types help-compilerslist available compilerscCsUd|_d|_d|_d|_d|_d|_d|_d|_d|_ dS(Ni( tNoneRt build_tempt librariest include_dirstdefinetundefR R tcompiler(tself((s2/sys/lib/python2.7/distutils/command/build_clib.pytinitialize_options6s        cCsŸ|jdddd d d ƒ|jj|_|jrG|j|jƒn|jdkrn|jjpeg|_nt|jtƒr›|jjt j ƒ|_ndS( NtbuildRRRR R (s build_temps build_clib(s build_temps build_temp(scompilerscompiler(sdebugsdebug(sforcesforce( tset_undefined_optionst distributionRtcheck_library_listRRt isinstancetstrtsplittostpathsep(R((s2/sys/lib/python2.7/distutils/command/build_clib.pytfinalize_optionsFs  cCs˙|js dSddlm}|d|jd|jd|jƒ|_t|jƒ|jdk rv|jj |jƒn|j dk rľx-|j D]\}}|jj ||ƒqWn|j dk rëx$|j D]}|jj |ƒqÎWn|j|jƒdS(Ni˙˙˙˙(t new_compilerRtdry_runR (RRR!RR"R RRRtset_include_dirsRt define_macroRtundefine_macrotbuild_libraries(RR!tnametvaluetmacro((s2/sys/lib/python2.7/distutils/command/build_clib.pytrun_s    cCsęt|tƒstd‚nxČ|D]Ŕ}t|tƒ rVt|ƒdkrVtd‚n|\}}t|tƒstdd‚nd|ksŤtjdkrĂtj|krĂtdd|d ‚nt|tƒs"td d ‚q"q"Wd S( s`Ensure that the list of libraries is valid. `library` is presumably provided as a command option 'libraries'. This method checks that it is a list of 2-tuples, where the tuples are (library_name, build_info_dict). Raise DistutilsSetupError if the structure is invalid anywhere; just returns otherwise. s+'libraries' option must be a list of tuplesis*each element of 'libraries' must a 2-tuples+first element of each tuple in 'libraries' s#must be a string (the library name)t/sbad library name '%s': s$may not contain directory separatorsis,second element of each tuple in 'libraries' s!must be a dictionary (build info)N( RtlistRttupletlenRRtseptdict(RRtlibR't build_info((s2/sys/lib/python2.7/distutils/command/build_clib.pyRws*   "   *cCs>|js dSg}x$|jD]\}}|j|ƒqW|S(N(RRtappend(Rt lib_namestlib_nameR2((s2/sys/lib/python2.7/distutils/command/build_clib.pytget_library_names›s  cCs‚|j|jƒg}xe|jD]Z\}}|jdƒ}|dks]t|ttfƒ rmtd|‚n|j|ƒq W|S(Ntsourcessfin 'libraries' option (library '%s'), 'sources' must be present and must be a list of source filenames( RRtgetRRR,R-Rtextend(Rt filenamesR5R2R7((s2/sys/lib/python2.7/distutils/command/build_clib.pytget_source_files§s" c Csóxě|D]ä\}}|jdƒ}|dksDt|ttfƒ r\tddd|‚nt|ƒ}tjd|ƒ|jdƒ}|jdƒ}|jj |d|j d|d|d |j ƒ}|jj ||d|j d |j ƒqWdS( NR7s&in 'libraries' option (library '%s'), s&'sources' must be present and must be sa list of source filenamessbuilding '%s' librarytmacrosRt output_dirR (R8RRR,R-RRtinfoRtcompileRR tcreate_static_libR(RRR5R2R7R<Rtobjects((s2/sys/lib/python2.7/distutils/command/build_clib.pyR&ľs$"    (s build-clib=Rs%directory to build C/C++ libraries to(s build-temp=Rs,directory to put temporary build by-products(sdebugR s"compile with debugging information(sforceR s2forcibly build everything (ignore file timestamps)(s compiler=R sspecify the compiler typeN(t__name__t __module__t descriptiont user_optionstboolean_optionsRRt help_optionsRR R*RR6R;R&(((s2/sys/lib/python2.7/distutils/command/build_clib.pyRs*      $ ( t__doc__t __revision__Rtdistutils.coreRtdistutils.errorsRtdistutils.sysconfigRt distutilsRRR(((s2/sys/lib/python2.7/distutils/command/build_clib.pyts