
f	Y:C                 @   s  d  d l  Z  d  d l Z d  d l Z d  d l m Z d  d l m Z d d l m Z m	 Z	 d d l m
 Z
 m Z m Z d  d l Z d Z d d	 d
 d d d g Z Gd d   d  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d  Z d d   Z d d   Z d  d!   Z d" d#   Z d$ d%   Z d& d'   Z d( d)   Z i e d* d+ d, d- d. d/ g d, g d0 6e d1 d2 g d3 6e d4 d5 d6 d7 g d6 g d8 6e d9 e   g d: 6e d; e
   g d< 6e d= e   g d> 6e d? d@ g dA 6e dB dC g dD 6e dE dF g dG 6e dH dI g dJ 6e dK dL g dM 6e dN dO g dP 6e dQ dR g dS 6e dT dU g dV 6e dW dX g dY 6e dZ d[ g d\ 6e d] d2 g d^ 6e d_ d` da db g d` g dc 6e dd de df g de g dg 6e dh di dj g di g dk 6e dl e d g dm 6e dn do g dp 6e dq do g dr 6Z dV dY d\ h Z i d ds 6d dt 6d du 6d dv 6d dw 6d dx 6d dy 6d dz 6d d{ 6d d| 6d d} 6d d~ 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6Z  d S)    N)PurePath)OrderedDict   )MesonException
