î i f0:ã@s˜dZddlZddlZddlmZddlmZddlmZm 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ƒfdd d d fd dd dfd5d6d7d8d9d:d;d<d=g ZddddgZd&d'„Zd(d)„Zd*d+„Z d,d-„Z dd.d/„Z d0d1„Z d2d3„Z dS)>Ú 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)z keep-tempÚkz/keep the pseudo-installation tree around after z!creating the distribution archiveztarget-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=úTbasename of installation script to be run afterinstallation 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 UACcCsyd|_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©r3úD/opt/alt/python34/lib64/python3.4/distutils/command/bdist_wininst.pyÚinitialize_options:s            z bdist_wininst.initialize_optionscCs\|jdd ƒ|jdkr|jrR|jrR|jjdƒ}|j|_n|jdƒj}tj j |dƒ|_n|j s”d|_ n|j rð|jj ƒrðt ƒ}|j rä|j |krätd|fƒ‚n||_ n|jdd d ƒ|jrXxI|jjD]%}|jtj j|ƒkrPqqWtd|jƒ‚ndS) NÚbdistr.ZwininstÚzMtarget version can only be %s, or the '--skip-build' option must be specifiedr+r&z(install_script '%s' not found in scripts)ú skip_buildr8)údist_dirr9)ú plat_namer:)Zset_undefined_optionsr%r.r&Ú distributionZget_command_objÚget_finalized_commandÚ bdist_baseÚosÚpathÚjoinr*Úhas_ext_modulesrZDistutilsOptionErrorr/ÚscriptsÚbasename)r2r6r=Z short_versionÚscriptr3r3r4Úfinalize_optionsJs4      zbdist_wininst.finalize_optionsc Cs²tjdkr<|jjƒs-|jjƒr<tdƒ‚n|jsU|jdƒn|jdddƒ}|j |_ |j|_d|_ |j |_ |jdƒ}d|_ d|_|jjƒr0|j}|sìtjdd …}nd |j |f}|jdƒ}tjj|jd |ƒ|_nxGdD]?}|jƒ}|dkrb|d}nt|d||ƒq7Wtjd|j ƒ|jƒtjjdtjj|j dƒƒ|jƒtjd=ddlm}|ƒ} |jj ƒ} |j!| dd|j ƒ} |j"| | |j#ƒ|jjƒrDt$ƒ} nd} |jj%j&d| |j'| ƒfƒtj(d| ƒtj)| ƒ|j*s®t+|j d|j,ƒndS)NÚwin32z^distribution contains extensions and/or C libraries; must be compiled on a Windows 32 platformÚbuildÚinstallZreinit_subcommandsérÚ install_libéz.%s-%sÚlibÚpurelibÚplatlibÚheadersrBÚdataz/Include/$dist_nameZinstall_zinstalling to %sZPURELIB)ÚmktempÚzipZroot_dirÚanyr zremoving temporary file '%s'Údry_run)zpurelibzplatlibrOzscriptszdata)-ÚsysÚplatformr;rAZhas_c_librariesZDistutilsPlatformErrorr.Z run_commandZreinitialize_commandr%ÚrootZwarn_dirr&ÚcompileÚoptimizer*Úversionr<r>r?r@Z build_baseZ build_libÚupperÚsetattrrÚinfoZensure_finalizedÚinsertÚrunZtempfilerQÚ get_fullnameZ make_archiveÚ create_exer,rZ dist_filesÚappendÚget_installer_filenameÚdebugÚremover'rrT) r2rHrJr*Zplat_specifierrGÚkeyÚvaluerQZarchive_basenameÚfullnameÚarcnameZ pyversionr3r3r4r_psd               %       zbdist_wininst.runc Csôg}|jj}|jdƒ|jp+dd}dd„}x~dddd d d d d gD]^}t||dƒ}|r]|d|jƒ||ƒf}|jd|||ƒfƒq]q]W|jdƒ|jrì|jd|jƒn|jd||ƒƒ|jd|j ƒ|jd|j ƒ|j rM|jd|j ƒn|j rm|jd|j ƒn|j p‚|jj ƒ}|jd||ƒƒddl }ddl} d|j|j ƒƒ| jf} |jd| ƒdj|ƒS)Nz [metadata]r7Ú cSs|jddƒS)Nrjz\n)Úreplace)Úsr3r3r4ÚescapeÎsz)bdist_wininst.get_inidata..escapeZauthorZ author_emailÚ descriptionZ maintainerZmaintainer_emailÚnameZurlrZz %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)r;ÚmetadatarbZlong_descriptionÚgetattrÚ capitalizer/r(r)r*r1r-r`ÚtimeÚ distutilsZctimeÚ __version__r@) r2Úlinesrpr]rmrorPr-rsrtZ build_infor3r3r4Ú get_inidataÁs<   $      zbdist_wininst.get_inidatac Cs�ddl}|j|jƒ|jƒ}|j|ƒ}|jd|ƒ|rrt|dƒjƒ}t|ƒ}nd}t|dƒ} | j |j ƒƒ|r°| j |ƒnt |t ƒrÑ|j dƒ}n|d}|jr+t|jddd ƒ�} | jƒj d ƒ} WdQX|| d }n |d}| j |ƒ|jd d t|ƒ|ƒ} | j | ƒ| j t|dƒjƒƒdS) Nrz creating %sÚrbÚwbÚmbcssÚrÚencodingzlatin-1s zr?r@r+r&)r2rhr†r3r3r4rc$s z$bdist_wininst.get_installer_filenamec Csddlm}tƒ}|jrm|j|krm|j|krL|ƒ}qv|jdkrdd}qvd}n |ƒ}tjjtƒ}|jdkrÆ|jdd…dkrÆ|jdd…}nd }tjj |d ||fƒ}t |d ƒ}z|j ƒSWd|j ƒXdS) Nr)Úget_build_versionz2.4g@gffffff@rFrKÚwinr7zwininst-%.1f%s.exerx) Zdistutils.msvccompilerr‰rr*r>r?ÚdirnameÚ__file__r&r@r~rÚclose)r2r‰Z cur_versionZbvZ directoryZsfixÚfilenameÚfr3r3r4r‚1s$     (zbdist_wininst.get_exe_bytes)r Nr )rrr)rrr)rrr)rrr)rrr)rNr)rNr )r!Nr")r#Nr$)Ú__name__Ú __module__Ú __qualname__rnrZ user_optionsZboolean_optionsr5rEr_rwrarcr‚r3r3r3r4r sN       & Q .5 r )Ú__doc__rUr>Zdistutils.corerZdistutils.utilrZdistutils.dir_utilrrZdistutils.errorsZdistutils.sysconfigrrtrr r3r3r3r4Ús