3 ª fJ<ã@spdZddlZddlZddlmZddlmZddlmZm Z ddl Tddl m Z ddl mZGd d „d eƒZdS) zzdistutils.command.bdist_wininst Implements the Distutils 'bdist_wininst' command: create a windows installer exe-program.éN)ÚCommand)Ú get_platform)Ú create_treeÚ remove_tree)Ú*)Úget_python_version)Úlogc@s€eZdZdZd4dddeƒfd6d8d9d:d;dd?d@dAg ZddddgZd&d'„Zd(d)„Zd*d+„Z d,d-„Z dBd.d/„Z d0d1„Z d2d3„Z dS)CÚ 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 UACcCsRd|_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©r5úD/opt/alt/python36/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Úbdistr0ZwininstÚzMtarget version can only be %s, or the '--skip-build' option must be specifiedr-r(z(install_script '%s' not found in scripts)r0r0)r-r-)r(r()Zset_undefined_optionsr'r0r(Ú distributionZget_command_objÚget_finalized_commandÚ bdist_baseÚosÚpathÚjoinr,Úhas_ext_modulesrZDistutilsOptionErrorr1ÚscriptsÚbasename)r4r8r<Z short_versionÚscriptr5r5r6Úfinalize_optionsJs4      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¬|jsštd ƒ‚d tjdd …}d |j |f}|jdƒ}tjj|jd |ƒ|_x6dD].}|jƒ}|dk�rþ|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)NÚwin32z^distribution contains extensions and/or C libraries; must be compiled on a Windows 32 platformÚbuildÚinstallé)Zreinit_subcommandsrÚ install_libz Should have already checked thisz%d.%déz.%s-%sÚlibÚpurelibÚplatlibÚheadersrAÚdataz/Include/$dist_nameZinstall_zinstalling to %sZPURELIB)ÚmktempÚzip)Zroot_dirÚanyr zremoving temporary file '%s')Údry_run)rLrMrNrArO).ÚsysÚplatformr:r@Zhas_c_librariesZDistutilsPlatformErrorr0Z run_commandZreinitialize_commandr'ÚrootZwarn_dirr(ÚcompileÚoptimizer,ÚAssertionErrorÚ 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) r4rGrIr,Zplat_specifierrFÚkeyÚvaluerPZarchive_basenameÚfullnameÚarcnameZ pyversionr5r5r6r_psf                   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]r9Ú cSs |jddƒS)Nrjz\n)Úreplace)Úsr5r5r6Ú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)rnrorprqrrrsrtru)r:ÚmetadatarbZlong_descriptionÚgetattrÚ capitalizer1r*r+r,r3r/r`ÚtimeÚ distutilsZctimeÚ __version__r?) r4Úlinesrvr]rmrsrOr/ryrzZ build_infor5r5r6Ú 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()r4rhr�r5r5r6rc$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.0rEéÚwinr9zwininst-%s%s.exer~)rr,Zmsvcrtr�Ú ImportErrorÚ partitionr=r>ÚdirnameÚ__file__r(r?r…r†Úclose) r4Z cur_versionZbvr�ÚmajorZ directoryZsfixÚfilenameÚfr5r5r6r‰1s8         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__rprZ user_optionsZboolean_optionsr7rDr_r}rarcr‰r5r5r5r6r sN&Q. 5 r )Ú__doc__rTr=Zdistutils.corerZdistutils.utilrZdistutils.dir_utilrrZdistutils.errorsZdistutils.sysconfigrrzrr r5r5r5r6Ús