
    eCiF'                     b   U d dl Z d dlZd dlZd dlZddlmZmZ ddlmZmZm	Z	  e j
        d          ZeZdadZdadadadZdadadZdadadadaee         dz  ed<   dZg aeee                  ed<   dZdZ g a!eee                  ed<   d	 Z"d
 Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z* e*             dS )    N   )diagnosticsutils)__rootpath__exit_with_errorpath_from_rootconfig	V8_ENGINE
JS_ENGINESWASM_ENGINESc                 <    | t          |           t          u r| S | gS N)typelistxs    0/b/s/w/ir/x/w/install/emscripten/tools/config.pylistifyr   .   s!    Y$q''T//H
*    c                 :      d S  fdt           D             a S )Nc                 $    g | ]}|k    rn|S  r   ).0r   newolds     r   
<listcomp>z!fix_js_engine.<locals>.<listcomp>8   s%    ;;;1qCxxQ;;;r   )r   )r   r   s   ``r   fix_js_enginer   4   s/    [
F;;;;;
;;;*	*r   c                  2   t          t          t          t                              at          t          t          t                              at          t          t          t                              at          t
          t          t
                              ad t          D             ad t          D             at          t                    at          st          d          a	t          s't          j                            t          d          ad S d S )Nc                 ,    g | ]}t          |          S r   r   r   engines     r   r   z-normalize_config_settings.<locals>.<listcomp>D   s    999F999r   c                 ,    g | ]}t          |          S r   r    r!   s     r   r   z-normalize_config_settings.<locals>.<listcomp>E   s    ===f'&//===r   cacheports)r   SPIDERMONKEY_ENGINEr   NODE_JSNODE_JS_TESTr
   r   r   CLOSURE_COMPILERCACHEr   PORTSospathjoinr   r   r   normalize_config_settingsr/   <   s     &&97CV;W;WXX'77#3#344'|W\-B-BCC,Iwy'9'9::)99j999*=====,-..	 $7##E	 )GLL((EEE) )r   c                 t   t                      |          }|t          j        |          }|sUt          j                            t                    st          j        dt                     t          d| t          |            ||          t                      | <   d S |st          d| t                     d S d S )NzVconfig file not found: %s.  You can create one by hand or run `emcc --generate-config`z5%s not set in config (%s), and `%s` not found in PATHz%s is set to empty value in %s)
globalsshutilwhichr,   r-   isfile	EM_CONFIGr   warnr   )
config_keytool_binaryfvalr-   s        r   set_config_from_tool_locationr;   M   s    		*#[<$$D sW^^I&& ~qs|}}}Mz[dfqrrrAdGGGIIj M4j)LLLLLM Mr   c                  ,   dt           i} t          j        t                     }	 t          ||            n.# t          $ r!}t          dt           ||           Y d}~nd}~ww xY wd}|D ]}d|z   }t          j                            |          }|i|dv rd}|dv r|	                    d          }|d	v r4t          j
                            |          st          d
| d|            |t                      |<   || v r| |         t                      |<   dS )zParse the emscripten config file using python's exec.

  Also check EM_<KEY> environment variables to override specific config keys.
  __file__z2error in evaluating config file (%s): %s, text: %sN)r'   r(   BINARYEN_ROOTr&   r
   	LLVM_ROOTLLVM_ADD_VERSIONCLANG_ADD_VERSIONr)   r   WASMERWASMTIMEr   FROZEN_CACHEr*   r+   COMPILER_WRAPPEREM_) 0)EM_JS_ENGINESEM_WASM_ENGINES,)r5   EM_CACHEEM_PORTSEM_LLVM_ROOTEM_BINARYEN_ROOTzenvironment variable z must be an absolute path: )r5   r   	read_fileexec	Exceptionr   r,   environgetsplitr-   isabsr1   )r	   config_texteCONFIG_KEYSkeyenv_var	env_values          r   parse_config_filer]   Z   s]   
 	"&	**+ef	 e e eH)UVXcdddddddde+*  # #cckG
w''I	i				8	8	8OOC((		]	]	]w}}Y'' 	c
a'aaV_aa
b
b
b giinn	c{giin# #s   5 
A AA c                  8   t           j                            t                    rt	                       dddddd} |                                 D ]x\  }}t           j                            |          }|rR|t           j        vrDd| d| d	}|d
k    rt          	                    |           ^t          
                    |           yt          ddt           j        j                   t          ddd            t          ddd            t                       d S )NrN   rO   
