U
    {h{3                     @   s   d dl Z d dlmZmZmZmZ ddlmZ G dd deZG dd deZ	G d	d
 d
eZ
G dd deZG dd deZG dd deZG dd deZG dd deZdd Zdd Zdd ZdS )    N)ArgumentParserActionSUPPRESSRawDescriptionHelpFormatter   )Optionsc                   @   s   e Zd ZdddZdS )ParseDirectivesActionNc                 C   s8   t t|| jt }tj|d|d}t|| j| d S )NT)Zrelaxed_boolcurrent_settings)dictgetattrdestr   Zget_directive_defaultsZparse_directive_listsetattr)selfparser	namespacevaluesoption_stringZold_directives
directives r   ;/tmp/pip-unpacked-wheel-fhl22ezh/Cython/Compiler/CmdLine.py__call__   s    
  zParseDirectivesAction.__call__)N__name__
__module____qualname__r   r   r   r   r   r      s   r   c                   @   s   e Zd ZdddZdS )ParseOptionsActionNc           	      C   sl   t t|| ji }|dD ]<}d|krF|dd\}}| dk}n
|d }}|||< qt|| j| d S )N,=r   )falsef0noT)r
   r   r   splitlowerr   )	r   r   r   r   r   optionsoptnvr   r   r   r      s    

zParseOptionsAction.__call__)Nr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdddZdS )ParseCompileTimeEnvActionNc                 C   s2   t t|| ji }tj||d}t|| j| d S )N)r	   )r
   r   r   r   Zparse_compile_time_envr   )r   r   r   r   r   Zold_envZnew_envr   r   r   r   "   s    z"ParseCompileTimeEnvAction.__call__)Nr   r   r   r   r   r(   !   s   r(   c                   @   s   e Zd ZdddZdS )ActivateAllWarningsActionNc                 C   s"   t |di }|tj ||_d S )Ncompiler_directives)r   updater   Zextra_warningsr*   )r   r   r   r   r   r   r   r   r   r   )   s    z"ActivateAllWarningsAction.__call__)Nr   r   r   r   r   r)   (   s   r)   c                   @   s   e Zd ZdddZdS )SetLenientActionNc                 C   s   d|_ d|_d S )NF)Zerror_on_unknown_namesZerror_on_uninitializedr   r   r   r   r   r   r   r   r   0   s    zSetLenientAction.__call__)Nr   r   r   r   r   r,   /   s   r,   c                   @   s   e Zd ZdddZdS )SetGDBDebugActionNc                 C   s   d|_ tj|_d S NT)	gdb_debugoscurdir
