o g0@sdZddlZddlZddlZddlZddlmZmZm Z m Z m Z m Z ddl mZmZddlmZmZddlmZddlmZmZddlmZmZdd lmZdd lmZdd lm Z dd l!m"Z"dd l#m$Z$ddl%m&Z&ddl'm(Z(ddl)m*Z*m+Z+m,Z,ddl-m.Z.ddl/m0Z0ddl1m2Z2ddl3m4Z4ddl5m6Z6e7e8Z9e:dej;Ze e e&e e&fZ?de@de=fddZAde&de=de>de=fddZBde&de=fd d!ZCde&de>de=fd"d#ZDde&de e=fd$d%ZEde&d&ede@fd'd(ZFd)ede=fd*d+ZGde&d,e@ddfd-d.ZHde&d/e@d0e=d1e e@d2e e@d3e=de e@fd4d5ZIde&d/e@d1e e@d2e e@d3e=de e@f d6d7ZJde&d2e e@de=fd8d9ZKd:e e&d&ed0e=d1e e@d2e e@de?f d;d<ZLdS)=z;Orchestrator for building wheels from InstallRequirements. N)AnyCallableIterableListOptionalTuple)canonicalize_namecanonicalize_version)InvalidVersionVersion) WheelCache)InvalidWheelFilenameUnsupportedWheel)FilesystemWheelget_wheel_distribution)Link)Wheel)build_wheel_pep517)build_wheel_editable)build_wheel_legacy)InstallRequirement) indent_log) ensure_dir hash_fileis_wheel_installed)make_setuptools_clean_args)call_subprocess) TempDirectory) path_to_url)vcsz([a-z0-9_.]+)-([a-z0-9_.!+-]+)sreturncCstt|S)zjDetermine whether the string looks like an egg_info. :param s: The string to parse. E.g. foo-2.1 )bool _egg_info_research)r r%=/usr/lib/python3/dist-packages/pip/_internal/wheel_builder.py_contains_egg_info&sr'req need_wheelcheck_binary_allowedcCs|jrdS|jr|rtd|jdS|rdS|jsdS|jr#|S|jr(dS||s5td|jdSt sAtd|jdSdS)zBReturn whether an InstallRequirement should be built into a wheel.Fz(Skipping %s, due to already being wheel.TzCSkipping wheel build for %s, due to binaries being disabled for it.zOUsing legacy 'setup.py install' for %s, since package 'wheel' is not installed.) constraintis_wheelloggerinfoname source_direditablesupports_pyproject_editable use_pep517r)r(r)r*r%r%r& _should_build.s<r4cCst|dtdS)NTr)r*)r4 _always_true)r(r%r%r&should_build_for_wheel_commandcsr7cCst|d|dS)NFr5)r4)r(r*r%r%r& should_build_for_install_commandisr8cCs|js|jsdS|jr1|jjr1|jrJ|jsJt|jj}|s$J||jj|jr/dSdS|js6J|j \}}t |rCdSdS)z Return whether a built InstallRequirement can be stored in the persistent wheel cache, assuming the wheel cache is available, and _should_build() has determined a wheel needs to be built. FT) r1r0linkis_vcsrget_backend_for_schemeschemeis_immutable_rev_checkouturlsplitextr')r( vcs_backendbaseextr%r%r& _should_cachers    rC wheel_cachecCs@t|j}|js J|rt|r||j}|S||j}|S)zdReturn the persistent or temporary cache directory where the built wheel need to be stored. )r" cache_dirr9rCget_path_for_linkget_ephem_path_for_link)r(rDcache_availablerEr%r%r&_get_cache_dirs     rI_cCsdS)NTr%)rJr%r%r&r6sr6 wheel_pathc Cst|jpd}ttj|}t|j|krtd||jtt ||}t |j }t |t |j kr=td||j |j }|durHtdzt|}Wnty^d|}t|w|tdkrrt|j tsttd|dSdS)Nz7Wheel has unexpected file name: expected {!r}, got {!r}zMissing Metadata-VersionzInvalid Metadata-Version: z1.2z6Metadata 1.2 mandates PEP 440 version, but {!r} is not)rr/rospathbasenamer formatrrstrversionr metadata_versionrr r isinstance) r(rKcanonical_namewdist dist_verstrmetadata_version_valuerSmsgr%r%r& _verify_ones:      r[ output_dirverify build_optionsglobal_optionsr1c Cs|rdnd}zt|Wnty(}ztd||j|WYd}~dSd}~ww|jt|||||}Wdn1s?wY|ro|rozt||W|Stt fyn}ztd||j|WYd}~dSd}~ww|S)zaBuild one wheel. :return: The filename of the built wheel, or None if the build failed. r1wheelzBuilding %s for %s failed: %sNzBuilt %s for %s is invalid: %s) rOSErrorr-warningr/ build_env_build_one_inside_envr[r r) r(r\r]r^r_r1artifacterKr%r%r& _build_ones8     rgc Cstdd}|js J|jrF|jsJ|jsJ|r!td|j|r*td|j|r9t|j|j|j|jd}nt |j|j|j|jd}nt |j|j |j |||jd}|durt j|}t j||}z(t|\} } t||td|j|| | td||WWdSty} ztd |j| WYd} ~ nd} ~ ww|jst|| WddS1swYdS) Nr`)kindz7Ignoring --global-option when building %s using PEP 517z6Ignoring --build-option when building %s using PEP 517)r/backendmetadata_directorytempd)r/ setup_py_pathr0r_r^rkz3Created wheel for %s: filename=%s size=%d sha256=%szStored in directory: %sz Building wheel for %s failed: %s)rr/r3rjpep517_backendr-rbrrNrrrlunpacked_source_directoryrMrOjoinrshutilmover. hexdigest Exception_clean_one_legacy) r(r\r^r_r1temp_dirrK wheel_name dest_path wheel_hashlengthrfr%r%r&rds|        4 $rdcCsVt|j|d}td|jz t|d|jdWdSty*td|jYdSw)N)r_zRunning setup.py clean for %szpython setup.py clean) command_desccwdTz Failed cleaning build dir for %sF) rrlr-r.r/rr0rserror)r(r_ clean_argsr%r%r&rt1s rt requirementsc Cs|sggfStdddd|DtHgg}}|D]8}|js&Jt||}t||||||jo6|j} | rRt t | |_ |j j |_ |j jsLJ||q||qWdn1sbwY|rwtdddd |D|rtd dd d |D||fS) zBuild wheels. :return: The list of InstallRequirement that succeeded to build and the list of InstallRequirement that failed to build. z*Building wheels for collected packages: %sz, css|]}|jVqdS)Nr/.0r(r%r%r& Tszbuild..NzSuccessfully built %s cSg|]}|jqSr%rrr%r%r& qzbuild..zFailed to build %scSrr%rrr%r%r&rvr)r-r.rorr/rIrgr1permit_editable_wheelsrrr9 file_pathlocal_file_pathr,append) r~rDr]r^r_build_successesbuild_failuresr(rE wheel_filer%r%r&buildBsL         r)M__doc__loggingos.pathrMrerptypingrrrrrrpip._vendor.packaging.utilsrr pip._vendor.packaging.versionr r pip._internal.cacher pip._internal.exceptionsr rpip._internal.metadatarrpip._internal.models.linkrpip._internal.models.wheelr$pip._internal.operations.build.wheelr-pip._internal.operations.build.wheel_editabler+pip._internal.operations.build.wheel_legacyrpip._internal.req.req_installrpip._internal.utils.loggingrpip._internal.utils.miscrrr$pip._internal.utils.setuptools_buildrpip._internal.utils.subprocessrpip._internal.utils.temp_dirrpip._internal.utils.urlsrpip._internal.vcsr getLogger__name__r-compile IGNORECASEr#r"BinaryAllowedPredicate BuildResultrQr'r4r7r8rCrIr6r[rgrdrtrr%r%r%r&s                5       & G