
    kjq                        S SK r S SKrS SKrS SKrS SKJr  S SKJr  \R                  R                  \
" \" \5      R                  5       R                  R                  5      5        S SKJr  S SKJr  S SKJr  SrSrS	r\R,                  " S
5      rSS\S\
S\S\\   4S jjrS\S\\
   S\\
   4S jrSS\S\
S\
S\S\\
\
4   4
S jjrS r\ S:X  a  \" 5         gg)    N)Path)Optional)
HostSystem)Platform)run_command      )z16.3iMfz(\d+)(\.\d+)*platformcompiler
clang_onlyreturnc                 t   [         R                  " U5      (       d  g U R                  [        R                  :X  a  UR                  SS5      n[        US/SS9nU(       d  g [        R                  U5      nU(       d  g [        UR                  S5      5      n[        US/SS9nU(       d  g U R                  [        R                  :X  ay  UR                  S5      S	:w  ad  [        US
SS/SSS9nU(       d  g UR                  5       n [        S [        U5       5       5      n[        XVS-      5      nU[&        S   :  a  U$  g UR                  S5      S	:w  a3  U R                  [        R                  :X  a  US:X  a  g U[(        :  a  U$  g U(       d  U[*        :  a  U$ g ! [         ["        [$        4 a     g f = f)Nclang-clclangz-dumpversionT)return_output   z	--versionzApple clangz-dMz-E- )inputr   c              3   :   #    U  H  u  pS U;   d  M  Uv   M     g7f)__apple_build_version__N ).0ivs      J/mnt/mint/home/seanl/mnt/public/Repos/ladybird/Meta/Utils/find_compiler.py	<genexpr>6major_compiler_version_if_supported.<locals>.<genexpr>:   s     h)EvIbfgIg)Es   	   )shutilwhichhost_systemr   Windowsreplacer   COMPILER_VERSION_REGEXmatchintgroupmacOSfindsplitnext	enumerate
IndexErrorStopIteration
ValueErrorXCODE_MINIMUM_VERSIONCLANG_MINIMUM_VERSIONGCC_MINIMUM_VERSION)r
   r   r   versionmajor_versionapple_definitionsindexapple_build_versions           r   #major_compiler_version_if_supportedr:      s   <<!! z111##J88^4DIG*009M++A./M8[1FGz///GLL4OSU4U'5$(DB^bc -335	h3D)EhhE"%&7	&B"C "7"::&& ;, % 
g	"	$ :#3#338K11   2 	 //  3 M:6 		s   +F F76F7	compilersc                 ^    S nSnU H"  n[        X5      nU(       d  M  XS:  d  M  UnUnM$     U$ )Nr   )r:   )r
   r;   best_compilerbest_versionr   r6   s         r   find_newest_compilerr?   X   s>    ML;HO'(L$M      cccxxc           
         U R                   [        R                  :X  aB  SU;  d  SU;  a6  [        S[         S3[
        R                  S9  [
        R                  " S5        [        XUS9n[        XUS9nU(       a
  U(       a  X4$ U R                   [        R                  :X  a  S/n/ nO7/ SQnSS	/nU R                   [        R                  :X  a  UR                  S
5        U R                   [        R                  :X  a  [        S5      n[        S5      n	UR                  U V
s/ s H  n
[        UR                  U
5      5      PM     sn
5        UR                  U V
s/ s H  n
[        U	R                  U
5      5      PM     sn
5        UR                  U V
s/ s H  n
[        U	R                  U
5      5      PM     sn
5        OU R                   [        R                   [        R                  4;   a  [        S5      nUR                  U V
s/ s H  n
[        UR                  U
5      5      PM     sn
5        UR                  U V
s/ s H  n
[        UR                  U
5      5      PM     sn
5        [#        X5      nU(       a4  U R                   [        R                  :X  a  X4$ XR%                  SS5      4$ U(       d%  [#        X5      nU(       a  XR%                  SS5      4$ U R                   [        R                  :X  a+  [        S[&        S    S[         S3[
        R                  S9  OU R                   [        R                  :X  a!  [        S[         S3[
        R                  S9  OOU(       a!  [        S[         S3[
        R                  S9  O'[        S[         S[(         S3[
        R                  S9  [
        R                  " S5        g s  sn
f s  sn
f s  sn
f s  sn
f s  sn
f )Nr   z	clang-cl z! or higher is required on Windows)filer   )r   )r   zclang-19zclang-20zclang-21zclang-22gcczgcc-14egccz/opt/homebrew/opt/llvm/binz/opt/homebrew/binz/usr/local/binr   zclang++zg++zPlease ensure that Xcode r   z, Homebrew clang z, or higher is installedzPlease ensure that clang-cl z or higher is installedzPlease ensure that clang z, gcc )r#   r   r$   printr3   sysstderrexitr:   BSDappendr*   r   extendstrjoinpathLinuxr?   r%   r2   r4   )r
   rA   rB   r   cc_supportedcxx_supportedclang_candidatesgcc_candidatesclang_homebrew_pathhomebrew_pathc
local_pathr   rE   s                 r   pick_host_compilerrY   h   s[   z111z7KzadOd-..OP	

 	6xPZ[L7R\]M yz111&<
 

 :>>1!!&)z///"#?@01O_ `O_!%8%A%A!%D!EO_ `aIY ZIYA]%;%;A%>!?IY Z[~V~!s=#9#9!#<=~VW			*"2"2JNN!C	C*+
FV WFVZ%8%8%;!<FV WXNSNqs:#6#6q#9:NST <E:#5#55>!mmGY777"8<E5111z///'(=a(@'AARShRi  jB  C	
 
		!3!3	3*+@*AAXY	
 
'(='>>UV	

 	'(='>fEXDYYqr	

 HHQKU !a ZV !XSs   $$O$O$O$O $O%c                     [        5       n U R                  5       u  p[        R                  " SS9nUR	                  SSUS9  UR	                  SSUS9  UR	                  SSSS	9  UR                  5       n[        XR                  UR                  UR                  5      u  pV[        S
U S35        [        SU S35        g )NzFind valid compilers)descriptionz--ccF)requireddefaultz--cxxz--clang-only
store_true)r\   actionzexport CC=""zexport CXX=")r   default_compilerargparseArgumentParseradd_argument
parse_argsrY   rA   rB   r   rG   )r
   
default_ccdefault_cxxparserargsrA   rB   s          r   mainrj      s    zH ( 9 9 ;Z$$1GHF

C
%E
|LD #8WWdhhPIR	Kt1
	LQ
 r@   __main__)F)!rb   rer!   rH   pathlibr   typingr   pathrL   rN   __file__resolveparentUtils.host_platformr   r   Utils.utilsr   r3   r4   r2   compiler&   boolr(   r:   listr?   tuplerY   rj   __name__r   r@   r   <module>rz      s    	  
   DN**,33::; < * ( #  * $45 9( 9c 9W[ 9hpqthu 9x8 S	 hsm  R Rs R R$ R[`adfiai[j Rj!$ zF r@   