output_dirr-   r   r   r   r   6   s    zSetGDBDebugAction.__call__)Nr   r   r   r   r   r.   5   s   r.   c                   @   s   e Zd ZdddZdS )SetGDBDebugOutputActionNc                 C   s   d|_ ||_d S r/   )r0   r3   r-   r   r   r   r   <   s    z SetGDBDebugOutputAction.__call__)Nr   r   r   r   r   r4   ;   s   r4   c                   @   s   e Zd ZdddZdS )SetAnnotateCoverageActionNc                 C   s   d|_ ||_d S r/   )annotateannotate_coverage_xmlr-   r   r   r   r   B   s    z"SetAnnotateCoverageAction.__call__)Nr   r   r   r   r   r5   A   s   r5   c               	   C   s~  d} t | ttdd}|jdddddd	d
 |jddddddd
 |jdddddd |jddddtdd |jddddddd
 |jdd ddd!d"d
 |jd#d$d%d&d'd |jd(d)d*ddd+d
 |jd,d-dtd.d |jd/d0d1d2d |jd3d4d5dtd6d |jd7td!d8d9 |jd:ttd;d< |jd=d>d?d@dAd |jdBdCddDdEdFdG |jdHddIdEdJdG |jdKdLttdMd |jdNdOd1dPd |jdQdRdSdddTd
 |jdUddVdWdX |jdYdZdd[d\d
 |jd]dZdd^d_d
 |jd`dZddadbd
 |jdct	d!ddd9 |jdedfd1dgd |jdhdid1djd |jdkdldmd1dnd |jdodpt
d!dqd9 |jdrdsdtduttdvdw |jdxdydtdzttd{dw |jd|d}tdd~d |jddd1dd |jdddtdd |jdddtdd |jddg d |jddddttd |jddd1td |jddd@td |jddd1td |jddd1td ddlm} t|D ]2}|drF|dd}|jd| d1td qF|S )Nz|Cython (https://cython.org/) is a compiler for code written in the Cython language.  Cython is based on Pyrex by Greg Ewing.zYEnvironment variables:
  CYTHON_CACHE_DIR: the base directory containing Cython's caches.)descriptionargument_defaultformatter_classepilogz-Vz	--versionshow_versionstore_constr   z)Display version number of cython compiler)r   actionconsthelpz-lz--create-listinguse_listing_filez&Write error messages to a listing filez-Iz--include-dirZinclude_pathappendzWSearch for include files in named directory (multiple include directories are allowed).)r   r>   r@   z-oz--output-fileZoutput_filestorez Specify name of generated C file)r   r>   typer@   z-tz--timestamps
timestampszOnly compile newer source filesz-fz--forcer   z/Compile all source files (overrides implied -t)z-vz	--verboseverbosecountz4Be verbose, print file names on multiple compilationz-pz--embed-positionsZembed_pos_in_docstringzeIf specified, the positions in Cython files of each function definition is embedded in its docstring.z	--cleanupZgenerate_cleanup_codezzRelease interned objects on python exit, for memory debugging. Level indicates aggressiveness, default 0 releases nothing.z--cachecache
store_truez!Enables Cython compilation cache.z-wz	--workingworking_pathzOSets the working directory for Cython (the directory modules are searched from)z--gdbz"Output debug information for cygdb)r>   nargsr@   z--gdb-outdirz>Specify gdb debug information output directory. Implies --gdb.)r>   rD   r@   z-Dz--no-docstringsZ
docstringsstore_falsez*Strip docstrings from the compiled module.z-az
--annotatedefaultr6   z/Produce a colorized HTML version of the source.)r>   r?   r   r@   z--annotate-fullcZfullczZProduce a colorized HTML version of the source which includes entire generated C/C++-code.z--annotate-coverager7   z7Annotate and include coverage information from cov.xml.z--line-directivesZemit_linenumsz4Produce #line directives pointing to the .pyx sourcez-+z--cplusZcplusz Output a C++ rather than C file.--embedmainzwGenerate a main() function that embeds the Python interpreter. Pass --embed=<method_name> for a name other than main().)r>   r?   r@   z-2Zlanguage_level   z4Compile based on Python-2 syntax and code semantics.z-3   z4Compile based on Python-3 syntax and code semantics.z--3str3zRCompile based on Python-3 syntax and code semantics (same as -3 since Cython 3.1).z	--lenientzQChange some compile time errors to runtime errors to improve Python compatibilityz--capi-reexport-cincludesZcapi_reexport_cincludesz9Add cincluded headers to any auto-generated header files.z--fast-failZ	fast_failz(Abort the compilation on the first errorz-Werrorz--warning-errorsZwarning_errorszMake all warnings into errorsz-Wextraz--warning-extrazEnable extra warningsz-Xz--directivezNAME=VALUE,...r*   zOverrides a compiler directive)metavarr   rD   r>   r@   z-Ez--compile-time-envZcompile_time_envz,Provides compile time env like DEF would do.z--module-namemodule_namezFully qualified module name. If not given, is deduced from the import path if source file is in a package, or equals the filename otherwise.)r   rD   r>   r@   z-Mz	--depfilez produce depfiles for the sources)r>   r@   z--generate-sharedshared_c_file_pathz,Generates shared module with specified name.z--sharedZshared_utility_qualified_namezQImports utility code from shared module specified by fully qualified module name.sources*)rK   rM   z-zz--pre-importZ
pre_importz--convert-rangeZconvert_rangez--no-c-in-tracebackZc_line_in_tracebackz--cimport-from-pyxZcimport_from_pyxz--old-style-globalsZold_style_globals
DebugFlagsdebug_-z--)r   r   r   add_argumentstrintr.   r4   r5   r,   r)   r   r(    rY   vars
startswithreplace)r8   r   rY   nameZoption_namer   r   r   create_cython_argparserF   s    	








 
   re   c                 C   s   dd }||\}}|  |\}}|j}|`|D ](}|drN| d|  q0|| q0|D ].}	|	dkrpd}
n|	tdd  }
t|d|
 q^||fS )	Nc                 S   sD   g g  }}| D ],}|dks$| dr0|| q|| q||fS )NrN   --embed=)rb   rB   )args
with_embedZwithout_embedxr   r   r   filter_out_embed_options   s    
z8parse_command_line_raw.<locals>.filter_out_embed_optionsr\   zunknown option rN   rO   rf   embed)parse_known_argsrV   rb   errorrB   lenr   )r   rg   rj   rh   Zargs_without_embed	argumentsunknownrV   optionri   rd   r   r   r   parse_command_line_raw   s    	
rr   c                 C   s  t  }t|| \}}t|dd}|D ]L}|rFtj|sFtj||}tj|s$dd l}t	|j
t|j
|q$ttj}t| D ]l\}}	|drddlm}
 |t|
krt|
||	 q|d|  qtt|rtt||	 qt|||	 q|jrt|dkr|d |jr:t|dkrZ|d	 n t|dkrZ|jsZ|d
 tjrzt|dkrz|d |jr|jr|d t|dkr|d ||fS )NrJ   r`   r   rZ   r   rX   zUnknown debug flag: %s
z3cython: Only one source file allowed when using -o
z=cython: Source file not allowed when using --generate-shared
z&cython: Need at least one source file
z8cython: Only one source file allowed when using --embed
z3cython: Cannot use --module-name with --timestamps
z>cython: Only one source file allowed when using --module-name
)re   rr   r   r1   pathisabsjoinexistserrnoFileNotFoundErrorENOENTstrerrorr   ZCompilationOptionsZdefault_optionsra   itemsrb   r`   rY   dirr   rm   hasattrrA   rn   rU   r<   rk   rT   rE   )rg   r   ro   rV   Zwork_dirsourcerw   r$   rd   valuerY   r   r   r   parse_command_line   sD    






r   )r1   argparser   r   r   r   r`   r   r   r   r(   r)   r,   r.   r4   r5   re   rr   r   r   r   r   r   <module>   s   	r$