From e60846dc78b9dace8d27276f7ef512e209dba7b3 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sat, 12 Nov 2011 22:52:24 -0500 Subject: [PATCH] Some more docs reshuffling --- docs/reference/glib/building.sgml | 980 +++++++++++++++++-------------------- docs/reference/glib/glib-docs.sgml | 132 ++--- 2 files changed, 509 insertions(+), 603 deletions(-) diff --git a/docs/reference/glib/building.sgml b/docs/reference/glib/building.sgml index b888237..55c3d12 100644 --- a/docs/reference/glib/building.sgml +++ b/docs/reference/glib/building.sgml @@ -2,162 +2,158 @@ - - -Compiling the GLib package -3 -GLib Library - - - -Compiling the GLib Package - -How to compile GLib itself - + + + Compiling the GLib package + 3 + GLib Library + + + + Compiling the GLib Package + How to compile GLib itself - - Building the Library on UNIX - - On UNIX, GLib uses the standard GNU build system, - using autoconf for package - configuration and resolving portability issues, - automake for building makefiles - that comply with the GNU Coding Standards, and - libtool for building shared - libraries on multiple platforms. The normal sequence for - compiling and installing the GLib library is thus: - - - ./configure - make - make install - - - - - The standard options provided by GNU - autoconf may be passed to the - configure script. Please see the - autoconf documentation or run - ./configure --help for information about - the standard options. - - - The GTK+ documentation contains - further details - about the build process and ways to influence it. - - - - Dependencies - - Before you can compile the GLib library, you need to have - various other tools and libraries installed on your - system. The two tools needed during the build process (as - differentiated from the tools used in when creating GLib - mentioned above such as autoconf) - are pkg-config and GNU make. - - - - - pkg-config - is a tool for tracking the compilation flags needed for - libraries that are used by the GLib library. (For each - library, a small .pc text file is - installed in a standard location that contains the compilation - flags needed for that library along with version number - information.) The version of pkg-config - needed to build GLib is mirrored in the - dependencies directory - on the GTK+ FTP - site. - - - - - The GTK+ makefiles will mostly work with different versions - of make, however, there tends to be - a few incompatibilities, so the GTK+ team recommends - installing GNU - make if you don't already have it on your system - and using it. (It may be called gmake - rather than make.) - - - - - GLib depends on a number of other libraries. - - - - - The GNU - libiconv library is needed to build GLib if your - system doesn't have the iconv() - function for doing conversion between character - encodings. Most modern systems should have - iconv(), however many older systems lack - an iconv() implementation. On such systems, - you must install the libiconv library. This can be found at: - http://www.gnu.org/software/libiconv. - + + Building the Library on UNIX + + On UNIX, GLib uses the standard GNU build system, + using autoconf for package + configuration and resolving portability issues, + automake for building makefiles + that comply with the GNU Coding Standards, and + libtool for building shared + libraries on multiple platforms. The normal sequence for + compiling and installing the GLib library is thus: + + + ./configure + make + make install + + + + + The standard options provided by GNU + autoconf may be passed to the + configure script. Please see the + autoconf documentation or run + ./configure --help for information about + the standard options. + + + The GTK+ documentation contains + further details + about the build process and ways to influence it. + + + + Dependencies + + Before you can compile the GLib library, you need to have + various other tools and libraries installed on your + system. The two tools needed during the build process (as + differentiated from the tools used in when creating GLib + mentioned above such as autoconf) + are pkg-config and GNU make. + + + + + pkg-config + is a tool for tracking the compilation flags needed for + libraries that are used by the GLib library. (For each + library, a small .pc text file is + installed in a standard location that contains the compilation + flags needed for that library along with version number + information.) The version of pkg-config + needed to build GLib is mirrored in the + dependencies directory + on the GTK+ FTP + site. + + + + + The GTK+ makefiles will mostly work with different versions + of make, however, there tends to be + a few incompatibilities, so the GTK+ team recommends + installing GNU + make if you don't already have it on your system + and using it. (It may be called gmake + rather than make.) + + + + + GLib depends on a number of other libraries. + + + - If your system has an iconv() implementation but - you want to use libiconv instead, you can pass the - --with-libiconv option to configure. This forces - libiconv to be used. - + The GNU + libiconv library is needed to build GLib if your + system doesn't have the iconv() + function for doing conversion between character + encodings. Most modern systems should have + iconv(), however many older systems lack + an iconv() implementation. On such systems, + you must install the libiconv library. This can be found at: + http://www.gnu.org/software/libiconv. + + + If your system has an iconv() implementation but + you want to use libiconv instead, you can pass the + --with-libiconv option to configure. This forces + libiconv to be used. + + + Note that if you have libiconv installed in your default include + search path (for instance, in /usr/local/), but + don't enable it, you will get an error while compiling GLib because + the iconv.h that libiconv installs hides the + system iconv. + + + If you are using the native iconv implementation on Solaris + instead of libiconv, you'll need to make sure that you have + the converters between locale encodings and UTF-8 installed. + At a minimum you'll need the SUNWuiu8 package. You probably + should also install the SUNWciu8, SUNWhiu8, SUNWjiu8, and + SUNWkiu8 packages. + - Note that if you have libiconv installed in your default include - search path (for instance, in /usr/local/), but - don't enable it, you will get an error while compiling GLib because - the iconv.h that libiconv installs hides the - system iconv. - - - If you are using the native iconv implementation on Solaris - instead of libiconv, you'll need to make sure that you have - the converters between locale encodings and UTF-8 installed. - At a minimum you'll need the SUNWuiu8 package. You probably - should also install the SUNWciu8, SUNWhiu8, SUNWjiu8, and - SUNWkiu8 packages. - - - The native iconv on Compaq Tru64 doesn't contain support for - UTF-8, so you'll need to use GNU libiconv instead. (When - using GNU libiconv for GLib, you'll need to use GNU libiconv - for GNU gettext as well.) This probably applies to related - operating systems as well. - + The native iconv on Compaq Tru64 doesn't contain support for + UTF-8, so you'll need to use GNU libiconv instead. (When + using GNU libiconv for GLib, you'll need to use GNU libiconv + for GNU gettext as well.) This probably applies to related + operating systems as well. + - - The libintl library from the GNU gettext - package is needed if your system doesn't have the - gettext() functionality for handling - message translation databases. - + + The libintl library from the GNU gettext + package is needed if your system doesn't have the + gettext() functionality for handling + message translation databases. + - - A thread implementation is needed. The thread support in GLib - can be based upon several native thread implementations, e.g. - POSIX threads, win32 threads or Solaris threads. - + + A thread implementation is needed. The thread support in GLib + can be based upon POSIX threads or win32 threads. + - - GRegex uses the PCRE library - for regular expression matching. The default is to use the internal - version of PCRE that is patched to use GLib for memory management - and Unicode handling. If you prefer to use the system-supplied PCRE - library you can pass the --with-pcre=system option to configure, - but it is not recommended. - + + GRegex uses the PCRE library + for regular expression matching. The default is to use the internal + version of PCRE that is patched to use GLib for memory management + and Unicode handling. If you prefer to use the system-supplied PCRE + library you can pass the option + to, but it is not recommended. + @@ -165,179 +161,112 @@ How to compile GLib itself getxattr() family of functions that may be provided by glibc or by the standalone libattr library. To build GLib without extended attribute support, use the - configure option. + option. - The optional SELinux support in GIO requires libselinux. To build - GLib without SELinux support, use the - configure option. + The optional SELinux support in GIO requires libselinux. + To build GLib without SELinux support, use the + option. - The optional support for DTrace requires the sys/sdt.h header, - which is provided by SystemTap on Linux. To build GLib without DTrace, use the - configure option. + The optional support for DTrace requires the + sys/sdt.h header, which is provided + by SystemTap on Linux. To build GLib without DTrace, use + the configure option. - The optional support for SystemTap can be disabled with the - configure option. + The optional support for + SystemTap + can be disabled with the + configure option. - - - Extra Configuration Options + + + Extra Configuration Options - - In addition to the normal options, the - configure script in the GLib - library supports these additional arguments: - - - configure - - --enable-debug=[no|minimum|yes] - - - --disable-gc-friendly - --enable-gc-friendly - - - --disable-mem-pools - --enable-mem-pools - - - --disable-threads - --enable-threads - - - --with-threads=[none|posix|dce|win32] - - - --disable-regex - --enable-regex - - - --with-pcre=[internal|system] - - - --disable-included-printf - --enable-included-printf - - - --disable-Bsymbolic - --enable-Bsymbolic - - - --disable-gtk-doc - --enable-gtk-doc - - - --disable-man - --enable-man - - - --disable-xattr - --enable-xattr - - - --disable-selinux - --enable-selinux - - - --disable-dtrace - --enable-dtrace - - - --disable-systemtap - --enable-systemtap - - - --enable-gcov - --disable-gcov - - - --with-runtime-libdir=RELPATH - - - + + In addition to the normal options, the + configure script in the GLib + library supports these additional arguments: + - - <systemitem>--enable-debug</systemitem> + + <systemitem>--enable-debug</systemitem> - - Turns on various amounts of debugging support. Setting this to 'no' - disables g_assert(), g_return_if_fail(), g_return_val_if_fail() and - all cast checks between different object types. Setting it to 'minimum' disables only cast checks. Setting it to 'yes' enables - runtime debugging. - The default is 'minimum'. - Note that 'no' is fast, but dangerous as it tends to destabilize - even mostly bug-free software by changing the effect of many bugs - from simple warnings into fatal crashes. Thus - should not - be used for stable releases of GLib. - - + + Turns on various amounts of debugging support. Setting this to 'no' + disables g_assert(), g_return_if_fail(), g_return_val_if_fail() and + all cast checks between different object types. Setting it to 'minimum' disables only cast checks. Setting it to 'yes' enables + runtime debugging. + The default is 'minimum'. + Note that 'no' is fast, but dangerous as it tends to destabilize + even mostly bug-free software by changing the effect of many bugs + from simple warnings into fatal crashes. Thus + should not + be used for stable releases of GLib. + + - - <systemitem>--disable-gc-friendly</systemitem> and - <systemitem>--enable-gc-friendly</systemitem> + + <systemitem>--disable-gc-friendly</systemitem> and + <systemitem>--enable-gc-friendly</systemitem> - - By default, and with --disable-gc-friendly - as well, Glib does not clear the memory for certain objects before they - are freed. For example, Glib may decide to recycle GList nodes by - putting them in a free list. However, memory profiling and debugging tools like Valgrind work better if an - application does not keep dangling pointers to freed memory (even - though these pointers are no longer dereferenced), or invalid pointers inside - uninitialized memory. The - --enable-gc-friendly option makes Glib clear - memory in these situations: - - + + By default, and with --disable-gc-friendly + as well, Glib does not clear the memory for certain objects before + they are freed. For example, Glib may decide to recycle GList nodes + by putting them in a free list. However, memory profiling and debugging + tools like Valgrind work + better if an application does not keep dangling pointers to freed + memory (even though these pointers are no longer dereferenced), or + invalid pointers inside uninitialized memory. + The --enable-gc-friendly option makes Glib + clear memory in these situations: + - - When shrinking a GArray, Glib will clear the memory no longer - available in the array: shrink an array from 10 bytes to 7, and - the last 3 bytes will be cleared. This includes removals of single and multiple elements. - - - - - + + When shrinking a GArray, Glib will clear the memory no longer + available in the array: shrink an array from 10 bytes to 7, and + the last 3 bytes will be cleared. This includes removals of single + and multiple elements. + - - When growing a GArray, Glib will clear the new chunk of memory. - Grow an array from 7 bytes to 10 bytes, and the last 3 bytes will be cleared. - + + When growing a GArray, Glib will clear the new chunk of memory. + Grow an array from 7 bytes to 10 bytes, and the last 3 bytes will + be cleared. + - - The above applies to GPtrArray as well. - + + The above applies to GPtrArray as well. + - - When freeing a node from a GHashTable, Glib will first clear - the node, which used to have pointers to the key and the value - stored at that node. - + + When freeing a node from a GHashTable, Glib will first clear + the node, which used to have pointers to the key and the value + stored at that node. + - - When destroying or removing a GTree node, Glib will clear the node, - which used to have pointers to the node's value, and the left and right subnodes. - + + When destroying or removing a GTree node, Glib will clear the node, + which used to have pointers to the node's value, and the left and + right subnodes. + @@ -345,10 +274,11 @@ How to compile GLib itself Since clearing the memory has a cost, --disable-gc-friendly is the default. + - - <systemitem>--disable-mem-pools</systemitem> and - <systemitem>--enable-mem-pools</systemitem> + + <systemitem>--disable-mem-pools</systemitem> and + <systemitem>--enable-mem-pools</systemitem> Many small chunks of memory are often allocated via collective pools @@ -359,284 +289,260 @@ How to compile GLib itself and g_free() functions. Code currently affected by this: - - - GList, GSList, - GNode, GHash - allocations. The functions g_list_push_allocator(), - g_list_pop_allocator(), g_slist_push_allocator(), - g_slist_pop_allocator(), g_node_push_allocator() and - g_node_pop_allocator() are not available - - - - - GMemChunks become basically non-effective - - - - - GSignal disables all caching (potentially - very slow) - - - - - GType doesn't honour the - GTypeInfo - n_preallocs field anymore - - - - - the GBSearchArray flag - G_BSEARCH_ALIGN_POWER2 becomes non-functional - - + + + GList, GSList, + GNode, GHash + allocations. The functions g_list_push_allocator(), + g_list_pop_allocator(), g_slist_push_allocator(), + g_slist_pop_allocator(), g_node_push_allocator() and + g_node_pop_allocator() are not available + + + + + GMemChunks become basically non-effective + + + + + GSignal disables all caching + (potentially very slow) + + + + + GType doesn't honour the + GTypeInfo + n_preallocs field anymore + + + + + the GBSearchArray flag + G_BSEARCH_ALIGN_POWER2 becomes non-functional + + - - - - <systemitem>--disable-threads</systemitem> and - <systemitem>--enable-threads</systemitem> - - - Do not compile GLib to be multi thread safe. GLib - will be slightly faster then. This is however not - recommended, as many programs rely on GLib being - multi thread safe. - - + - - <systemitem>--with-threads</systemitem> + + <systemitem>--with-threads</systemitem> - - Specify a thread implementation to use. - - - 'posix' and 'dce' can be used interchangeable - to mean the different versions of Posix - threads. configure tries to find out, which - one is installed. - - - - 'none' means that GLib will be thread safe, - but does not have a default thread - implementation. This has to be supplied to - g_thread_init() by the programmer. - - - - - + + Specify a thread implementation to use. Available options are + 'posix' or 'win32'. Normally, configure + should be able to work out the system threads API on its own. + + - - <systemitem>--disable-regex</systemitem> and - <systemitem>--enable-regex</systemitem> + + <systemitem>--disable-regex</systemitem> and + <systemitem>--enable-regex</systemitem> - - Do not compile GLib with regular expression support. - GLib will be smaller because it will not need the - PCRE library. This is however not recommended, as - programs may need GRegex. - - + + Do not compile GLib with regular expression support. + GLib will be smaller because it will not need the + PCRE library. This is however not recommended, as + programs may need GRegex. + + - - <systemitem>--with-pcre</systemitem> + + <systemitem>--with-pcre</systemitem> - - Specify whether to use the internal or the system-supplied - PCRE library. - - + + Specify whether to use the internal or the system-supplied + PCRE library. + + + 'internal' means that GRegex will be compiled to use the internal PCRE library. - - - + + + + 'system' means that GRegex will be compiled to use the system-supplied PCRE library. - - - Using the internal PCRE is the preferred solution: - - - - System-supplied PCRE has a separated copy of the big tables - used for Unicode handling. - - - - - Some systems have PCRE libraries compiled without some needed - features, such as UTF-8 and Unicode support. - - - - - PCRE uses some global variables for memory management and - other features. In the rare case of a program using both - GRegex and PCRE (maybe indirectly through a library), - this variables could lead to problems when they are modified. - - - - - + + + + Using the internal PCRE is the preferred solution: + + + + System-supplied PCRE has a separated copy of the big tables + used for Unicode handling. + + + + + Some systems have PCRE libraries compiled without some needed + features, such as UTF-8 and Unicode support. + + + + + PCRE uses some global variables for memory management and + other features. In the rare case of a program using both + GRegex and PCRE (maybe indirectly through a library), + this variables could lead to problems when they are modified. + + + + + - - <systemitem>--disable-included-printf</systemitem> and - <systemitem>--enable-included-printf</systemitem> + + <systemitem>--disable-included-printf</systemitem> and + <systemitem>--enable-included-printf</systemitem> - - By default the configure script will try - to auto-detect whether the C library provides a suitable set - of printf() functions. In detail, - configure checks that the semantics of - snprintf() are as specified by C99 and - that positional parameters as specified in the Single Unix - Specification are supported. If this not the case, GLib will - include an implementation of the printf() - family. - These options can be used to explicitly control whether - an implementation fo the printf() family - should be included or not. - - + + By default the configure script will try + to auto-detect whether the C library provides a suitable set + of printf() functions. In detail, configure + checks that the semantics of snprintf() are as specified by C99 + and that positional parameters as specified in the Single Unix + Specification are supported. If this not the case, GLib will + include an implementation of the printf() family. + + + These options can be used to explicitly control whether + an implementation fo the printf() family should be included or not. + + - - <systemitem>--disable-Bsymbolic</systemitem> and - <systemitem>--enable-Bsymbolic</systemitem> + + <systemitem>--disable-Bsymbolic</systemitem> and + <systemitem>--enable-Bsymbolic</systemitem> - - By default, GLib uses the -Bsymbolic-functions linker - flag to avoid intra-library PLT jumps. A side-effect - of this is that it is no longer possible to override - internal uses of GLib functions with - LD_PRELOAD. Therefore, it may make - sense to turn this feature off in some situations. - The option allows - to do that. - - + + By default, GLib uses the -Bsymbolic-functions linker + flag to avoid intra-library PLT jumps. A side-effect + of this is that it is no longer possible to override + internal uses of GLib functions with + LD_PRELOAD. Therefore, it may make + sense to turn this feature off in some situations. + The option allows + to do that. + + - - <systemitem>--disable-gtk-doc</systemitem> and - <systemitem>--enable-gtk-doc</systemitem> + + <systemitem>--disable-gtk-doc</systemitem> and + <systemitem>--enable-gtk-doc</systemitem> - - By default the configure script will try - to auto-detect whether the - gtk-doc package is installed. If - it is, then it will use it to extract and build the - documentation for the GLib library. These options - can be used to explicitly control whether - gtk-doc should be - used or not. If it is not used, the distributed, - pre-generated HTML files will be installed instead of - building them on your machine. - - + + By default the configure script will try + to auto-detect whether the + gtk-doc package is installed. + If it is, then it will use it to extract and build the + documentation for the GLib library. These options + can be used to explicitly control whether + gtk-doc should be + used or not. If it is not used, the distributed, + pre-generated HTML files will be installed instead of + building them on your machine. + + - - <systemitem>--disable-man</systemitem> and - <systemitem>--enable-man</systemitem> + + <systemitem>--disable-man</systemitem> and + <systemitem>--enable-man</systemitem> - - By default the configure script will try - to auto-detect whether xsltproc - and the necessary Docbook stylesheets are installed. If - they are, then it will use them to rebuild the included - man pages from the XML sources. These options can be used - to explicitly control whether man pages should be rebuilt - used or not. The distribution includes pre-generated man - pages. - - + + By default the configure script will try + to auto-detect whether xsltproc + and the necessary Docbook stylesheets are installed. + If they are, then it will use them to rebuild the included + man pages from the XML sources. These options can be used + to explicitly control whether man pages should be rebuilt + used or not. The distribution includes pre-generated man + pages. + + - - <systemitem>--disable-xattr</systemitem> and - <systemitem>--enable-xattr</systemitem> + + <systemitem>--disable-xattr</systemitem> and + <systemitem>--enable-xattr</systemitem> - - By default the configure script will try - to auto-detect whether the getxattr() family of functions - is available. If it is, then extended attribute support - will be included in GIO. These options can be used to - explicitly control whether extended attribute support - should be included or not. getxattr() and friends can - be provided by glibc or by the standalone libattr library. - - + + By default the configure script will try + to auto-detect whether the getxattr() family of functions + is available. If it is, then extended attribute support + will be included in GIO. These options can be used to + explicitly control whether extended attribute support + should be included or not. getxattr() and friends can + be provided by glibc or by the standalone libattr library. + + - - <systemitem>--disable-selinux</systemitem> and - <systemitem>--enable-selinux</systemitem> + + <systemitem>--disable-selinux</systemitem> and + <systemitem>--enable-selinux</systemitem> - - By default the configure script will - auto-detect if libselinux is available and include - SELinux support in GIO if it is. These options can be - used to explicitly control whether SELinux support should - be included. - - - - - <systemitem>--disable-dtrace</systemitem> and - <systemitem>--enable-dtrace</systemitem> + + By default the configure script will + auto-detect if libselinux is available and include + SELinux support in GIO if it is. These options can be + used to explicitly control whether SELinux support should + be included. + + - - By default the configure script will - detect if DTrace support is available, and use it. - - + + <systemitem>--disable-dtrace</systemitem> and + <systemitem>--enable-dtrace</systemitem> - - <systemitem>--disable-systemtap</systemitem> and - <systemitem>--enable-systemtap</systemitem> + + By default the configure script will + detect if DTrace support is available, and use it. + + - - This option requires DTrace support. If it is available, then - the configure script will also check for - the presence of SystemTap. - - + + <systemitem>--disable-systemtap</systemitem> and + <systemitem>--enable-systemtap</systemitem> - - <systemitem>--enable-gcov</systemitem> and - <systemitem>--disable-gcov</systemitem> + + This option requires DTrace support. If it is available, then + the configure script will also check for + the presence of SystemTap. + + - - Enable the generation of coverage reports for the GLib tests. - This requires the lcov frontend to gcov from the - Linux Test Project. - To generate a coverage report, use the lcov make target. The - report is placed in the glib-lcov directory. - - + + <systemitem>--enable-gcov</systemitem> and + <systemitem>--disable-gcov</systemitem> - - <systemitem>--with-runtime-libdir=RELPATH</systemitem> + + Enable the generation of coverage reports for the GLib tests. + This requires the lcov frontend to gcov from the + Linux Test Project. + To generate a coverage report, use the lcov make target. The + report is placed in the glib-lcov directory. + + - - Allows specifying a relative path to where to install the runtime - libraries (meaning library files used for running, not developing, - GLib applications). This can be used in operating system setups where - programs using GLib needs to run before e.g. /usr - is mounted. - For example, if LIBDIR is /usr/lib and - ../../lib is passed to - --with-runtime-libdir then the - runtime libraries are installed into /lib rather - than /usr/lib. - - + + <systemitem>--with-runtime-libdir=RELPATH</systemitem> + + + Allows specifying a relative path to where to install the runtime + libraries (meaning library files used for running, not developing, + GLib applications). This can be used in operating system setups where + programs using GLib needs to run before e.g. /usr + is mounted. + For example, if LIBDIR is /usr/lib and + ../../lib is passed to + --with-runtime-libdir then the + runtime libraries are installed into /lib rather + than /usr/lib. + + - + diff --git a/docs/reference/glib/glib-docs.sgml b/docs/reference/glib/glib-docs.sgml index 8399115..3b394f1 100644 --- a/docs/reference/glib/glib-docs.sgml +++ b/docs/reference/glib/glib-docs.sgml @@ -1,5 +1,5 @@ - @@ -17,17 +17,17 @@ GLib Overview -GLib is a general-purpose utility library, which provides many useful data -types, macros, type conversions, string utilities, file utilities, a main -loop abstraction, and so on. It works on many UNIX-like platforms, Windows, -OS/2 and BeOS. GLib is released under the GNU Library General Public License -(GNU LGPL). + GLib is a general-purpose utility library, which provides many useful + data types, macros, type conversions, string utilities, file utilities, + a mainloop abstraction, and so on. It works on many UNIX-like platforms, + Windows, OS/2 and BeOS. GLib is released under the GNU Library General + Public License (GNU LGPL). -The general policy of GLib is that all functions are invisibly threadsafe with the -exception of data structure manipulation functions, where, if you have two threads -manipulating the same data structure, they must use a lock to -synchronize their operation. + The general policy of GLib is that all functions are invisibly threadsafe + with the exception of data structure manipulation functions, where, if + you have two threads manipulating the same data + structure, they must use a lock to synchronize their operation. @@ -60,6 +60,7 @@ synchronize their operation. + @@ -68,69 +69,68 @@ synchronize their operation. GLib Utilities - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GLib Data Types - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - Deprecated APIs - - - - + Deprecated APIs + + + + -- 2.7.4