commonpath)default_libdirdefault_libexecdirdefault_prefixz0.42.1ninjavsvs2010vs2015vs2017xcodec                   s:   e  Z d  Z   f d d   Z d d   Z d d   Z   S)
UserOptionc                s,   t    j   | |  _ | |  _ | |  _ d  S)N)super__init__namechoicesdescription)selfr   r   r   )	__class__ O/mnt/raid6/a/bak/reczko/tools/protein/utils/meson-0.42.1/mesonbuild/coredata.pyr      s    		zUserOption.__init__c             C   s   | S)Nr   )r   valuestringr   r   r   parse_string    s    zUserOption.parse_stringc             C   s   t  d   d  S)Nz5Derived option class did not override validate_value.)RuntimeError)r   valuer   r   r   validate_value&   s    zUserOption.validate_value)__name__
__module____qualname__r   r   r   r   r   )r   r   r      s   r   c                   sI   e  Z d  Z d   f d d  Z d d   Z d d   Z d d	   Z   S)
UserStringOptionNc                s'   t    j | | |  |  j |  d  S)N)r   r   	set_value)r   r   r   r   r   )r   r   r   r   *   s    zUserStringOption.__init__c             C   s5   t  | t  s1 t d t |  |  j f   n  d  S)Nz2Value "%s" for string option "%s" is not a string.)
isinstancestrr   r   )r   r   r   r   r   validate.   s    zUserStringOption.validatec             C   s   |  j  |  | |  _ d  S)N)r&   r   )r   newvaluer   r   r   r#   2   s    zUserStringOption.set_valuec             C   s   |  j  |  | S)N)r&   )r   r   r   r   r   r   6   s    zUserStringOption.validate_value)r   r    r!   r   r&   r#   r   r   r   )r   r   r"   )   s   r"   c                   s^   e  Z d  Z   f d d   Z d d   Z d d   Z d d   Z d	 d
   Z d d   Z   S)UserBooleanOptionc                s-   t    j | | d d g  |  j |  d  S)NTF)r   r   r#   )r   r   r   r   )r   r   r   r   ;   s    zUserBooleanOption.__init__c             C   sS   t  | t  r | S| j   d k r) d S| j   d k r? d St d |   d  S)NtrueTfalseFz(Value %s is not boolean (true or false).)r$   boollowerr   )r   Zthingr   r   r   tobool?   s    zUserBooleanOption.toboolc             C   s   |  j  |  |  _ d  S)N)r-   r   )r   r'   r   r   r   r#   H   s    zUserBooleanOption.set_valuec             C   s=   | d k r d S| d k r  d St  d | |  j f   d  S)Nr*   Fr)   Tz4Value "%s" for boolean option "%s" is not a boolean.)r   r   )r   r   r   r   r   r   K   s
    zUserBooleanOption.parse_stringc             C   s   |  j  S)N)r   )r   r   r   r   __bool__R   s    zUserBooleanOption.__bool__c             C   s   |  j  |  S)N)r-   )r   r   r   r   r   r   U   s    z UserBooleanOption.validate_value)	r   r    r!   r   r-   r#   r   r.   r   r   r   )r   r   r(   :   s   	r(   c                   sR   e  Z d  Z   f d d   Z d d   Z d d   Z d d   Z d	 d
   Z   S)UserIntegerOptionc                s?   t    j | | d d g  | |  _ | |  _ |  j |  d  S)NTF)r   r   	min_value	max_valuer#   )r   r   r   r0   r1   r   )r   r   r   r   Y   s    		zUserIntegerOption.__init__c             C   s   t  | t  r! |  j |  } n  t  | t  s? t d   n  |  j d  k	 ry | |  j k  ry t d | |  j f   n  |  j d  k	 r | |  j k r t d | |  j f   n  | |  _ d  S)Nz/New value for integer option is not an integer.z+New value %d is less than minimum value %d.z+New value %d is more than maximum value %d.)r$   r%   tointintr   r0   r1   r   )r   r'   r   r   r   r#   _   s    zUserIntegerOption.set_valuec          	   C   s-   y t  |  SWn t d |   Yn Xd  S)Nz3Value string "%s" is not convertable to an integer.)r3   r   )r   r   r   r   r   r2   j   s    zUserIntegerOption.tointc             C   s   |  j  |  S)N)r2   )r   r   r   r   r   r   p   s    zUserIntegerOption.parse_stringc             C   s   |  j  |  S)N)r2   )r   r   r   r   r   r   s   s    z UserIntegerOption.validate_value)r   r    r!   r   r#   r2   r   r   r   r   )r   r   r/   X   s
   r/   c                   s:   e  Z d  Z   f d d   Z d d   Z d d   Z   S)UserComboOptionc                sz   t    j | | |  t |  j t  s7 t d   n  x/ |  j D]$ } t | t  sA t d   qA qA W|  j |  d  S)NzCombo choices must be an array.z&Combo choice elements must be strings.)r   r   r$   r   listr   r%   r#   )r   r   r   r   r   i)r   r   r   r   w   s    zUserComboOption.__init__c             C   sZ   | |  j  k rM d j d d   |  j  D  } t d | |  j | f   n  | |  _ d  S)Nz, c             S   s   g  |  ] } d  | f  q S)z"%s"r   ).0itemr   r   r   
<listcomp>   s   	 z-UserComboOption.set_value.<locals>.<listcomp>zUValue "%s" for combo option "%s" is not one of the choices. Possible choices are: %s.)r   joinr   r   r   )r   r'   Zoptionsstringr   r   r   r#      s    zUserComboOption.set_valuec             C   s&   | |  j  k r" t d |   n  | S)Nz$Value %s not one of accepted values.)r   r   )r   r   r   r   r   r      s    zUserComboOption.validate_value)r   r    r!   r   r#   r   r   r   )r   r   r4   v   s   	r4   c                   sF   e  Z d  Z   f d d   Z d d   Z d d   Z d d   Z   S)	UserStringArrayOptionc                s3   t    j | | | j d g    |  j |  d  S)Nr   )r   r   getr#   )r   r   r   r   kwargs)r   r   r   r      s    "zUserStringArrayOption.__init__c             C   s   t  | t  rC | j d  s1 t d |   n  t j |  } n | } t  | t  sv t d j t |     n  x; | D]3 } t  | t  s} t d j t |     q} q} W| S)N[z&Valuestring does not define an array: z-"{0}" should be a string array, but it is notz+String array element "{0}" is not a string.)r$   r%   
startswithr   astZliteral_evalr5   format)r   r   r'   r6   r   r   r   r&      s    "zUserStringArrayOption.validatec             C   s   |  j  |  |  _ d  S)N)r&   r   )r   r'   r   r   r   r#      s    zUserStringArrayOption.set_valuec             C   s   |  j  |  | S)N)r&   )r   r   r   r   r   r      s    z$UserStringArrayOption.validate_value)r   r    r!   r   r&   r#   r   r   r   )r   r   r;      s   r;   c               @   sp   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z d d   Z d d   Z	 d d   Z
 d S)CoreDatac             C   sN  t  t j    j   |  _ t  t j    j   |  _ t  t j    j   |  _ i  |  _ t |  _ |  j	 |  |  j
 |  j d j  i  |  _ i  |  _ i  |  _ i  |  _ i  |  _ i  |  _ | j d  k	 r t j j t j   | j  |  _ n	 d  |  _ | j |  _ t   |  _ t   |  _ t   |  _ i  |  _ t j j d d  |  _  d  S)NbackendPKG_CONFIG_PATH )!r%   uuidZuuid4upperZguidZ	test_guidZ
