grthtrhthjhtyjytjytkergtrhtrjytjerhrfh3 �u„j,aã @sdZddlZddlZddlmZmZdddddd d d d d dg Zdddddddddœdddddddddœdddddddddœd d d!d!d"d#d$d%œd&d&d'd(d)d*d$d%œd+d+d,d,d-d*d$d%œd.œZdoZej j ƒdZ d6ej dd7…Z d8ej dd7…ZejjejƒZejjejƒZejjejƒZejjejƒZdadZd9d:„Zej�rPejjeejƒƒZn eejƒƒZej d;k�rŒej!ƒj"dpƒ�rŒeejj#eeeƒƒZd>ej$k�r¦eej$d>ƒZd?d@„Z%e&edAdƒZ'e'�rðej d;k�rðe'j!ƒj"dqƒ�rðejjejje'ƒƒZ'drdCdD„Z(e(dEƒZ)e)�r0x&dsD]Z*dHee*d3<dIee*dJ<�qWdKdL„Z+dMdN„Z,dOdP„Z-dQdR„Z.dSdT„Z/dtdUdV„Z0dWd„Z1dXdY„Z2dZd[„Z3d\d]„Z4d^d_„Z5dud`d„Z6dad„Z7dbd „Z8dcd „Z9e.ƒddEfddd „Z:e.ƒddEfded„Z;dfd„Zdid „Z?djdk„Z@dldm„ZAeBdnk�reAƒdS)vz-Access to Python's configuration information.éN)ÚpardirÚrealpathÚget_config_h_filenameÚget_config_varÚget_config_varsÚget_makefile_filenameÚget_pathÚget_path_namesÚ get_pathsÚ get_platformÚget_python_versionÚget_scheme_namesÚparse_config_hz/{installed_base}/lib64/python{py_version_short}z){platbase}/lib64/python{py_version_short}z1{base}/lib/python{py_version_short}/site-packagesz7{platbase}/lib64/python{py_version_short}/site-packagesz;{installed_base}/include/python{py_version_short}{abiflags}z?{installed_platbase}/include/python{py_version_short}{abiflags}z {base}/binz{base})ÚstdlibÚ platstdlibÚpurelibÚplatlibÚincludeÚ platincludeÚscriptsÚdataz{installed_base}/lib/pythonz{base}/lib/pythonz{installed_base}/include/pythonz{installed_base}/Libz {base}/Libz{base}/Lib/site-packagesz{installed_base}/Includez{base}/Scriptsz#{userbase}/Python{py_version_nodot}z1{userbase}/Python{py_version_nodot}/site-packagesz+{userbase}/Python{py_version_nodot}/Includez+{userbase}/Python{py_version_nodot}/Scriptsz {userbase})rrrrrrrz){userbase}/lib64/python{py_version_short}z5{userbase}/lib/python{py_version_short}/site-packagesz7{userbase}/lib64/python{py_version_short}/site-packagesz+{userbase}/include/python{py_version_short}z{userbase}/binz{userbase}/lib/pythonz#{userbase}/lib/python/site-packagesz{userbase}/include)Ú posix_prefixÚ posix_homeÚntÚnt_userÚ posix_userÚosx_framework_userrrrrrrrz%d.%déz%d%dc Cs"yt|ƒStk r|SXdS)N)rÚOSError)Úpath©r ú!/usr/lib64/python3.6/sysconfig.pyÚ_safe_realpathcsr"rú\pcbuild\win32ú\pcbuild\amd64Z_PYTHON_PROJECT_BASEcCs.x(dD] }tjjtjj|d|ƒƒrdSqWdS)Nú Setup.distú Setup.localÚModulesTF)r%r&)ÚosrÚisfileÚjoin)ÚdÚfnr r r!Ú_is_python_source_dirxs r-Ú_homeFcCs|rtrttƒSttƒS)N)Ú _sys_homer-Ú _PROJECT_BASE)Ú check_homer r r!Úis_python_build‚sr2Trrz{srcdir}/Includez{projectbase}/.rcCsdy |jf|ŽStk r^y|jftjŽStk rX}ztd|ƒ‚WYdd}~XnXYnXdS)Nz{%s})ÚformatÚKeyErrorr(ÚenvironÚAttributeError)ÚsÚ local_varsÚvarr r r!Ú _subst_vars�s r:cCs4|jƒ}x&|jƒD]\}}||kr$q|||<qWdS)N)ÚkeysÚitems)Ú target_dictÚ other_dictÚ target_keysÚkeyÚvaluer r r!Ú _extend_dict˜s rBcCsfi}|dkri}t|tƒƒxDt|jƒD]4\}}tjdkrHtjj|ƒ}tjjt ||ƒƒ||<q*W|S)NÚposixr)rCr) rBrÚ_INSTALL_SCHEMESr<r(ÚnamerÚ expanduserÚnormpathr:)ÚschemeÚvarsÚresr@rAr r r!Ú _expand_vars s   rKcCstjdkrdStjS)NrCr)r(rEr r r r!Ú_get_default_scheme­s rLcCs’tjjddƒ}dd„}tjdkrBtjjdƒp.d}|r8|S||dƒStjdkr|td ƒ}|r||r`|S|dd |d tjdd …ƒS|r„|S|dd ƒSdS)NÚPYTHONUSERBASEcWstjjtjj|ŽƒS)N)r(rrFr*)Úargsr r r!Újoinuser·sz_getuserbase..joinuserrÚAPPDATAú~ÚPythonÚdarwinÚPYTHONFRAMEWORKÚLibraryz%d.%drz.local)r(r5ÚgetrEÚsysÚplatformrÚ version_info)Úenv_baserOÚbaseÚ frameworkr r r!Ú _getuserbase´s"    r]cCsZddl}|jdƒ}|jdƒ}|jdƒ}|dkr2i}i}i}t|dd��}|jƒ} WdQRXx¢| D]š} | jdƒs`| jƒd kr|q`|j| ƒ} | r`| jd d ƒ\} } | jƒ} | jd d ƒ}d |krÀ| || <q`y t | ƒ} Wn$t k rð| jd d ƒ|| <Yq`X| || <q`Wt |j ƒƒ}d}�x t |ƒdk�r�xòt|ƒD�]ä}||}|j|ƒ}|j|ƒ}|�rv|�rv|jƒ|jƒk�rp|n|} n|�r€|n|} | dk �rþ| jd ƒ} d}| |k�r´t|| ƒ}nˆ| |k�rÄd}nx| tjk�rÜtj| }n`| |k�r0|jdƒ�r |dd…|k�r d }n$d| |k�rd}nt|d| ƒ}n d || <}|�r|| jƒd…}|d| jƒ…||}d |k�r~|||<n~y t |ƒ}Wn"t k �r¬|jƒ||<Yn X|||<|j|ƒ|jdƒ�r|dd…|k�r|dd…}||k�r|||<n|||<|j|ƒ�q,W�qWx.|jƒD]"\}} t| tƒ�r&| jƒ||<�q&W|j|ƒ|S)zÌParse a Makefile-style file. A dictionary containing name/value pairs is returned. If an optional dictionary is passed in as the second argument, it is used instead of a new dictionary. rNz"([a-zA-Z][a-zA-Z0-9_]+)\s*=\s*(.*)z\$\(([A-Za-z][A-Za-z0-9_]*)\)z\${([A-Za-z][A-Za-z0-9_]*)}Úsurrogateescape)Úerrorsú#Úérz$$ú$ÚCFLAGSÚLDFLAGSÚCPPFLAGSTFÚPY_é)rdrerf)ÚreÚcompileÚopenÚ readlinesÚ startswithÚstripÚmatchÚgroupÚreplaceÚintÚ ValueErrorÚlistr;ÚlenÚtupleÚsearchÚstartÚstrr(r5ÚendÚremover<Ú isinstanceÚupdate)ÚfilenamerIriÚ _variable_rxÚ _findvar1_rxÚ _findvar2_rxÚdoneÚnotdoneÚfÚlinesÚlineÚmÚnÚvÚtmpvÚ variablesÚrenamed_variablesrErAÚm1Úm2ÚfoundÚitemÚafterÚkr r r!Ú_parse_makefileÐs–                                 r“cCsdtrtjjtptdƒSttdƒr0dttj f}nd}ttj dƒrP|dtj j 7}tjjt dƒ|dƒS)z Return the path of the Makefile.ÚMakefileÚabiflagsz config-%s%sÚconfigÚ _multiarchz-%sr) Ú _PYTHON_BUILDr(rr*r/r0ÚhasattrrWÚ_PY_VERSION_SHORTr•Úimplementationr—r)Úconfig_dir_namer r r!rLs  c Cs(tjjddjtjtjttjddƒd�ƒS)NÚ_PYTHON_SYSCONFIGDATA_NAMEz+_sysconfigdata_{abi}_{platform}_{multiarch}r—ra)ÚabirXÚ multiarch) r(r5rVr3rWr•rXÚgetattrr›r r r r!Ú_get_sysconfigdata_nameYs r¡c ,CsÊddl}i}tƒ}yt||ƒWnJtk rj}z.d|}t|dƒrR|d|j}t|ƒ‚WYdd}~XnXtƒ}y"t|ƒ�}t||ƒWdQRXWnJtk rÞ}z.d|}t|dƒrÆ|d|j}t|ƒ‚WYdd}~XnXt rð|d|d<t ƒ}dt j k�r$ddl }|j|ƒ} || _| t j|<d tƒtf} tt d ƒ�rF| d 7} tj| d d �tjj| |dƒ} t| ddd��(}|jdƒ|jdƒ|j||d�WdQRXtdddd��}|j| ƒWdQRXdS)z;Generate the Python module containing build-time variables.rNz.invalid Python installation: unable to open %sÚstrerrorz (%s)ÚLDSHAREDÚ BLDSHAREDrSzbuild/lib.%s-%sÚgettotalrefcountz-pydebugT)Úexist_okz.pyÚwÚutf8)ÚencodingzB# system configuration generated and used by the sysconfig module zbuild_time_vars = )Ústreamzpybuilddir.txtÚascii)Úpprintrr“rr™r¢rrkrr˜r¡rWrXÚtypesÚ ModuleTypeÚbuild_time_varsÚmodulesr ršr(Úmakedirsrr*Úwrite) r¬rIÚmakefileÚeÚmsgÚconfig_hr„rEr­ÚmoduleÚ pybuilddirÚdestfiler r r!Ú_generate_posix_varsbsL          rºcCs0tƒ}t|tƒtƒdgdƒ}|j}|j|ƒdS)z7Initialize the module as appropriate for POSIX systems.r¯rN)r¡Ú __import__ÚglobalsÚlocalsr¯r})rIrEÚ_tempr¯r r r!Ú _init_posix¡sr¿cCsVtdƒ|d<tdƒ|d<tdƒ|d<d|d<d |d <t|d <tjjttjƒƒ|d <d S)z+Initialize the module as appropriate for NTrÚLIBDESTrÚ BINLIBDESTrÚ INCLUDEPYz.pydÚ EXT_SUFFIXz.exeÚEXEÚVERSIONÚBINDIRN)rÚ_PY_VERSION_SHORT_NO_DOTr(rÚdirnamer"rWÚ executable)rIr r r!Ú_init_non_posix©s   rÊc Cs¦|dkr i}ddl}|jdƒ}|jdƒ}xx|jƒ}|s8P|j|ƒ}|r‚|jddƒ\}}y t|ƒ}Wntk rvYnX|||<q*|j|ƒ}|r*d||jdƒ<q*W|S)zÌParse a config.h-style file. A dictionary containing name/value pairs is returned. If an optional dictionary is passed in as the second argument, it is used instead of a new dictionary. Nrz"#define ([A-Z][A-Za-z0-9_]+) (.*) z&/[*] #undef ([A-Z][A-Za-z0-9_]+) [*]/ rbr)rirjÚreadlinerorprrrs) ÚfprIriÚ define_rxÚundef_rxr†r‡rˆr‰r r r!r¹s*      cCsBtr,tjdkr"tjjtptdƒ}q4tp(t}ntdƒ}tjj|dƒS)zReturn the path of pyconfig.h.rÚPCrz pyconfig-64.h)r˜r(rErr*r/r0r)Úinc_dirr r r!rÙs   cCs tttƒƒS)z,Return a tuple containing the schemes names.)rvÚsortedrDr r r r!r åscCstS)z*Return a tuple containing the paths names.)Ú _SCHEME_KEYSr r r r!r êscCs|rt||ƒSt|SdS)z°Return a mapping containing an install scheme. ``scheme`` is the install scheme name. If not provided, it will return the default scheme for the current platform. N)rKrD)rHrIÚexpandr r r!r ïs cCst|||ƒ|S)z[Return a path corresponding to the scheme. ``scheme`` is the install scheme name. )r )rErHrIrÓr r r!rûsc Gs|tdk�rFiattd<ttd<ttd<ttd<ttd<ttd<ttd<ttd <ttd <ttd <yt j td <Wnt k rˆd td <YnXt j dkrœttƒt j dkr®ttƒtjdƒ}|dk rÈ|td<tƒtd<tjdtƒ}t j dk�rt�rt jjtƒƒ}t jj||ƒ}nt jjtƒƒ}t|ƒtd<t jdk�rFddl}|jtƒ|�rtg}x|D]}|jtj|ƒƒ�qVW|StSdS)anWith no arguments, return a dictionary of all configuration variables relevant for the current platform. On Unix, this means every variable defined in Python's installed Makefile; On Windows it's a much smaller set. With arguments, return a list of values that result from looking up each argument in the configuration variable dictionary. NÚprefixÚ exec_prefixÚ py_versionÚpy_version_shortÚpy_version_nodotÚinstalled_baser[Úinstalled_platbaseÚplatbaseÚ projectbaser•rarrCrÃÚSOÚuserbaseÚsrcdirrSr)Ú _CONFIG_VARSÚ_PREFIXÚ _EXEC_PREFIXÚ _PY_VERSIONršrÇÚ _BASE_PREFIXÚ_BASE_EXEC_PREFIXr0rWr•r6r(rErÊr¿rVr]r˜rrÈrr*r"rXÚ _osx_supportÚcustomize_config_varsÚappend)rNrÝrßr[ræÚvalsrEr r r!rsP           cCs*|dkrddl}|jdtdƒtƒj|ƒS)z“Return the value of a single variable using the dictionary returned by 'get_config_vars()'. Equivalent to get_config_vars().get(name) rÝrNz SO is deprecated, use EXT_SUFFIXr)ÚwarningsÚwarnÚDeprecationWarningrrV)rErêr r r!rPscCstjdkrnd}tjj|ƒ}|d)kr(tjStjjd|ƒ}tj|t|ƒ|…jƒ}|dkr\dS|dkrhdStjStjd ks„ttd ƒ rŠtjSd tj kržtj d Stj ƒ\}}}}}|jƒj d d ƒ}|j ddƒ}|j d dƒ}|dd…dkrôd||fS|dd…dk�rV|ddk�rd}dt |dƒd|dd…f}dddœ} |d| tj 7}n²|dd …d!k�rtd||fS|dd…d"k�r”d#|||fS|dd$…d%k�rÖd%}ddl} | jd&ƒ} | j|ƒ} | �r| jƒ}n2|dd$…d'k�rddl} | jtƒ|||ƒ\}}}d(|||fS)*a«Return a string that identifies the current platform. This is used mainly to distinguish platform-specific build directories and platform-specific built distributions. Typically includes the OS name and version and the architecture (as supplied by 'os.uname()'), although the exact information included depends on the OS; eg. for IRIX the architecture isn't particularly important (IRIX only runs on SGI hardware), but for Linux the kernel version isn't particularly important. Examples of returned values: linux-i586 linux-alpha (?) solaris-2.6-sun4u irix-5.3 irix64-6.2 Windows will return one of: win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc) win-ia64 (64bit Windows on Itanium) win32 (all others - specifically, sys.platform is returned) For other non-POSIX platforms, currently just returns 'sys.platform'. rz bit (rbú)Úamd64z win-amd64Úitaniumzwin-ia64rCÚunameÚ_PYTHON_HOST_PLATFORMú/raú Ú_ú-NéÚlinuxz%s-%sÚsunosrÚ5Úsolarisz%d.%srhrÚ32bitÚ64bit)iÿÿÿlÿÿÿÿz.%séÚirixÚaixz%s-%s.%séÚcygwinz[\d.]+rSz%s-%s-%séÿÿÿÿ)r(rErWÚversionÚfindrXruÚlowerr™r5rðrqrrÚmaxsizerirjrorpræÚget_platform_osxr)rÔÚiÚjÚlookÚosnameÚhostÚreleaserÚmachineÚbitnessriÚrel_rer‡rær r r!r \sZ             cCstS)N)ršr r r r!r ·scCsJxDtt|jƒƒƒD]0\}\}}|dkr2td|ƒtd||fƒqWdS)Nrz%s: z %s = "%s")Ú enumeraterÑr<Úprint)ÚtitlerÚindexr@rAr r r!Ú _print_dict»s rcCsfdtjkrtƒdStdtƒƒtdtƒƒtdtƒƒtƒtdtƒƒtƒtdt ƒƒdS)z*Display all information sysconfig detains.z--generate-posix-varsNzPlatform: "%s"zPython version: "%s"z!Current installation scheme: "%s"ÚPathsÚ Variables) rWÚargvrºrr r rLrr rr r r r!Ú_mainÂs  rÚ__main__)rrrrrrr)r#r$)r#r$)F)rr)N)N)CÚ__doc__r(rWZos.pathrrÚ__all__rDrÒrÚsplitrãrYršrÇrrGrÔráÚ base_prefixrärÕrâÚbase_exec_prefixråràÚ _USER_BASEr"rÉrÈr0ÚgetcwdrErÚendswithr*r5r-r r/r2r˜rHr:rBrKrLr]r“rr¡rºr¿rÊrrr r r rrrr r rrÚ__name__r r r r!Úsæ           |  ?   M [