3 öLÖjÈ<ã@slddlZddlZddlmZddlmZddlmZmZddl Tddl m Z ddl m Z Gdd „d eƒZdS) éN)ÚCommand)Ú get_platform)Ú create_treeÚ remove_tree)Ú*)Úget_python_version)Úlogc@sŠeZdZdZd5dddeƒfd7d9d:d;dd?d@dAdBg ZddddgZejd&kZ d'd(„Z d)d*„Z d+d,„Z d-d.„Z dCd/d0„Zd1d2„Zd3d4„ZdS)DÚ bdist_wininstz-create an executable installer for MS Windowsú bdist-dir=Nú1temporary directory for creating the distributionz plat-name=Úpz;platform name to embed in generated filenames (default: %s)ú keep-tempÚkz/keep the pseudo-installation tree around after z!creating the distribution archiveútarget-version=z!require a specific python versionz on the target systemúno-target-compileÚcú/do not compile .py to .pyc on the target systemúno-target-optimizeÚoú;do not compile .py to .pyo (optimized) on the target systemú dist-dir=Údú-directory to put final built distributions inúbitmap=Úbú>bitmap to use for the installer instead of python-powered logoútitle=Útú?title to display on the installer background instead of defaultú skip-buildú2skip rebuilding everything (for testing/debugging)úinstall-script=úUbasename of installation script to be run after installation or before deinstallationúpre-install-script=ú{Fully qualified filename of a script to be run before any files are installed. This script need not be in the distributionúuser-access-control=úŠspecify Vista's UAC handling - 'none'/default=no handling, 'auto'=use UAC if target Python installed for all users, 'force'=always use UACÚwin32cCsRd|_d|_d|_d|_d|_d|_d|_d|_d|_d|_ d|_ d|_ d|_ dS)Nr) Ú bdist_dirÚ plat_nameÚ keep_tempÚno_target_compileÚno_target_optimizeÚtarget_versionÚdist_dirÚbitmapÚtitleÚ skip_buildÚinstall_scriptÚpre_install_scriptÚuser_access_control)Úself©r6ú7/usr/lib64/python3.6/distutils/command/bdist_wininst.pyÚinitialize_options=sz bdist_wininst.initialize_optionscCsæ|jdd ƒ|jdkrR|jr6|jr6|jjdƒ}|j|_|jdƒj}tj j |dƒ|_|j s^d|_ |j rš|jj ƒršt ƒ}|j r”|j |kr”td|fƒ‚||_ |jdd d ƒ|jrâx2|jjD]}|jtj j|ƒkr¸Pq¸Wtd|jƒ‚dS) NÚbdistr1ZwininstÚzMtarget version can only be %s, or the '--skip-build' option must be specifiedr.r)z(install_script '%s' not found in scripts)r1r1)r.r.)r)r))Zset_undefined_optionsr(r1r)Ú distributionZget_command_objÚget_finalized_commandÚ bdist_baseÚosÚpathÚjoinr-Úhas_ext_modulesrZDistutilsOptionErrorr2ÚscriptsÚbasename)r5r9r=Z short_versionÚscriptr6r6r7Úfinalize_optionsMs4      zbdist_wininst.finalize_optionsc Csätjdkr&|jjƒs|jjƒr&tdƒ‚|js6|jdƒ|jddd�}|j |_ |j|_d|_ |j |_ |jdƒ}d|_ d|_|jjƒrÌ|j}|sžd tjdd …}d |j |f}|jdƒ}tjj|jd |ƒ|_x4dD],}|jƒ}|dkrî|d}t|d||ƒqÒWtjd|j ƒ|jƒtjjdtjj|j dƒƒ|jƒtjd=ddlm}|ƒ} |jj ƒ} |j!| d|j d�} |j"| | |j#ƒ|jjƒ�r”t$ƒ} nd} |jj%j&d| |j'| ƒfƒtj(d| ƒtj)| ƒ|j*�sàt+|j |j,d�dS)Nr'z^distribution contains extensions and/or C libraries; must be compiled on a Windows 32 platformÚbuildÚinstallé)Zreinit_subcommandsrÚ install_libz%d.%déz.%s-%sÚlibÚpurelibÚplatlibÚheadersrBÚdataz/Include/$dist_nameZinstall_zinstalling to %sZPURELIB)ÚmktempÚzip)Zroot_dirÚanyr zremoving temporary file '%s')Údry_run)rLrMrNrBrO)-ÚsysÚplatformr;rAZhas_c_librariesZDistutilsPlatformErrorr1Z run_commandZreinitialize_commandr(ÚrootZwarn_dirr)ÚcompileÚoptimizer-Ú version_infor<r>r?r@Z build_baseZ build_libÚupperÚsetattrrÚinfoZensure_finalizedÚinsertÚrunZtempfilerPÚ get_fullnameZ make_archiveÚ create_exer/rZ dist_filesÚappendÚget_installer_filenameÚdebugÚremover*rrS) r5rGrIr-Zplat_specifierrFÚkeyÚvaluerPZarchive_basenameÚfullnameÚarcnameZ pyversionr6r6r7r^ssd                  zbdist_wininst.runc Cs`g}|jj}|jdƒ|jpdd}dd„}xJdD]B}t||dƒ}|r2|d|jƒ||ƒf}|jd|||ƒfƒq2W|jdƒ|jr˜|jd|jƒ|jd||ƒƒ|jd|j ƒ|jd|j ƒ|j rä|jd|j ƒ|j �rü|jd|j ƒ|j �p |jj ƒ}|jd||ƒƒddl }ddl} d|j|j ƒƒ| jf} |jd| ƒdj|ƒS)Nz [metadata]r:Ú cSs |jddƒS)Nriz\n)Úreplace)Úsr6r6r7ÚescapeÑsz)bdist_wininst.get_inidata..escapeÚauthorÚ author_emailÚ descriptionÚ maintainerÚmaintainer_emailÚnameÚurlÚversionz %s: %sz%s=%sz [Setup]zinstall_script=%szinfo=%sztarget_compile=%dztarget_optimize=%dztarget_version=%szuser_access_control=%sztitle=%srzBuilt %s with distutils-%sz build_info=%s)rmrnrorprqrrrsrt)r;ÚmetadataraZlong_descriptionÚgetattrÚ capitalizer2r+r,r-r4r0r_ÚtimeÚ distutilsZctimeÚ __version__r@) r5Úlinesrur\rlrrrOr0rxryZ build_infor6r6r7Ú get_inidataÄs<   zbdist_wininst.get_inidatac Csddl}|j|jƒ|jƒ}|j|ƒ}|jd|ƒ|rPt|dƒjƒ}t|ƒ}nd}t|dƒ} | j |j ƒƒ|rz| j |ƒt |t ƒrŽ|j dƒ}|d}|jrÔt|jddd ��} | jƒj dƒ} WdQRX|| d }n|d}| j |ƒ|jd d t|ƒ|ƒ} | j | ƒ| j t|dƒjƒƒdS) Nrz creating %sÚrbÚwbÚmbcsóÚrzlatin-1)Úencodings zr?r@r.r))r5rgrŒr6r6r7rb's  z$bdist_wininst.get_installer_filenamec Cs tƒ}|jrl|j|krl|jdkr&d}q¬|jdkr6d}q¬|jdkrFd}q¬|jdkrVd}q¬|jdkrfd }q¬d }n@yd d lm}Wntk r”d }YnX|jd ƒd }|d}tjjt ƒ}|j dkrä|j dd…dkrä|j dd…}nd}tjj |d||fƒ}t |dƒ}z|j ƒS|jƒXdS)Nz2.4z6.0z7.1z2.5z8.0z3.2z9.0z3.4z10.0z14.0r)ÚCRT_ASSEMBLY_VERSIONÚ.z.0r'éÚwinr:zwininst-%s%s.exer})rr-Zmsvcrtr�Ú ImportErrorÚ partitionr>r?ÚdirnameÚ__file__r)r@r„r…Úclose) r5Z cur_versionZbvr�ÚmajorZ directoryZsfixÚfilenameÚfr6r6r7rˆ4s8         zbdist_wininst.get_exe_bytes)r Nr úPkeep the pseudo-installation tree around after creating the distribution archive)r rr›ú6require a specific python version on the target system)rNrœ)rrr)rrr)rrr)rrr)rrr)rNr )r!Nr")r#Nr$)r%Nr&)N)Ú__name__Ú __module__Ú __qualname__rorZ user_optionsZboolean_optionsrTrUZ _unsupportedr8rEr^r|r`rbrˆr6r6r6r7r sP &Q. 5 r )rTr>Zdistutils.corerZdistutils.utilrZdistutils.dir_utilrrZdistutils.errorsZdistutils.sysconfigrryrr r6r6r6r7Ús