regen_guidZtarget_guidsversioninit_builtinsinit_backend_optionsbuiltinsr   user_optionscompiler_optionsbase_optionsZexternal_preprocess_argsZexternal_argsZexternal_link_args
cross_fileospathr:   getcwdZ	wrap_moder   	compilersZcross_compilersZdepsmodulesenvironr<   pkgconf_envvar)r   optionsr   r   r   r      s,    								$		zCoreData.__init__c             C   s   t  j j |  s* t d j |    n  | j d  sH | j d  r t |  d k rm | d d k rm q | d  d  } n  | S)Nz*prefix value {!r} must be an absolute path/\   r   :)rP   rQ   isabsr   rA   endswithlen)r   prefixr   r   r   sanitize_prefix   s    "zCoreData.sanitize_prefixc             C   s   | j  d  r t j j |  r | t k r t | | g  t t |   k ru d } t | j	 | | |    n  t
 |  d } | | d  } n  | S)aS  
        If the option is an installation directory option and the value is an
        absolute path, check that it resides within prefix and return the value
        as a path relative to the prefix.

        This way everyone can do f.ex, get_option('libdir') and be sure to get
        the library directory relative to prefix.
        dirzThe value of the {!r} option is {!r} which must be a subdir of the prefix {!r}.
Note that if you pass a relative path, it is assumed to be a subdir of prefix.r   N)r^   rP   rQ   r]   builtin_dir_noprefix_optionsr   r%   r   r   rA   r_   )r   r`   optionr   mskipr   r   r   sanitize_dir_option_value   s    	!$z"CoreData.sanitize_dir_option_valuec             C   s   i  |  _  |  j | j  | _ x t   D] } t | |  rw t | |  } |  j | j | |  } t | | |  n t |  } | g t	 | d d  | g } t	 | d |   |  j  | <q( Wd  S)Nr   r   r\   )
rK   ra   r`   get_builtin_optionshasattrgetattrrg   setattrget_builtin_option_defaultbuiltin_options)r   rW   keyr   argsr   r   r   rI      s    	"zCoreData.init_builtinsc             C   s;   i  |  _  | d k r7 t d d d d  d  |  j  d <n  d  S)Nr
   Zbackend_max_linksz;Maximum number of linker processes to run or 0 for no limitr   )Zbackend_optionsr/   )r   Zbackend_namer   r   r   rJ      s
    	zCoreData.init_backend_optionsc             C   s1   | |  j  k r |  j  | j St d |   d  S)Nz'Tried to get unknown builtin option %s.)rK   r   r   )r   optnamer   r   r   get_builtin_option  s    zCoreData.get_builtin_optionc             C   s}   | d k r |  j  |  } nG | |  j k rU |  j d j } |  j | | |  } n t d |   |  j | j |  d  S)Nr`   z'Tried to set unknown builtin option %s.)ra   rK   r   rg   r   r#   )r   rp   r   r`   r   r   r   set_builtin_option  s    zCoreData.set_builtin_optionc             C   s`   xI |  j  |  j |  j |  j f D]) } | | k r | | } | j |  Sq Wt d |   d  S)Nz$Tried to validate unknown option %s.)rK   rN   rM   rL   r   r   )r   Zoption_nameZoverride_valueoptsoptr   r   r   validate_option_value  s
    %
