gtk2 2.24.30 and gtk3 3.20.2
next time: write a script that copies all required files from /usr/local to the git repo...
							
								
								
									
										48
									
								
								README.md
									
									
									
									
									
								
							
							
						
						| @@ -3,7 +3,7 @@ GTK+ for Windows Runtime Environment Installer: 64-bit | ||||
|  | ||||
| This repository is a fork of the  [GTK+ for Windows Runtime Environment Installer](http://gtk-win.sourceforge.net) that was originally created | ||||
| by Alexander Shaduri. | ||||
| My efforts here will focus on creating a **64-bit version** of the GTK+-2 runtime that he has been providing so far, using up to date versions of GTK+ and its dependencies. Recently I have also created a 64-bit **GTK+-3 runtime package**. All packages now contain **Gtkmm** and its dependencies too. Since the GTK+ developers recently dropped support for stock icons (a mistake of epic proportions IMHO...), I added the Adwaita icon theme to the GTK+-3 runtime, so you can still enjoy pretty filechooserdialogs etc! I have also added a couple of commonly used libraries such as libxml++ and libxslt. | ||||
| My efforts here will focus on creating a **64-bit version** of the GTK+-2 runtime that he has been providing so far, using up to date versions of GTK+ and its dependencies. Recently I have also created a 64-bit **GTK+-3 runtime package**. All packages now contain **Gtkmm** and its dependencies too. Since the GTK+ developers recently dropped support for stock icons (a mistake of epic proportions IMHO...), I added the Adwaita icon theme to the GTK+-3 runtime, so you can still enjoy pretty filechooserdialogs etc! I have also added a couple of commonly used libraries such as libxml++, libxslt and gtksourceview. | ||||
|  | ||||
| The installers can be found [here](http://lvserver.ugent.be/gtk-win64/). | ||||
|  | ||||
| @@ -11,42 +11,48 @@ The installers can be found [here](http://lvserver.ugent.be/gtk-win64/). | ||||
|  | ||||
| Both for convencience as well as for increased reliability across installations, it is recommended for developers to compile and link against the GTK+ SDK that I used to create the installers. This SDK can also be obtained at the aforementioned url. | ||||
|  | ||||
| The current releases ([gtk2-runtime-2.24.29-2016-01-10-ts-win64.exe](http://lvserver.ugent.be/gtk-win64/gtk2-runtime/gtk2-runtime-2.24.29-2016-01-10-ts-win64.exe) and [gtk3-runtime-3.18.6-2016-01-10-ts-win64.exe](http://lvserver.ugent.be/gtk-win64/gtk3-runtime/gtk3-runtime-3.18.6-2016-01-10-ts-win64.exe)) have been compiled using GCC 5.1.0 (MinGW-w64 installed from TDM-GCC).  | ||||
| The current releases ([gtk2-runtime-2.24.30-2016-04-09-ts-win64.exe](http://lvserver.ugent.be/gtk-win64/gtk2-runtime/gtk2-runtime-2.24.30-2016-04-09-ts-win64.exe) and [gtk3-runtime-3.20.2-2016-04-09-ts-win64.exe](http://lvserver.ugent.be/gtk-win64/gtk3-runtime/gtk3-runtime-3.20.2-2016-04-09-ts-win64.exe)) have been compiled using GCC 5.1.0 (MinGW-w64 installed from TDM-GCC).  | ||||
| The included GTK+ dependencies were selected according to the flowchart used by [Hexchat](http://hexchat.github.io/gtk-win32/). The source tarballs can be obtained by clicking on the names of the dependencies in the following list: | ||||
|  | ||||
| * [adwaita icon theme](http://ftp.gnome.org/pub/GNOME/sources/adwaita-icon-theme/) (3.18.0) | ||||
| * [atk](http://ftp.gnome.org/pub/GNOME/sources/atk/) (2.18.0) | ||||
| * [adwaita icon theme](http://ftp.gnome.org/pub/GNOME/sources/adwaita-icon-theme/) (3.20) | ||||
| * [atk](http://ftp.gnome.org/pub/GNOME/sources/atk/) (2.20.0) | ||||
| * [atkmm](http://ftp.gnome.org/pub/GNOME/sources/atkmm/) (2.24.2) | ||||
| * [cairo](http://cairographics.org/releases/) (1.14.6) | ||||
| * [cairomm](http://cairographics.org/releases/) (1.12.0) | ||||
| * [fontconfig](http://www.freedesktop.org/software/fontconfig/release/) (2.11.1) | ||||
| * [freetype](http://www.freetype.org/download.html) (2.6.2) | ||||
| * [gdk-pixbuf](http://ftp.gnome.org/pub/GNOME/sources/gdk-pixbuf/) (2.32.3) | ||||
| * [freetype](http://www.freetype.org/download.html) (2.6.3) | ||||
| * [gdk-pixbuf](http://ftp.gnome.org/pub/GNOME/sources/gdk-pixbuf/) (2.34.0) | ||||
| * [gettext](http://ftp.gnu.org/pub/gnu/gettext/) (0.19.7) | ||||
| * [glib](http://ftp.gnome.org/pub/GNOME/sources/glib/) (2.46.2) | ||||
| * [glibmm](http://ftp.gnome.org/pub/GNOME/sources/glibmm/) (2.46.3) | ||||
| * [gtk2](http://ftp.gnome.org/pub/GNOME/sources/gtk+/) (2.24.29) | ||||
| * [gtk3](http://ftp.gnome.org/pub/GNOME/sources/gtk+/) (3.18.6) | ||||
| * [glib](http://ftp.gnome.org/pub/GNOME/sources/glib/) (2.48.0) | ||||
| * [glibmm](http://ftp.gnome.org/pub/GNOME/sources/glibmm/) (2.48.1) | ||||
| * [gtk2](http://ftp.gnome.org/pub/GNOME/sources/gtk+/) (2.24.30) | ||||
| * [gtk3](http://ftp.gnome.org/pub/GNOME/sources/gtk+/) (3.20.2) | ||||
| * [gtkmm2](http://ftp.gnome.org/pub/GNOME/sources/gtkmm) (2.24.4) | ||||
| * [gtkmm3](http://ftp.gnome.org/pub/GNOME/sources/gtkmm) (3.18.0) | ||||
| * [harfbuzz](http://www.freedesktop.org/software/harfbuzz/release/) (1.1.2) | ||||
| * [gtkmm3](http://ftp.gnome.org/pub/GNOME/sources/gtkmm) (3.20.0) | ||||
| * [gtksourceview2](http://ftp.gnome.org/pub/GNOME/sources/gtksourceview/) (2.10.5) | ||||
| * [gtksourceview3](http://ftp.gnome.org/pub/GNOME/sources/gtksourceview/) (3.20.1) | ||||
| * [gtksourceviewmm2](http://ftp.gnome.org/pub/GNOME/sources/gtksourceviewmm/) (2.10.3) | ||||
| * [gtksourceviewmm3](http://ftp.gnome.org/pub/GNOME/sources/gtksourceviewmm/) (3.18.0) | ||||
| * [harfbuzz](http://www.freedesktop.org/software/harfbuzz/release/) (1.1.4) | ||||
| * [hicolor-icon-theme](http://icon-theme.freedesktop.org/releases/) (0.15) | ||||
| * [icon-naming-utils](http://tango.freedesktop.org/releases/) (0.8.90) | ||||
| * [intltool](http://ftp.gnome.org/pub/gnome/sources/intltool/) (0.51.0) | ||||
| * [json-glib](http://ftp.gnome.org/pub/gnome/sources/json-glib/) (1.0.4) | ||||
| * [json-glib](http://ftp.gnome.org/pub/gnome/sources/json-glib/) (1.2.0) | ||||
| * [libepoxy](https://github.com/anholt/libepoxy) (1.3.1) | ||||
| * [libffi](http://sourceware.org/libffi/) (3.2.1) | ||||
| * [libpng](http://sourceforge.net/project/showfiles.php?group_id=5624) (1.6.20) | ||||
| * [libsigc++](http://ftp.gnome.org/pub/GNOME/sources/libsigc++/) (2.6.2) | ||||
| * [libpng](http://sourceforge.net/project/showfiles.php?group_id=5624) (1.6.21) | ||||
| * [libsigc++](http://ftp.gnome.org/pub/GNOME/sources/libsigc++/) (2.8.0) | ||||
| * [libxml2](http://xmlsoft.org/sources/) (2.9.3) | ||||
| * [libxml++](http://ftp.gnome.org/pub/GNOME/sources/libxml++/) (2.38.1) | ||||
| * [libxml++2](http://ftp.gnome.org/pub/GNOME/sources/libxml++/) (2.40.1) | ||||
| * [libxml++3](http://ftp.gnome.org/pub/GNOME/sources/libxml++/) (3.0.0) | ||||
| * [libxslt](http://xmlsoft.org/sources/) (1.1.28) | ||||
| * [mm-common](http://ftp.gnome.org/pub/GNOME/sources/mm-common/) (0.9.9) | ||||
| * [pango](http://ftp.gnome.org/pub/GNOME/sources/pango/) (1.38.1) | ||||
| * [pangomm](http://ftp.gnome.org/pub/GNOME/sources/pangomm/) (2.38.1) | ||||
| * [pixman](http://cairographics.org/releases/) (0.32.8) | ||||
| * [pkg-config](http://pkgconfig.freedesktop.org/releases/) (0.29) | ||||
| * [win-iconv](http://code.google.com/p/win-iconv/downloads/list) (0.0.6) | ||||
| * [pango](http://ftp.gnome.org/pub/GNOME/sources/pango/) (1.40.0) | ||||
| * [pangomm](http://ftp.gnome.org/pub/GNOME/sources/pangomm/) (2.40.0) | ||||
| * [pcre](ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/) (8.38) | ||||
| * [pixman](http://cairographics.org/releases/) (0.34.0) | ||||
| * [pkg-config](http://pkgconfig.freedesktop.org/releases/) (0.29.1) | ||||
| * [win-iconv](https://github.com/win-iconv/win-iconv) (0.0.8) | ||||
| * [zlib](http://www.zlib.net) (1.2.8) | ||||
|  | ||||
| For all other information regarding how to use the installer, the reader is kindly referred to [Alexander Shaduri's website](http://gtk-win.sourceforge.net) of the GTK for Windows runtime environment installer. The only difference with the installers found at his website is that mine DO NOT have the `compatdlls` option, but this should present no problems to any user.   | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								gtk-nsis-pack/bin/iconv.dll
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								gtk-nsis-pack/bin/libgtksourceview-2.0-0.dll
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								gtk-nsis-pack/bin/libgtksourceview-3.0-1.dll
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								gtk-nsis-pack/bin/libgtksourceviewmm-2.0-2.dll
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								gtk-nsis-pack/bin/libgtksourceviewmm-3.0-0.dll
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								gtk-nsis-pack/bin/libpcre-1.dll
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								gtk-nsis-pack/bin/libwinpthread_64-1.dll
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								gtk-nsis-pack/bin/libxml++-3.0-1.dll
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -12,9 +12,9 @@ | ||||
| ; should be installable side by side with this package. | ||||
|  | ||||
|  | ||||
| !define GTK_VERSION "2.24.29" | ||||
| !define GTK_VERSION "2.24.30" | ||||
| !define GTK_BIN_VERSION "2.10.0" | ||||
| !define PRODUCT_VERSION "${GTK_VERSION}-2016-01-10-ts-win64" | ||||
| !define PRODUCT_VERSION "${GTK_VERSION}-2016-04-09-ts-win64" | ||||
| !define PRODUCT_NAME "GTK2-Runtime Win64" | ||||
| !define PRODUCT_PUBLISHER "Tom Schoonjans" | ||||
| !define PRODUCT_WEB_SITE "https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer" | ||||
| @@ -256,9 +256,12 @@ SectionIn 1 2 RO | ||||
| 	File bin\libgobject-2.0-0.dll  ; from glib | ||||
| 	File bin\libgthread-2.0-0.dll  ; from glib | ||||
| 	File bin\libgtk-win32-2.0-0.dll  ; gtk | ||||
| 	File bin\libgtksourceview-2.0-0.dll | ||||
| 	File bin\libgtkmm-2.4-1.dll | ||||
| 	File bin\libgtksourceviewmm-2.0-2.dll | ||||
| 	File bin\libharfbuzz-0.dll | ||||
| 	File bin\libintl-8.dll  ; gettext, needed by all i18n libs | ||||
| 	File bin\iconv.dll | ||||
| 	File bin\libjson-glib-1.0-0.dll  ; gettext, needed by all i18n libs | ||||
| 	File bin\libpango-1.0-0.dll  ; pango, needed by gtk | ||||
| 	File bin\libpangocairo-1.0-0.dll  ; pango, needed by gtk | ||||
| @@ -268,11 +271,14 @@ SectionIn 1 2 RO | ||||
| 	File bin\libpixman-1-0.dll  ; libpixman, needed by cairo | ||||
| 	File bin\libpng16-16.dll  ; for gdk_pixbuf loader. | ||||
| 	File bin\libxml++-2.6-2.dll  ; fontconfig needs this | ||||
| 	File bin\libxml++-3.0-1.dll | ||||
| 	File bin\libpcre-1.dll | ||||
| 	File bin\libxml2-2.dll  ; fontconfig needs this | ||||
| 	File bin\libxslt-1.dll  ; fontconfig needs this | ||||
| 	File bin\zlib1.dll  ; png and many others need this | ||||
| 	File bin\libstdc++_64-6.dll | ||||
| 	File bin\libgcc_s_seh_64-1.dll | ||||
| 	File bin\libwinpthread_64-1.dll | ||||
|  | ||||
| 	; We install this into the same place as the DLLs to avoid any PATH manipulation. | ||||
| 	SetOutPath "$LIB_INSTDIR" | ||||
| @@ -601,9 +607,12 @@ Function un.DeleteDlls | ||||
| 	Delete $LIB_INSTDIR\libgobject-2.0-0.dll  ; from glib | ||||
| 	Delete $LIB_INSTDIR\libgthread-2.0-0.dll  ; from glib | ||||
| 	Delete $LIB_INSTDIR\libgtk-win32-2.0-0.dll  ; gtk | ||||
| 	Delete $LIB_INSTDIR\libgtksourceview-2.0-0.dll | ||||
| 	Delete $LIB_INSTDIR\libgtksourceviewmm-2.0-2.dll | ||||
| 	Delete $LIB_INSTDIR\libgtkmm-2.4-1.dll | ||||
| 	Delete $LIB_INSTDIR\libharfbuzz-0.dll | ||||
| 	Delete $LIB_INSTDIR\libintl-8.dll  ; gettext, needed by all i18n libs | ||||
| 	Delete $LIB_INSTDIR\iconv.dll | ||||
| 	Delete $LIB_INSTDIR\libjson-glib-1.0-0.dll  | ||||
| 	Delete $LIB_INSTDIR\libpango-1.0-0.dll  ; pango, needed by gtk | ||||
| 	Delete $LIB_INSTDIR\libpangocairo-1.0-0.dll  ; pango, needed by gtk | ||||
| @@ -615,9 +624,12 @@ Function un.DeleteDlls | ||||
| 	Delete $LIB_INSTDIR\libxml2-2.dll  ; fontconfig needs this | ||||
| 	Delete $LIB_INSTDIR\libxslt-1.dll  ; fontconfig needs this | ||||
| 	Delete $LIB_INSTDIR\libxml++-2.6-2.dll  ; fontconfig needs this | ||||
| 	Delete $LIB_INSTDIR\libxml++-3.0-1.dll | ||||
| 	Delete $LIB_INSTDIR\libpcre-1.dll | ||||
| 	Delete $LIB_INSTDIR\zlib1.dll  ; png and many others need this | ||||
| 	Delete $LIB_INSTDIR\libstdc++_64-6.dll | ||||
| 	Delete $LIB_INSTDIR\libgcc_s_seh_64-1.dll | ||||
| 	Delete $LIB_INSTDIR\libwinpthread_64-1.dll | ||||
|  | ||||
|  | ||||
| FunctionEnd | ||||
|   | ||||
| @@ -11,9 +11,9 @@ | ||||
| ; Directory and package names: gtk3-runtime. | ||||
|  | ||||
|  | ||||
| !define GTK_VERSION "3.18.6" | ||||
| !define GTK_VERSION "3.20.2" | ||||
| !define GTK_BIN_VERSION "3.0.0" | ||||
| !define PRODUCT_VERSION "${GTK_VERSION}-2016-01-10-ts-win64" | ||||
| !define PRODUCT_VERSION "${GTK_VERSION}-2016-04-09-ts-win64" | ||||
| !define PRODUCT_NAME "GTK3-Runtime Win64" | ||||
| !define PRODUCT_PUBLISHER "Tom Schoonjans" | ||||
| !define PRODUCT_WEB_SITE "https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer" | ||||
| @@ -256,9 +256,12 @@ SectionIn 1 2 RO | ||||
| 	File bin\libgobject-2.0-0.dll  ; from glib | ||||
| 	File bin\libgthread-2.0-0.dll  ; from glib | ||||
| 	File bin\libgtk-3-0.dll  ; gtk | ||||
| 	File bin\libgtksourceview-3.0-1.dll | ||||
| 	File bin\libgtksourceviewmm-3.0-0.dll | ||||
| 	File bin\libgtkmm-3.0-1.dll | ||||
| 	File bin\libharfbuzz-0.dll | ||||
| 	File bin\libintl-8.dll  ; gettext, needed by all i18n libs | ||||
| 	File bin\iconv.dll | ||||
| 	File bin\libjson-glib-1.0-0.dll  ; gettext, needed by all i18n libs | ||||
| 	File bin\libpango-1.0-0.dll  ; pango, needed by gtk | ||||
| 	File bin\libpangocairo-1.0-0.dll  ; pango, needed by gtk | ||||
| @@ -268,11 +271,14 @@ SectionIn 1 2 RO | ||||
| 	File bin\libpixman-1-0.dll  ; libpixman, needed by cairo | ||||
| 	File bin\libpng16-16.dll  ; for gdk_pixbuf loader. | ||||
| 	File bin\libxml++-2.6-2.dll  ; fontconfig needs this | ||||
| 	File bin\libxml++-3.0-1.dll | ||||
| 	File bin\libxml2-2.dll  ; fontconfig needs this | ||||
| 	File bin\libxslt-1.dll  ; fontconfig needs this | ||||
| 	File bin\libpcre-1.dll  ; fontconfig needs this | ||||
| 	File bin\zlib1.dll  ; png and many others need this | ||||
| 	File bin\libstdc++_64-6.dll | ||||
| 	File bin\libgcc_s_seh_64-1.dll | ||||
| 	File bin\libwinpthread_64-1.dll | ||||
|  | ||||
| 	; We install this into the same place as the DLLs to avoid any PATH manipulation. | ||||
| 	SetOutPath "$LIB_INSTDIR" | ||||
| @@ -603,9 +609,12 @@ Function un.DeleteDlls | ||||
| 	Delete $LIB_INSTDIR\libgobject-2.0-0.dll  ; from glib | ||||
| 	Delete $LIB_INSTDIR\libgthread-2.0-0.dll  ; from glib | ||||
| 	Delete $LIB_INSTDIR\libgtk-3-0.dll  ; gtk | ||||
| 	Delete $LIB_INSTDIR\libgtksourceview-3.0-1.dll  ; gtk | ||||
| 	Delete $LIB_INSTDIR\libgtksourceviewmm-3.0-0.dll  ; gtk | ||||
| 	Delete $LIB_INSTDIR\libgtkmm-3.0-1.dll | ||||
| 	Delete $LIB_INSTDIR\libharfbuzz-0.dll | ||||
| 	Delete $LIB_INSTDIR\libintl-8.dll  ; gettext, needed by all i18n libs | ||||
| 	Delete $LIB_INSTDIR\iconv.dll | ||||
| 	Delete $LIB_INSTDIR\libjson-glib-1.0-0.dll  | ||||
| 	Delete $LIB_INSTDIR\libpango-1.0-0.dll  ; pango, needed by gtk | ||||
| 	Delete $LIB_INSTDIR\libpangocairo-1.0-0.dll  ; pango, needed by gtk | ||||
| @@ -615,11 +624,14 @@ Function un.DeleteDlls | ||||
| 	Delete $LIB_INSTDIR\libpixman-1-0.dll  ; libpixman, needed by cairo | ||||
| 	Delete $LIB_INSTDIR\libpng16-16.dll  ; for gdk_pixbuf loader. | ||||
| 	Delete $LIB_INSTDIR\libxslt-1.dll  ; fontconfig needs this | ||||
| 	Delete $LIB_INSTDIR\libpcre-1.dll  ; fontconfig needs this | ||||
| 	Delete $LIB_INSTDIR\libxml2-2.dll  ; fontconfig needs this | ||||
| 	Delete $LIB_INSTDIR\libxml++-2.6-2.dll  ; fontconfig needs this | ||||
| 	Delete $LIB_INSTDIR\libxml++-3.0-1.dll | ||||
| 	Delete $LIB_INSTDIR\zlib1.dll  ; png and many others need this | ||||
| 	Delete $LIB_INSTDIR\libstdc++_64-6.dll | ||||
| 	Delete $LIB_INSTDIR\libgcc_s_seh_64-1.dll | ||||
| 	Delete $LIB_INSTDIR\libwinpthread_64-1.dll | ||||
|  | ||||
|  | ||||
| FunctionEnd | ||||
|   | ||||
							
								
								
									
										27
									
								
								gtk-nsis-pack/share/glib-2.0/codegen/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,27 @@ | ||||
| # -*- Mode: Python -*- | ||||
|  | ||||
| # GDBus - GLib D-Bus Library | ||||
| # | ||||
| # Copyright (C) 2008-2011 Red Hat, Inc. | ||||
| # | ||||
| # This library is free software; you can redistribute it and/or | ||||
| # modify it under the terms of the GNU Lesser General Public | ||||
| # License as published by the Free Software Foundation; either | ||||
| # version 2 of the License, or (at your option) any later version. | ||||
| # | ||||
| # This library is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
| # Lesser General Public License for more details. | ||||
| # | ||||
| # You should have received a copy of the GNU Lesser General | ||||
| # Public License along with this library; if not, see <http://www.gnu.org/licenses/>. | ||||
| # | ||||
| # Author: David Zeuthen <davidz@redhat.com> | ||||
|  | ||||
| import os | ||||
|  | ||||
| builddir = os.environ.get('UNINSTALLED_GLIB_BUILDDIR') | ||||
|  | ||||
| if builddir is not None: | ||||
|     __path__.append(os.path.abspath(os.path.join(builddir, 'gio', 'gdbus-2.0', 'codegen'))) | ||||
							
								
								
									
										
											BIN
										
									
								
								gtk-nsis-pack/share/glib-2.0/codegen/__init__.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										3434
									
								
								gtk-nsis-pack/share/glib-2.0/codegen/codegen.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								gtk-nsis-pack/share/glib-2.0/codegen/codegen.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										329
									
								
								gtk-nsis-pack/share/glib-2.0/codegen/codegen_docbook.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,329 @@ | ||||
| # -*- Mode: Python -*- | ||||
|  | ||||
| # GDBus - GLib D-Bus Library | ||||
| # | ||||
| # Copyright (C) 2008-2011 Red Hat, Inc. | ||||
| # | ||||
| # This library is free software; you can redistribute it and/or | ||||
| # modify it under the terms of the GNU Lesser General Public | ||||
| # License as published by the Free Software Foundation; either | ||||
| # version 2 of the License, or (at your option) any later version. | ||||
| # | ||||
| # This library is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
| # Lesser General Public License for more details. | ||||
| # | ||||
| # You should have received a copy of the GNU Lesser General | ||||
| # Public License along with this library; if not, see <http://www.gnu.org/licenses/>. | ||||
| # | ||||
| # Author: David Zeuthen <davidz@redhat.com> | ||||
|  | ||||
| import sys | ||||
| import re | ||||
|  | ||||
| from . import config | ||||
| from . import utils | ||||
| from . import dbustypes | ||||
| from . import parser | ||||
|  | ||||
| # ---------------------------------------------------------------------------------------------------- | ||||
|  | ||||
| class DocbookCodeGenerator: | ||||
|     def __init__(self, ifaces, docbook): | ||||
|         self.ifaces = ifaces | ||||
|         self.docbook = docbook | ||||
|         self.generate_expand_dicts() | ||||
|  | ||||
|     def print_method_prototype(self, i, m, in_synopsis): | ||||
|         max_method_len = 0 | ||||
|         if in_synopsis: | ||||
|             for _m in i.methods: | ||||
|                 max_method_len = max(len(_m.name), max_method_len) | ||||
|         else: | ||||
|             max_method_len = max(len(m.name), max_method_len) | ||||
|  | ||||
|         max_signature_len = 0 | ||||
|         if in_synopsis: | ||||
|             for _m in i.methods: | ||||
|                 for a in _m.in_args: | ||||
|                     max_signature_len = max(len(a.signature), max_signature_len) | ||||
|                 for a in _m.out_args: | ||||
|                     max_signature_len = max(len(a.signature), max_signature_len) | ||||
|         else: | ||||
|             for a in m.in_args: | ||||
|                 max_signature_len = max(len(a.signature), max_signature_len) | ||||
|             for a in m.out_args: | ||||
|                 max_signature_len = max(len(a.signature), max_signature_len) | ||||
|  | ||||
|         if in_synopsis: | ||||
|             self.out.write('<link linkend="gdbus-method-%s.%s">%s</link>%*s (' | ||||
|                            %(utils.dots_to_hyphens(i.name), m.name, m.name, max_method_len - len(m.name), '')) | ||||
|         else: | ||||
|             self.out.write('%s%*s (' | ||||
|                            %(m.name, max_method_len - len(m.name), '')) | ||||
|         count = 0 | ||||
|         for a in m.in_args: | ||||
|             if (count > 0): | ||||
|                 self.out.write(',\n%*s'%(max_method_len + 2, '')) | ||||
|             self.out.write('IN  %s%*s %s'%(a.signature, max_signature_len - len(a.signature), '', a.name)) | ||||
|             count = count + 1 | ||||
|         for a in m.out_args: | ||||
|             if (count > 0): | ||||
|                 self.out.write(',\n%*s'%(max_method_len + 2, '')) | ||||
|             self.out.write('OUT %s%*s %s'%(a.signature, max_signature_len - len(a.signature), '', a.name)) | ||||
|             count = count + 1 | ||||
|         self.out.write(');\n') | ||||
|  | ||||
|     def print_signal_prototype(self, i, s, in_synopsis): | ||||
|         max_signal_len = 0 | ||||
|         if in_synopsis: | ||||
|             for _s in i.signals: | ||||
|                 max_signal_len = max(len(_s.name), max_signal_len) | ||||
|         else: | ||||
|             max_signal_len = max(len(s.name), max_signal_len) | ||||
|  | ||||
|         max_signature_len = 0 | ||||
|         if in_synopsis: | ||||
|             for _s in i.signals: | ||||
|                 for a in _s.args: | ||||
|                     max_signature_len = max(len(a.signature), max_signature_len) | ||||
|         else: | ||||
|             for a in s.args: | ||||
|                 max_signature_len = max(len(a.signature), max_signature_len) | ||||
|  | ||||
|         if in_synopsis: | ||||
|             self.out.write('<link linkend="gdbus-signal-%s.%s">%s</link>%*s (' | ||||
|                            %(utils.dots_to_hyphens(i.name), s.name, s.name, max_signal_len - len(s.name), '')) | ||||
|         else: | ||||
|             self.out.write('%s%*s (' | ||||
|                            %(s.name, max_signal_len - len(s.name), '')) | ||||
|         count = 0 | ||||
|         for a in s.args: | ||||
|             if (count > 0): | ||||
|                 self.out.write(',\n%*s'%(max_signal_len + 2, '')) | ||||
|             self.out.write('%s%*s %s'%(a.signature, max_signature_len - len(a.signature), '', a.name)) | ||||
|             count = count + 1 | ||||
|         self.out.write(');\n') | ||||
|  | ||||
|     def print_property_prototype(self, i, p, in_synopsis): | ||||
|         max_property_len = 0 | ||||
|         if in_synopsis: | ||||
|             for _p in i.properties: | ||||
|                 max_property_len = max(len(_p.name), max_property_len) | ||||
|         else: | ||||
|             max_property_len = max(len(p.name), max_property_len) | ||||
|  | ||||
|         max_signature_len = 0 | ||||
|         if in_synopsis: | ||||
|             for _p in i.properties: | ||||
|                 max_signature_len = max(len(_p.signature), max_signature_len) | ||||
|         else: | ||||
|             max_signature_len = max(len(p.signature), max_signature_len) | ||||
|  | ||||
|         if in_synopsis: | ||||
|             self.out.write('<link linkend="gdbus-property-%s.%s">%s</link>%*s' | ||||
|                            %(utils.dots_to_hyphens(i.name), p.name, p.name, max_property_len - len(p.name), '')) | ||||
|         else: | ||||
|             self.out.write('%s%*s' | ||||
|                            %(p.name, max_property_len - len(p.name), '')) | ||||
|         if p.readable and p.writable: | ||||
|             access = 'readwrite' | ||||
|         elif p.readable: | ||||
|             access = 'readable ' | ||||
|         else: | ||||
|             access = 'writable ' | ||||
|         self.out.write('  %s  %s\n'%(access, p.signature)) | ||||
|  | ||||
|  | ||||
|     def print_synopsis_methods(self, i): | ||||
|         self.out.write('  <refsynopsisdiv role="synopsis">\n'%()) | ||||
|         self.out.write('    <title role="synopsis.title">Methods</title>\n'%()) | ||||
|         self.out.write('    <synopsis>\n'%()) | ||||
|         for m in i.methods: | ||||
|             self.print_method_prototype(i, m, in_synopsis=True) | ||||
|         self.out.write('</synopsis>\n'%()) | ||||
|         self.out.write('  </refsynopsisdiv>\n'%()) | ||||
|  | ||||
|     def print_synopsis_signals(self, i): | ||||
|         self.out.write('  <refsect1 role="signal_proto">\n'%()) | ||||
|         self.out.write('    <title role="signal_proto.title">Signals</title>\n'%()) | ||||
|         self.out.write('    <synopsis>\n'%()) | ||||
|         for s in i.signals: | ||||
|             self.print_signal_prototype(i, s, in_synopsis=True) | ||||
|         self.out.write('</synopsis>\n'%()) | ||||
|         self.out.write('  </refsect1>\n'%()) | ||||
|  | ||||
|     def print_synopsis_properties(self, i): | ||||
|         self.out.write('  <refsect1 role="properties">\n'%()) | ||||
|         self.out.write('    <title role="properties.title">Properties</title>\n'%()) | ||||
|         self.out.write('    <synopsis>\n'%()) | ||||
|         for p in i.properties: | ||||
|             self.print_property_prototype(i, p, in_synopsis=True) | ||||
|         self.out.write('</synopsis>\n'%()) | ||||
|         self.out.write('  </refsect1>\n'%()) | ||||
|  | ||||
|     def print_method(self, i, m): | ||||
|         self.out.write('<refsect2 role="method" id="gdbus-method-%s.%s">\n'%(utils.dots_to_hyphens(i.name), m.name)) | ||||
|         self.out.write('  <title>The %s() method</title>\n'%(m.name)) | ||||
|         self.out.write('  <indexterm zone="gdbus-method-%s.%s"><primary sortas="%s.%s">%s.%s()</primary></indexterm>\n'%(utils.dots_to_hyphens(i.name), m.name, i.name_without_prefix, m.name, i.name, m.name)) | ||||
|         self.out.write('<programlisting>\n') | ||||
|         self.print_method_prototype(i, m, in_synopsis=False) | ||||
|         self.out.write('</programlisting>\n') | ||||
|         self.out.write('%s\n'%(self.expand_paras(m.doc_string, True))) | ||||
|         if m.in_args or m.out_args: | ||||
|             self.out.write('<variablelist role="params">\n') | ||||
|             for a in m.in_args: | ||||
|                 self.out.write('<varlistentry>\n'%()) | ||||
|                 self.out.write('  <term><literal>IN %s <parameter>%s</parameter></literal>:</term>\n'%(a.signature, a.name)) | ||||
|                 self.out.write('  <listitem>%s</listitem>\n'%(self.expand_paras(a.doc_string, True))) | ||||
|                 self.out.write('</varlistentry>\n'%()) | ||||
|             for a in m.out_args: | ||||
|                 self.out.write('<varlistentry>\n'%()) | ||||
|                 self.out.write('  <term><literal>OUT %s <parameter>%s</parameter></literal>:</term>\n'%(a.signature, a.name)) | ||||
|                 self.out.write('  <listitem>%s</listitem>\n'%(self.expand_paras(a.doc_string, True))) | ||||
|                 self.out.write('</varlistentry>\n'%()) | ||||
|             self.out.write('</variablelist>\n') | ||||
|         if len(m.since) > 0: | ||||
|             self.out.write('<para role="since">Since %s</para>\n'%(m.since)) | ||||
|         if m.deprecated: | ||||
|             self.out.write('<warning><para>The %s() method is deprecated.</para></warning>'%(m.name)) | ||||
|         self.out.write('</refsect2>\n') | ||||
|  | ||||
|     def print_signal(self, i, s): | ||||
|         self.out.write('<refsect2 role="signal" id="gdbus-signal-%s.%s">\n'%(utils.dots_to_hyphens(i.name), s.name)) | ||||
|         self.out.write('  <title>The "%s" signal</title>\n'%(s.name)) | ||||
|         self.out.write('  <indexterm zone="gdbus-signal-%s.%s"><primary sortas="%s::%s">%s::%s</primary></indexterm>\n'%(utils.dots_to_hyphens(i.name), s.name, i.name_without_prefix, s.name, i.name, s.name)) | ||||
|         self.out.write('<programlisting>\n') | ||||
|         self.print_signal_prototype(i, s, in_synopsis=False) | ||||
|         self.out.write('</programlisting>\n') | ||||
|         self.out.write('%s\n'%(self.expand_paras(s.doc_string, True))) | ||||
|         if s.args: | ||||
|             self.out.write('<variablelist role="params">\n') | ||||
|             for a in s.args: | ||||
|                 self.out.write('<varlistentry>\n'%()) | ||||
|                 self.out.write('  <term><literal>%s <parameter>%s</parameter></literal>:</term>\n'%(a.signature, a.name)) | ||||
|                 self.out.write('  <listitem>%s</listitem>\n'%(self.expand_paras(a.doc_string, True))) | ||||
|                 self.out.write('</varlistentry>\n'%()) | ||||
|             self.out.write('</variablelist>\n') | ||||
|         if len(s.since) > 0: | ||||
|             self.out.write('<para role="since">Since %s</para>\n'%(s.since)) | ||||
|         if s.deprecated: | ||||
|             self.out.write('<warning><para>The "%s" signal is deprecated.</para></warning>'%(s.name)) | ||||
|         self.out.write('</refsect2>\n') | ||||
|  | ||||
|     def print_property(self, i, p): | ||||
|         self.out.write('<refsect2 role="property" id="gdbus-property-%s.%s">\n'%(utils.dots_to_hyphens(i.name), p.name)) | ||||
|         self.out.write('  <title>The "%s" property</title>\n'%(p.name)) | ||||
|         self.out.write('  <indexterm zone="gdbus-property-%s.%s"><primary sortas="%s:%s">%s:%s</primary></indexterm>\n'%(utils.dots_to_hyphens(i.name), p.name, i.name_without_prefix, p.name, i.name, p.name)) | ||||
|         self.out.write('<programlisting>\n') | ||||
|         self.print_property_prototype(i, p, in_synopsis=False) | ||||
|         self.out.write('</programlisting>\n') | ||||
|         self.out.write('%s\n'%(self.expand_paras(p.doc_string, True))) | ||||
|         if len(p.since) > 0: | ||||
|             self.out.write('<para role="since">Since %s</para>\n'%(p.since)) | ||||
|         if p.deprecated: | ||||
|             self.out.write('<warning><para>The "%s" property is deprecated.</para></warning>'%(p.name)) | ||||
|         self.out.write('</refsect2>\n') | ||||
|  | ||||
|     def expand(self, s, expandParamsAndConstants): | ||||
|         for key in self.expand_member_dict_keys: | ||||
|             s = s.replace(key, self.expand_member_dict[key]) | ||||
|         for key in self.expand_iface_dict_keys: | ||||
|             s = s.replace(key, self.expand_iface_dict[key]) | ||||
|         if expandParamsAndConstants: | ||||
|             # replace @foo with <parameter>foo</parameter> | ||||
|             s = re.sub('@[a-zA-Z0-9_]*', lambda m: '<parameter>' + m.group(0)[1:] + '</parameter>', s) | ||||
|             # replace e.g. %TRUE with <constant>TRUE</constant> | ||||
|             s = re.sub('%[a-zA-Z0-9_]*', lambda m: '<constant>' + m.group(0)[1:] + '</constant>', s) | ||||
|         return s | ||||
|  | ||||
|     def expand_paras(self, s, expandParamsAndConstants): | ||||
|         s = self.expand(s, expandParamsAndConstants).strip() | ||||
|         if not s.startswith("<para"): | ||||
|             s = "<para>%s</para>" % s | ||||
|         return s | ||||
|  | ||||
|     def generate_expand_dicts(self): | ||||
|         self.expand_member_dict = {} | ||||
|         self.expand_iface_dict = {} | ||||
|         for i in self.ifaces: | ||||
|             key = '#%s'%(i.name) | ||||
|             value = '<link linkend="gdbus-interface-%s.top_of_page">%s</link>'%(utils.dots_to_hyphens(i.name), i.name) | ||||
|             self.expand_iface_dict[key] = value | ||||
|             for m in i.methods: | ||||
|                 key = '%s.%s()'%(i.name, m.name) | ||||
|                 value = '<link linkend="gdbus-method-%s.%s">%s()</link>'%(utils.dots_to_hyphens(i.name), m.name, m.name) | ||||
|                 self.expand_member_dict[key] = value | ||||
|             for s in i.signals: | ||||
|                 key = '#%s::%s'%(i.name, s.name) | ||||
|                 value = '<link linkend="gdbus-signal-%s.%s">"%s"</link>'%(utils.dots_to_hyphens(i.name), s.name, s.name) | ||||
|                 self.expand_member_dict[key] = value | ||||
|             for p in i.properties: | ||||
|                 key = '#%s:%s'%(i.name, p.name) | ||||
|                 value = '<link linkend="gdbus-property-%s.%s">"%s"</link>'%(utils.dots_to_hyphens(i.name), p.name, p.name) | ||||
|                 self.expand_member_dict[key] = value | ||||
|         # Make sure to expand the keys in reverse order so e.g. #org.foo.Iface:MediaCompat | ||||
|         # is evaluated before #org.foo.Iface:Media ... | ||||
|         self.expand_member_dict_keys = sorted(self.expand_member_dict.keys(), reverse=True) | ||||
|         self.expand_iface_dict_keys = sorted(self.expand_iface_dict.keys(), reverse=True) | ||||
|  | ||||
|     def generate(self): | ||||
|         for i in self.ifaces: | ||||
|             self.out = open('%s-%s.xml'%(self.docbook, i.name), 'w') | ||||
|             self.out.write(''%()) | ||||
|             self.out.write('<?xml version="1.0" encoding="utf-8"?>\n'%()) | ||||
|             self.out.write('<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"\n'%()) | ||||
|             self.out.write('               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [\n'%()) | ||||
|             self.out.write(']>\n'%()) | ||||
|             self.out.write('<refentry id="gdbus-%s">\n'%(i.name)) | ||||
|             self.out.write('  <refmeta>'%()) | ||||
|             self.out.write('    <refentrytitle role="top_of_page" id="gdbus-interface-%s.top_of_page">%s</refentrytitle>\n'%(utils.dots_to_hyphens(i.name), i.name)) | ||||
|             self.out.write('  <indexterm zone="gdbus-interface-%s.top_of_page"><primary sortas="%s">%s</primary></indexterm>\n'%(utils.dots_to_hyphens(i.name), i.name_without_prefix, i.name)) | ||||
|             self.out.write('  </refmeta>'%()) | ||||
|  | ||||
|             self.out.write('  <refnamediv>'%()) | ||||
|             self.out.write('    <refname>%s</refname>'%(i.name)) | ||||
|             self.out.write('    <refpurpose>%s</refpurpose>'%(i.doc_string_brief)) | ||||
|             self.out.write('  </refnamediv>'%()) | ||||
|  | ||||
|             if len(i.methods) > 0: | ||||
|                 self.print_synopsis_methods(i) | ||||
|             if len(i.signals) > 0: | ||||
|                 self.print_synopsis_signals(i) | ||||
|             if len(i.properties) > 0: | ||||
|                 self.print_synopsis_properties(i) | ||||
|  | ||||
|             self.out.write('<refsect1 role="desc" id="gdbus-interface-%s">\n'%(utils.dots_to_hyphens(i.name))) | ||||
|             self.out.write('  <title role="desc.title">Description</title>\n'%()) | ||||
|             self.out.write('  %s\n'%(self.expand_paras(i.doc_string, True))) | ||||
|             if len(i.since) > 0: | ||||
|                 self.out.write('  <para role="since">Since %s</para>\n'%(i.since)) | ||||
|             if i.deprecated: | ||||
|                 self.out.write('<warning><para>The %s interface is deprecated.</para></warning>'%(i.name)) | ||||
|             self.out.write('</refsect1>\n'%()) | ||||
|  | ||||
|             if len(i.methods) > 0: | ||||
|                 self.out.write('<refsect1 role="details" id="gdbus-methods-%s">\n'%(i.name)) | ||||
|                 self.out.write('  <title role="details.title">Method Details</title>\n'%()) | ||||
|                 for m in i.methods: | ||||
|                     self.print_method(i, m) | ||||
|                 self.out.write('</refsect1>\n'%()) | ||||
|  | ||||
|             if len(i.signals) > 0: | ||||
|                 self.out.write('<refsect1 role="details" id="gdbus-signals-%s">\n'%(i.name)) | ||||
|                 self.out.write('  <title role="details.title">Signal Details</title>\n'%()) | ||||
|                 for s in i.signals: | ||||
|                     self.print_signal(i, s) | ||||
|                 self.out.write('</refsect1>\n'%()) | ||||
|  | ||||
|             if len(i.properties) > 0: | ||||
|                 self.out.write('<refsect1 role="details" id="gdbus-properties-%s">\n'%(i.name)) | ||||
|                 self.out.write('  <title role="details.title">Property Details</title>\n'%()) | ||||
|                 for s in i.properties: | ||||
|                     self.print_property(i, s) | ||||
|                 self.out.write('</refsect1>\n'%()) | ||||
|  | ||||
|             self.out.write('</refentry>\n') | ||||
|             self.out.write('\n') | ||||
|  | ||||
							
								
								
									
										
											BIN
										
									
								
								gtk-nsis-pack/share/glib-2.0/codegen/codegen_docbook.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										201
									
								
								gtk-nsis-pack/share/glib-2.0/codegen/codegen_main.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,201 @@ | ||||
| # -*- Mode: Python -*- | ||||
|  | ||||
| # GDBus - GLib D-Bus Library | ||||
| # | ||||
| # Copyright (C) 2008-2011 Red Hat, Inc. | ||||
| # | ||||
| # This library is free software; you can redistribute it and/or | ||||
| # modify it under the terms of the GNU Lesser General Public | ||||
| # License as published by the Free Software Foundation; either | ||||
| # version 2 of the License, or (at your option) any later version. | ||||
| # | ||||
| # This library is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
| # Lesser General Public License for more details. | ||||
| # | ||||
| # You should have received a copy of the GNU Lesser General | ||||
| # Public License along with this library; if not, see <http://www.gnu.org/licenses/>. | ||||
| # | ||||
| # Author: David Zeuthen <davidz@redhat.com> | ||||
|  | ||||
| import sys | ||||
| import optparse | ||||
|  | ||||
| from . import config | ||||
| from . import utils | ||||
| from . import dbustypes | ||||
| from . import parser | ||||
| from . import codegen | ||||
| from . import codegen_docbook | ||||
|  | ||||
| def find_arg(arg_list, arg_name): | ||||
|     for a in arg_list: | ||||
|         if a.name == arg_name: | ||||
|             return a | ||||
|     return None | ||||
|  | ||||
| def find_method(iface, method): | ||||
|     for m in iface.methods: | ||||
|         if m.name == method: | ||||
|             return m | ||||
|     return None | ||||
|  | ||||
| def find_signal(iface, signal): | ||||
|     for m in iface.signals: | ||||
|         if m.name == signal: | ||||
|             return m | ||||
|     return None | ||||
|  | ||||
| def find_prop(iface, prop): | ||||
|     for m in iface.properties: | ||||
|         if m.name == prop: | ||||
|             return m | ||||
|     return None | ||||
|  | ||||
| def apply_annotation(iface_list, iface, method, signal, prop, arg, key, value): | ||||
|     iface_obj = None | ||||
|     for i in iface_list: | ||||
|         if i.name == iface: | ||||
|             iface_obj = i | ||||
|             break | ||||
|  | ||||
|     if iface_obj == None: | ||||
|         raise RuntimeError('No interface %s'%iface) | ||||
|  | ||||
|     target_obj = None | ||||
|  | ||||
|     if method: | ||||
|         method_obj = find_method(iface_obj, method) | ||||
|         if method_obj == None: | ||||
|             raise RuntimeError('No method %s on interface %s'%(method, iface)) | ||||
|         if arg: | ||||
|             arg_obj = find_arg(method_obj.in_args, arg) | ||||
|             if (arg_obj == None): | ||||
|                 arg_obj = find_arg(method_obj.out_args, arg) | ||||
|                 if (arg_obj == None): | ||||
|                     raise RuntimeError('No arg %s on method %s on interface %s'%(arg, method, iface)) | ||||
|             target_obj = arg_obj | ||||
|         else: | ||||
|             target_obj = method_obj | ||||
|     elif signal: | ||||
|         signal_obj = find_signal(iface_obj, signal) | ||||
|         if signal_obj == None: | ||||
|             raise RuntimeError('No signal %s on interface %s'%(signal, iface)) | ||||
|         if arg: | ||||
|             arg_obj = find_arg(signal_obj.args, arg) | ||||
|             if (arg_obj == None): | ||||
|                 raise RuntimeError('No arg %s on signal %s on interface %s'%(arg, signal, iface)) | ||||
|             target_obj = arg_obj | ||||
|         else: | ||||
|             target_obj = signal_obj | ||||
|     elif prop: | ||||
|         prop_obj = find_prop(iface_obj, prop) | ||||
|         if prop_obj == None: | ||||
|             raise RuntimeError('No property %s on interface %s'%(prop, iface)) | ||||
|         target_obj = prop_obj | ||||
|     else: | ||||
|         target_obj = iface_obj | ||||
|     target_obj.annotations.insert(0, dbustypes.Annotation(key, value)) | ||||
|  | ||||
|  | ||||
| def apply_annotations(iface_list, annotation_list): | ||||
|     # apply annotations given on the command line | ||||
|     for (what, key, value) in annotation_list: | ||||
|         pos = what.find('::') | ||||
|         if pos != -1: | ||||
|             # signal | ||||
|             iface = what[0:pos]; | ||||
|             signal = what[pos + 2:] | ||||
|             pos = signal.find('[') | ||||
|             if pos != -1: | ||||
|                 arg = signal[pos + 1:] | ||||
|                 signal = signal[0:pos] | ||||
|                 pos = arg.find(']') | ||||
|                 arg = arg[0:pos] | ||||
|                 apply_annotation(iface_list, iface, None, signal, None, arg, key, value) | ||||
|             else: | ||||
|                 apply_annotation(iface_list, iface, None, signal, None, None, key, value) | ||||
|         else: | ||||
|             pos = what.find(':') | ||||
|             if pos != -1: | ||||
|                 # property | ||||
|                 iface = what[0:pos]; | ||||
|                 prop = what[pos + 1:] | ||||
|                 apply_annotation(iface_list, iface, None, None, prop, None, key, value) | ||||
|             else: | ||||
|                 pos = what.find('()') | ||||
|                 if pos != -1: | ||||
|                     # method | ||||
|                     combined = what[0:pos] | ||||
|                     pos = combined.rfind('.') | ||||
|                     iface = combined[0:pos] | ||||
|                     method = combined[pos + 1:] | ||||
|                     pos = what.find('[') | ||||
|                     if pos != -1: | ||||
|                         arg = what[pos + 1:] | ||||
|                         pos = arg.find(']') | ||||
|                         arg = arg[0:pos] | ||||
|                         apply_annotation(iface_list, iface, method, None, None, arg, key, value) | ||||
|                     else: | ||||
|                         apply_annotation(iface_list, iface, method, None, None, None, key, value) | ||||
|                 else: | ||||
|                     # must be an interface | ||||
|                     iface = what | ||||
|                     apply_annotation(iface_list, iface, None, None, None, None, key, value) | ||||
|  | ||||
| def codegen_main(): | ||||
|     arg_parser = optparse.OptionParser('%prog [options]') | ||||
|     arg_parser.add_option('', '--xml-files', metavar='FILE', action='append', | ||||
|                           help='D-Bus introspection XML file') | ||||
|     arg_parser.add_option('', '--interface-prefix', metavar='PREFIX', default='', | ||||
|                             help='String to strip from D-Bus interface names for code and docs') | ||||
|     arg_parser.add_option('', '--c-namespace', metavar='NAMESPACE', default='', | ||||
|                             help='The namespace to use for generated C code') | ||||
|     arg_parser.add_option('', '--c-generate-object-manager', action='store_true', | ||||
|                             help='Generate a GDBusObjectManagerClient subclass when generating C code') | ||||
|     arg_parser.add_option('', '--generate-c-code', metavar='OUTFILES', | ||||
|                           help='Generate C code in OUTFILES.[ch]') | ||||
|     arg_parser.add_option('', '--generate-docbook', metavar='OUTFILES', | ||||
|                           help='Generate Docbook in OUTFILES-org.Project.IFace.xml') | ||||
|     arg_parser.add_option('', '--annotate', nargs=3, action='append', metavar='WHAT KEY VALUE', | ||||
|                           help='Add annotation (may be used several times)') | ||||
|     (opts, args) = arg_parser.parse_args(); | ||||
|  | ||||
|     all_ifaces = [] | ||||
|     for fname in args: | ||||
|         f = open(fname, 'rb') | ||||
|         xml_data = f.read() | ||||
|         f.close() | ||||
|         parsed_ifaces = parser.parse_dbus_xml(xml_data) | ||||
|         all_ifaces.extend(parsed_ifaces) | ||||
|  | ||||
|     if opts.annotate != None: | ||||
|         apply_annotations(all_ifaces, opts.annotate) | ||||
|  | ||||
|     for i in all_ifaces: | ||||
|         i.post_process(opts.interface_prefix, opts.c_namespace) | ||||
|  | ||||
|     docbook = opts.generate_docbook | ||||
|     docbook_gen = codegen_docbook.DocbookCodeGenerator(all_ifaces, docbook); | ||||
|     if docbook: | ||||
|         ret = docbook_gen.generate() | ||||
|  | ||||
|     c_code = opts.generate_c_code | ||||
|     if c_code: | ||||
|         h = open(c_code + '.h', 'w') | ||||
|         c = open(c_code + '.c', 'w') | ||||
|         gen = codegen.CodeGenerator(all_ifaces, | ||||
|                                     opts.c_namespace, | ||||
|                                     opts.interface_prefix, | ||||
|                                     opts.c_generate_object_manager, | ||||
|                                     docbook_gen, | ||||
|                                     h, c); | ||||
|         ret = gen.generate() | ||||
|         h.close() | ||||
|         c.close() | ||||
|  | ||||
|     sys.exit(0) | ||||
|  | ||||
| if __name__ == "__main__": | ||||
|     codegen_main() | ||||
							
								
								
									
										
											BIN
										
									
								
								gtk-nsis-pack/share/glib-2.0/codegen/codegen_main.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										25
									
								
								gtk-nsis-pack/share/glib-2.0/codegen/config.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,25 @@ | ||||
| # -*- Mode: Python -*- | ||||
|  | ||||
| # GDBus - GLib D-Bus Library | ||||
| # | ||||
| # Copyright (C) 2008-2011 Red Hat, Inc. | ||||
| # | ||||
| # This library is free software; you can redistribute it and/or | ||||
| # modify it under the terms of the GNU Lesser General Public | ||||
| # License as published by the Free Software Foundation; either | ||||
| # version 2 of the License, or (at your option) any later version. | ||||
| # | ||||
| # This library is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
| # Lesser General Public License for more details. | ||||
| # | ||||
| # You should have received a copy of the GNU Lesser General | ||||
| # Public License along with this library; if not, see <http://www.gnu.org/licenses/>. | ||||
| # | ||||
| # Author: David Zeuthen <davidz@redhat.com> | ||||
|  | ||||
| DATADIR = "${prefix}/share" | ||||
| DATADIR = DATADIR.replace( | ||||
|     "${prefix}", "/usr/local") | ||||
| VERSION = "2.48.0" | ||||
							
								
								
									
										
											BIN
										
									
								
								gtk-nsis-pack/share/glib-2.0/codegen/config.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										424
									
								
								gtk-nsis-pack/share/glib-2.0/codegen/dbustypes.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,424 @@ | ||||
| # -*- Mode: Python -*- | ||||
|  | ||||
| # GDBus - GLib D-Bus Library | ||||
| # | ||||
| # Copyright (C) 2008-2011 Red Hat, Inc. | ||||
| # | ||||
| # This library is free software; you can redistribute it and/or | ||||
| # modify it under the terms of the GNU Lesser General Public | ||||
| # License as published by the Free Software Foundation; either | ||||
| # version 2 of the License, or (at your option) any later version. | ||||
| # | ||||
| # This library is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
| # Lesser General Public License for more details. | ||||
| # | ||||
| # You should have received a copy of the GNU Lesser General | ||||
| # Public License along with this library; if not, see <http://www.gnu.org/licenses/>. | ||||
| # | ||||
| # Author: David Zeuthen <davidz@redhat.com> | ||||
|  | ||||
| from . import utils | ||||
|  | ||||
| class Annotation: | ||||
|     def __init__(self, key, value): | ||||
|         self.key = key | ||||
|         self.value = value | ||||
|         self.annotations = [] | ||||
|  | ||||
| class Arg: | ||||
|     def __init__(self, name, signature): | ||||
|         self.name = name | ||||
|         self.signature = signature | ||||
|         self.annotations = [] | ||||
|         self.doc_string = '' | ||||
|         self.since = '' | ||||
|  | ||||
|     def post_process(self, interface_prefix, cns, cns_upper, cns_lower, arg_number): | ||||
|         if len(self.doc_string) == 0: | ||||
|             self.doc_string = utils.lookup_docs(self.annotations) | ||||
|         if len(self.since) == 0: | ||||
|             self.since = utils.lookup_since(self.annotations) | ||||
|  | ||||
|         if self.name == None: | ||||
|             self.name = 'unnamed_arg%d'%arg_number | ||||
|         # default to GVariant | ||||
|         self.ctype_in_g  = 'GVariant *' | ||||
|         self.ctype_in  = 'GVariant *' | ||||
|         self.ctype_in_dup  = 'GVariant *' | ||||
|         self.ctype_out = 'GVariant **' | ||||
|         self.gtype = 'G_TYPE_VARIANT' | ||||
|         self.free_func = 'g_variant_unref' | ||||
|         self.format_in = '@' + self.signature | ||||
|         self.format_out = '@' + self.signature | ||||
|         self.gvariant_get = 'XXX' | ||||
|         self.gvalue_get = 'g_value_get_variant' | ||||
|         if not utils.lookup_annotation(self.annotations, 'org.gtk.GDBus.C.ForceGVariant'): | ||||
|             if self.signature == 'b': | ||||
|                 self.ctype_in_g  = 'gboolean ' | ||||
|                 self.ctype_in  = 'gboolean ' | ||||
|                 self.ctype_out = 'gboolean *' | ||||
|                 self.gtype = 'G_TYPE_BOOLEAN' | ||||
|                 self.free_func = None | ||||
|                 self.format_in = 'b' | ||||
|                 self.format_out = 'b' | ||||
|                 self.gvariant_get = 'g_variant_get_boolean' | ||||
|                 self.gvalue_get = 'g_value_get_boolean' | ||||
|             elif self.signature == 'y': | ||||
|                 self.ctype_in_g  = 'guchar ' | ||||
|                 self.ctype_in  = 'guchar ' | ||||
|                 self.ctype_out = 'guchar *' | ||||
|                 self.gtype = 'G_TYPE_UCHAR' | ||||
|                 self.free_func = None | ||||
|                 self.format_in = 'y' | ||||
|                 self.format_out = 'y' | ||||
|                 self.gvariant_get = 'g_variant_get_byte' | ||||
|                 self.gvalue_get = 'g_value_get_uchar' | ||||
|             elif self.signature == 'n': | ||||
|                 self.ctype_in_g  = 'gint ' | ||||
|                 self.ctype_in  = 'gint16 ' | ||||
|                 self.ctype_out = 'gint16 *' | ||||
|                 self.gtype = 'G_TYPE_INT' | ||||
|                 self.free_func = None | ||||
|                 self.format_in = 'n' | ||||
|                 self.format_out = 'n' | ||||
|                 self.gvariant_get = 'g_variant_get_int16' | ||||
|                 self.gvalue_get = 'g_value_get_int' | ||||
|             elif self.signature == 'q': | ||||
|                 self.ctype_in_g  = 'guint ' | ||||
|                 self.ctype_in  = 'guint16 ' | ||||
|                 self.ctype_out = 'guint16 *' | ||||
|                 self.gtype = 'G_TYPE_UINT' | ||||
|                 self.free_func = None | ||||
|                 self.format_in = 'q' | ||||
|                 self.format_out = 'q' | ||||
|                 self.gvariant_get = 'g_variant_get_uint16' | ||||
|                 self.gvalue_get = 'g_value_get_uint' | ||||
|             elif self.signature == 'i': | ||||
|                 self.ctype_in_g  = 'gint ' | ||||
|                 self.ctype_in  = 'gint ' | ||||
|                 self.ctype_out = 'gint *' | ||||
|                 self.gtype = 'G_TYPE_INT' | ||||
|                 self.free_func = None | ||||
|                 self.format_in = 'i' | ||||
|                 self.format_out = 'i' | ||||
|                 self.gvariant_get = 'g_variant_get_int32' | ||||
|                 self.gvalue_get = 'g_value_get_int' | ||||
|             elif self.signature == 'u': | ||||
|                 self.ctype_in_g  = 'guint ' | ||||
|                 self.ctype_in  = 'guint ' | ||||
|                 self.ctype_out = 'guint *' | ||||
|                 self.gtype = 'G_TYPE_UINT' | ||||
|                 self.free_func = None | ||||
|                 self.format_in = 'u' | ||||
|                 self.format_out = 'u' | ||||
|                 self.gvariant_get = 'g_variant_get_uint32' | ||||
|                 self.gvalue_get = 'g_value_get_uint' | ||||
|             elif self.signature == 'x': | ||||
|                 self.ctype_in_g  = 'gint64 ' | ||||
|                 self.ctype_in  = 'gint64 ' | ||||
|                 self.ctype_out = 'gint64 *' | ||||
|                 self.gtype = 'G_TYPE_INT64' | ||||
|                 self.free_func = None | ||||
|                 self.format_in = 'x' | ||||
|                 self.format_out = 'x' | ||||
|                 self.gvariant_get = 'g_variant_get_int64' | ||||
|                 self.gvalue_get = 'g_value_get_int64' | ||||
|             elif self.signature == 't': | ||||
|                 self.ctype_in_g  = 'guint64 ' | ||||
|                 self.ctype_in  = 'guint64 ' | ||||
|                 self.ctype_out = 'guint64 *' | ||||
|                 self.gtype = 'G_TYPE_UINT64' | ||||
|                 self.free_func = None | ||||
|                 self.format_in = 't' | ||||
|                 self.format_out = 't' | ||||
|                 self.gvariant_get = 'g_variant_get_uint64' | ||||
|                 self.gvalue_get = 'g_value_get_uint64' | ||||
|             elif self.signature == 'd': | ||||
|                 self.ctype_in_g  = 'gdouble ' | ||||
|                 self.ctype_in  = 'gdouble ' | ||||
|                 self.ctype_out = 'gdouble *' | ||||
|                 self.gtype = 'G_TYPE_DOUBLE' | ||||
|                 self.free_func = None | ||||
|                 self.format_in = 'd' | ||||
|                 self.format_out = 'd' | ||||
|                 self.gvariant_get = 'g_variant_get_double' | ||||
|                 self.gvalue_get = 'g_value_get_double' | ||||
|             elif self.signature == 's': | ||||
|                 self.ctype_in_g  = 'const gchar *' | ||||
|                 self.ctype_in  = 'const gchar *' | ||||
|                 self.ctype_in_dup  = 'gchar *' | ||||
|                 self.ctype_out = 'gchar **' | ||||
|                 self.gtype = 'G_TYPE_STRING' | ||||
|                 self.free_func = 'g_free' | ||||
|                 self.format_in = 's' | ||||
|                 self.format_out = 's' | ||||
|                 self.gvariant_get = 'g_variant_get_string' | ||||
|                 self.gvalue_get = 'g_value_get_string' | ||||
|             elif self.signature == 'o': | ||||
|                 self.ctype_in_g  = 'const gchar *' | ||||
|                 self.ctype_in  = 'const gchar *' | ||||
|                 self.ctype_in_dup  = 'gchar *' | ||||
|                 self.ctype_out = 'gchar **' | ||||
|                 self.gtype = 'G_TYPE_STRING' | ||||
|                 self.free_func = 'g_free' | ||||
|                 self.format_in = 'o' | ||||
|                 self.format_out = 'o' | ||||
|                 self.gvariant_get = 'g_variant_get_string' | ||||
|                 self.gvalue_get = 'g_value_get_string' | ||||
|             elif self.signature == 'g': | ||||
|                 self.ctype_in_g  = 'const gchar *' | ||||
|                 self.ctype_in  = 'const gchar *' | ||||
|                 self.ctype_in_dup  = 'gchar *' | ||||
|                 self.ctype_out = 'gchar **' | ||||
|                 self.gtype = 'G_TYPE_STRING' | ||||
|                 self.free_func = 'g_free' | ||||
|                 self.format_in = 'g' | ||||
|                 self.format_out = 'g' | ||||
|                 self.gvariant_get = 'g_variant_get_string' | ||||
|                 self.gvalue_get = 'g_value_get_string' | ||||
|             elif self.signature == 'ay': | ||||
|                 self.ctype_in_g  = 'const gchar *' | ||||
|                 self.ctype_in  = 'const gchar *' | ||||
|                 self.ctype_in_dup  = 'gchar *' | ||||
|                 self.ctype_out = 'gchar **' | ||||
|                 self.gtype = 'G_TYPE_STRING' | ||||
|                 self.free_func = 'g_free' | ||||
|                 self.format_in = '^ay' | ||||
|                 self.format_out = '^ay' | ||||
|                 self.gvariant_get = 'g_variant_get_bytestring' | ||||
|                 self.gvalue_get = 'g_value_get_string' | ||||
|             elif self.signature == 'as': | ||||
|                 self.ctype_in_g  = 'const gchar *const *' | ||||
|                 self.ctype_in  = 'const gchar *const *' | ||||
|                 self.ctype_in_dup  = 'gchar **' | ||||
|                 self.ctype_out = 'gchar ***' | ||||
|                 self.gtype = 'G_TYPE_STRV' | ||||
|                 self.free_func = 'g_strfreev' | ||||
|                 self.format_in = '^as' | ||||
|                 self.format_out = '^as' | ||||
|                 self.gvariant_get = 'g_variant_get_strv' | ||||
|                 self.gvalue_get = 'g_value_get_boxed' | ||||
|             elif self.signature == 'ao': | ||||
|                 self.ctype_in_g  = 'const gchar *const *' | ||||
|                 self.ctype_in  = 'const gchar *const *' | ||||
|                 self.ctype_in_dup  = 'gchar **' | ||||
|                 self.ctype_out = 'gchar ***' | ||||
|                 self.gtype = 'G_TYPE_STRV' | ||||
|                 self.free_func = 'g_strfreev' | ||||
|                 self.format_in = '^ao' | ||||
|                 self.format_out = '^ao' | ||||
|                 self.gvariant_get = 'g_variant_get_objv' | ||||
|                 self.gvalue_get = 'g_value_get_boxed' | ||||
|             elif self.signature == 'aay': | ||||
|                 self.ctype_in_g  = 'const gchar *const *' | ||||
|                 self.ctype_in  = 'const gchar *const *' | ||||
|                 self.ctype_in_dup  = 'gchar **' | ||||
|                 self.ctype_out = 'gchar ***' | ||||
|                 self.gtype = 'G_TYPE_STRV' | ||||
|                 self.free_func = 'g_strfreev' | ||||
|                 self.format_in = '^aay' | ||||
|                 self.format_out = '^aay' | ||||
|                 self.gvariant_get = 'g_variant_get_bytestring_array' | ||||
|                 self.gvalue_get = 'g_value_get_boxed' | ||||
|  | ||||
| class Method: | ||||
|     def __init__(self, name): | ||||
|         self.name = name | ||||
|         self.in_args = [] | ||||
|         self.out_args = [] | ||||
|         self.annotations = [] | ||||
|         self.doc_string = '' | ||||
|         self.since = '' | ||||
|         self.deprecated = False | ||||
|  | ||||
|     def post_process(self, interface_prefix, cns, cns_upper, cns_lower, containing_iface): | ||||
|         if len(self.doc_string) == 0: | ||||
|             self.doc_string = utils.lookup_docs(self.annotations) | ||||
|         if len(self.since) == 0: | ||||
|             self.since = utils.lookup_since(self.annotations) | ||||
|             if len(self.since) == 0: | ||||
|                 self.since = containing_iface.since | ||||
|  | ||||
|         name = self.name | ||||
|         overridden_name = utils.lookup_annotation(self.annotations, 'org.gtk.GDBus.C.Name') | ||||
|         if utils.is_ugly_case(overridden_name): | ||||
|             self.name_lower = overridden_name.lower() | ||||
|         else: | ||||
|             if overridden_name: | ||||
|                 name = overridden_name | ||||
|             self.name_lower = utils.camel_case_to_uscore(name).lower().replace('-', '_') | ||||
|         self.name_hyphen = self.name_lower.replace('_', '-') | ||||
|  | ||||
|         arg_count = 0 | ||||
|         for a in self.in_args: | ||||
|             a.post_process(interface_prefix, cns, cns_upper, cns_lower, arg_count) | ||||
|             arg_count += 1 | ||||
|  | ||||
|         for a in self.out_args: | ||||
|             a.post_process(interface_prefix, cns, cns_upper, cns_lower, arg_count) | ||||
|             arg_count += 1 | ||||
|  | ||||
|         if utils.lookup_annotation(self.annotations, 'org.freedesktop.DBus.Deprecated') == 'true': | ||||
|             self.deprecated = True | ||||
|  | ||||
| class Signal: | ||||
|     def __init__(self, name): | ||||
|         self.name = name | ||||
|         self.args = [] | ||||
|         self.annotations = [] | ||||
|         self.doc_string = '' | ||||
|         self.since = '' | ||||
|         self.deprecated = False | ||||
|  | ||||
|     def post_process(self, interface_prefix, cns, cns_upper, cns_lower, containing_iface): | ||||
|         if len(self.doc_string) == 0: | ||||
|             self.doc_string = utils.lookup_docs(self.annotations) | ||||
|         if len(self.since) == 0: | ||||
|             self.since = utils.lookup_since(self.annotations) | ||||
|             if len(self.since) == 0: | ||||
|                 self.since = containing_iface.since | ||||
|  | ||||
|         name = self.name | ||||
|         overridden_name = utils.lookup_annotation(self.annotations, 'org.gtk.GDBus.C.Name') | ||||
|         if utils.is_ugly_case(overridden_name): | ||||
|             self.name_lower = overridden_name.lower() | ||||
|         else: | ||||
|             if overridden_name: | ||||
|                 name = overridden_name | ||||
|             self.name_lower = utils.camel_case_to_uscore(name).lower().replace('-', '_') | ||||
|         self.name_hyphen = self.name_lower.replace('_', '-') | ||||
|  | ||||
|         arg_count = 0 | ||||
|         for a in self.args: | ||||
|             a.post_process(interface_prefix, cns, cns_upper, cns_lower, arg_count) | ||||
|             arg_count += 1 | ||||
|  | ||||
|         if utils.lookup_annotation(self.annotations, 'org.freedesktop.DBus.Deprecated') == 'true': | ||||
|             self.deprecated = True | ||||
|  | ||||
| class Property: | ||||
|     def __init__(self, name, signature, access): | ||||
|         self.name = name | ||||
|         self.signature = signature | ||||
|         self.access = access | ||||
|         self.annotations = [] | ||||
|         self.arg = Arg('value', self.signature) | ||||
|         self.arg.annotations = self.annotations | ||||
|         self.readable = False | ||||
|         self.writable = False | ||||
|         if self.access == 'readwrite': | ||||
|             self.readable = True | ||||
|             self.writable = True | ||||
|         elif self.access == 'read': | ||||
|             self.readable = True | ||||
|         elif self.access == 'write': | ||||
|             self.writable = True | ||||
|         else: | ||||
|             raise RuntimeError('Invalid access type %s'%self.access) | ||||
|         self.doc_string = '' | ||||
|         self.since = '' | ||||
|         self.deprecated = False | ||||
|  | ||||
|     def post_process(self, interface_prefix, cns, cns_upper, cns_lower, containing_iface): | ||||
|         if len(self.doc_string) == 0: | ||||
|             self.doc_string = utils.lookup_docs(self.annotations) | ||||
|         if len(self.since) == 0: | ||||
|             self.since = utils.lookup_since(self.annotations) | ||||
|             if len(self.since) == 0: | ||||
|                 self.since = containing_iface.since | ||||
|  | ||||
|         name = self.name | ||||
|         overridden_name = utils.lookup_annotation(self.annotations, 'org.gtk.GDBus.C.Name') | ||||
|         if utils.is_ugly_case(overridden_name): | ||||
|             self.name_lower = overridden_name.lower() | ||||
|         else: | ||||
|             if overridden_name: | ||||
|                 name = overridden_name | ||||
|             self.name_lower = utils.camel_case_to_uscore(name).lower().replace('-', '_') | ||||
|         self.name_hyphen = self.name_lower.replace('_', '-') | ||||
|         # don't clash with the GType getter, e.g.: GType foo_bar_get_type (void); G_GNUC_CONST | ||||
|         if self.name_lower == 'type': | ||||
|             self.name_lower = 'type_' | ||||
|  | ||||
|         # recalculate arg | ||||
|         self.arg.annotations = self.annotations | ||||
|         self.arg.post_process(interface_prefix, cns, cns_upper, cns_lower, 0) | ||||
|  | ||||
|         if utils.lookup_annotation(self.annotations, 'org.freedesktop.DBus.Deprecated') == 'true': | ||||
|             self.deprecated = True | ||||
|  | ||||
| class Interface: | ||||
|     def __init__(self, name): | ||||
|         self.name = name | ||||
|         self.methods = [] | ||||
|         self.signals = [] | ||||
|         self.properties = [] | ||||
|         self.annotations = [] | ||||
|         self.doc_string = '' | ||||
|         self.doc_string_brief = '' | ||||
|         self.since = '' | ||||
|         self.deprecated = False | ||||
|  | ||||
|     def post_process(self, interface_prefix, c_namespace): | ||||
|         if len(self.doc_string) == 0: | ||||
|             self.doc_string = utils.lookup_docs(self.annotations) | ||||
|         if len(self.doc_string_brief) == 0: | ||||
|             self.doc_string_brief = utils.lookup_brief_docs(self.annotations) | ||||
|         if len(self.since) == 0: | ||||
|             self.since = utils.lookup_since(self.annotations) | ||||
|  | ||||
|         if len(c_namespace) > 0: | ||||
|             if utils.is_ugly_case(c_namespace): | ||||
|                 cns = c_namespace.replace('_', '') | ||||
|                 cns_upper = c_namespace.upper() + '_' | ||||
|                 cns_lower = c_namespace.lower() + '_' | ||||
|             else: | ||||
|                 cns = c_namespace | ||||
|                 cns_upper = utils.camel_case_to_uscore(c_namespace).upper() + '_' | ||||
|                 cns_lower = utils.camel_case_to_uscore(c_namespace).lower() + '_' | ||||
|         else: | ||||
|             cns = '' | ||||
|             cns_upper = '' | ||||
|             cns_lower = '' | ||||
|  | ||||
|         overridden_name = utils.lookup_annotation(self.annotations, 'org.gtk.GDBus.C.Name') | ||||
|         if utils.is_ugly_case(overridden_name): | ||||
|             name = overridden_name.replace('_', '') | ||||
|             name_with_ns = cns + name | ||||
|             self.name_without_prefix = name | ||||
|             self.camel_name = name_with_ns | ||||
|             self.ns_upper = cns_upper | ||||
|             self.name_lower = cns_lower + overridden_name.lower() | ||||
|             self.name_upper = overridden_name.upper() | ||||
|  | ||||
|             #raise RuntimeError('handle Ugly_Case ', overridden_name) | ||||
|         else: | ||||
|             if overridden_name: | ||||
|                 name = overridden_name | ||||
|             else: | ||||
|                 name = self.name | ||||
|                 if name.startswith(interface_prefix): | ||||
|                     name = name[len(interface_prefix):] | ||||
|             self.name_without_prefix = name | ||||
|             name = utils.strip_dots(name) | ||||
|             name_with_ns = utils.strip_dots(cns + '.' + name) | ||||
|             self.camel_name = name_with_ns | ||||
|             self.ns_upper = cns_upper | ||||
|             self.name_lower = cns_lower + utils.camel_case_to_uscore(name) | ||||
|             self.name_upper = utils.camel_case_to_uscore(name).upper() | ||||
|  | ||||
|         self.name_hyphen = self.name_upper.lower().replace('_', '-') | ||||
|  | ||||
|         if utils.lookup_annotation(self.annotations, 'org.freedesktop.DBus.Deprecated') == 'true': | ||||
|             self.deprecated = True | ||||
|  | ||||
|         for m in self.methods: | ||||
|             m.post_process(interface_prefix, cns, cns_upper, cns_lower, self) | ||||
|  | ||||
|         for s in self.signals: | ||||
|             s.post_process(interface_prefix, cns, cns_upper, cns_lower, self) | ||||
|  | ||||
|         for p in self.properties: | ||||
|             p.post_process(interface_prefix, cns, cns_upper, cns_lower, self) | ||||
							
								
								
									
										
											BIN
										
									
								
								gtk-nsis-pack/share/glib-2.0/codegen/dbustypes.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										288
									
								
								gtk-nsis-pack/share/glib-2.0/codegen/parser.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,288 @@ | ||||
| # -*- Mode: Python -*- | ||||
|  | ||||
| # GDBus - GLib D-Bus Library | ||||
| # | ||||
| # Copyright (C) 2008-2011 Red Hat, Inc. | ||||
| # | ||||
| # This library is free software; you can redistribute it and/or | ||||
| # modify it under the terms of the GNU Lesser General Public | ||||
| # License as published by the Free Software Foundation; either | ||||
| # version 2 of the License, or (at your option) any later version. | ||||
| # | ||||
| # This library is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
| # Lesser General Public License for more details. | ||||
| # | ||||
| # You should have received a copy of the GNU Lesser General | ||||
| # Public License along with this library; if not, see <http://www.gnu.org/licenses/>. | ||||
| # | ||||
| # Author: David Zeuthen <davidz@redhat.com> | ||||
|  | ||||
| import sys | ||||
| import xml.parsers.expat | ||||
|  | ||||
| from . import dbustypes | ||||
|  | ||||
| class DBusXMLParser: | ||||
|     STATE_TOP = 'top' | ||||
|     STATE_NODE = 'node' | ||||
|     STATE_INTERFACE = 'interface' | ||||
|     STATE_METHOD = 'method' | ||||
|     STATE_SIGNAL = 'signal' | ||||
|     STATE_PROPERTY = 'property' | ||||
|     STATE_ARG = 'arg' | ||||
|     STATE_ANNOTATION = 'annotation' | ||||
|     STATE_IGNORED = 'ignored' | ||||
|  | ||||
|     def __init__(self, xml_data): | ||||
|         self._parser = xml.parsers.expat.ParserCreate() | ||||
|         self._parser.CommentHandler = self.handle_comment | ||||
|         self._parser.CharacterDataHandler = self.handle_char_data | ||||
|         self._parser.StartElementHandler = self.handle_start_element | ||||
|         self._parser.EndElementHandler = self.handle_end_element | ||||
|  | ||||
|         self.parsed_interfaces = [] | ||||
|         self._cur_object = None | ||||
|  | ||||
|         self.state = DBusXMLParser.STATE_TOP | ||||
|         self.state_stack = [] | ||||
|         self._cur_object = None | ||||
|         self._cur_object_stack = [] | ||||
|  | ||||
|         self.doc_comment_last_symbol = '' | ||||
|  | ||||
|         self._parser.Parse(xml_data) | ||||
|  | ||||
|     COMMENT_STATE_BEGIN = 'begin' | ||||
|     COMMENT_STATE_PARAMS = 'params' | ||||
|     COMMENT_STATE_BODY = 'body' | ||||
|     COMMENT_STATE_SKIP = 'skip' | ||||
|     def handle_comment(self, data): | ||||
|         comment_state = DBusXMLParser.COMMENT_STATE_BEGIN; | ||||
|         lines = data.split('\n') | ||||
|         symbol = '' | ||||
|         body = '' | ||||
|         in_para = False | ||||
|         params = {} | ||||
|         for line in lines: | ||||
|             orig_line = line | ||||
|             line = line.lstrip() | ||||
|             if comment_state == DBusXMLParser.COMMENT_STATE_BEGIN: | ||||
|                 if len(line) > 0: | ||||
|                     colon_index = line.find(': ') | ||||
|                     if colon_index == -1: | ||||
|                         if line.endswith(':'): | ||||
|                             symbol = line[0:len(line)-1] | ||||
|                             comment_state = DBusXMLParser.COMMENT_STATE_PARAMS | ||||
|                         else: | ||||
|                             comment_state = DBusXMLParser.COMMENT_STATE_SKIP | ||||
|                     else: | ||||
|                         symbol = line[0:colon_index] | ||||
|                         rest_of_line = line[colon_index+2:].strip() | ||||
|                         if len(rest_of_line) > 0: | ||||
|                             body += '<para>' + rest_of_line + '</para>' | ||||
|                         comment_state = DBusXMLParser.COMMENT_STATE_PARAMS | ||||
|             elif comment_state == DBusXMLParser.COMMENT_STATE_PARAMS: | ||||
|                 if line.startswith('@'): | ||||
|                     colon_index = line.find(': ') | ||||
|                     if colon_index == -1: | ||||
|                         comment_state = DBusXMLParser.COMMENT_STATE_BODY | ||||
|                         if not in_para: | ||||
|                             body += '<para>' | ||||
|                             in_para = True | ||||
|                         body += orig_line + '\n' | ||||
|                     else: | ||||
|                         param = line[1:colon_index] | ||||
|                         docs = line[colon_index + 2:] | ||||
|                         params[param] = docs | ||||
|                 else: | ||||
|                     comment_state = DBusXMLParser.COMMENT_STATE_BODY | ||||
|                     if len(line) > 0: | ||||
|                         if not in_para: | ||||
|                             body += '<para>' | ||||
|                             in_para = True | ||||
|                         body += orig_line + '\n' | ||||
|             elif comment_state == DBusXMLParser.COMMENT_STATE_BODY: | ||||
|                 if len(line) > 0: | ||||
|                     if not in_para: | ||||
|                         body += '<para>' | ||||
|                         in_para = True | ||||
|                     body += orig_line + '\n' | ||||
|                 else: | ||||
|                     if in_para: | ||||
|                         body += '</para>' | ||||
|                         in_para = False | ||||
|         if in_para: | ||||
|             body += '</para>' | ||||
|  | ||||
|         if symbol != '': | ||||
|             self.doc_comment_last_symbol = symbol | ||||
|             self.doc_comment_params = params | ||||
|             self.doc_comment_body = body | ||||
|  | ||||
|     def handle_char_data(self, data): | ||||
|         #print 'char_data=%s'%data | ||||
|         pass | ||||
|  | ||||
|     def handle_start_element(self, name, attrs): | ||||
|         old_state = self.state | ||||
|         old_cur_object = self._cur_object | ||||
|         if self.state == DBusXMLParser.STATE_IGNORED: | ||||
|             self.state = DBusXMLParser.STATE_IGNORED | ||||
|         elif self.state == DBusXMLParser.STATE_TOP: | ||||
|             if name == DBusXMLParser.STATE_NODE: | ||||
|                 self.state = DBusXMLParser.STATE_NODE | ||||
|             else: | ||||
|                 self.state = DBusXMLParser.STATE_IGNORED | ||||
|         elif self.state == DBusXMLParser.STATE_NODE: | ||||
|             if name == DBusXMLParser.STATE_INTERFACE: | ||||
|                 self.state = DBusXMLParser.STATE_INTERFACE | ||||
|                 iface = dbustypes.Interface(attrs['name']) | ||||
|                 self._cur_object = iface | ||||
|                 self.parsed_interfaces.append(iface) | ||||
|             elif name == DBusXMLParser.STATE_ANNOTATION: | ||||
|                 self.state = DBusXMLParser.STATE_ANNOTATION | ||||
|                 anno = dbustypes.Annotation(attrs['name'], attrs['value']) | ||||
|                 self._cur_object.annotations.append(anno) | ||||
|                 self._cur_object = anno | ||||
|             else: | ||||
|                 self.state = DBusXMLParser.STATE_IGNORED | ||||
|  | ||||
|             # assign docs, if any | ||||
|             if 'name' in attrs and self.doc_comment_last_symbol == attrs['name']: | ||||
|                 self._cur_object.doc_string = self.doc_comment_body | ||||
|                 if 'short_description' in self.doc_comment_params: | ||||
|                     short_description = self.doc_comment_params['short_description'] | ||||
|                     self._cur_object.doc_string_brief = short_description | ||||
|                 if 'since' in self.doc_comment_params: | ||||
|                     self._cur_object.since = self.doc_comment_params['since'] | ||||
|  | ||||
|         elif self.state == DBusXMLParser.STATE_INTERFACE: | ||||
|             if name == DBusXMLParser.STATE_METHOD: | ||||
|                 self.state = DBusXMLParser.STATE_METHOD | ||||
|                 method = dbustypes.Method(attrs['name']) | ||||
|                 self._cur_object.methods.append(method) | ||||
|                 self._cur_object = method | ||||
|             elif name == DBusXMLParser.STATE_SIGNAL: | ||||
|                 self.state = DBusXMLParser.STATE_SIGNAL | ||||
|                 signal = dbustypes.Signal(attrs['name']) | ||||
|                 self._cur_object.signals.append(signal) | ||||
|                 self._cur_object = signal | ||||
|             elif name == DBusXMLParser.STATE_PROPERTY: | ||||
|                 self.state = DBusXMLParser.STATE_PROPERTY | ||||
|                 prop = dbustypes.Property(attrs['name'], attrs['type'], attrs['access']) | ||||
|                 self._cur_object.properties.append(prop) | ||||
|                 self._cur_object = prop | ||||
|             elif name == DBusXMLParser.STATE_ANNOTATION: | ||||
|                 self.state = DBusXMLParser.STATE_ANNOTATION | ||||
|                 anno = dbustypes.Annotation(attrs['name'], attrs['value']) | ||||
|                 self._cur_object.annotations.append(anno) | ||||
|                 self._cur_object = anno | ||||
|             else: | ||||
|                 self.state = DBusXMLParser.STATE_IGNORED | ||||
|  | ||||
|             # assign docs, if any | ||||
|             if 'name' in attrs and self.doc_comment_last_symbol == attrs['name']: | ||||
|                 self._cur_object.doc_string = self.doc_comment_body | ||||
|                 if 'since' in self.doc_comment_params: | ||||
|                     self._cur_object.since = self.doc_comment_params['since'] | ||||
|  | ||||
|         elif self.state == DBusXMLParser.STATE_METHOD: | ||||
|             if name == DBusXMLParser.STATE_ARG: | ||||
|                 self.state = DBusXMLParser.STATE_ARG | ||||
|                 arg_name = None | ||||
|                 if 'name' in attrs: | ||||
|                     arg_name = attrs['name'] | ||||
|                 arg = dbustypes.Arg(arg_name, attrs['type']) | ||||
|                 direction = attrs.get('direction', 'in') | ||||
|                 if direction == 'in': | ||||
|                     self._cur_object.in_args.append(arg) | ||||
|                 elif direction == 'out': | ||||
|                     self._cur_object.out_args.append(arg) | ||||
|                 else: | ||||
|                     raise RuntimeError('Invalid direction "%s"'%(direction)) | ||||
|                 self._cur_object = arg | ||||
|             elif name == DBusXMLParser.STATE_ANNOTATION: | ||||
|                 self.state = DBusXMLParser.STATE_ANNOTATION | ||||
|                 anno = dbustypes.Annotation(attrs['name'], attrs['value']) | ||||
|                 self._cur_object.annotations.append(anno) | ||||
|                 self._cur_object = anno | ||||
|             else: | ||||
|                 self.state = DBusXMLParser.STATE_IGNORED | ||||
|  | ||||
|             # assign docs, if any | ||||
|             if self.doc_comment_last_symbol == old_cur_object.name: | ||||
|                 if 'name' in attrs and attrs['name'] in self.doc_comment_params: | ||||
|                     doc_string = self.doc_comment_params[attrs['name']] | ||||
|                     if doc_string != None: | ||||
|                         self._cur_object.doc_string = doc_string | ||||
|                     if 'since' in self.doc_comment_params: | ||||
|                         self._cur_object.since = self.doc_comment_params['since'] | ||||
|  | ||||
|         elif self.state == DBusXMLParser.STATE_SIGNAL: | ||||
|             if name == DBusXMLParser.STATE_ARG: | ||||
|                 self.state = DBusXMLParser.STATE_ARG | ||||
|                 arg_name = None | ||||
|                 if 'name' in attrs: | ||||
|                     arg_name = attrs['name'] | ||||
|                 arg = dbustypes.Arg(arg_name, attrs['type']) | ||||
|                 self._cur_object.args.append(arg) | ||||
|                 self._cur_object = arg | ||||
|             elif name == DBusXMLParser.STATE_ANNOTATION: | ||||
|                 self.state = DBusXMLParser.STATE_ANNOTATION | ||||
|                 anno = dbustypes.Annotation(attrs['name'], attrs['value']) | ||||
|                 self._cur_object.annotations.append(anno) | ||||
|                 self._cur_object = anno | ||||
|             else: | ||||
|                 self.state = DBusXMLParser.STATE_IGNORED | ||||
|  | ||||
|             # assign docs, if any | ||||
|             if self.doc_comment_last_symbol == old_cur_object.name: | ||||
|                 if 'name' in attrs and attrs['name'] in self.doc_comment_params: | ||||
|                     doc_string = self.doc_comment_params[attrs['name']] | ||||
|                     if doc_string != None: | ||||
|                         self._cur_object.doc_string = doc_string | ||||
|                     if 'since' in self.doc_comment_params: | ||||
|                         self._cur_object.since = self.doc_comment_params['since'] | ||||
|  | ||||
|         elif self.state == DBusXMLParser.STATE_PROPERTY: | ||||
|             if name == DBusXMLParser.STATE_ANNOTATION: | ||||
|                 self.state = DBusXMLParser.STATE_ANNOTATION | ||||
|                 anno = dbustypes.Annotation(attrs['name'], attrs['value']) | ||||
|                 self._cur_object.annotations.append(anno) | ||||
|                 self._cur_object = anno | ||||
|             else: | ||||
|                 self.state = DBusXMLParser.STATE_IGNORED | ||||
|  | ||||
|         elif self.state == DBusXMLParser.STATE_ARG: | ||||
|             if name == DBusXMLParser.STATE_ANNOTATION: | ||||
|                 self.state = DBusXMLParser.STATE_ANNOTATION | ||||
|                 anno = dbustypes.Annotation(attrs['name'], attrs['value']) | ||||
|                 self._cur_object.annotations.append(anno) | ||||
|                 self._cur_object = anno | ||||
|             else: | ||||
|                 self.state = DBusXMLParser.STATE_IGNORED | ||||
|  | ||||
|         elif self.state == DBusXMLParser.STATE_ANNOTATION: | ||||
|             if name == DBusXMLParser.STATE_ANNOTATION: | ||||
|                 self.state = DBusXMLParser.STATE_ANNOTATION | ||||
|                 anno = dbustypes.Annotation(attrs['name'], attrs['value']) | ||||
|                 self._cur_object.annotations.append(anno) | ||||
|                 self._cur_object = anno | ||||
|             else: | ||||
|                 self.state = DBusXMLParser.STATE_IGNORED | ||||
|  | ||||
|         else: | ||||
|             raise RuntimeError('Unhandled state "%s" while entering element with name "%s"'%(self.state, name)) | ||||
|  | ||||
|         self.state_stack.append(old_state) | ||||
|         self._cur_object_stack.append(old_cur_object) | ||||
|  | ||||
|     def handle_end_element(self, name): | ||||
|         self.state = self.state_stack.pop() | ||||
|         self._cur_object = self._cur_object_stack.pop() | ||||
|  | ||||
| def parse_dbus_xml(xml_data): | ||||
|     parser = DBusXMLParser(xml_data) | ||||
|     return parser.parsed_interfaces | ||||
							
								
								
									
										
											BIN
										
									
								
								gtk-nsis-pack/share/glib-2.0/codegen/parser.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										102
									
								
								gtk-nsis-pack/share/glib-2.0/codegen/utils.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,102 @@ | ||||
| # -*- Mode: Python -*- | ||||
|  | ||||
| # GDBus - GLib D-Bus Library | ||||
| # | ||||
| # Copyright (C) 2008-2011 Red Hat, Inc. | ||||
| # | ||||
| # This library is free software; you can redistribute it and/or | ||||
| # modify it under the terms of the GNU Lesser General Public | ||||
| # License as published by the Free Software Foundation; either | ||||
| # version 2 of the License, or (at your option) any later version. | ||||
| # | ||||
| # This library is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
| # Lesser General Public License for more details. | ||||
| # | ||||
| # You should have received a copy of the GNU Lesser General | ||||
| # Public License along with this library; if not, see <http://www.gnu.org/licenses/>. | ||||
| # | ||||
| # Author: David Zeuthen <davidz@redhat.com> | ||||
|  | ||||
| import distutils.version | ||||
|  | ||||
| def strip_dots(s): | ||||
|     ret = '' | ||||
|     force_upper = False | ||||
|     for c in s: | ||||
|         if c == '.': | ||||
|             force_upper = True | ||||
|         else: | ||||
|             if force_upper: | ||||
|                 ret += c.upper() | ||||
|                 force_upper = False | ||||
|             else: | ||||
|                 ret += c | ||||
|     return ret | ||||
|  | ||||
| def dots_to_hyphens(s): | ||||
|     return s.replace('.', '-') | ||||
|  | ||||
| def camel_case_to_uscore(s): | ||||
|     ret = '' | ||||
|     insert_uscore = False | ||||
|     prev_was_lower = False | ||||
|     initial = True; | ||||
|     for c in s: | ||||
|         # Keep initial underscores in camel case | ||||
|         if initial and c == '_': | ||||
|             ret += '_' | ||||
|             continue; | ||||
|         initial = False | ||||
|  | ||||
|         if c.isupper(): | ||||
|             if prev_was_lower: | ||||
|                 insert_uscore = True | ||||
|             prev_was_lower = False | ||||
|         else: | ||||
|             prev_was_lower = True | ||||
|         if insert_uscore: | ||||
|             ret += '_' | ||||
|         ret += c.lower() | ||||
|         insert_uscore = False | ||||
|     return ret | ||||
|  | ||||
| def is_ugly_case(s): | ||||
|     if s and s.find('_') > 0: | ||||
|         return True | ||||
|     return False | ||||
|  | ||||
| def lookup_annotation(annotations, key): | ||||
|     if annotations: | ||||
|         for a in annotations: | ||||
|             if a.key == key: | ||||
|                 return a.value | ||||
|     return None | ||||
|  | ||||
| def lookup_docs(annotations): | ||||
|     s = lookup_annotation(annotations, 'org.gtk.GDBus.DocString') | ||||
|     if s == None: | ||||
|         return '' | ||||
|     else: | ||||
|         return s | ||||
|  | ||||
| def lookup_since(annotations): | ||||
|     s = lookup_annotation(annotations, 'org.gtk.GDBus.Since') | ||||
|     if s == None: | ||||
|         return '' | ||||
|     else: | ||||
|         return s | ||||
|  | ||||
| def lookup_brief_docs(annotations): | ||||
|     s = lookup_annotation(annotations, 'org.gtk.GDBus.DocString.Short') | ||||
|     if s == None: | ||||
|         return '' | ||||
|     else: | ||||
|         return s | ||||
|  | ||||
| def version_cmp_key(key): | ||||
|     # If the 'since' version is empty put a 0 in its place as this will | ||||
|     # allow LooseVersion to work and will always compare lower. | ||||
|     v = key[0] if key[0] else '0' | ||||
|     return (distutils.version.LooseVersion(v), key[1]) | ||||
							
								
								
									
										
											BIN
										
									
								
								gtk-nsis-pack/share/glib-2.0/codegen/utils.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										261
									
								
								gtk-nsis-pack/share/glib-2.0/gdb/glib.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,261 @@ | ||||
| import gdb | ||||
| import sys | ||||
|  | ||||
| if sys.version_info[0] >= 3: | ||||
|     long = int | ||||
|  | ||||
| # This is not quite right, as local vars may override symname | ||||
| def read_global_var (symname): | ||||
|     return gdb.selected_frame().read_var(symname) | ||||
|  | ||||
| def g_quark_to_string (quark): | ||||
|     if quark == None: | ||||
|         return None | ||||
|     quark = long(quark) | ||||
|     if quark == 0: | ||||
|         return None | ||||
|     try: | ||||
|         val = read_global_var ("quarks") | ||||
|         max_q = long(read_global_var ("quark_seq_id")) | ||||
|     except: | ||||
|         try: | ||||
|             val = read_global_var ("g_quarks") | ||||
|             max_q = long(read_global_var ("g_quark_seq_id")) | ||||
|         except: | ||||
|             return None; | ||||
|     if quark < max_q: | ||||
|         return val[quark].string() | ||||
|     return None | ||||
|  | ||||
| # We override the node printers too, so that node->next is not expanded | ||||
| class GListNodePrinter: | ||||
|     "Prints a GList node" | ||||
|  | ||||
|     def __init__ (self, val): | ||||
|         self.val = val | ||||
|  | ||||
|     def to_string (self): | ||||
|         return "{data=%s, next=0x%x, prev=0x%x}" % (str(self.val["data"]), long(self.val["next"]), long(self.val["prev"])) | ||||
|  | ||||
| class GSListNodePrinter: | ||||
|     "Prints a GSList node" | ||||
|  | ||||
|     def __init__ (self, val): | ||||
|         self.val = val | ||||
|  | ||||
|     def to_string (self): | ||||
|         return "{data=%s, next=0x%x}" % (str(self.val["data"]), long(self.val["next"])) | ||||
|  | ||||
| class GListPrinter: | ||||
|     "Prints a GList" | ||||
|  | ||||
|     class _iterator: | ||||
|         def __init__(self, head, listtype): | ||||
|             self.link = head | ||||
|             self.listtype = listtype | ||||
|             self.count = 0 | ||||
|  | ||||
|         def __iter__(self): | ||||
|             return self | ||||
|  | ||||
|         def next(self): | ||||
|             if self.link == 0: | ||||
|                 raise StopIteration | ||||
|             data = self.link['data'] | ||||
|             self.link = self.link['next'] | ||||
|             count = self.count | ||||
|             self.count = self.count + 1 | ||||
|             return ('[%d]' % count, data) | ||||
|  | ||||
|         __next__ = next | ||||
|  | ||||
|     def __init__ (self, val, listtype): | ||||
|         self.val = val | ||||
|         self.listtype = listtype | ||||
|  | ||||
|     def children(self): | ||||
|         return self._iterator(self.val, self.listtype) | ||||
|  | ||||
|     def to_string (self): | ||||
|         return  "0x%x" % (long(self.val)) | ||||
|  | ||||
|     def display_hint (self): | ||||
|         return "array" | ||||
|  | ||||
| class GHashPrinter: | ||||
|     "Prints a GHashTable" | ||||
|  | ||||
|     class _iterator: | ||||
|         def __init__(self, ht, keys_are_strings): | ||||
|             self.ht = ht | ||||
|             if ht != 0: | ||||
|                 self.keys = ht["keys"] | ||||
|                 self.values = ht["values"] | ||||
|                 self.hashes = ht["hashes"] | ||||
|                 self.size = ht["size"] | ||||
|             self.pos = 0 | ||||
|             self.keys_are_strings = keys_are_strings | ||||
|             self.value = None | ||||
|  | ||||
|         def __iter__(self): | ||||
|             return self | ||||
|  | ||||
|         def next(self): | ||||
|             if self.ht == 0: | ||||
|                 raise StopIteration | ||||
|             if self.value != None: | ||||
|                 v = self.value | ||||
|                 self.value = None | ||||
|                 return v | ||||
|             while long(self.pos) < long(self.size): | ||||
|                 self.pos = self.pos + 1 | ||||
|                 if long (self.hashes[self.pos]) >= 2: | ||||
|                     key = self.keys[self.pos] | ||||
|                     val = self.values[self.pos] | ||||
|  | ||||
|                     if self.keys_are_strings: | ||||
|                         key = key.cast (gdb.lookup_type("char").pointer()) | ||||
|  | ||||
|                     # Queue value for next result | ||||
|                     self.value = ('[%dv]'% (self.pos), val) | ||||
|  | ||||
|                     # Return key | ||||
|                     return ('[%dk]'% (self.pos), key) | ||||
|             raise StopIteration | ||||
|  | ||||
|         __next__ = next | ||||
|  | ||||
|     def __init__ (self, val): | ||||
|         self.val = val | ||||
|         self.keys_are_strings = False | ||||
|         try: | ||||
|             string_hash = read_global_var ("g_str_hash") | ||||
|         except: | ||||
|             string_hash = None | ||||
|         if self.val != 0 and string_hash != None and self.val["hash_func"] == string_hash: | ||||
|             self.keys_are_strings = True | ||||
|  | ||||
|     def children(self): | ||||
|         return self._iterator(self.val, self.keys_are_strings) | ||||
|  | ||||
|     def to_string (self): | ||||
|         return  "0x%x" % (long(self.val)) | ||||
|  | ||||
|     def display_hint (self): | ||||
|         return "map" | ||||
|  | ||||
| def pretty_printer_lookup (val): | ||||
|     # None yet, want things like hash table and list | ||||
|  | ||||
|     type = val.type.unqualified() | ||||
|  | ||||
|     # If it points to a reference, get the reference. | ||||
|     if type.code == gdb.TYPE_CODE_REF: | ||||
|         type = type.target () | ||||
|  | ||||
|     if type.code == gdb.TYPE_CODE_PTR: | ||||
|         type = type.target().unqualified() | ||||
|         t = str(type) | ||||
|         if t == "GList": | ||||
|             return GListPrinter(val, "GList") | ||||
|         if t == "GSList": | ||||
|             return GListPrinter(val, "GSList") | ||||
|         if t == "GHashTable": | ||||
|             return GHashPrinter(val) | ||||
|     else: | ||||
|         t = str(type) | ||||
|         if t == "GList": | ||||
|             return GListNodePrinter(val) | ||||
|         if t == "GSList *": | ||||
|             return GListPrinter(val, "GSList") | ||||
|     return None | ||||
|  | ||||
| def register (obj): | ||||
|     if obj == None: | ||||
|         obj = gdb | ||||
|  | ||||
|     obj.pretty_printers.append(pretty_printer_lookup) | ||||
|  | ||||
| class ForeachCommand (gdb.Command): | ||||
|     """Foreach on list""" | ||||
|  | ||||
|     def __init__ (self): | ||||
|         super (ForeachCommand, self).__init__ ("gforeach", | ||||
|                                                gdb.COMMAND_DATA, | ||||
|                                                gdb.COMPLETE_SYMBOL) | ||||
|  | ||||
|     def valid_name (self, name): | ||||
|         if not name[0].isalpha(): | ||||
|             return False | ||||
|         return True | ||||
|  | ||||
|     def parse_args (self, arg): | ||||
|         i = arg.find(" ") | ||||
|         if i <= 0: | ||||
|             raise Exception ("No var specified") | ||||
|         var = arg[:i] | ||||
|         if not self.valid_name(var): | ||||
|             raise Exception ("Invalid variable name") | ||||
|  | ||||
|         while i < len (arg) and arg[i].isspace(): | ||||
|             i = i + 1 | ||||
|  | ||||
|         if arg[i:i+2] != "in": | ||||
|             raise Exception ("Invalid syntax, missing in") | ||||
|  | ||||
|         i = i + 2 | ||||
|  | ||||
|         while i < len (arg) and arg[i].isspace(): | ||||
|             i = i + 1 | ||||
|  | ||||
|         colon = arg.find (":", i) | ||||
|         if colon == -1: | ||||
|             raise Exception ("Invalid syntax, missing colon") | ||||
|  | ||||
|         val = arg[i:colon] | ||||
|  | ||||
|         colon = colon + 1 | ||||
|         while colon < len (arg) and arg[colon].isspace(): | ||||
|             colon = colon + 1 | ||||
|  | ||||
|         command = arg[colon:] | ||||
|  | ||||
|         return (var, val, command) | ||||
|  | ||||
|     def do_iter(self, arg, item, command): | ||||
|         item = item.cast (gdb.lookup_type("void").pointer()) | ||||
|         item = long(item) | ||||
|         to_eval = "set $%s = (void *)0x%x\n"%(arg, item) | ||||
|         gdb.execute(to_eval) | ||||
|         gdb.execute(command) | ||||
|  | ||||
|     def slist_iterator (self, arg, container, command): | ||||
|         l = container.cast (gdb.lookup_type("GSList").pointer()) | ||||
|         while long(l) != 0: | ||||
|             self.do_iter (arg, l["data"], command) | ||||
|             l = l["next"] | ||||
|  | ||||
|     def list_iterator (self, arg, container, command): | ||||
|         l = container.cast (gdb.lookup_type("GList").pointer()) | ||||
|         while long(l) != 0: | ||||
|             self.do_iter (arg, l["data"], command) | ||||
|             l = l["next"] | ||||
|  | ||||
|     def pick_iterator (self, container): | ||||
|         t = container.type.unqualified() | ||||
|         if t.code == gdb.TYPE_CODE_PTR: | ||||
|             t = t.target().unqualified() | ||||
|             t = str(t) | ||||
|             if t == "GSList": | ||||
|                 return self.slist_iterator | ||||
|             if t == "GList": | ||||
|                 return self.list_iterator | ||||
|         raise Exception("Invalid container type %s"%(str(container.type))) | ||||
|  | ||||
|     def invoke (self, arg, from_tty): | ||||
|         (var, container, command) = self.parse_args(arg) | ||||
|         container = gdb.parse_and_eval (container) | ||||
|         func = self.pick_iterator(container) | ||||
|         func(var, container, command) | ||||
|  | ||||
| ForeachCommand () | ||||
							
								
								
									
										295
									
								
								gtk-nsis-pack/share/glib-2.0/gdb/gobject.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,295 @@ | ||||
| import os.path | ||||
| import gdb | ||||
| import glib | ||||
| import sys | ||||
|  | ||||
| if sys.version_info[0] >= 3: | ||||
|     long = int | ||||
| else: | ||||
|     import itertools | ||||
|     map = itertools.imap | ||||
|  | ||||
| # FrameDecorator is new in gdb 7.7, so we adapt to its absence. | ||||
| try: | ||||
|     import gdb.FrameDecorator | ||||
|     HAVE_GDB_FRAMEDECORATOR = True | ||||
|     FrameDecorator = gdb.FrameDecorator.FrameDecorator | ||||
| except ImportError: | ||||
|     HAVE_GDB_FRAMEDECORATOR = False | ||||
|  | ||||
| # This is not quite right, as local vars may override symname | ||||
| def read_global_var (symname): | ||||
|     return gdb.selected_frame().read_var(symname) | ||||
|  | ||||
| def g_type_to_name (gtype): | ||||
|     def lookup_fundamental_type (typenode): | ||||
|         if typenode == 0: | ||||
|             return None | ||||
|         val = read_global_var ("static_fundamental_type_nodes") | ||||
|         if val == None: | ||||
|             return None | ||||
|         return val[typenode >> 2].address() | ||||
|  | ||||
|     gtype = long(gtype) | ||||
|     typenode = gtype - gtype % 4 | ||||
|     if typenode > (255 << 2): | ||||
|         typenode = gdb.Value(typenode).cast (gdb.lookup_type("TypeNode").pointer()) | ||||
|     else: | ||||
|         typenode = lookup_fundamental_type (typenode) | ||||
|     if typenode != None: | ||||
|         return glib.g_quark_to_string (typenode["qname"]) | ||||
|     return None | ||||
|  | ||||
| def is_g_type_instance (val): | ||||
|     def is_g_type_instance_helper (type): | ||||
|         if str(type) == "GTypeInstance": | ||||
|             return True | ||||
|  | ||||
|         while type.code == gdb.TYPE_CODE_TYPEDEF: | ||||
|             type = type.target() | ||||
|  | ||||
|         if type.code != gdb.TYPE_CODE_STRUCT: | ||||
|             return False | ||||
|  | ||||
|         fields = type.fields() | ||||
|         if len (fields) < 1: | ||||
|             return False | ||||
|  | ||||
|         first_field = fields[0] | ||||
|         return is_g_type_instance_helper(first_field.type) | ||||
|  | ||||
|     type = val.type | ||||
|     if type.code != gdb.TYPE_CODE_PTR: | ||||
|         return False | ||||
|     type = type.target() | ||||
|     return is_g_type_instance_helper (type) | ||||
|  | ||||
| def g_type_name_from_instance (instance): | ||||
|     if long(instance) != 0: | ||||
|         try: | ||||
|             inst = instance.cast (gdb.lookup_type("GTypeInstance").pointer()) | ||||
|             klass = inst["g_class"] | ||||
|             gtype = klass["g_type"] | ||||
|             name = g_type_to_name (gtype) | ||||
|             return name | ||||
|         except RuntimeError: | ||||
|             pass | ||||
|     return None | ||||
|  | ||||
| class GTypePrettyPrinter: | ||||
|     "Prints a GType instance pointer" | ||||
|  | ||||
|     def __init__ (self, val): | ||||
|         self.val = val | ||||
|  | ||||
|     def to_string (self): | ||||
|         name = g_type_name_from_instance (self.val) | ||||
|         if name: | ||||
|             return ("0x%x [%s]")% (long(self.val), name) | ||||
|         return  ("0x%x") % (long(self.val)) | ||||
|  | ||||
| def pretty_printer_lookup (val): | ||||
|     if is_g_type_instance (val): | ||||
|         return GTypePrettyPrinter (val) | ||||
|  | ||||
|     return None | ||||
|  | ||||
| def get_signal_name (id): | ||||
|     if id == None: | ||||
|         return None | ||||
|     id = long(id) | ||||
|     if id == 0: | ||||
|         return None | ||||
|     val = read_global_var ("g_signal_nodes") | ||||
|     max_s = read_global_var ("g_n_signal_nodes") | ||||
|     max_s = long(max_s) | ||||
|     if id < max_s: | ||||
|         return val[id]["name"].string() | ||||
|     return None | ||||
|  | ||||
| def frame_name(frame): | ||||
|     return str(frame.function()) | ||||
|  | ||||
| def frame_var(frame, var): | ||||
|     return frame.inferior_frame().read_var(var) | ||||
|  | ||||
|  | ||||
| class SignalFrame(FrameDecorator): | ||||
|     def __init__ (self, frames): | ||||
|         FrameDecorator.__init__(self, frames[-1]) | ||||
|         self.frame = frames[-1] | ||||
|         self.frames = frames | ||||
|  | ||||
|     def name (self): | ||||
|         return "signal-emission" | ||||
|  | ||||
|     def read_var (self, frame, name, array = None): | ||||
|         try: | ||||
|             v = frame_var (frame, name) | ||||
|             if v == None or v.is_optimized_out: | ||||
|                 return None | ||||
|             if array != None: | ||||
|                 array.append (v) | ||||
|             return v | ||||
|         except ValueError: | ||||
|             return None | ||||
|  | ||||
|     def read_object (self, frame, name, array = None): | ||||
|         try: | ||||
|             v = frame_var (frame, name) | ||||
|             if v == None or v.is_optimized_out: | ||||
|                 return None | ||||
|             v = v.cast (gdb.lookup_type("GObject").pointer()) | ||||
|             # Ensure this is a somewhat correct object pointer | ||||
|             if v != None and g_type_name_from_instance (v): | ||||
|                 if array != None: | ||||
|                     array.append (v) | ||||
|                 return v | ||||
|             return None | ||||
|         except ValueError: | ||||
|             return None | ||||
|  | ||||
|     def append (self, array, obj): | ||||
|         if obj != None: | ||||
|             array.append (obj) | ||||
|  | ||||
|     def or_join_array (self, array): | ||||
|         if len(array) == 0: | ||||
|             return "???" | ||||
|         else: | ||||
|             return ' or '.join(set(map(str, array))) | ||||
|  | ||||
|     def get_detailed_signal_from_frame(self, frame, signal): | ||||
|         detail = self.read_var (frame, "detail") | ||||
|         detail = glib.g_quark_to_string (detail) | ||||
|         if detail is not None: | ||||
|             return signal + ":" + detail | ||||
|         else: | ||||
|             return detail | ||||
|  | ||||
|     def function (self): | ||||
|         instances = [] | ||||
|         signals = [] | ||||
|  | ||||
|         for frame in self.frames: | ||||
|             name = frame_name(frame) | ||||
|             if name == "signal_emit_unlocked_R": | ||||
|                 self.read_object (frame, "instance", instances) | ||||
|                 node = self.read_var (frame, "node") | ||||
|                 if node: | ||||
|                     signal = node["name"].string() | ||||
|                     signal = self.get_detailed_signal_from_frame(frame, signal) | ||||
|                     self.append(signals, signal) | ||||
|  | ||||
|             if name == "g_signal_emitv": | ||||
|                 instance_and_params = self.read_var (frame, "instance_and_params") | ||||
|                 if instance_and_params: | ||||
|                     instance = instance_and_params[0]["v_pointer"].cast (gdb.Type("GObject").pointer()) | ||||
|                     self.append (instances, instance) | ||||
|                 id = self.read_var (frame, "signal_id") | ||||
|                 signal = get_signal_name (id) | ||||
|                 if signal: | ||||
|                     signal = self.get_detailed_signal_from_frame(frame, signal) | ||||
|                     self.append (signals, signal) | ||||
|  | ||||
|             if name == "g_signal_emit_valist" or name == "g_signal_emit": | ||||
|                 self.read_object (frame, "instance", instances) | ||||
|                 id = self.read_var (frame, "signal_id") | ||||
|                 signal = get_signal_name (id) | ||||
|                 if signal: | ||||
|                     signal = self.get_detailed_signal_from_frame(frame, signal) | ||||
|                     self.append (signals, signal) | ||||
|  | ||||
|             if name == "g_signal_emit_by_name": | ||||
|                 self.read_object (frame, "instance", instances) | ||||
|                 self.read_var (frame, "detailed_signal", signals) | ||||
|                 break | ||||
|  | ||||
|         instance = self.or_join_array (instances) | ||||
|         signal = self.or_join_array (signals) | ||||
|  | ||||
|         return "<emit signal %s on instance %s>" %  (signal, instance) | ||||
|  | ||||
|     def elided (self): | ||||
|         return self.frames[0:-1] | ||||
|  | ||||
|     def describe (self, stream, full): | ||||
|         stream.write (" " + self.function () + "\n") | ||||
|  | ||||
| class GFrameDecorator: | ||||
|     def __init__ (self, iter): | ||||
|         self.queue = [] | ||||
|         self.iter = iter | ||||
|  | ||||
|     def __iter__ (self): | ||||
|         return self | ||||
|  | ||||
|     def fill (self): | ||||
|         while len(self.queue) <= 8: | ||||
|             try: | ||||
|                 f = next(self.iter) | ||||
|                 self.queue.append (f) | ||||
|             except StopIteration: | ||||
|                 return | ||||
|  | ||||
|     def find_signal_emission (self): | ||||
|         for i in range (min (len(self.queue), 3)): | ||||
|             if frame_name(self.queue[i]) == "signal_emit_unlocked_R": | ||||
|                 return i | ||||
|         return -1 | ||||
|  | ||||
|     def next (self): | ||||
|         # Ensure we have enough frames for a full signal emission | ||||
|         self.fill() | ||||
|  | ||||
|         # Are we at the end? | ||||
|         if len(self.queue) == 0: | ||||
|             raise StopIteration | ||||
|  | ||||
|         emission = self.find_signal_emission () | ||||
|         if emission > 0: | ||||
|             start = emission | ||||
|             while True: | ||||
|                 if start == 0: | ||||
|                     break | ||||
|                 prev_name = frame_name(self.queue[start-1]) | ||||
|                 if prev_name.find("_marshal_") >= 0 or prev_name == "g_closure_invoke": | ||||
|                     start = start - 1 | ||||
|                 else: | ||||
|                     break | ||||
|             end = emission + 1 | ||||
|             while end < len(self.queue): | ||||
|                 if frame_name(self.queue[end]) in ["g_signal_emitv", | ||||
|                                                    "g_signal_emit_valist", | ||||
|                                                    "g_signal_emit", | ||||
|                                                    "g_signal_emit_by_name", | ||||
|                                                    "_g_closure_invoke_va"]: | ||||
|                     end = end + 1 | ||||
|                 else: | ||||
|                     break | ||||
|  | ||||
|             signal_frames = self.queue[start:end] | ||||
|             new_frames = [SignalFrame(signal_frames)] | ||||
|             self.queue[start:end] = new_frames | ||||
|  | ||||
|         return self.queue.pop(0) | ||||
|  | ||||
|     def __next__ (self): | ||||
|         return self.next() | ||||
|  | ||||
| class GFrameFilter(object): | ||||
|     name = 'glib' | ||||
|     enabled = True | ||||
|     priority = 100 | ||||
|  | ||||
|     def filter(self, iterator): | ||||
|         return GFrameDecorator(iterator) | ||||
|  | ||||
| def register (obj): | ||||
|     if obj == None: | ||||
|         obj = gdb | ||||
|  | ||||
|     if HAVE_GDB_FRAMEDECORATOR: | ||||
|         filter = GFrameFilter() | ||||
|         obj.frame_filters[filter.name] = filter | ||||
|     obj.pretty_printers.append(pretty_printer_lookup) | ||||
							
								
								
									
										268
									
								
								gtk-nsis-pack/share/glib-2.0/gettext/po/Makefile.in.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,268 @@ | ||||
| # Makefile for program source directory in GNU NLS utilities package. | ||||
| # Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <drepper@gnu.ai.mit.edu> | ||||
| # | ||||
| # This file file be copied and used freely without restrictions.  It can | ||||
| # be used in projects which are not available under the GNU Public License | ||||
| # but which still want to provide support for the GNU gettext functionality. | ||||
| # Please note that the actual code is *not* freely available. | ||||
| # | ||||
| # - Modified by Owen Taylor <otaylor@redhat.com> to use GETTEXT_PACKAGE | ||||
| #   instead of PACKAGE and to look for po2tbl in ./ not in intl/ | ||||
| # | ||||
| # - Modified by jacob berkman <jacob@ximian.com> to install | ||||
| #   Makefile.in.in and po2tbl.sed.in for use with glib-gettextize | ||||
|  | ||||
| GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ | ||||
| PACKAGE = @PACKAGE@ | ||||
| VERSION = @VERSION@ | ||||
|  | ||||
| SHELL = @SHELL@ | ||||
| @SET_MAKE@ | ||||
|  | ||||
| srcdir = @srcdir@ | ||||
| top_srcdir = @top_srcdir@ | ||||
| VPATH = @srcdir@ | ||||
|  | ||||
| prefix = @prefix@ | ||||
| exec_prefix = @exec_prefix@ | ||||
| datarootdir = @datarootdir@ | ||||
| datadir = @datadir@ | ||||
| libdir = @libdir@ | ||||
| localedir = $(libdir)/locale | ||||
| gnulocaledir = $(datadir)/locale | ||||
| gettextsrcdir = $(datadir)/glib-2.0/gettext/po | ||||
| subdir = po | ||||
|  | ||||
| INSTALL = @INSTALL@ | ||||
| INSTALL_DATA = @INSTALL_DATA@ | ||||
| MKINSTALLDIRS = mkdir -p | ||||
|  | ||||
| CC = @CC@ | ||||
| GENCAT = @GENCAT@ | ||||
| GMSGFMT = @GMSGFMT@ | ||||
| MSGFMT = @MSGFMT@ | ||||
| MSGFMT_OPTS = @MSGFMT_OPTS@ | ||||
| XGETTEXT = @XGETTEXT@ | ||||
| MSGMERGE = msgmerge | ||||
|  | ||||
| DEFS = @DEFS@ | ||||
| CFLAGS = @CFLAGS@ | ||||
| CPPFLAGS = @CPPFLAGS@ | ||||
|  | ||||
| INCLUDES = -I.. -I$(top_srcdir)/intl | ||||
|  | ||||
| COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) | ||||
|  | ||||
| SOURCES =  | ||||
| POFILES = @POFILES@ | ||||
| GMOFILES = @GMOFILES@ | ||||
| DISTFILES = LINGUAS ChangeLog Makefile.in.in POTFILES.in $(GETTEXT_PACKAGE).pot \ | ||||
| $(POFILES) $(GMOFILES) $(SOURCES) | ||||
|  | ||||
| POTFILES = \ | ||||
|  | ||||
| CATALOGS = @CATALOGS@ | ||||
| CATOBJEXT = @CATOBJEXT@ | ||||
| INSTOBJEXT = @INSTOBJEXT@ | ||||
|  | ||||
| .SUFFIXES: | ||||
| .SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat | ||||
|  | ||||
| .c.o: | ||||
| 	$(COMPILE) $< | ||||
|  | ||||
| .po.pox: | ||||
| 	$(MAKE) $(GETTEXT_PACKAGE).pot | ||||
| 	$(MSGMERGE) $< $(srcdir)/$(GETTEXT_PACKAGE).pot -o $*.pox | ||||
|  | ||||
| .po.mo: | ||||
| 	$(MSGFMT) -o $@ $< | ||||
|  | ||||
| .po.gmo: | ||||
| 	$(AM_V_GEN) file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \ | ||||
| 	  && rm -f $$file && $(GMSGFMT) $(MSGFMT_OPTS) -o $$file $< | ||||
|  | ||||
| .po.cat: | ||||
| 	sed -f ../intl/po2msg.sed < $< > $*.msg \ | ||||
| 	  && rm -f $@ && $(GENCAT) $@ $*.msg | ||||
|  | ||||
|  | ||||
| all: all-@USE_NLS@ | ||||
|  | ||||
| all-yes: $(CATALOGS) | ||||
| all-no: | ||||
|  | ||||
| $(srcdir)/$(GETTEXT_PACKAGE).pot: $(POTFILES) | ||||
| 	$(XGETTEXT) --default-domain=$(GETTEXT_PACKAGE) \ | ||||
| 	  --msgid-bugs-address='http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=general' \ | ||||
| 	  --add-comments --keyword=_ --keyword=N_ \ | ||||
| 	  --keyword=C_:1c,2 \ | ||||
| 	  --keyword=NC_:1c,2 \ | ||||
| 	  --keyword=g_dcgettext:2 \ | ||||
| 	  --keyword=g_dngettext:2,3 \ | ||||
| 	  --keyword=g_dpgettext2:2c,3 \ | ||||
| 	  --flag=N_:1:pass-c-format \ | ||||
| 	  --flag=C_:2:pass-c-format \ | ||||
| 	  --flag=NC_:2:pass-c-format \ | ||||
| 	  --flag=g_dngettext:2:pass-c-format \ | ||||
|           --flag=g_strdup_printf:1:c-format \ | ||||
|           --flag=g_string_printf:2:c-format \ | ||||
|           --flag=g_string_append_printf:2:c-format \ | ||||
|           --flag=g_error_new:3:c-format \ | ||||
|           --flag=g_set_error:4:c-format \ | ||||
|           --flag=g_markup_printf_escaped:1:c-format \ | ||||
|           --flag=g_log:3:c-format \ | ||||
|           --flag=g_print:1:c-format \ | ||||
|           --flag=g_printerr:1:c-format \ | ||||
|           --flag=g_printf:1:c-format \ | ||||
|           --flag=g_fprintf:2:c-format \ | ||||
|           --flag=g_sprintf:2:c-format \ | ||||
|           --flag=g_snprintf:3:c-format \ | ||||
|           --flag=g_scanner_error:2:c-format \ | ||||
|           --flag=g_scanner_warn:2:c-format \ | ||||
| 	  $(POTFILES) \ | ||||
| 	&& test ! -f $(GETTEXT_PACKAGE).po \ | ||||
| 	   || ( rm -f $(srcdir)/$(GETTEXT_PACKAGE).pot \ | ||||
| 		&& mv $(GETTEXT_PACKAGE).po $(srcdir)/$(GETTEXT_PACKAGE).pot ) | ||||
|  | ||||
| install: install-exec install-data | ||||
| install-exec: | ||||
| install-data: install-data-@USE_NLS@ | ||||
| install-data-no: all | ||||
| install-data-yes: all | ||||
| 	$(MKINSTALLDIRS) $(DESTDIR)$(datadir); \ | ||||
| 	catalogs='$(CATALOGS)'; \ | ||||
| 	for cat in $$catalogs; do \ | ||||
| 	  cat=`basename $$cat`; \ | ||||
| 	  case "$$cat" in \ | ||||
| 	    *.gmo) destdir=$(gnulocaledir);; \ | ||||
| 	    *)     destdir=$(localedir);; \ | ||||
| 	  esac; \ | ||||
| 	  lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ | ||||
| 	  dir=$(DESTDIR)$$destdir/$$lang/LC_MESSAGES; \ | ||||
| 	  $(MKINSTALLDIRS) $$dir; \ | ||||
| 	  if test -r $$cat; then \ | ||||
| 	    $(INSTALL_DATA) $$cat $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ | ||||
| 	    echo "installing $$cat as $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT)"; \ | ||||
| 	  else \ | ||||
| 	    $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ | ||||
| 	    echo "installing $(srcdir)/$$cat as" \ | ||||
| 		 "$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT)"; \ | ||||
| 	  fi; \ | ||||
| 	  if test -r $$cat.m; then \ | ||||
| 	    $(INSTALL_DATA) $$cat.m $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ | ||||
| 	    echo "installing $$cat.m as $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m"; \ | ||||
| 	  else \ | ||||
| 	    if test -r $(srcdir)/$$cat.m ; then \ | ||||
| 	      $(INSTALL_DATA) $(srcdir)/$$cat.m \ | ||||
| 		$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ | ||||
| 	      echo "installing $(srcdir)/$$cat as" \ | ||||
| 		   "$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m"; \ | ||||
| 	    else \ | ||||
| 	      true; \ | ||||
| 	    fi; \ | ||||
| 	  fi; \ | ||||
| 	done | ||||
| 	if test "$(PACKAGE)" = "glib"; then \ | ||||
| 	  $(MKINSTALLDIRS) $(DESTDIR)$(gettextsrcdir); \ | ||||
| 	  $(INSTALL_DATA) $(srcdir)/Makefile.in.in \ | ||||
| 			  $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \ | ||||
| 	else \ | ||||
| 	  : ; \ | ||||
| 	fi | ||||
|  | ||||
| # Define this as empty until I found a useful application. | ||||
| installcheck: | ||||
|  | ||||
| uninstall: | ||||
| 	catalogs='$(CATALOGS)'; \ | ||||
| 	for cat in $$catalogs; do \ | ||||
| 	  cat=`basename $$cat`; \ | ||||
| 	  lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ | ||||
| 	  rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ | ||||
| 	  rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ | ||||
| 	  rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ | ||||
| 	  rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ | ||||
| 	done | ||||
| 	if test "$(PACKAGE)" = "glib"; then \ | ||||
| 	  rm -f $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \ | ||||
| 	fi | ||||
|  | ||||
| check: all | ||||
|  | ||||
| dvi info tags TAGS ID: | ||||
|  | ||||
| mostlyclean: | ||||
| 	rm -f core core.* *.pox $(GETTEXT_PACKAGE).po *.old.po cat-id-tbl.tmp | ||||
| 	rm -fr *.o | ||||
|  | ||||
| clean: mostlyclean | ||||
|  | ||||
| distclean: clean | ||||
| 	rm -f Makefile Makefile.in POTFILES *.mo *.msg *.cat *.cat.m | ||||
|  | ||||
| maintainer-clean: distclean | ||||
| 	@echo "This command is intended for maintainers to use;" | ||||
| 	@echo "it deletes files that may require special tools to rebuild." | ||||
| 	rm -f $(GMOFILES) | ||||
|  | ||||
| distdir = ../$(GETTEXT_PACKAGE)-$(VERSION)/$(subdir) | ||||
| dist distdir: $(DISTFILES) | ||||
| 	dists="$(DISTFILES)"; \ | ||||
| 	for file in $$dists; do \ | ||||
| 	  ln $(srcdir)/$$file $(distdir) 2> /dev/null \ | ||||
| 	    || cp -p $(srcdir)/$$file $(distdir); \ | ||||
| 	done | ||||
|  | ||||
| update-po: Makefile | ||||
| 	$(MAKE) $(GETTEXT_PACKAGE).pot | ||||
| 	tmpdir=`pwd`; \ | ||||
| 	cd $(srcdir); \ | ||||
| 	catalogs='$(CATALOGS)'; \ | ||||
| 	for cat in $$catalogs; do \ | ||||
| 	  cat=`basename $$cat`; \ | ||||
| 	  lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ | ||||
| 	  echo "$$lang:"; \ | ||||
| 	  if $(MSGMERGE) $$lang.po $(GETTEXT_PACKAGE).pot -o $$tmpdir/$$lang.new.po; then \ | ||||
| 	    if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ | ||||
| 	      rm -f $$tmpdir/$$lang.new.po; \ | ||||
|             else \ | ||||
| 	      if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ | ||||
| 	        :; \ | ||||
| 	      else \ | ||||
| 	        echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ | ||||
| 	        rm -f $$tmpdir/$$lang.new.po; \ | ||||
| 	        exit 1; \ | ||||
| 	      fi; \ | ||||
| 	    fi; \ | ||||
| 	  else \ | ||||
| 	    echo "msgmerge for $$cat failed!"; \ | ||||
| 	    rm -f $$tmpdir/$$lang.new.po; \ | ||||
| 	  fi; \ | ||||
| 	done | ||||
|  | ||||
| # POTFILES is created from POTFILES.in by stripping comments, empty lines | ||||
| # and Intltool tags (enclosed in square brackets), and appending a full | ||||
| # relative path to them | ||||
| POTFILES: POTFILES.in | ||||
| 	( if test 'x$(srcdir)' != 'x.'; then \ | ||||
| 	    posrcprefix='$(top_srcdir)/'; \ | ||||
| 	  else \ | ||||
| 	    posrcprefix="../"; \ | ||||
| 	  fi; \ | ||||
| 	  rm -f $@-t $@ \ | ||||
| 	    && (sed -e '/^#/d' 						\ | ||||
| 		    -e "s/^\[.*\] +//" 					\ | ||||
| 		    -e '/^[ 	]*$$/d' 				\ | ||||
| 		    -e "s@.*@	$$posrcprefix& \\\\@" < $(srcdir)/$@.in	\ | ||||
| 		| sed -e '$$s/\\$$//') > $@-t \ | ||||
| 	    && chmod a-w $@-t \ | ||||
| 	    && mv $@-t $@ ) | ||||
|  | ||||
| Makefile: Makefile.in.in ../config.status POTFILES | ||||
| 	cd .. \ | ||||
| 	  && $(SHELL) ./config.status $(subdir)/$@.in | ||||
|  | ||||
| # Tell versions [3.59,3.63) of GNU make not to export all variables. | ||||
| # Otherwise a system limit (for SysV at least) may be exceeded. | ||||
| .NOEXPORT: | ||||
| @@ -12,6 +12,15 @@ | ||||
|     <key name='color' enum='org.gtk.Demo.Color'> | ||||
|       <default>'red'</default> | ||||
|     </key> | ||||
|     <key name='window-size' type='(ii)'> | ||||
|       <default>(-1, -1)</default> | ||||
|     </key> | ||||
|     <key name='maximized' type='b'> | ||||
|       <default>false</default> | ||||
|     </key> | ||||
|     <key name='fullscreen' type='b'> | ||||
|       <default>false</default> | ||||
|     </key> | ||||
|   </schema> | ||||
|  | ||||
| </schemalist> | ||||
|   | ||||
| Before Width: | Height: | Size: 779 B After Width: | Height: | Size: 727 B | 
| Before Width: | Height: | Size: 827 B After Width: | Height: | Size: 776 B | 
| After Width: | Height: | Size: 822 B | 
							
								
								
									
										
											BIN
										
									
								
								gtk-nsis-pack/share/icons/Adwaita/16x16/devices/ebook-reader.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 717 B | 
| Before Width: | Height: | Size: 808 B After Width: | Height: | Size: 235 B | 
							
								
								
									
										
											BIN
										
									
								
								gtk-nsis-pack/share/icons/Adwaita/16x16/emotes/emote-love.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 709 B | 
| After Width: | Height: | Size: 727 B | 
| Before Width: | Height: | Size: 793 B After Width: | Height: | Size: 770 B | 
| Before Width: | Height: | Size: 769 B After Width: | Height: | Size: 740 B | 
| Before Width: | Height: | Size: 798 B After Width: | Height: | Size: 776 B |