m yAc@s!dZdkZdkZdkZdkZdkZdkZdklZl Z l Z l Z dk l Z lZlZdklZlZlZlZlZdklZdklZlZdklZlZdklZl Z d k!l"Z"d k#l$Z$d k%l&Z&d k'l(Z(d k)l*Z*dk+l,Z,dk-l.Z.dk/l0Z0dk1l2Z2dk3l4Z4dk5Z6ei7d djo^ydk8l9Z9Wne:j o e;Z9nXydk8l<Z<Wne:j o e;Z<nXn e;Z9e;Z<dZ=dZ>e;dZ?ddZ@dddZAdZBdZChd d!d"f<d#d$d%f<d&d'd(feiRiSeiTd?gZUeId@eiRiSeiTdAgZVeJeUeJeVe>odBGHdCGeUGHdDGeVGHneIgZWeIgZXeJeWeJeXe>odEGHdCGeWGHdDGeXGHndFfdGYZYdHeYe$fdIYZZei7d dJjodKdLdMdNdOgZ[ndKdPdMdOgZ[ei\Z]dQZ^e^e_\dRe"fdSYZ_dTefdUYZ`dVe&fdWYZadXe*fdYYZbdZeYe(fd[YZcd\e,fd]YZdd^fd_YZed`efdaYZfdbe2fdcYZgdde4fdeYZhdfefdgYZidhe.fdiYZjdje0fdkYZkdlekfdmYZldnZmdS(os< Distutils Extensions needed for the mx Extensions. Copyright (c) 1997-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2004, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. N(sDistutilsErrorsDistutilsExecErrors CompileErrorsCCompilerError(ssetups ExtensionsCommand(sget_config_h_filenamesparse_config_hscustomize_compilersget_python_incsget_config_vars(s MSVCCompiler(sexecutes get_platform(s remove_treesmkpath(sspawnsfind_executable(s Distribution(sconfig(sbuild(s build_ext(s build_clib(sbuild_py(s bdist_rpm(s bdist_dumb(sinstall(s install_datais2.0(s bdist_ppm(sGenPPDs2.1.1icCsto d|GHnx|D]}tii||}tii|oy|oVt |i }t i||t ip!d}to d|GHqqnd}nto d|GHn|Sqto d|GHqqWto dGHndS(sg Look for a file in the directories defined in the list paths. If pattern is given, the found files are additionally checked to include the given RE search pattern. Pattern matching is done case-insensitive per default. Returns the directory where the file can be found or None in case it was not found. slooking for %s ...s %s: found, but not matcheds %s: found and matcheds %s: not founds not foundN(t_debugtfilenametpathstdirtostpathtjointpathnametexiststpatterntopentreadtdatatretsearchtItNone(RRR RR R((t1/mirror/zmath/src/egenix-mx-base-2.0.6/mxSetup.pyt find_fileBs.      icCs]||joLtii|o9|djo|t|d}n|i||ndS(Nii(RtpathlistRRtisdirtindextlentinsert(RRR((Rtadd_dircs  icCso|otid }ntid }|o?|djo2ytdWntj oqkX|d}n|S(sO Return the Python version as short string. If unicode_aware is true (default), the function also tests whether a UCS2 or UCS4 built is running and modifies the version accordingly. If include_patchlevel is true (default is false), the patch level is also included in the version string. iis2.0itucs4N(tinclude_patchleveltsystversiont unicode_awaretunichrt ValueError(RRR((Rt py_versionks  cCs0t|dii}|t| |jS(s Check whether the version string version matches the version data in the Zope product version.txt file version_txt. trN(R t version_txtR tstripR RR(RR"R ((Rtcheck_zope_product_versionsc CsI|idjo+tdddddd\}}}}}}t i i d|pd}t i i d|pd}t i i d|pd}t i i d|pd}t i i d|pd}t i i d|pd}|i d d |d d |||fd d||||fd|d|||_ n t|dS(NtunixtCCtOPTt BASECFLAGStCCSHAREDtLDSHAREDtSOtt preprocessors%s -Etcompilers%s %s %st compiler_sos %s %s %s %st linker_sot linker_exe(R.t compiler_typetget_config_varstcctopttccsharedt basecflagstldsharedtsoRtenvirontgettset_executablestshared_lib_extensiontcustomize_compiler(R.R5R7R4R9R8R6((Rtmx_customize_compilers   tgzips.gzs-f9tbzip2s.bz2tf9tcompresss.Zs-fs-chfc Cs|d}ttii|d|d|||g}t |d|d||ojyt |\}} Wn tj otdtnX|| |g}t |d|d|||}n|S(Ns.tartdry_runttartverbosesunknown compression program: %s(t base_namet tar_archivetmkpathRRtdirnameRDt tar_optionstbase_dirtcmdtspawnRFt compressiontcompression_programstexttoptionstKeyErrorRRC( RGRLRORFRDRKRMRHRQRR((Rtmx_make_tarballs tgztarROsgzipped tar-filetbztarsbzip2ed tar-filetztarscompressed tar fileREstar filecCsIytii}Wntj o d}nXytii}Wntj o d}nXg}xtt|D]}||}|dj o||}n|dj o?||}d|jo"t i t id|d}qnt i|}ti|jo |it i|tiqq|o|i|qqqqW|S(s Builds a path list from a list of directories/paths. The dirs list may contain shell variable references and user dir references. These will get expanded automatically. Non-existing shell variables are replaced with an empty string. Path entries will get expanded to single directory entries. Empty string entries are removed from the list. t$s\$\w+|\{[^}]*\}R,N(RRt expandvarstAttributeErrorRt expandusertrangeRtdirstiRtstringRR tsplitR#tpathseptextendtappend(R]R[R^RYRR((Rt build_paths2        & cCs}h}g}xc|D][}tii|oBtii|o/|i|pd||<|i|qnqqW||(dS(s Verify the directories in path for existence and their directory nature. Also removes duplicates from the list. iN( tdtlRRRRRthas_keyRc(RReRRf((Rt verify_paths& c Csy_dkl}l}|}|o,|d}|d|}|d|}n g}g}Wn~tj ordkl}y+|}|id}|id}Wn*t j o}dG|GHg}g}nXd}nX||fS( s Return a tuple (libpath, inclpath) defining the search paths for library files and include files that the MS VC++ compiler uses per default. Both entries are lists of directories. Only available on Windows platforms with installed compiler. (sget_devstudio_versionssget_msvc_pathsitincludetlib(s MSVCCompilertlibrarys *** Problem:N( tdistutils.msvccompilertget_devstudio_versionstget_msvc_pathst msvc_versionst msvc_versiontinclpathtlibpatht ImportErrort MSVCCompilert msvccompilert ExceptiontwhyR( RnRuRoRtRqRrRmRpRw((RRn s,         s/usr/libs/opt/libs$LIBs /usr/includes /opt/includes$INCLUDEtwins/usr/local/libRjs/usr/local/includeRismxSetup found these paths:s lib path:s include path:s;mxSetup will additionally scan these paths during autoconf:tCompilerSupportMixincBstZdZdZdZRS(sj Compiler support mixin which makes sure that the .compiler attribute is properly setup. icCs|iodSn|idjo|in|i}|idjo d|_nxtD]}t||i q]Wxt D]}t||i q~Wt |id|_dS(NR,i( tselftprepared_compilerR.Rt_check_compilert exe_extensiontLIBPATHRRt library_dirstINCLPATHt include_dirsR?(RzRR.((Rtprepare_compilerys    (t__name__t __module__t__doc__R{R(((RRyps t mx_autoconfcBstZdZdZeidedfgZdZddgfddgfddgffZd Z d Z d Z d Z eeeed Z dZeeeedddZeeegdZedZeddZRS(se Auto-configuration class which adds some extra configuration settings to the packages. s5auto-configuration build step (for internal use only)senable-debuggingscompile with debugging supportitstrftimestime.htstrptimettimegmcCs#ti|d|_d|_dS(Ni(tconfigtinitialize_optionsRztnoisyt dump_source(Rz((RRs  cCsti|dS(N(Rtfinalize_optionsRz(Rz((RRscCs|iodSn|ip|it|in|i}|idjo d|_nxtD]}t ||i qdWxt D]}t ||i qWd|_dS(NR,i( RzR{R.R|R?R}RR~RRRRR(RzRR.((RRs     c Cs|i|iiddt} yt| }Wn,tj o }|i d| h}nXt |}|i tid djod|d ss%updated build_ext with autoconf setup(RR(RN()RzRR.t define_macrotget_config_h_filenametconfig_hR t configfiletIOErrorRwtwarnt configurationtparse_config_htcloseRtplatformtdefinetundeft api_checkstapinamet includefilesR_tuppert macro_nameRgtcheck_functionRctcheck_bad_staticforwardtenable_debuggingRtannouncet distributiontreinitialize_commandRtensure_finalizedttypettypest StringTypeR`Rftmap( RzRRRRRRRRwRfRR((RtrunsT             cCs#|i|i|||||S(s Check whether sourcecode compiles and links with the current compiler and link environment. For documentation of the other arguments see the base class' .try_link(). N(RzRttry_linkt sourcecodetheadersRt librariesR(RzRRRRR((Rtcheck_compilers  cCs0d}|i|i|dddtg S(s Check whether the compiler does not supports forward declaring static arrays. For documentation of the other arguments see the base class' .try_link(). s typedef struct _mxstruct {int a; int b;} mxstruct; staticforward mxstruct mxarray[]; statichere mxstruct mxarray[] = {{0,2},{3,4},}; int main(void) {return mxarray[0].a;} RsPython.hRN(sPython.h(tbodyRzRt try_compiletget_python_inc(RzR((RR)s   c Csg}|o|id|n|id|o|id|n|id||idti|dd}|i|||||S(s Check whether function is available in the given compile and link environment. If prototype is true, a function prototype is included in the test. If call is true, a function call is generated (rather than just a reference of the function symbol). For documentation of the other arguments see the base class' .try_link(). sint %s (void);sint main (void) {s %s();s %s;s return 0; }s N( Rt prototypeRctfunctiontcallR_RRzRRRRR( RzRRRRRRRR((RR=s  cCs&d}|i||||g||S(s Check whether we can link against the given library. For documentation of the other arguments see the base class' .try_link(). sint main (void) { return 0; }N(RRzRRRRktother_librariesR(RzRkRRRRR((Rt check_libraryYscCsP|i||iitt}t|to dG|GHnt |||S(s Find an include file of the given name. The search path is determined by the paths parameter, the compiler's .include_dirs attribute and the STDINCLPATH and FINDINCLPATH globals. The search is done in this order. RN( RzRRR.Rt STDINCLPATHt FINDINCLPATHRhRRRR (RzRRR ((Rtfind_include_filefs   tsharedtstaticcCs|i||iitt}t|to dG|GHnxM|D]E}|ii |d|}t|||}|dj o|SqGqGWdS(sj Find a library of the given name. The search path is determined by the paths parameter, the compiler's .library_dirs attribute and the STDLIBPATH and FINDLIBPATH globals. The search is done in this order. Shared libraries are prefered over static ones if both types are given in lib_types. R~tlib_typeN(RzRRR.Rt STDLIBPATHt FINDLIBPATHRhRt lib_typesRtlibrary_filenametlibnameRRR RR(RzRRR RRRR((Rtfind_library_filexs        (RR(RRRt descriptionRt user_optionsRRRRRRRRRRRRR(((RRs *    H  s2.4s/O2s/Gfs/GBs/GDs/Ob2s/GFcOs+tt|f|||iitdS(N(tapplytold_MSVCCompiler__init__Rztargstkwstcompile_optionsRbtMSVC_COMPILER_FLAGS(RzRR((Rtmx_msvccompiler__init__stmx_DistributioncBsZtZdZeZdeijo-eidedfgZeidgZndZRS(sM Distribution class which knows about our distutils extensions. t classifierss1print the list of classifiers (not yet supported)cCs|iot|idjS(Ni(RztunixlibsR(Rz((Rt has_unixlibss( RRRRRt Distributiontdisplay_optionstdisplay_option_namesR(((RRs t mx_ExtensioncBsGtZdZdZfZfZfZdZfZfZ dZ dZ RS(sv Extension class which allows specifying whether the extension is required to build or optional. iRRicOsxdD]w}|i|ot||||||=qt||}t|tfjot||t|qqWt t i |f||dS( NtrequiredRtoptional_librariestneeded_includestneeded_librariest data_filestpackages(srequireds lib_typessoptional_librariessneeded_includessneeded_librariess data_filesspackages( tattrRRgtsetattrRztgetattrtvalueRtlistRt Extensiont__init__R(RzRRRR((RRs (ssharedsstatic( RRRRRRRRRRtsuccessfully_builtR(((RRs tmx_buildcBstZdZdZeeidjo edndeifdefdei fdei fdei fd ei fgZRS( sH build command which knows about our distutils extensions. cCs |iiS(N(RzRR(Rz((RRsis incompatible distutils version !t build_clibt build_unixlibRRtbuild_pyt build_scripts( RRRRRtbuildt sub_commandstDistutilsErrorthas_c_librariesthas_ext_modulesthas_pure_modulest has_scripts(((RR s   t mx_build_clibcBs tZdZdZdZRS(sX build_clib command which builds the libs using separate temp dirs c Cs|i}tii|||_z|id}|djpt |t i t ifjotddd|nt|}|id||id}|id}|ii|d|id|d|d |i}|ii||d|id |iWd||_XdS( Ntsourcess&in 'libraries' option (library '%s'), s&'sources' must be present and must be sa list of source filenamessbuilding '%s' librarytmacrosRt output_dirtdebug(Rzt build_temptbuild_temp_baseRRRtlib_namet build_infoR;RRRRtListTypet TupleTypetDistutilsSetupErrorRRRRR.tcompileRtobjectstcreate_static_libR(RzRRRRRRR((Rt build_library)s( ,    cCs+x$|D]\}}|i||qWdS(N(RRRRzR (RzRRR((Rtbuild_librariesXs (RRRR R (((RR#s  /t mx_build_extcBsitZdZeidedfdedfgZeZeZeZdZ dZ dZ dZ RS( sh build_ext command which runs mx_autoconf command before trying to build anything. sdisable-build=svdisable building an optional extensions (comma separated list of dotted package names); default is to try building alls enable-build=saif given, only these optional extensions are built (comma separated list of dotted package names)cCsti||idjo f|_nBt|itijo(tt i t i |id|_nt|i tijo(tt i t i |i d|_ ndS(NR( RRRzt disable_buildRRRRRR_R#R`t enable_build(Rz((RRxs    cCsr|iio2|id}|i\}}||id*n|i d|id|_ t i |dS(NRiR( RzRRtget_finalized_commandRtget_unixlib_lib_optionsRtlibsRt run_commandtautoconfRR(RzRRR((RRs cCs|i|i|i_|i|ix|iD]}|i|q3Wg}xM|iD]B}t |t p|i |qZ|i o|i |qZqZW||_t odGt|iGHn|iddS(Ns extensions:R,(RzRR.Rtcheck_extensions_listt extensionsRQtbuild_extensionRft isinstanceRRcRRtreprR(RzRfRQ((Rtbuild_extensionss"     cCspt|d p|i} |id|id|i| dpdf| pd|idj o(|i|ijo|iddSq|i|ijo|iddSqnt|do|i o|id |ix|i D]\}}}|i i|||} | dj oY|id || f| |ijo.| tjo!| tjo|ii| qq| otd |q|id |i|fdSqWnt|d o|io|id|ix|iD]\}}}|i i||||i} | dj o}|id|| f| |ijo.| tjo!| tjo|ii| n||ijo|ii|qq| otd|q|id|i|fdSqWn|i}ti ti!|idt"i#}t"i%i |||_t|do|i&o|idx|i&D]\}} |i i(|d| oTdti)|}|id||f|ii||i+i|dfq]|id|q]Wnt,o`dGt-|i|i.iGHdGt-|i|i.iGHdGt-|iGHdGt-|i+GHnd} zt|d p|i} | ot0i1||d} n]yt0i1||Wn?t2t3fj o-} |id |it5i6dfnXd} Wd||_X| oat|d!o|i7i8i9|i8nt|d"o|i7i:i9|i:nd|_/ndS(#NRR,sbuilding extension "%s" %ss (required)s (optional)s3skipped -- build not enabled by command line options0skipped -- build disabled by command line optionRs1looking for header files needed by extension "%s"s.found needed include file "%s" in directory %ss&could not find needed header file "%s"sR*** WARNING: Building of extension "%s" failed: needed include file "%s" not foundRs.looking for libraries needed by extension "%s"s)found needed library "%s" in directory %ss"could not find needed library "%s"sM*** WARNING: Building of extension "%s" failed: needed library "%s" not foundt.Rschecking for optional librariesRs HAVE_%s_LIBs*found optional library '%s' -- defining %sRs3could not find optional library '%s' -- omitting its Include dirs:s Libary dirs:s Libaries:sMacros:iis2*** WARNING: Building of extension "%s" failed: %sRR(;thasattrRQRRzRtnameRRR RRR]R RRRRRRRct CompileErrorRRRRRRR~RRRR_RR`RtseptextpathRRt headerfilesRRRt define_macrosRRR.RRRtCCompilerErrorRRwRtexc_infoRRRbR(RzRQRR RRR]RRRR RwRR((RRs %#       *     *  $   )  ( RRRRRRRR RRRRR(((RR as %   t mx_build_pycBsRtZdZeidedfgZeidgZdZdZddZ RS(sz build_py command which also allows removing Python source code after the byte-code compile process. swithout-sourcesonly include Python byte-codeic Cs}|io'|i o|i o d|_q1nti||io1|id|i}|i}xti |ddD]}|ddjoq}nt t i |fd|d|d ||ipK|d }t ii|o*t t i |fd|d|d |qn|idjoK|d }t ii|o*t t i |fd|d|d |qqq}q}WndS( Nis/removing Python source files (--without-source)tinclude_bytecodeiis.pys removing %sRFRDtcto(Rztwithout_sourceRtoptimizeRRRRFRDt get_outputstfiletexecuteRtremoveRRtisfile(RzRFRDRR+((RR]s4         icCs|i p| oti||Sng}xzti|ddD]c}|ddjp8|i o|ddjp|i o|ddjoqCn|i |qCW|S(NR%iis.pyis.pycs.pyo( RzR(R%RR*tfilesR+RR)Rc(RzR%R/R+((RR*sI( RRRRRRtboolean_optionsR(RR*(((RR$Ns  &t UnixLibrarycBsPtZdZdZdZeZdZeZeZ eeedZ edZ RS(s/ Container for library configuration data. R,t configurec Cs||_||_x|D] \}}qW||_|o ||_n|o ||_n g|_|o ||_n g|_dS(N( RRzt sourcetreetlibfilestlibfilet targetdirR2tconfigure_optionst make_options( RzRR3R4R2R7R8R5R6((RRs        cCst|||S(N(RRztoptiont alternative(RzR9R:((RR;s( RRRRR3RR4R2R7R8RR;(((RR1s tmx_build_unixlibcBstZdZdZeZddded fd ed fdgZd gZdZdZ gdZ geddZ gedgdZ dZ dZdZdZRS(s This command compiles external libs using the standard Unix procedure for this: ./configure make s.build Unix libraries used by Python extensionss build-lib=tbs*directory to store built Unix libraries ins build-temp=tts$directory to build Unix libraries tosmake=smake program to uses makefile=smakefile to usetforcetfsforcibly reconfigurecCs1d|_d|_d|_d|_d|_dS(Ni(RRzt build_libRtmaketmakefileR>(Rz((RRs     cCs]|iddd d |idjo d|_n|idjo d|_nd|_dS( NRRFR@RRAtMakefilei(sverbosesverbose(s build_libs build_lib(s build_temps build_temp(Rztset_undefined_optionsRARRBRF(Rz((RRs   cCs|opg}xI|D]A\}}|dj o|id||fq|i|qW|dti|d}n|i djo|i dt |n|i odSnyti|}Wntj o}t|nX|S(Ns%s=%st isexecuting script %si(RRRftktvRRctscriptR_RRzRFRRRDRtsystemtrctDistutilsExecErrortmsgR(RzRHRRRFRJRfRGRL((Rt run_scripts"   R2cCsd|}|od||}n|io"|id||pdfn|i||}|djo t dndS(s Run the configure script using options is given. Options must be a list of tuples (optionname, optionvalue). If an option should not have a value, passing None as optionvalue will have the effect of using the option without value. dir can be given to have the configure script execute in that directory instead of the current one. s./%sscd %s; srunning %s in %sRisconfigure script failedN( R2RMRRzRFRRMRRRJR(RzRRRR2RMRJ((Rt run_configures   " RAcCsd|}|o|dti|d}n|od||}n|io"|id||pdfn|i ||}|djo t dndS( s Run the make command for the given targets. Targets must be a list of valid Makefile targets. dir can be given to have the make program execute in that directory instead of the current one. s%sREscd %s; srunning %s in %sRis make failedN( RARMttargetsR_RRRzRFRRMRRRJR(RzRORRARRRMRJ((Rtrun_make&s   " c Cs*|i}|i}tii|||_z|i }|i }|i } |i } tii|i| }|i} | ptd|in|io|id|i|fn|io|id|in|i||i| |tiitii||i p |io|i|d|d|n#|io|id|in|id|d|id| x| D]\}}|pqntii|i|}tii|i|}tii|ptd |n|i||i||qWWd||_XdS( Ns$no libfiles defined for unixlib "%s"sbuilding C lib %s in %sspreparing build of %sRR2s,skipping configure: %s is already configuredRARRslibrary "%s" failed to build( RzRRtunixlibRRrRRRR2R7R8R3t buildtreeR4RRRFRRIt copy_treeRRBR>RNRPRAt sourcefilet destinationR@Rt copy_file( RzRQRUR2RRTRrRRR7R4R3R8((RR;sN          0       cCs"x|D]}|i|qWdS(N(RRQRzR(RzRRQ((Rtbuild_unixlibsyscCsg}g}x|iiD]}x|iD]\}}|p)t i i |i |}|i |q)t i i|}t i i|d}|d djo|d}n|i |t i i |i|}|i |q)WqW||fS(NiiRj(RRRzRRRQR4RTRURRRRRctbasenametsplitextRR@(RzRRURTRQRR((RR~s&     cCs,|iipdSn|i|iidS(N(RzRRRW(Rz((RRs (s build-lib=R<s*directory to store built Unix libraries in(s build-temp=R=s$directory to build Unix libraries to(sforceR?sforcibly reconfigure(RRRRRRARR0RRRMRNRPRRWRR(((RR;s '     >  t mx_installcBs tZdZdZdZRS(sU We want install_data to default to install_purelib if it is not given. cCs7|idj}ti||o|i|_ndS(N(Rzt install_dataRtfix_install_datatinstallRtinstall_purelib(RzR\((RRs cCs=ti||iddjo|id d|_ndS(Nis\DATAs\PURELIB(R]RRzR[(Rz((RRs (RRRRR(((RRZs  tmx_install_datacBs tZdZdZdZRS(s? Rework the install_data command to something more useful. cCsZ|idjo"|iid}|i|_ntod|iGHnti|dS(NR]sInstalling data files to %s( Rzt install_dirRRtget_command_objt installobjR[RR(RzRb((RRs cCs3|ip|i|in|i}x|D]}t|ti jodpt i djo%t i t i|dt i}nti|}x|D]{}t ii |i|}t ii|d}|ip'|i||i||d}n|}|ii|qWq1tdq1WdS(Nitposixt/is"tuples in data_files not supported(RzRDRIR`t get_inputsRtentryRRRRRR_RR`Rtglobt filenamesRRtdsttdstdirRVtoutfiletoutfilesRcR(RzRiRjRhRkRfRR((RRs&  %  (RRRRR(((RR_s  t mx_uninstallcBs/tZdZgZdZdZdZRS(Ns+uninstall the package files and directoriescCsdS(N((Rz((RRscCsdS(N((Rz((RRsc Cs|id|id|ii}d|i_|id|idd|i_|id||i_|id}|id}|idh}|i }x|D]}t ii|ptd |nt ii|o|id ||ipyt i|Wn&tj o}|id |nXt ii|d}|i|pd||yt i|Wqtj o}|id|qXqqWdS(Nsdetermining installation filess(re)building packageiRsdry-run package installiR]sremoving filess+filename %s from .get_output() not absolutes removing %ssCould not remove file: %ss.pyR&R's.pyos.pycs"skipping removal of %s (not found)sremoving directoriessremoving directory %sscould not remove directory: %s(s.pyos.pyc(RzRRRDt savevalueRRRR]R]R*RhRRRtisabsRR.R-tOSErrortdetailsRR`RRgRYRtkeystsorttreversetrmdir( RzR]RhRR]RqRRRn((RRsj               (RRRRRRR(((RRms   t mx_bdist_rpmcBsQtZdZeidedfdedfgZeZeZdZdZ RS(sK bdist_rpm command which allows passing in distutils options. sdistutils-build-options=s?extra distutils build options to use before the "build" commandsdistutils-install-options=sBextra distutils install options to use after the "install" commandcCsKti||idjo d|_n|idjo d|_ndS(NR,(t bdist_rpmRRztdistutils_build_optionsRtdistutils_install_options(Rz((RRHs   cCsti|}|id}||d}ti||dd}|djo*d|| |i ||f||dRR3RlRttdistutils.utilR,Rtdistutils.dir_utilt remove_treeRItdistutils.spawnRNtfind_executabletdistutils.distRtdistutils.command.configRtdistutils.command.buildRtdistutils.command.build_extRtdistutils.command.build_clibRtdistutils.command.build_pyRtdistutils.command.bdist_rpmRwtdistutils.command.bdist_dumbRtdistutils.command.installR]tdistutils.command.install_dataR[tdistutils.archive_utilt distutilsRtdistutils.commandRRsRRt __version__RRRR R$R?RPRTt archive_utiltARCHIVE_FORMATSRRdRhRnRRRRrRqRbRRtprefixR~RRRRyRRRRRRRRRR R$R1R;RZR_RmRvRRR(NRNRwRRRqR~RR3RR"R RRRR RRRRZR>RvRhRR R;R_RrRRtRRRRRRRRRnRRKR_RR?RRgRRRRRRRRRRRR1RRRRdR,RmRRPRIR[RRRR$RyRTRR]RR$R((Rt? s 6%              !  3 %  .   $$           '    ?>H2+T='