zCoreData.validate_option_valueN)r   r    r!   r   ra   rg   rI   rJ   rq   rr   ru   r   r   r   r   rB      s   
rB   c             C   s   d j  |   } y+ t |  d   } t j |  } Wd  QXWn! t j k
 r] t |   Yn Xt | t  s| t |   n  | j t k r t d | j t f   n  | S)Nz=Coredata file {!r} is corrupted. Try with a fresh build tree.rbzBuild directory has been generated with Meson version %s, which is incompatible with current version %s.
Please delete this build directory AND create a new one.)	rA   openpickleloadUnpicklingErrorr   r$   rB   rH   )filenameZload_fail_msgfobjr   r   r   ry     s    ry   c          
   C   sJ   |  j  t  k r t d   n  t | d   } t j |  |  Wd  QXd  S)Nz"Fatal version mismatch corruption.wb)rH   r   rw   rx   dump)r}   r{   r|   r   r   r   save'  s    r   c               C   s   t  t j    S)N)r5   rm   keysr   r   r   r   rh   -  s    rh   c             C   s   |  t    k S)N)rh   )rp   r   r   r   is_builtin_option0  s    r   c             C   se   t  |   rQ t |  d t k r$ d  St |  d t k rB d d g St |  d Sn t d |    d  S)Nr   TF   zETried to get the supported values for an unknown builtin option '%s'.)r   rm   r"   r(   r   )rp   r   r   r   get_builtin_option_choices3  s    
r   c             C   s,   t  |   r t |  d St d |    d  S)Nr   z@Tried to get the description for an unknown builtin option '%s'.)r   rm   r   )rp   r   r   r   get_builtin_option_description>  s    r   c             C   sJ   t  |   r6 t |  } | d t k r. | d S| d St d |    d  S)Nr   rZ   r   zBTried to get the default value for an unknown builtin option '%s'.)r   rm   r4   r   )rp   or   r   r   rl   D  s    
rl   zBuild type to use.ZplaindebugZdebugoptimizedreleaseZminsize	buildtypezStrip targets on install.FstripzUnity build.onoffZsubprojectsunityzInstallation prefix.r`   zLibrary directory.libdirzLibrary executable directory.
libexecdirzExecutable directory.binbindirzSystem executable directory.ZsbinsbindirzHeader file directory.include
includedirzData file directory.ZsharedatadirzManual page directory.z	share/manmandirzInfo page directory.z
share/infoinfodirzLocale data directory.zshare/locale	localedirzSysconf data directory.etc
sysconfdirzLocalstate data directory.varlocalstatedirz(Architecture-independent data directory.ZcomsharedstatedirzTreat warnings as errors.werrorzCompiler warning level to use.123warning_levelzBuild directory layout.ZmirrorZflatlayoutzDefault library type.ZsharedZstaticZdefault_libraryzBackend to use.rC   z%Split stdout and stderr in test logs.Tstdsplitz-Whether to print the logs from failing tests.	errorlogsZcleanzclean-ctlistz
clean-gcnoz
clean-gcdacoveragezcoverage-textzcoverage-xmlzcoverage-htmlZphonyZPHONYalltestZ	benchmarkinstall	uninstallzbuild.ninjaz
scan-buildZreconfiguredistZ	distcheck)!rx   rP   rF   Zpathlibr   collectionsr   mesonlibr   r   r   r   r	   r@   rH   Zbackendlistr   r"   r(   r/   r4   r;   rB   ry   r   rh   r   r   r   rl   rm   rc   Zforbidden_target_namesr   r   r   r   <module>   s   $p	"

