a
    ZS`@                     @   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 ddlmZ ddlmZ ddl	m
Z
mZ d	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zedkre  dS )    N   )config)	dbustypes)parser)codegen)codegen_docbook)print_errorprint_warningc                 C   s    | D ]}|j |kr|  S qd S N)name)arg_listZarg_namea r   +/usr/share/glib-2.0/codegen/codegen_main.pyfind_arg#   s    

r   c                 C   s"   | j D ]}|j|kr|  S qd S r
   )methodsr   )ifacemethodmr   r   r   find_method)   s    


r   c                 C   s"   | j D ]}|j|kr|  S qd S r
   )Zsignalsr   )r   signalr   r   r   r   find_signal/   s    


r   c                 C   s"   | j D ]}|j|kr|  S qd S r
   )Z
propertiesr   )r   propr   r   r   r   	find_prop5   s    


r   c                 C   sX  d }| D ]}	|	j |kr|	} q q|d u r6td| d }
|rt||}|d u r`td|| |rt|j|}|d u rt|j|}|d u rtd||| |}
n|}
n|r
t||}|d u rtd|| |rt|j|}|d u rtd||| |}
n|}
n4|r:t	||}|d u r4td|| |}
n|}
|
j
dt|| d S )NzNo interface "{}"z No method "{}" on interface "{}"z,No arg "{}" on method "{}" on interface "{}"z No signal "{}" on interface "{}"z,No arg "{}" on signal "{}" on interface "{}"z"No property "{}" on interface "{}"r   )r   r   formatr   r   Zin_argsZout_argsr   argsr   annotationsinsertr   Z
Annotation)
iface_listr   r   r   r   argkeyvalueZ	iface_objiZ
target_objZ
method_objZarg_objZ
signal_objZprop_objr   r   r   apply_annotation;   sJ    




r#   c              
   C   s  |D ]\}}}| d}|dkr|d| }||d d  }| d}|dkr||d d  }|d| }| d}|d| }t| |d |d ||| nt| |d |d d || q| d}|dkr|d| }||d d  }	t| |d d |	d || q| d	}|dkr|d| }
|
d
}|
d| }|
|d d  }| d}|dkr||d d  }| d}|d| }t| ||d d ||| nt| ||d d d || q|}t| |d d d d || qd S )Nz::r      [r   ]:z().)findr#   rfind)r   Zannotation_listZwhatr    r!   posr   r   r   r   Zcombinedr   r   r   r   apply_annotationsi   sB    









r-   c                  C   s  t jdd} | jddddd | jddd	g t jd
 | jddddd | jddddd | jdddd | jdg dddd | jdddd | jd dd!d | jd"d#d	d$d%d& | jd'd(d)d | jd*d(d+d | jd,d-d. | jd/d0d. | jd1d2d. |  }|jd3dd4d |jd5dd6d |jd7dd8d |jd9dd:d |jd;dd<d |  }|jd=dd>d |jd?d@ddAd |  }t|jdBkrtdC |j	d us|j
