B
    a?                 @   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    x| D ]}|j |kr|S qW 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"   x| j D ]}|j|kr|S qW d S )N)methodsr
   )ifacemethodmr   r   r   find_method+   s    
r   c             C   s"   x| j D ]}|j|kr|S qW d S )N)Zsignalsr
   )r   signalr   r   r   r   find_signal2   s    
r   c             C   s"   x| j D ]}|j|kr|S qW d S )N)Z
propertiesr
   )r   propr   r   r   r   	find_prop9   s    
r   c             C   s\  d }x| D ]}	|	j |kr
|	}P q
W |d kr8td| d }
|rt||}|d krbtd|| |rt|j|}|d krt|j|}|d krtd||| |}
n|}
n|rt||}|d krtd|| |rt|j|}|d krtd||| |}
n|}
n4|r>t	||}|d kr8t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@   sR    






r!   c          
   C   s  x|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W d S )Nz::r      [r   ]:z().)findr!   rfind)r   Zannotation_listZwhatr   r   posr   r   r   r   Zcombinedr   r   r   r   apply_annotationsv   sJ    









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/ | jd0d1d/ | jd2d3d/ |  }|jd4dd5d  |jd6dd7d |jd8dd9d |jd:dd;d |jd<dd=d |  }|jd>dd?d  |jd@dAddBd |  }t|jdCkrtdD |j	d k	s|j
d k	r|jd k	rtdE |j	r|j	dF }tj|j|}dG|_tj|j|j	dH }dG|_n|jrB|jd kr.tdI |j}tj|}n|jr|jd kr^tdJ |j}tjtj|dC dF }n|jr|jd krtdK |jrtdL |j}tj|}nN|jr|jd krtdM |jrtdN |j}tjtj|dC dF }|jryZ|jdOd$}t|dC tt|dPkrJ|dP ndCf}tt|dQkrj|dQ ndC}W n* ttfk
r   tdR|j Y nX |dSk rtdT|j ndS}|jrNyZ|jdOd$}t|dC tt|dPkr|dP ndCf}	tt|dQkr|dQ ndC}W n* ttfk
rJ   tdU|j Y nX ntj tj!f}	|j"d kr~|j#sv|j$r~tdV |	dC |	dP |	dP dQ  f}	|	|k rtdW||	 g }
g }xft%|j&|j D ]R}t'|dX}|( }W d Q R X t)j*||dYkdZ}|
+| |,tj| qW |j-d k	r<t.|
|j- x|
D ]}|/|j0|j1 qBW |j
}t23|
}|r|4||j |jrt'|d[8}t56|
|j1|j|j7|||j8||j"|j#|}|4  W d Q R X |jrt'|d[.}t59|
|j1|j|||||j$|	}|4  W d Q R X |jr^t'|d[0}t5:|
|j1|||j8||j"|j#|	}|4  W d Q R X |jrt'|d[(}t5;|
|j1||||j$|}|4  W d Q R X t<=dC d S )\Nz&D-Bus code and documentation generator)descriptionfiles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-autocleanupZnoneZobjectsallz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_argumentSUPPRESS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_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outfilegenr   r   r   codegen_main   s   

*"
*"




r_   __main__)r?   rG   rW   r6   r   r   r   r   r   Zutilsr   r	   r   r   r   r   r!   r+   r_   __name__r   r   r   r   <module>   s&   66  <