U
    	u_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 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 kr6td| d }
|rt||}|d kr`td|| |rt|j|}|d krt|j|}|d krtd||| |}
n|}
n|r
t||}|d krtd|| |rt|j|}|d krtd||| |}
n|}
n4|r:t	||}|d k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   Z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dddg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.d  |jd/dd0d |jd1dd2d |jd3dd4d |jd5dd6d |  }|jd7dd8d  |jd9d:dd;d |  }t|jd<krvtd= |j	d k	s|j
d k	r|jd k	rtd> |j	r|j	d? }tj|j|}d@|_tj|j|j	dA }d@|_n|jr|jd krtdB |j}tj|}n|jrX|jd kr4tdC |j}tjtj|d< d? }n|jr|jd krttdD |jrtdE |j}tj|}nN|jr|jd krtdF |jrtdG |j}tjtj|d< d? }|jrzZ|jdHd$}t|d< tt|dIkr |dI nd<f}tt|dJkr@|dJ nd<}W n* ttfk
rr   tdK|j Y nX |dLk rtdM|j ndL}|jr$zZ|jdHd$}t|d< tt|dIkr|dI nd<f}	tt|dJkr|dJ nd<}W n* ttfk
r    tdN|j Y nX ntj tj!f}	|	d< |	dI |	dI dJ  f}	|	|k rftdO||	 g }
g }t"|j#|j D ]R}t$|dP}|% }W 5 Q R X t&j'||dQkdR}|
(| |)tj| q~|j*d k	rt+|
|j* |
D ]}|,|j-|j. q|j
}t/0|
}|r*|1||j}|jrrt$|dS0}t23|
|j.|j|j4|||j5||	}|1  W 5 Q R X |jrt$|dS*}t26|
|j.|j|||||}|1  W 5 Q R X |jrt$|dS(}t27|
|j.|||j5||}|1  W 5 Q R X |jr0t$|dS$}t28|
|j.||||}|1  W 5 Q R X t9:d< d S )TNz&D-Bus code and documentation generator)ZdescriptionfilesZFILE+zD-Bus introspection XML file)metavarnargshelpz--xml-filesappend)r/   actiondefaultr1   z--interface-prefixZPREFIX z<String to strip from D-Bus interface names for code and docs)r/   r4   r1   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)r3   r1   z--c-generate-autocleanupZnoneZobjectsallzGenerate autocleanup support)choicesr4   r1   z--generate-docbookZOUTFILESz2Generate Docbook in OUTFILES-org.Project.IFace.xml)r/   r1   z--pragma-oncez(Use "pragma once" as the inclusion guardz
--annotate   zWHAT KEY VALUEz*Add annotation (may be used several times))r0   r3   r/   r1   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--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`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headerZ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_VERSIONsortedr-   openreadr   Zparse_dbus_xmlextendr2   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partsrJ   _rO   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>   rD   rT   r5   r   r   r   r   r   Zutilsr   r	   r   r   r   r   r"   r,   r\   __name__r   r   r   r   <module>   s$   .- J