d ur|jd urtdD |j	r|j	dE }tj|j|}dF|_tj|j|j	dG }dF|_n|jr@|jd u r,tdH |j}tj|}n|jr|jd u r\tdI |j}tjtj|dB dE }n|jr|jd u rtdJ |jrtdK |j}tj|}nN|jr|jd u rtdL |jrtdM |j}tjtj|dB dE }|jrzZ|jdNd#}t|dB tt|dOkrH|dO ndBf}tt|dPkrh|dP ndB}W n( ttfy   tdQ|j Y n0 |dRk rtdS|j ndR}|jrHzZ|jdNd#}t|dB tt|dOkr|dO ndBf}	tt|dPkr|dP ndB}W n( ttfyD   tdT|j Y n0 ntj tj!f}	|j"d u rx|j#sp|j$rxtdU |	dB |	dO |	dO dP  f}	|	|k rtdV||	 g }
g }t%|j&|j D ]h}t'|dW}|( }W d    n1 s0    Y  t)j*||dXkdY}|
+| |,tj| q|j-d urHt.|
|j- |
D ]}|/|j0|j1 qL|j
}t23|
}|r|4||j}|jrt'|dZB}t56|
|j1|j|j7|||j8||j"|j#|}|4  W d    n1 s0    Y  |jrJt'|dZ8}t59|
|j1|j|||||j$|	}|4  W d    n1 s@0    Y  |jrt'|dZ:}t5:|
|j1|||j8||j"|j#|	}|4  W d    n1 s0    Y  |jrt'|dZ2}t5;|
|j1||||j$|}|4  W d    n1 s0    Y  t<=dB d S )[Nz&D-Bus code and documentation generator)ZdescriptionfilesZFILE+zD-Bus introspection XML file)metavarnargshelpz--xml-filesappend)r0   actiondefaultr2   z--interface-prefixZPREFIX z<String to strip from D-Bus interface names for code and docs)r0   r5   r2   z--c-namespaceZ	NAMESPACEz)The namespace to use for generated C codez--c-generate-object-manager
store_truezCGenerate a GDBusObjectManagerClient subclass when generating C code)r4   r2   z--c-generate-autocleanup)Znoneobjectsallr8   zGenerate autocleanup support)choicesr5   r2   z--generate-docbookZOUTFILESz2Generate Docbook in OUTFILES-org.Project.IFace.xml)r0   r2   z--pragma-oncez(Use "pragma once" as the inclusion guardz
--annotate   zWHAT KEY VALUEz*Add annotation (may be used several times))r1   r4   r0   r2   z--glib-min-requiredZVERSIONzMMinimum version of GLib to be supported by the outputted code (default: 2.30)z--glib-max-allowedzXMaximum version of GLib to be used by the outputted code (default: current GLib version)z--symbol-decoratorzSMacro used to decorate a symbol in the outputted header, possibly to export symbols)r2   z--symbol-decorator-headerzHAdditional header required for decorator specified by --symbol-decoratorz--symbol-decorator-definezHAdditional define required for decorator specified by --symbol-decoratorz--generate-c-codez Generate C code in OUTFILES.[ch]z--headerzGenerate C headersz--bodyzGenerate C codez--interface-info-headerz$Generate GDBusInterfaceInfo C headerz--interface-info-bodyz"Generate GDBusInterfaceInfo C codez--outputz$Write output into the specified filez--output-directoryZOUTDIRz"Location to output generated filesr   zHThe "--xml-files" option is deprecated; use positional arguments insteadzZUsing --generate-c-code or --generate-docbook and --output at the same time is not allowedz.hTz.cz Using --header requires --outputzUsing --body requires --outputz/Using --interface-info-header requires --outputzH--c-generate-object-manager is incompatible with --interface-info-headerz-Using --interface-info-body requires --outputzF--c-generate-object-manager is incompatible with --interface-info-bodyr)   r   r%   u0   Unrecognized --glib-min-required string ‘{}’)r%      uD   Invalid --glib-min-required string ‘{}’: minimum version is 2.30u/   Unrecognized --glib-max-allowed string ‘{}’z\--symbol-decorator-define and --symbol-decorator-header must be used with --symbol-decoratorz`Invalid versions: --glib-min-required ({}) must be less than or equal to --glib-max-allowed ({})rb)r%   @   )Zh_type_implies_unix_fdw)>argparseArgumentParseradd_argumentZSUPPRESSZadd_mutually_exclusive_group
parse_argslenZ	xml_filesr	   Zgenerate_c_codeZgenerate_docbookoutputr   ospathjoinZoutput_directoryheaderbodybasenamesplitextZinterface_info_headerZc_generate_object_managerZinterface_info_bodyglib_min_requiredsplitint
ValueError
IndexErrorr   glib_max_allowedr   ZMAJOR_VERSIONZMINOR_VERSIONZsymbol_decoratorZsymbol_decorator_headerZsymbol_decorator_definesortedr.   openreadr   Zparse_dbus_xmlextendr3   Zannotater-   Zpost_processZinterface_prefixZc_namespacer   ZDocbookCodeGeneratorZgenerater   ZHeaderCodeGeneratorZc_generate_autocleanupZpragma_onceZCodeGeneratorZ InterfaceInfoHeaderCodeGeneratorZInterfaceInfoBodyCodeGeneratorsysexit)Z
arg_parsergroupr   Zheader_nameZh_fileZc_filepartsrM   _rR   Z
all_ifacesZinput_files_basenamesfnamefZxml_dataZparsed_ifacesr"   ZdocbookZdocbook_genZretZoutfilegenr   r   r   codegen_main   s   





"

"
(

(	(	((r_   __main__)r@   rF   rW   r6   r   r   r   r   r   Zutilsr   r	   r   r   r   r   r#   r-   r_   __name__r   r   r   r   <module>   s$   .- [