JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr YfV@srdZddlZddlmZddlTddlmZddlmZddZ Gd d d eZ dS) zdistutils.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.N)Command)*)customize_compiler)logcCsddlm}|dS)Nr)show_compilers)distutils.ccompilerr)rrA/opt/alt/python35/lib64/python3.5/distutils/command/build_clib.pyrsrc@seZdZdZd"d#d$d%d&gZdd gZdddefgZddZddZ ddZ ddZ ddZ ddZ d d!ZdS)' build_clibz/build C/C++ libraries used by Python extensions build-clib=b%directory to build C/C++ libraries to build-temp=t,directory to put temporary build by-productsdebugg"compile with debugging informationforcef2forcibly build everything (ignore file timestamps) compiler=cspecify the compiler typez help-compilerNzlist available compilerscCsUd|_d|_d|_d|_d|_d|_d|_d|_d|_dS)Nr) r build_temp libraries include_dirsdefineundefrrcompiler)selfrrr initialize_options4s        zbuild_clib.initialize_optionscCs|jdddd d d |jj|_|jrD|j|j|jdkrh|jjpbg|_t|jtr|jjtj |_dS) NZbuildrr rrr)rr )rr)rr)rr)rr) Zset_undefined_optionsZ distributionrcheck_library_listr isinstancestrsplitospathsep)r rrr finalize_optionsDs  zbuild_clib.finalize_optionscCs|js dSddlm}|d|jd|jd|j|_t|j|jdk rs|jj|j|j dk rx*|j D]\}}|jj ||qW|j dk rx!|j D]}|jj |qW|j |jdS)Nr) new_compilerrdry_runr)rrr)rr*rrrZset_include_dirsrZ define_macrorZundefine_macrobuild_libraries)r r)namevalueZmacrorrr run^s    zbuild_clib.runcCst|tstdx|D]}t|t rVt|dkrVtd|\}}t|ts}tdd|kstjdkrtj|krtd|dt|ts"tdq"Wd S) a`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. z+'libraries' option must be a list of tuplesz*each element of 'libraries' must a 2-tuplezNfirst element of each tuple in 'libraries' must be a string (the library name)/z;bad library name '%s': may not contain directory separatorsrzMsecond element of each tuple in 'libraries' must be a dictionary (build info)N) r#listDistutilsSetupErrortuplelenr$r&sepdict)r rlibr, build_inforrr r"vs"   "   *zbuild_clib.check_library_listcCs>|js dSg}x$|jD]\}}|j|qW|S)N)rappend)r Z lib_nameslib_namer8rrr get_library_namess  zbuild_clib.get_library_namescCs|j|jg}xe|jD]Z\}}|jd}|dks]t|ttf rmtd||j|q W|S)Nsourceszfin 'libraries' option (library '%s'), 'sources' must be present and must be a list of source filenames)r"rgetr#r1r3r2extend)r filenamesr:r8r<rrr get_source_filess" zbuild_clib.get_source_filesc Csx|D]\}}|jd}|dksDt|ttf rTtd|t|}tjd||jd}|jd}|jj|d|j d|d|d|j }|jj ||d|j d|j qWdS)Nr<zfin 'libraries' option (library '%s'), 'sources' must be present and must be a list of source filenameszbuilding '%s' librarymacrosrZ output_dirr) r=r#r1r3r2rinforcompilerrZcreate_static_libr )r rr:r8r<rArZobjectsrrr r+s$"     zbuild_clib.build_libraries)r r r )rrr)rrr)rrr)rrr)__name__ __module__ __qualname__Z descriptionZ user_optionsZboolean_optionsrZ help_optionsr!r(r.r"r;r@r+rrrr r s*       $ r ) __doc__r&Zdistutils.corerZdistutils.errorsZdistutils.sysconfigrZ distutilsrrr rrrr s