EM_NODE_JSEM_LLVM_ADD_VERSIONEM_CLANG_ADD_VERSION)LLVMBINARYENNODEr@   rA   z$legacy environment variable found: `z`.  Please switch to using `z
` instead`rd   r?   clangr'   nodec                     | S r   r   r   s    r   <lambda>zread_config.<locals>.<lambda>   s    Q r   r>   wasm-optc                 z    t           j                            t           j                            |                     S r   )r,   r-   dirnamer   s    r   rh   zread_config.<locals>.<lambda>   s'    rwWYW^WfWfghWiWiGjGj r   )r,   r-   r4   r5   r]   itemsrS   rT   loggerdebugwarningr;   rk   r/   )LEGACY_ENV_VARSrZ   new_keyr\   msgs        r   read_configrs      s'   W^^I 
 "-/ / &++-- 
 
lc7
s##I WBJ..g3ggT[gggc 
SsWbgoFFF	6;;???=j=jkkkr   c                    t           j                            |           rt          d|  d           t	          j        t          d                    }|                                dd          }d                    |          dz   }t           j        	                    t          j        d          pd          }|                    dt          |                    }t           j        	                    t           j        	                    t          j        d	          pd
                    }|                    dt          |                    }t          j        d          pt          j        d          pd}|                    dt          |                    }t	          j        | |           t          d| d|d|d|d	t           j                   d S )Nzconfig file already exists: ``ztools/config_template.py   
zwasm-ldz/usr/bin/wasm-ldz'{{{ LLVM_ROOT }}}'ri   z/usr/local/bin/wasm-optz'{{{ BINARYEN_ROOT }}}'rf   nodejsz'{{{ NODE }}}'z6An Emscripten settings file has been generated at:

  zX

It contains our best guesses for the important paths, which are:

  LLVM_ROOT       = z
  BINARYEN_ROOT   = z
  NODE_JS         = z5

Please edit the file if any of those are incorrect.)file)r,   r-   existsr   r   rP   r   
splitlinesr.   rk   r2   r3   replacerepr
write_fileprintsysstderr)r-   config_data	llvm_rootbinaryen_rootrf   s        r   generate_configr      s   W^^D =;D;;;<<<
 /I J JKK+&&((,+		+&&-+goofl955K9KLL)##$;T)__MM+'//"'//&,z2J2J2gNg"h"hii-##$?mATATUU+	f			Ah!7!7	A6$##$6T

CC+ 4%%%% ttYYYttt	- 47:? ? ? ? ? ?r   c                  H   dt           j        v rzt           j                            d          } t          t           j                  | dz   k    rt	          d           t           j        | = t           j                            |           S dt          j        v rt          j        d         S t          d          }t          j	        
                    |          r|S t          j	                            t          j	                            t                                          }t          j	                            |d          }t          j	        
                    |          r|S t          j	                            d          }t          j	        
                    |          r|S |S )Nz--em-configr   z*--em-config must be followed by a filenamer5   z.emscriptenz~/.emscripten)r   argvindexlenr   popr,   rS   r   r-   r4   rk   r.   
expanduser)iembedded_config
emsdk_rootemsdk_embedded_configuser_home_configs        r   find_config_filer      s=    ch}%%A
38}}ABCCC8<<??BJ:k"""=11/W^^O$$  wrw~/?/?@@AA*',,z=AAW^^)** !  W''88W^^$%% 	r   c                     t                      adt          v rt          d           t          j                            t                    adt          j        v r(t          t                     t          j	        d           t          j        
                    t                    r#t                              dt                      nt                              d           t          t          j        d<   t                       d S )Nrw   zEinline EM_CONFIG data no longer supported.  Please use a config file.z--generate-configr   zusing config file: z+config file not found; using default configr5   )r   r5   r   r,   r-   r   r   r   r   exitr4   rm   rn   rS   rs   r   r   r   initr   	  s      ) 
Y[\\\g  ++)
 CH$$IHQKKKW^^I @
LL2y223333
LL>???
 &"*[-----r   )+loggingr,   r2   r   rG   r   r   r   r   r   	getLoggerrm   EMSCRIPTEN_ROOTr'   r>   r@   rA   r)   rD   r*   r+   rE   r5   r(   r&   r
   r   str__annotations__r?   r   rB   rC   r   r   r   r/   r;   r]   rs   r   r   r   r   r   r   <module>r      s    				  



                 @ @ @ @ @ @ @ @ @ @		8	$	$ 
     	  "	49t " " "	 
DcO      	 "d49o " " "    ) ) )"
M 
M 
M/# /# /#d  B#? #? #?L3 3 3l  < r   