U
    \Sh                     @  s   d Z ddlmZ ddlZddlZddlZddlmZ ddlZddlm	Z	 ddl
mZmZmZmZ ddlmZ zddlmZ W n  ek
r   dd	lmZ Y nX d
dddddddddddddddddddddd d!gZG d"d# d#Zd$d%d&d'd(ZdS ))a  sphinx-build -M command-line handling.

This replaces the old, platform-dependent and once-generated content
of Makefile / make.bat.

This is in its own module so that importing it is fast.  It should not
import the main Sphinx modules (like sphinx.applications, sphinx.builders).
    )annotationsN)path)
build_main)blueboldcolor_terminalnocolor)rmtree)chdir)_chdir) htmlzto make standalone HTML files)r   Zdirhtmlz2to make HTML files named index.html in directories)r   Z
singlehtmlz to make a single large HTML file)r   picklezto make pickle files)r   jsonzto make JSON files)r   Zhtmlhelpz+to make HTML files and an HTML help project)r   Zqthelpz'to make HTML files and a qthelp project)r   Zdevhelpz(to make HTML files and a Devhelp project)r   Zepubzto make an epub)r   latexz9to make LaTeX files, you can set PAPER=a4 or PAPER=letter)posixZlatexpdfz.to make LaTeX and PDF files (default pdflatex))r   Z
latexpdfjaz8to make LaTeX files and run them through platex/dvipdfmx)r   textzto make text files)r   manzto make manual pages)r   texinfozto make Texinfo files)r   infoz3to make Texinfo files and run them through makeinfo)r   gettextzto make PO message catalogs)r   changesz9to make an overview of all changed/added/deprecated items)r   xmlz!to make Docutils-native XML files)r   Z	pseudoxmlz0to make pseudoxml-XML files for display purposes)r   Z	linkcheckz)to check all external links for integrity)r   doctestz>to run all doctests embedded in the documentation (if enabled))r   Zcoveragez7to run coverage check of the documentation (if enabled))r   cleanz+to remove everything in the build directoryc                   @  s   e Zd ZdddddddZddddd	Zd
dddZddddZd
dddZd
dddZd
dddZ	d
dddZ
dddd
dddZdS )Makestr	list[str]None)srcdirbuilddiroptsreturnc                 C  s&   || _ || _|| _tjdd| _d S )NMAKEmake)r   r    r!   osenvirongetmakecmd)selfr   r    r!    r*   G/root/rtd-docs/venv/lib/python3.8/site-packages/sphinx/cmd/make_mode.py__init__9   s    zMake.__init__)compsr"   c                 G  s   t j| jf| S )N)r   joinr    )r)   r-   r*   r*   r+   builddir_join?   s    zMake.builddir_joinint)r"   c                 C  s   t | j}t | j}t | js(dS t | jsFtd| j  dS ||kr`td| j  dS t ||g|krtd| j  dS td| j  t	| jD ]}t
| | qdS )Nr   zError: %r is not a directory!   z&Error: %r is same as source directory!z.Error: %r directory contains source directory!zRemoving everything under %r...)r   abspathr   r    existsisdirprint
commonpathr%   listdirr	   r/   )r)   r   r    itemr*   r*   r+   build_cleanB   s"    zMake.build_cleanc                 C  st   t  st  ttdtj  tdtdfd   tD ]6\}}}|rPtj	|kr8tdt|
d d|  q8d S )Nz
Sphinx v%sz'Please use `make %s' where %s is one oftarget   z  
   )r   r   r5   r   sphinxZ__display_version__r   BUILDERSr%   nameljust)r)   osnameZbnamedescriptionr*   r*   r+   
build_helpU   s    zMake.build_helpc              
   C  s   |  ddkrdS tjdkr,tjdd}n| j}z6t| d t	
|dgW  5 Q R  W S Q R X W n" tk
r   td|  Y dS X d S 	Nr   r   r1   win32r#   zmake.batzall-pdfError: Failed to run: %srun_generic_buildsysplatformr%   r&   r'   r(   r
   r/   
subprocesscallOSErrorr5   r)   r(   r*   r*   r+   build_latexpdf_   s    
&zMake.build_latexpdfc              
   C  s   |  ddkrdS tjdkr,tjdd}n| j}z6t| d t	
|dgW  5 Q R  W S Q R X W n" tk
r   td|  Y dS X d S rD   rG   rN   r*   r*   r+   build_latexpdfjan   s    
&zMake.build_latexpdfjac              
   C  st   |  ddkrdS z8t| d  t| jdgW  5 Q R  W S Q R X W n$ tk
rn   td| j  Y dS X d S )Nr   r   r1   r   rF   )rH   r
   r/   rK   rL   r(   rM   r5   )r)   r*   r*   r+   
build_info}   s    (zMake.build_infoc                 C  s&   |  dd}| jd|ddkr"dS dS )Nr   z	.doctrees)
doctreedirr   r1   )r/   rH   )r)   Zdtdirr*   r*   r+   build_gettext   s    zMake.build_gettextNz
str | None)builderrR   r"   c                 C  sf   t dd}| j}|dkr0|dd| d g |d krB| d}d|d	|| j| |g}t|| S )
NZPAPERr   )Za4letterz-Dzlatex_elements.papersize=ZpaperZdoctreesz-bz-d)r%   getenvr!   extendr/   r   r   )r)   rT   rR   Z	papersizer!   argsr*   r*   r+   rH      s    
 zMake.run_generic_build)N)__name__
__module____qualname__r,   r/   r9   rC   rO   rP   rQ   rS   rH   r*   r*   r*   r+   r   8   s   

r   r   r0   )rX   r"   c                 C  sj   t | dk rtdtjd dS t| d | d | dd  }d| d  }t||r\t|| S || d S )N   zJError: at least 3 arguments (builder, source dir, build dir) are required.)filer1   r;   Zbuild_r   )lenr5   rI   stderrr   hasattrgetattrrH   )rX   r$   Z
run_methodr*   r*   r+   run_make_mode   s    
rb   )__doc__
__future__r   r%   rK   rI   r   r=   Zsphinx.cmd.buildr   Zsphinx.util.consoler   r   r   r   Zsphinx.util.osutilr	   
contextlibr
   ImportErrorr   r>   r   rb   r*   r*   r*   r+   <module>   sP   	e