From: Jimmy Huang Date: Fri, 31 Aug 2012 22:02:20 +0000 (-0700) Subject: Initial import to Tizen X-Git-Tag: 1.0_branch^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=HEAD;p=profile%2Fivi%2Fgstreamer-python.git Initial import to Tizen Signed-off-by: Jimmy Huang --- 46b70d076fba9bce1d25e4f017b45e783e10940e diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..92ffc66 --- /dev/null +++ b/AUTHORS @@ -0,0 +1 @@ +This file will be autogenerated. Please read README-docs. diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..2c24624 --- /dev/null +++ b/COPYING @@ -0,0 +1,510 @@ + + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations +below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it +becomes a de-facto standard. To achieve this, non-free programs must +be allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control +compilation and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at least + three years, to give the same user the materials specified in + Subsection 6a, above, for a charge no more than the cost of + performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply, and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License +may add an explicit geographical distribution limitation excluding those +countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms +of the ordinary General Public License). + + To apply these terms, attach the following notices to the library. +It is safest to attach them to the start of each source file to most +effectively convey the exclusion of warranty; and each file should +have at least the "copyright" line and a pointer to where the full +notice is found. + + + + Copyright (C) + + 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.1 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, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or +your school, if any, to sign a "copyright disclaimer" for the library, +if necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James + Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..5f46f49 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,5539 @@ +=== release 0.10.22 === + +2011-10-29 Tim-Philipp Müller + + * configure.ac: + releasing 0.10.22, "Ninety Tons of Thunder" + +2011-10-29 16:01:24 +0100 Tim-Philipp Müller + + * configure.ac: + configure: use AG_GST_SET_PACKAGE_RELEASE_DATETIME_WITH_NANO + For python plugin, but also to ensure there's an entry in the + doap file for releases. + +2011-10-20 13:24:59 +0100 Tim-Philipp Müller + + * configure.ac: + 0.10.21.2 pre-release + +2011-08-26 15:22:16 +0200 Sebastian Dröge + + * pkgconfig/gst-python-uninstalled.pc.in: + * pkgconfig/gst-python.pc.in: + pkgconfig: Add Cflags with the include path for the headers + https://bugzilla.gnome.org/show_bug.cgi?id=657435 + +2011-10-11 23:33:21 +0100 Tim-Philipp Müller + + * gst/Makefile.am: + * gst/audio.override: + * gst/common.h: + * gst/interfaces.override: + * gst/pbutils.override: + * gst/pygst-private.h: + * gst/pygst.h: + * gst/pygstminiobject.c: + * gst/pygstminiobject.h: + * gst/pygstvalue.h: + * gst/tag.override: + * gst/video.override: + Don't install common.h and remove from public headers + Doesn't seem to be needed anyway. Also remove duplicate + pygobject.h include in common.h while at it. + https://bugzilla.gnome.org/show_bug.cgi?id=657435 + +2011-10-11 22:59:05 +0100 Tim-Philipp Müller + + * gst/Makefile.am: + Install headers into $includedir/gstreamer-0.10/gst not .../pygst/ + This matches the directory layout in the source tree and makes it + possible to find the headers (e.g. from g-e-s) in an uninstalled + setup. + https://bugzilla.gnome.org/show_bug.cgi?id=657435 + +2011-10-11 22:57:30 +0100 Tim-Philipp Müller + + * gst/Makefile.am: + Keep pygst-private.h in noinst_HEADERS + Makes sure it gets disted. + +2011-01-13 14:59:16 +0000 Vincent Penquerc'h + + * examples/remuxer.py: + remuxer.py: allow more than one stream of the same type + Queue names would collide otherwise, so just pass None for now. Also + guarantees that we don't get silly names like "queue_audio/x-foobar". + https://bugzilla.gnome.org/show_bug.cgi?id=639427 + +2011-01-13 14:15:34 +0000 Vincent Penquerc'h + + * examples/remuxer.py: + remuxer.py: do not crash when clicking open without having selected a file + https://bugzilla.gnome.org/show_bug.cgi?id=639421 + +2011-01-13 14:19:05 +0000 Vincent Penquerc'h + + * examples/remuxer.py: + remuxer.py: list files named *.og[gvax], not only *.ogg + These are all recommended extensions for Ogg streams. + https://bugzilla.gnome.org/show_bug.cgi?id=639423 + +2011-09-06 21:53:08 +0200 Stefan Sauer + + * common: + Automatic update of common submodule + From a39eb83 to 11f0cd5 + +2011-09-06 19:13:44 +0100 Tim-Philipp Müller + + * gst/gstcaps.override: + caps.override: fix compiler warning + Re-use the already-extracted caps and structure pointers, instead + of getting them again, thus fixing: + gstcaps.override: In function 'pygst_caps_sq_item': + gstcaps.override:361:16: error: variable 'structure' set but not used + +2011-09-06 19:07:35 +0100 Tim-Philipp Müller + + * gst/gstpad.override: + pad.override: fix pad probe return value handling + Don't forget to return the return value, makes buffer and event probes + work much better. + +2011-09-06 16:06:39 +0200 Stefan Sauer + + * common: + Automatic update of common submodule + From 605cd9a to a39eb83 + +2011-08-10 17:10:01 +0200 Thibault Saunier + + * configure.ac: + * gst/Makefile.am: + * pkgconfig/gst-python.pc.in: + Install pygst.h so it can be reused by other bindings + Also add a PYGST_CFLAGS + https://bugzilla.gnome.org/show_bug.cgi?id=656289 + +2011-08-10 17:13:17 +0200 Thibault Saunier + + * gst/pygst.h: + * gst/pygstminiobject.c: + * gst/pygstminiobject.h: + gst: Move PyGstMiniObject to public API. + Allows it to be reused from 3rd party modules. + https://bugzilla.gnome.org/show_bug.cgi?id=656289 + +2011-06-23 11:29:46 -0700 David Schleef + + * common: + Automatic update of common submodule + From 69b981f to 605cd9a + +2011-05-25 09:38:22 +0200 Sebastian Dröge + + * gst/gstpad.override: + gst: Don't use private GstPad API to add data/buffer/event probes + This does not work anymore with latest core because of the + pad cache that enables use of a fast path during data passing + in many situations. + Fixes bug #650987. + +2011-05-24 19:20:44 +0200 Andoni Morales Alastruey + + * gst/gstpad.override: + gst: Fix override of pad probes + Fixes bug #650986. + +2011-05-19 22:59:28 +0300 Stefan Kost + + * common: + Automatic update of common submodule + From 9e5bbd5 to 69b981f + +2011-05-18 16:13:11 +0300 Stefan Kost + + * common: + Automatic update of common submodule + From fd35073 to 9e5bbd5 + +2011-05-18 12:26:36 +0300 Stefan Kost + + * common: + Automatic update of common submodule + From 46dfcea to fd35073 + +2011-05-03 09:37:36 -0300 Thiago Santos + + * gst/pbutils.defs: + pbutils: Encoding profiles accept null caps restrictions + Add 'null-ok' for encoding video/audio profiles constructor + so they accept None as caps restriction parameter + +2011-05-02 16:59:30 -0300 Thiago Santos + + * gst/gstmodule.c: + gstmodule: Check for Py_None when setting a miniobject + Check if we got a None value before trying to use it as a + PyGstMiniObject. + https://bugzilla.gnome.org/show_bug.cgi?id=649227 + +2011-04-24 14:05:55 +0100 Tim-Philipp Müller + + * common: + Automatic update of common submodule + From c3cafe1 to 46dfcea + +2011-04-04 15:58:52 +0300 Stefan Kost + + * common: + Automatic update of common submodule + From 1ccbe09 to c3cafe1 + +2011-03-25 22:35:52 +0100 Sebastian Dröge + + * common: + Automatic update of common submodule + From 193b717 to 1ccbe09 + +2011-03-25 14:57:27 +0200 Stefan Kost + + * common: + Automatic update of common submodule + From b77e2bf to 193b717 + +2011-03-25 09:34:04 +0100 Sebastian Dröge + + * common: + Automatic update of common submodule + From d8814b6 to b77e2bf + +2011-03-25 09:10:14 +0100 Sebastian Dröge + + * common: + Automatic update of common submodule + From 6aaa286 to d8814b6 + +2011-03-24 18:50:52 +0200 Stefan Kost + + * common: + Automatic update of common submodule + From 6aec6b9 to 6aaa286 + +2011-03-22 13:04:02 +0100 Luis de Bethencourt + + * configure.ac: + configure.ac: redundant uses of AC_MSG_RESULT() + cleaned the redundant uses of AC_MSG_RESULT() in configure.ac + +2011-03-18 19:34:57 +0100 Luis de Bethencourt + + * autogen.sh: + autogen: wingo signed comment + +2011-02-28 18:34:03 +0100 Mark Nauwelaerts + + * common: + Automatic update of common submodule + From 1de7f6a to 6aec6b9 + +2011-02-14 12:54:46 +0200 Stefan Kost + + * common: + Automatic update of common submodule + From f94d739 to 1de7f6a + +2011-02-09 09:40:17 +0000 Tim-Philipp Müller + + * gst/gst-0.10.31.ignore: + gst-0.10.31.ignore: fix build against core 0.10.30 + +2011-01-24 17:55:55 +0530 Arun Raghavan + + * codegen/codegen.py: + codegen: Respect ignore-type for miniobjects + https://bugzilla.gnome.org/show_bug.cgi?id=640410 + +2011-01-24 17:56:16 +0530 Arun Raghavan + + * codegen/override.py: + codegen: Handle empty lines in overrides gracefully + Without this, having an empty line in an override will cause codegen to + unceremoniously choke to death. + https://bugzilla.gnome.org/show_bug.cgi?id=640341 + +2011-02-06 12:08:14 +0100 Edward Hervey + + * gst/pbutils.defs: + pbutils: Specify which string variables can be NULL + Without this you can't pass None to the various methods/constructors + +2011-01-28 16:59:11 +0000 Tim-Philipp Müller + + * gst/gstmodule.c: + gstmodule: remove unused label to fix compiler warning + gstmodule.c: In function 'pygst_fraction_to_value': + gstmodule.c:129:1: error: label 'out' defined but not used + https://bugzilla.gnome.org/show_bug.cgi?id=640837 + +2011-01-21 18:13:57 +0100 Andoni Morales Alastruey + + * testsuite/runtests.py: + tests: fix checks when the locale is not the default one + Some tests (test_pbutils.py) checks against strings for the + english locale, so we should force it before running any test + https://bugzilla.gnome.org/show_bug.cgi?id=640207 + +2011-01-25 11:17:12 +0100 Edward Hervey + + * configure.ac: + configure.ac: And back to development we go + +=== release 0.10.21 === + +2011-01-20 21:16:38 +0100 Edward Hervey + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + * gst-python.doap: + Release 0.10.21 + +2011-01-06 17:40:28 +0000 christian schaller + + * gst-python.spec.in: + Update spec file with latest changes + +2011-01-16 14:58:37 +0100 Edward Hervey + + * gst/gstmodule.c: + gstmodule: Add tags introduced in 0.10.31 + Fixes #639632 + +2011-01-16 14:55:26 +0100 Edward Hervey + + * gst/gstmodule.c: + gstmodule: Use a macro to register tags + Avoids human error when registering them (like USER_RATING previously + being TRACK_PEAK). + +2011-01-12 18:12:29 +0530 Arun Raghavan + + * codegen/codegen.py: + codegen: Ignore functions whose return type is ignored + This makes sure that if X is an ignored type, then functions that return + an object of type X (or a pointer type based on X) are also ignored. + Fixes #639293 + +2011-01-12 18:11:23 +0530 Arun Raghavan + + * codegen/override.py: + codegen: Handle pointer types in is_type_ignored() + This ensures that if type X is ignored, then pointers to X (and pointers + to pointers to X, etc.) are also ignored. + Caveat: this also means that ignore-type should only be used with base + types and not pointer types. + Fixes #639293 + +2011-01-12 15:01:39 +0100 Edward Hervey + + * testsuite/Makefile.am: + testsuite: Add a make command to run tests forever + And will stop once they fail. Useful to debug racy tests. + +2011-01-11 20:31:59 +0100 Edward Hervey + + * configure.ac: + 0.10.20.3 pre-release + +2011-01-11 15:51:55 +0200 Stefan Kost + + * common: + Automatic update of common submodule + From e572c87 to f94d739 + +2011-01-10 16:38:09 +0000 Tim-Philipp Müller + + * common: + Automatic update of common submodule + From ccbaa85 to e572c87 + +2011-01-10 14:55:31 +0000 Tim-Philipp Müller + + * common: + Automatic update of common submodule + From 46445ad to ccbaa85 + +2011-01-07 21:52:03 +0100 Edward Hervey + + * gst/pbutils.defs: + pbutils: Fix discoverer miniobject methods + They were declared as functions and not methods :( + +2011-01-07 17:20:44 +0100 Edward Hervey + + * configure.ac: + 0.10.20.2 pre-release + +2011-01-07 17:17:05 +0100 Edward Hervey + + * gst/pbutils.override: + pbutils: Add overrides for new API + +2011-01-05 22:18:46 +0100 Edward Hervey + + * gst/pbutils.defs: + encoding: encoding_profile_get_output_caps => _get_input_caps + +2011-01-05 21:28:12 +0100 Edward Hervey + + * gst/gst-0.10.32.ignore: + * gst/gst.defs: + gst: update for latest API addition + +2011-01-05 21:25:37 +0100 Edward Hervey + + * gst/gst-pb-0.10.32.ignore: + * gst/pbutils.defs: + pbutils: Update .defs for latest addition + +2011-01-05 15:04:05 +0100 Edward Hervey + + * configure.ac: + * gst/Makefile.am: + * gst/gst-0.10.32.ignore: + * gst/gst-pb-0.10.32.ignore: + * gst/gst-types.defs: + * gst/gst.defs: + * gst/gstversion.override.in: + * gst/pbutils.defs: + * gst/video.defs: + gst: Update to 0.10.32 core/base API + +2011-01-05 15:04:25 +0100 Edward Hervey + + * gst/arg-types.py: + arg-types: Properly handle const-GstCaps* return values + +2010-12-20 17:48:03 +0100 Edward Hervey + + * common: + Automatic update of common submodule + From 169462a to 46445ad + +2010-12-15 14:57:05 +0200 Stefan Kost + + * common: + Automatic update of common submodule + From 20742ae to 169462a + +2010-12-13 16:24:39 +0200 Stefan Kost + + * common: + Automatic update of common submodule + From 011bcc8 to 20742ae + +2010-12-05 14:08:05 +0100 Edward Hervey + + * testsuite/test_pad.py: + test_pad: Fix pad refcount checking due to fix in core + The event source wasn't previously set correctly. Now that it is, + check the refcount on the proper pad. + +2010-12-03 14:49:13 +0100 Edward Hervey + + * configure.ac: + configure.ac: back to development + And the crowd goes mad \o/ + +=== release 0.10.20 === + +2010-12-01 23:43:57 +0100 Edward Hervey + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + Release 0.10.20 + +2010-11-22 13:27:15 +0000 Tim-Philipp Müller + + * .gitignore: + * configure.ac: + 0.10.19.5 pre-release + +2010-11-22 14:18:05 +0100 Alessandro Decina + + * gst/Makefile.am: + * testsuite/common.py: + Fix distcheck some more. + In testsuite/common.py look for gst/__init__.py in builddir now. + Clean gst/__init__.pyc after make check. + +2010-11-22 13:41:17 +0100 Alessandro Decina + + * configure.ac: + * gst/Makefile.am: + * gst/__init__.py: + * gst/__init__.py.in: + Fix distcheck. + Before this change gst/__init__.py wasn't being copied to + $(top_builddir)/gst/, making make check fail to import gst. + +2010-11-17 09:36:44 -0300 Thiago Santos + + * gst/gst.defs: + gst: updating datetime functions + Updating datetime _from_unix functions for the new 2 variants (utc/local) + https://bugzilla.gnome.org/show_bug.cgi?id=635031 + +2010-11-09 10:58:04 +0100 Edward Hervey + + * gst/pbutilsmodule.c: + pbutils: Check that pygst_init() succeeded + +2010-11-09 11:00:16 +0100 Edward Hervey + + * gst/audiomodule.c: + * gst/gst-argtypes.c: + * gst/interfacesmodule.c: + * gst/pbutilsmodule.c: + * gst/pygstexception.c: + * gst/pygstiterator.c: + * gst/pygstminiobject.c: + * gst/tagmodule.c: + * gst/videomodule.c: + gst: run gst-indent all C files + We hadn't done it since the switch to git... whoops + +2010-11-09 10:57:31 +0100 Edward Hervey + + * gst/pygst.h: + pygst: Get the _PyGst_API symbol from the proper module + https://bugzilla.gnome.org/show_bug.cgi?id=634365 + +2010-11-08 19:01:50 +0100 Edward Hervey + + * gst/pbutils.defs: + * gst/pbutils.override: + pbutils: Update for latest API change in gstdiscoverer + +2010-11-01 19:37:03 +0000 Tim-Philipp Müller + + * configure.ac: + configure.ac: 0.10.19.4 pre-release + Skip .3 to align number with the other pre-releases. + +2010-10-30 16:18:59 +0100 Tim-Philipp Müller + + * gst/pbutils.defs: + pbutils: update for discoverer API changes in last gst-plugins-base pre-release + https://bugzilla.gnome.org/show_bug.cgi?id=633311 + +2010-10-27 16:58:12 +0200 David Hoyt + + * plugin/gstpythonplugin.c: + plugin: Fix build on MSVC + Fixes #633141 + +2010-10-27 13:17:57 +0100 Jan Schmidt + + * common: + Automatic update of common submodule + From 7bbd708 to 011bcc8 + +2010-10-26 17:53:42 +0100 Jan Schmidt + + * examples/filesrc.py: + filesrc.py: Call gobject.threads_init() in the example + Fixes: #633033 + +2010-10-22 18:17:34 +0200 Edward Hervey + + * configure.ac: + configure.ac: 0.10.19.2 pre-release + +2010-10-22 13:28:03 +0200 Edward Hervey + + * gst/pbutils.defs: + * gst/pbutils.override: + pbutils: Overrides for GstDiscoverer API + +2010-10-22 13:27:33 +0200 Edward Hervey + + * gst/gstmodule.c: + gst: Register new GST_ELEMENT_FACTORY_LIST_TYPE constants + +2010-10-22 13:27:02 +0200 Edward Hervey + + * gst/gstmessage.override: + gst: Add override for new qos messages + +2010-10-22 13:26:44 +0200 Edward Hervey + + * gst/gstevent.override: + gst: Add override for gst_event_parse_sink_message + +2010-10-22 13:26:21 +0200 Edward Hervey + + * gst/gstelementfactory.override: + gst: Add overrides for new GstElementFactoryList functions + +2010-10-22 13:25:45 +0200 Edward Hervey + + * gst/arg-types.py: + arg-types: GstElementFactoryListType is a guint64 + +2010-10-22 13:25:22 +0200 Edward Hervey + + * gst/gst-types.defs: + gst: Add GstDateTime as a boxed + +2010-10-18 11:59:03 +0200 Edward Hervey + + * gst/audio.override: + * gst/audiomodule.c: + * gst/interfaces.override: + * gst/interfacesmodule.c: + * gst/pbutils.override: + * gst/pbutilsmodule.c: + * gst/tag.override: + * gst/tagmodule.c: + * gst/video.override: + * gst/videomodule.c: + gst: Make all libraries use shared PyGst_API + Fixes #590348 + +2010-10-18 11:50:19 +0200 Edward Hervey + + * gst/Makefile.am: + * gst/common.h: + * gst/gst.override: + * gst/gstmodule.c: + * gst/pygst-private.h: + * gst/pygst.h: + * gst/pygstiterator.c: + * gst/pygstminiobject.h: + * gst/pygstvalue.c: + gst: Export some pygst API to be used by external modules + Partially fixes #590348 + +2010-10-18 10:14:19 +0200 Edward Hervey + + * configure.ac: + * gst/Makefile.am: + * gst/gst-0.10.20.ignore: + * gst/gst.override: + * gst/gstmodule.c: + * gst/gstversion.override.in: + * gst/pbutilsmodule.c: + gst: Bump required core/base to 0.10.20 + And clean up code accordingly + +2010-10-18 09:36:13 +0200 Edward Hervey + + * configure.ac: + * gst/Makefile.am: + * gst/audio.defs: + * gst/base.defs: + * gst/gst-0.10.31.ignore: + * gst/gst-pb-0.10.31.ignore: + * gst/gst.defs: + * gst/gstversion.override.in: + * gst/pbutils.defs: + * gst/video.defs: + gst: Update to latest 0.10.31 core/base API + +2010-10-14 12:32:36 -0700 David Schleef + + * common: + Automatic update of common submodule + From 5a668bf to 7bbd708 + +2010-10-08 12:45:07 -0700 David Schleef + + * common: + Automatic update of common submodule + From c4a8adc to 5a668bf + +2010-10-08 12:56:45 +0200 Sebastian Dröge + + * common: + Automatic update of common submodule + From 5e3c9bf to c4a8adc + +2010-09-21 18:34:55 +0200 Edward Hervey + + * common: + Automatic update of common submodule + From aa0d1d0 to 5e3c9bf + +2010-09-07 14:28:14 +0300 Артём Попов + + * examples/segments.py: + examples: add an example to show looping using segments + Fixes #339772. + +2010-09-07 11:43:30 +0100 Tim-Philipp Müller + + * common: + Automatic update of common submodule + From c2e10bf to aa0d1d0 + +2010-09-05 18:59:06 -0700 David Schleef + + * common: + Automatic update of common submodule + From d3d9acf to c2e10bf + +2010-09-05 12:21:07 +0200 Sebastian Dröge + + * common: + Automatic update of common submodule + From ec60217 to d3d9acf + +2010-08-30 17:12:12 +0200 Alessandro Decina + + * acinclude.m4: + acinclude.m4: also look in ${py_prefix}/lib for libpythonX.Y.so. + Fixes loading the python plugin loader in gentoo. + +2010-08-30 11:57:07 +0200 Leo Singer + + * plugin/gstpythonplugin.c: + plugin: fix spurious exceptions in pygst_require. Fixes #624592. + +2010-08-30 11:52:58 +0200 Leo Singer + + * plugin/gstpythonplugin.c: + plugin: refresh the plugin registry when plugins change. + +2010-08-27 13:20:24 +0200 Alessandro Decina + + * plugin/gstpythonplugin.c: + plugin: call pygtk.require("2.0") before importing pygobject. Fixes #623105. + Based on a patch from Leo Singer. + +2010-08-27 12:43:09 +0200 Leo Singer + + * gst/gst.defs: + gst: add bindings for more gst.util_uint64_scale_* + +2010-08-27 01:16:43 +0200 Alessandro Decina + + * plugin/gstpythonplugin.c: + plugin: remove an unneeded PyType_Check call. Makes it work on centos for real. + +2010-08-26 23:34:04 +0200 Alessandro Decina + + * plugin/gstpythonplugin.c: + plugin: declare _PyGstElement_Type as void*. + Declaring _PyGstElement_Type as PyTypeObject makes the loader on centos fail + because of a missing symbol. + +2010-08-26 17:14:32 +0200 Alessandro Decina + + * acinclude.m4: + * plugin/Makefile.am: + * plugin/gstpythonplugin.c: + Make the plugin loader work on OSX with the standard python install. + +2010-08-26 14:45:06 +0200 Alessandro Decina + + Merge branch 'master' of ssh://git.freedesktop.org/git/gstreamer/gst-python + +2010-08-26 12:14:33 +0200 Alessandro Decina + + * plugin/Makefile.am: + plugin: don't link to libpython + +2010-08-26 12:13:34 +0200 Alessandro Decina + + * acinclude.m4: + acinclude.m4: use a better way to find the correct PYTHON_LIB_LOC. + +2010-08-26 12:09:31 +0200 Alessandro Decina + + * plugin/gstpythonplugin.c: + plugin: refactor the initialization code. + Remove references to global python objects from the initialization code. This + makes it possible to avoid linking to libpython. + +2010-08-25 12:36:14 +0200 Alessandro Decina + + * acinclude.m4: + * plugin/Makefile.am: + plugin: fix the manual loading of libpythonX.Y.so. + +2010-08-25 11:08:15 +0200 Alessandro Decina + + * plugin/gstpythonplugin.c: + plugin: check for _Py_NoneStruct instead of Py_None. + When checking if CPython is already loaded, don't check for Py_None which is a + macro but use _Py_NoneStruct which is a real symbol. + +2010-08-13 17:25:05 +0300 Stefan Kost + + * common: + Automatic update of common submodule + From 3e8db1d to ec60217 + +2010-08-10 10:59:39 +0100 Tim-Philipp Müller + + * common: + Automatic update of common submodule + From bd2054b to 3e8db1d + +2010-08-06 23:18:02 +0200 Alessandro Decina + + * gst/gststructure.override: + * gst/pygstvalue.c: + * testsuite/test_caps.py: + gst.Structure: raise TypeError when assigning None to a key + +2010-08-05 13:57:53 +0300 Stefan Kost + + * common: + Automatic update of common submodule + From a519571 to bd2054b + +2010-08-04 19:31:40 +0200 Sebastian Dröge + + * configure.ac: + configure: Check if the compiler supports ISO C89 or C99 and which parameters are required + This first checks what is required for ISO C99 support and sets the relevant + compiler parameters and if no C99 compiler is found, it checks for a + C89 compiler. This enables us to check for and use C89/C99 functions + that gcc hides from us without the correct compiler parameters. + +2010-07-26 19:41:43 +0200 Alessandro Decina + + * testsuite/test_fraction.py: + test_fraction: add a test for gobject property marshalling. + +2010-07-26 19:29:53 +0200 Alessandro Decina + + * gst/gstmodule.c: + gst: implement getters and setters for GST_TYPE_FRACTION properties. Fixes #624882. + +2010-07-16 12:44:46 +0200 Edward Hervey + + * configure.ac: + Back to development. + +=== release 0.10.19 === + +2010-07-15 21:01:35 +0200 Edward Hervey + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + * gst-python.doap: + Release 0.10.19 "Insert Casablanca quote here" + +2010-07-14 12:33:58 +0200 Alessandro Decina + + * gst/gst.defs: + * testsuite/test_ghostpad.py: + gst.GhostPad: allow set_target(None) to unset the target. Fixes #590735. + +2010-07-07 12:08:29 +0200 Edward Hervey + + * configure.ac: + configure.ac: 0.10.18.4 pre-release + +2010-07-07 12:11:46 +0200 Edward Hervey + + * gst/gstmodule.c: + gst: Add GST_TAG_IMAGE_ORIENTATION + +2010-07-07 12:07:55 +0200 Edward Hervey + + * gst/base.defs: + * gst/gst-0.10.30.ignore: + base: Add new GstBaseSink methods + +2010-06-30 10:26:25 +0200 Edward Hervey + + * configure.ac: + configure.ac: 0.10.18.3 pre-release + +2010-06-30 10:25:50 +0200 Edward Hervey + + * autogen.sh: + * configure.ac: + Bump automake requirements to 1.10 and autoconf to 2.60 + +2010-06-27 10:46:14 +0200 Edward Hervey + + * configure.ac: + 0.10.18.2 pre-release + +2010-06-27 10:35:55 +0200 Edward Hervey + + * configure.ac: + * gst/Makefile.am: + * gst/gst-pb-0.10.29.ignore: + * gst/gst-pb-0.10.30.ignore: + * gst/gstversion.override.in: + * gst/tag.defs: + * gst/video.defs: + * gst/xoverlay.defs: + Add gst-plugins-base 0.10.29/0.10.30 API additions + +2010-06-27 10:14:58 +0200 Edward Hervey + + * gst/base.defs: + * gst/gst-0.10.30.ignore: + Add new core library API from 0.10.30 + +2010-06-27 10:07:28 +0200 Edward Hervey + + * configure.ac: + * gst/Makefile.am: + * gst/gst-0.10.29.ignore: + * gst/gst-0.10.30.ignore: + * gst/gst-types.defs: + * gst/gst.defs: + * gst/gstversion.override.in: + Add new core 0.10.29 and 0.10.30 API definitions + +2010-06-24 15:10:08 +0300 Stefan Kost + + * common: + Automatic update of common submodule + From 35617c2 to a519571 + +2010-06-15 16:50:48 +0200 Edward Hervey + + * common: + Automatic update of common submodule + From 9339ccc to 35617c2 + +2010-06-15 16:55:09 +0300 Stefan Kost + + * common: + Automatic update of common submodule + From 5adb1ca to 9339ccc + +2010-06-15 16:36:19 +0300 Stefan Kost + + * common: + Automatic update of common submodule + From 57c89b7 to 5adb1ca + +2010-06-15 15:50:39 +0300 Stefan Kost + + * common: + Automatic update of common submodule + From c804988 to 57c89b7 + +2010-06-14 13:28:28 +0200 Sebastian Dröge + + * configure.ac: + configure: Use GLIB_EXTRA_CFLAGS + +2010-06-14 13:05:52 +0200 Sebastian Dröge + + * common: + Automatic update of common submodule + From 7a0fdf5 to c804988 + +2010-06-14 11:35:37 +0200 Sebastian Dröge + + * common: + Automatic update of common submodule + From 6da3bab to 7a0fdf5 + +2010-06-12 08:29:58 +0200 Sebastian Dröge + + * common: + Automatic update of common submodule + From 733fca9 to 6da3bab + +2010-06-09 12:40:32 -0700 David Schleef + + * common: + Automatic update of common submodule + From fad145b to 733fca9 + +2010-06-09 12:34:26 -0700 David Schleef + + * common: + Automatic update of common submodule + From 47683c1 to fad145b + +2010-06-09 17:07:40 +0200 Edward Hervey + + * pkgconfig/gst-python-uninstalled.pc.in: + * pkgconfig/gst-python.pc.in: + pkgconfig: Remove the includedir variables + First of all because we don't install anything (doh!), and secondly + because it confuses the hell out of 3rd party python modules + using the values from those .pc files. + +2010-06-03 13:09:28 +0100 Tim-Philipp Müller + + * autogen.sh: + autogen.sh: remove undefined configure options + +2010-06-01 23:49:45 -0700 David Schleef + + * common: + Automatic update of common submodule + From 17f89e5 to 47683c1 + +2010-06-01 22:55:32 -0700 David Schleef + + * common: + Automatic update of common submodule + From fd7ca04 to 17f89e5 + +2010-05-28 10:32:28 +0100 Tim-Philipp Müller + + * .gitignore: + * Makefile.am: + * autogen.sh: + * configure.ac: + build: put build files into m4/ instead of common/m4/ + We don't want the common submodule directory contaminated with + random build cruft. + +2010-04-26 00:33:04 +0100 Tim-Philipp Müller + + * gst-python.doap: + doap: update repository info from cvs->git and maintainers + +2010-05-26 11:56:24 +0100 Tim-Philipp Müller + + * common: + Automatic update of common submodule + From 357b0db to fd7ca04 + +2010-05-14 18:26:13 +0100 Tim-Philipp Müller + + * common: + Automatic update of common submodule + From 4d67bd6 to 357b0db + +2010-04-28 01:12:25 -0300 Thiago Santos + + * gst/gstmodule.c: + gstmodule: Add missing tags + Map GST_TAG_* that were missing in gst-python bindings + +2009-07-24 17:36:18 +0200 Olivier Aubert + + * gst/gstbuffer.override: + Implement setter for gst.Buffer.size + https://bugzilla.gnome.org/show_bug.cgi?id=589582 + +2010-04-28 00:27:43 -0300 Thiago Santos + + * gst/tag.defs: + * testsuite/test_libtag.py: + tag: Adds xmp functions mappings + Maps gst_tag_list_from_xmp_buffer and + gst_tag_list_to_xmp_buffer + https://bugzilla.gnome.org/show_bug.cgi?id=617068 + +2010-04-28 00:26:50 -0300 Thiago Santos + + * gst/arg-types.py: + arg-types: Map const GstMiniObject + Adds GstMiniObjectArg to be able to use GstMiniObject objects + and its const versions in functions + https://bugzilla.gnome.org/show_bug.cgi?id=617068 + +2010-04-29 16:02:20 +0200 Edward Hervey + + * testsuite/test_interface.py: + test_interface: Don't assert the missing mixer, gracefully ignore it + Fixes make check on systems that don't have a GstMixer element available + +2010-04-23 14:42:16 +0100 Tim-Philipp Müller + + * common: + Automatic update of common submodule + From fc85867 to 4d67bd6 + +2010-04-09 11:23:51 +0200 Sebastian Dröge + + * common: + Automatic update of common submodule + From c1d07dd to fc85867 + +2010-03-24 18:56:05 +0100 Edward Hervey + + * common: + Automatic update of common submodule + From 55cd514 to c1d07dd + +2010-03-15 10:26:25 +0100 Emilio Pozuelo Monfort + + * gst/__init__.py: + Fix import on GNU/Hurd + +2010-03-12 14:00:28 +0100 Edward Hervey + + * common: + Automatic update of common submodule + From e272f71 to 55cd514 + +2010-03-11 11:21:39 +0100 Benjamin Otte + + * common: + Automatic update of common submodule + From df8a7c8 to e272f71 + +2010-03-10 21:52:56 +0100 Benjamin Otte + + * common: + Automatic update of common submodule + From 9720a7d to df8a7c8 + +2010-03-10 20:44:42 +0100 Benjamin Otte + + * common: + Automatic update of common submodule + From 0b6e072 to 9720a7d + +2010-03-10 16:10:41 +0100 Benjamin Otte + + * common: + Automatic update of common submodule + From 7cc5eb4 to 0b6e072 + +2010-03-10 01:11:23 +0000 Tim-Philipp Müller + + * common: + Automatic update of common submodule + From 7aa65b5 to 7cc5eb4 + +2010-03-09 21:41:38 +0000 Sebastian Dröge + + * common: + Automatic update of common submodule + From 44ecce7 to 7aa65b5 + +2010-02-26 16:37:50 +0100 Sebastian Dröge + + * gst/Makefile.am: + * pkgconfig/Makefile.am: + * testsuite/Makefile.am: + build: Make some more rules silent if requested + +2010-02-26 15:46:58 +0100 Sebastian Dröge + + * configure.ac: + configure: Use automake 1.11 silent rules instead of shave if available + This makes sure that we use something that is still maintained and + also brings back libtool 1.5 support. + +2010-02-14 23:19:13 +0100 Sebastian Dröge + + * common: + Automatic update of common submodule + From 96dc793 to 44ecce7 + +2010-02-12 11:38:54 +0100 Edward Hervey + + * configure.ac: + configure.ac: And back to development we go + +=== release 0.10.18 === + +2010-02-11 16:33:04 +0100 Edward Hervey + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + Release 0.10.18 "A pigeon carrying a 500ton block" + +2010-01-30 15:20:24 +0000 Tim-Philipp Müller + + * common: + Automatic update of common submodule + From 15d47a6 to 96dc793 + +2010-01-25 20:27:39 +0100 Edward Hervey + + * configure.ac: + configure.ac: 0.10.17.2 pre-release + +2010-01-23 12:39:46 +0100 Luca Bruno + + * gst/__init__.py: + Fix importing of gst module on GNU/kFreeBSD + +2010-01-20 00:55:39 +0000 Tim-Philipp Müller + + * common: + Automatic update of common submodule + From 14cec89 to 15d47a6 + +2010-01-15 17:49:03 +0100 Edward Hervey + + * configure.ac: + * gst/Makefile.am: + * gst/gst-0.10.13.ignore: + * gst/gst-0.10.14.ignore: + * gst/gst-0.10.15.ignore: + * gst/gst-0.10.16.ignore: + * gst/gst-0.10.18.ignore: + * gst/gst-pb-0.10.14.ignore: + * gst/gst-pb-0.10.16.ignore: + * gst/gst-pb-0.10.18.ignore: + * gst/gstversion.override.in: + * gst/interfaces.override: + * gst/pbutils.override: + bump minimum requirement to 0.10.18 and remove cruft + +2010-01-15 17:44:41 +0100 Edward Hervey + + * configure.ac: + * gst/Makefile.am: + * gst/gst-0.10.26.ignore: + * gst/gst-pb-0.10.26.ignore: + * gst/gstversion.override.in: + ignore new API additions for 0.10.26 core/base releases + +2010-01-15 17:26:20 +0100 Edward Hervey + + * gst/base.defs: + * gst/gst-types.defs: + * gst/gst.defs: + * gst/tag.defs: + * gst/video.defs: + gst: Update .defs to new API + +2010-01-18 09:06:28 -0300 Thiago Santos + + * gst/extend/discoverer.py: + python: Do not pop tags in discoverer.py + Do not use pop on dicts because it destroys the tags info. + Fixes #592459 + +2009-12-21 19:13:28 +0100 Mark Nauwelaerts + + * common: + Automatic update of common submodule + From 47cb23a to 14cec89 + +2009-12-01 15:08:40 +0000 Tim-Philipp Müller + + * common: + Automatic update of common submodule + From 87bf428 to 47cb23a + +2009-12-01 14:18:28 +0100 Sebastian Dröge + + * common: + Automatic update of common submodule + From da4c75c to 87bf428 + +2009-11-27 18:56:43 +0100 Edward Hervey + + * common: + Automatic update of common submodule + From 53a2485 to da4c75c + +2009-11-19 10:31:56 +0000 Tim-Philipp Müller + + * common: + Automatic update of common submodule + From 0702fe1 to 53a2485 + +2009-10-16 10:17:39 +0300 Stefan Kost + + * common: + Automatic update of common submodule + From 85d1530 to 0702fe1 + +2009-10-15 14:15:37 +0100 Zaheer Abbas Merali + + * examples/Makefile.am: + * examples/maemogst.py: + examples: add a simple Maemo 5 example + +2009-10-14 10:42:11 +0200 Edward Hervey + + * common: + Automatic update of common submodule + From a3e3ce4 to 85d1530 + +2009-10-08 11:01:32 +0100 Jan Schmidt + + * common: + Automatic update of common submodule + From 19fa4f3 to a3e3ce4 + +2009-10-06 19:48:48 +0100 Jan Schmidt + + * configure.ac: + back to development -> 0.10.17.1 + +2009-10-05 14:29:41 +0100 Jan Schmidt + + * gst-python.doap: + Add 0.10.17 release to the doap file + +=== release 0.10.17 === + +2009-10-05 14:06:11 +0100 Jan Schmidt + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + Release 0.10.17 + +2009-09-17 01:21:47 +0100 Jan Schmidt + + * configure.ac: + 0.10.16.3 pre-release + +2009-09-16 16:23:27 +0200 Edward Hervey + + * configure.ac: + * gst/Makefile.am: + * gst/gst-0.10.25.ignore: + * gst/gst-pb-0.10.25.ignore: + * gst/gst.defs: + * gst/gstversion.override.in: + * gst/interfaces.defs: + * gst/interfaces.override: + Update definitions and ignores for core/base 0.10.25. Fixes #587432 + +2009-09-12 00:26:57 +0100 Jan Schmidt + + * ChangeLog: + * configure.ac: + 0.10.16.2 pre-release + +2009-09-11 22:41:28 +0100 Jan Schmidt + + * testsuite/test_message.py: + test: Fix the structure_changed message test + The core changed to use sink pads for the structure changed + message instead of source pads. Might as well fix the test too. + +2009-09-05 10:25:19 +0200 Sebastian Dröge + + * common: + Automatic update of common submodule + From 94f95e3 to 19fa4f3 + +2009-08-21 16:41:29 +0200 Edward Hervey + + * testsuite/Makefile.am: + * testsuite/test_audio.py: + Add test_audio.py. + +2009-08-21 16:22:38 +0200 Johannes Berg + + * gst/Makefile.am: + Use only one copy of pygstminiobject. Fixes #590348. + Instead of linking pygstminiobject.c into all the modules, + we can link it only into _gst and export the symbols for + the other modules. This fixes bug #590348 because now the + class key/id is common for all modules as a side-effect. + Also makes the modules smaller. + +2009-08-20 15:46:53 +0200 Alessandro Decina + + * gst/base.defs: + Fix leak in gst_base_sink_get_lasy_buffer. Fixes #592447. + +2009-08-18 14:45:41 +0100 Christian Schaller + + * gst-python.spec.in: + Update spec file + +2009-08-13 11:45:51 +0200 Alessandro Decina + + * gst/gstpad.override: + Release the GIL around gst_pad_link. + +2009-08-13 11:00:49 +0200 Edward Hervey + + * gst/gstpad.override: + gstpad: Don't forget to acquire/release the GIL in pac_block_destroy_data + +2009-08-08 22:49:16 +0200 Sebastian Dröge + + * testsuite/Makefile.am: + Use LC_ALL=C for the tests as some are comparing localized strings + Fixes bug #590803. + +2009-05-10 11:17:26 +0200 Marc-Andre Lureau + + * autogen.sh: + Run libtoolize before aclocal + This unbreaks the build in some cases. Fixes bug #582021 + +2009-08-06 01:45:07 +0100 Jan Schmidt + + * configure.ac: + back to development -> 0.10.16.1 + +2009-08-05 02:04:12 +0100 Jan Schmidt + + * gst-python.doap: + Add 0.10.16 release to the doap file + +=== release 0.10.16 === + +2009-08-05 01:34:03 +0100 Jan Schmidt + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + Release 0.10.16 + +2009-07-24 00:43:35 +0300 Stefan Kost + + * common: + Automatic update of common submodule + From fedaaee to 94f95e3 + +2009-07-20 17:52:10 +0100 Jan Schmidt + + * configure.ac: + 0.10.15.3 pre-release + +2009-07-17 11:34:50 +0200 Edward Hervey + + * gst/base.defs: + * gst/gst-0.10.24.ignore: + gst: More API additions to gstreamer core. Fixes #587432 + +2009-07-14 19:00:28 +0100 Jan Schmidt + + * ChangeLog: + * configure.ac: + 0.10.15.2 pre-release + +2009-07-13 12:24:35 -0400 Olivier Crête + + * common: + Automatic update of common submodule + From 5845b63 to fedaaee + +2009-07-01 16:01:53 +0200 Edward Hervey + + * gst/gstquery.override: + gstquery.override: Wrap remainig gst_query_parse*() methods. + +2009-07-01 16:01:41 +0200 Edward Hervey + + * gst/gstevent.override: + gstevent.override: Fix typos. + +2009-07-01 13:54:57 +0200 Edward Hervey + + * gst/gstmessage.override: + * testsuite/test_message.py: + gst.Message: Wrap remaining parse_*() methods. + +2009-07-01 13:54:40 +0200 Edward Hervey + + * gst/gstevent.override: + gst.Event: wrap parse_new_segment_full() + +2009-07-01 13:53:54 +0200 Edward Hervey + + * gst/gst.defs: + gst.defs: Properly mark functions returning new objects + +2009-07-01 12:29:22 +0200 Edward Hervey + + * gst/gstmessage.override: + * testsuite/test_message.py: + gst.Message: Add overrides for new 0.10.24 messages + +2009-07-01 12:28:52 +0200 Edward Hervey + + * gst/gstevent.override: + * testsuite/test_event.py: + gst.Event: Add override for step event + +2009-07-01 10:58:42 +0200 Edward Hervey + + * configure.ac: + * gst/Makefile.am: + * gst/gst-0.10.24.ignore: + * gst/gst-types.defs: + * gst/gst.defs: + * gst/gstversion.override.in: + Update .defs for core API additions + +2009-07-01 10:57:29 +0200 Edward Hervey + + * codegen/argtypes.py: + codegen: Fix const GBoxed return wrapping. + +2009-06-26 13:43:51 +0100 Jan Schmidt + + * common: + Automatic update of common submodule + From f810030 to 5845b63 + +2009-06-24 15:16:20 +0100 Jan Schmidt + + * common: + Automatic update of common submodule + From c572721 to f810030 + +2009-06-05 23:26:11 +0100 Jan Schmidt + + * gst/pygstvalue.c: + values: Fix segfault in the testsuite + It seems pygst_value_from_pyobject should not unref the passed + in object. Wrap the original pygst_value_from_pyobject in a function + that converts unicode python objects and then unrefs the temporary + object after extraction into a GValue. + +2009-06-01 22:02:47 +0200 Thomas Vander Stichele + + * gst/gsttaglist.override: + * gst/tag.override: + * testsuite/common.py: + * testsuite/test_pipeline.py: + * testsuite/test_taglist.py: + wrap gst_tag_to_vorbis_comment; fix uint tag setting + Setting gst.TAG_TRACK_NUMBER was failing because GStreamer + expects a uint while Python object -> GValue conversion was + giving an int. gst_tag_to_vorbis_comment was wrapped so + this conversion could be tested and failed on properly. + +2009-06-01 19:08:47 +0200 Thomas Vander Stichele + + * gst/pygstvalue.c: + * testsuite/test_struct.py: + * testsuite/test_taglist.py: + Convert unicode objects to utf-8 encoded G_STRINGs + +2009-06-01 12:46:03 +0200 Thomas Vander Stichele + + * gst/gst.override: + fix some grammar, add some debug + +2009-05-26 21:01:35 +0200 Edward Hervey + + * gst/gst.defs: + gst.defs: Replace gchar** by GStrv to wrap more methods. Fixes #580992 + +2009-05-26 17:20:32 +0100 Jan Schmidt + + * common: + Automatic update of common submodule + From 888e0a2 to c572721 + +2009-05-22 12:05:28 +0200 Edward Hervey + + * plugin/gstpythonplugin.c: + gstpythonplugin: Don't use pyg_gil_* in pure python. Fixes #583378 + At this point, pygobject wasn't loaded yet ... cause pyg_gil_state_ensured + to not be initialized to the proper method. + +2009-05-22 10:21:17 +0100 Jan Schmidt + + * common: + Automatic update of common submodule + From 6ab11d1 to 888e0a2 + +2009-05-12 11:52:11 +0200 Edward Hervey + + * gst/gst-pb-0.10.23.ignore: + gst-pb-0.10.23.ignore: Remove stray empty line. + This caused some issues on some systems. + +2009-05-11 21:22:35 +0100 Jan Schmidt + + * configure.ac: + Back to development -> 0.10.15.1 + +=== release 0.10.15 === + +2009-05-11 00:11:58 +0100 Jan Schmidt + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + * gst-python.doap: + Release 0.10.15 + +2009-05-07 14:57:57 +0200 Edward Hervey + + * configure.ac: + 0.10.14.5 pre-release + +2009-05-07 13:49:18 +0200 Edward Hervey + + * gst/gst-pb-0.10.23.ignore: + gst-pb-0.10.23: Fix the ignores, globs need to go in a special section. + Finishes fixing #581729 + +2009-05-07 13:48:54 +0200 Edward Hervey + + * gst/gst-0.10.23.ignore: + gst-0.10.23.ignore: Add newly added enum values. Partially fixes #581729 + +2009-05-07 13:48:01 +0200 Edward Hervey + + * codegen/codegen.py: + codegen: Allow ignoring enum values. Partially fixes #581729 + This is needed to ignore new enum values that are added in new gstreamer + core/base versions. + +2009-05-06 23:38:54 +0100 Jan Schmidt + + * examples/switch.py: + examples: Port switch.py to input-selector + The switch element hasn't existed for a while now - use the + replacement element input-selector instead. + Partially (and finally) fixes #581737 + +2009-05-06 23:38:08 +0100 Jan Schmidt + + * examples/play.py: + * examples/remuxer.py: + * examples/switch.py: + * examples/synchronizer.py: + examples: Make xoverlay installation thread safe using the GDK lock. + We can't call into the GDK functions in our sync-message handler + without taking the GDK lock, so do so. + Partially fixes #581737 + +2009-05-06 16:48:40 +0100 Jan Schmidt + + * configure.ac: + 0.10.14.4 pre-release + +2009-04-23 17:14:20 +0200 Edward Hervey + + * testsuite/Makefile.am: + testsuite: Dist new test file. + +2009-04-18 23:52:08 +0200 Thomas Vander Stichele + + * gst/gst.override: + * testsuite/test_gst.py: + TIME_ARGS: Catch bad input. Fixes #579455 + +2009-04-21 21:14:21 +0100 Jan Schmidt + + * configure.ac: + 0.10.14.3 pre-release + +2009-04-21 22:14:07 +0100 Jan Schmidt + + * common: + Automatic update of common submodule + From b3941ea to 6ab11d1 + +2009-04-18 17:13:12 +0100 Jan Schmidt + + Merge branch 'master' of ssh://git.freedesktop.org/git/gstreamer/gst-python + +2009-04-18 16:39:42 +0100 Jan Schmidt + + * gst/gstelement.override: + * gst/gstmessage.override: + * gst/gstpad.override: + python: Fix some locking problems + Add some python pyg_begin_allow_threads/end_allow_threads when calling into some gstreamer functions that might + call into python. + +2009-04-18 09:05:09 +0200 Edward Hervey + + * plugin/gstpythonplugin.c: + gstpythonplugin: Use strcmp for old glib. Fixes #579383 + +2009-04-17 19:34:23 +0200 Edward Hervey + + * Makefile.am: + Don't forget to dist gstlibtoolimporter.py. Fixes #579325 + +2009-04-17 19:28:08 +0200 Edward Hervey + + * configure.ac: + * gst/Makefile.am: + * gst/audio.defs: + * gst/audio.override: + * gst/gst-pb-0.10.23.ignore: + * gst/gstversion.override.in: + * gst/interfaces.defs: + * gst/interfaces.override: + * gst/video.defs: + Wrap gst-plugins-base-0.10.23 API additions. Partially fixes #578848 + +2009-04-17 18:51:40 +0200 Edward Hervey + + * configure.ac: + * gst/Makefile.am: + * gst/base.defs: + * gst/gst-0.10.23.ignore: + * gst/gst-extrafuncs.defs: + * gst/gst-types.defs: + * gst/gst.defs: + * gst/gst.override: + * gst/gstmodule.c: + * gst/gstversion.override.in: + * gst/libs.defs: + Wrap new API added in gstreamer-0.10.23. Partially fixes #578848 + +2009-04-17 11:33:18 +0200 Mark Nauwelaerts + + * gst/gst.defs: + query_new_seeking wrapper must return query with refcount 1. Fixes #579183. + +2009-04-15 22:58:56 +0100 Jan Schmidt + + * configure.ac: + 0.10.14.2 pre-release + +2009-04-15 22:57:36 +0100 Jan Schmidt + + * ChangeLog: + ChangeLog: regenerate changelog with the gen-changelog script + +2009-04-15 22:38:28 +0200 Thomas Vander Stichele + + Merge branch 'bz-577735' + +2009-04-12 21:27:33 +0200 Edward Hervey + + * gst/__init__.py: + * plugin/gstpythonplugin.c: + registry: fix deadlock with recursive registry scanning. + The way to properly fix this issue was in fact to disable the registry + scanning when we import gst from the python plugin loader since... + we are 100% guaranteed this is being called from a registry scan :) + +2009-04-11 16:58:25 +0200 Laszlo Pandy + + * gst/gst.override: + debug: Implement gst.debug_log. Fixes #571380 + +2009-04-11 16:54:00 +0200 Olivier Crete + + * pkgconfig/gst-python-uninstalled.pc.in: + * pkgconfig/gst-python.pc.in: + pkgconfig: We require pygobject and not pygtk. Fixes #578435 + +2009-04-11 16:37:16 +0200 Edward Hervey + + * gst/gstbase.override: + adapter: overrides for _take/_peek. Fixes #576505. + This creates strings of the proper size, unlike the previous patch. + +2009-04-11 16:48:31 +0200 Edward Hervey + + * testsuite/test_adapter.py: + test_adapter: No longer use slices (which was wrong to start with). + +2009-04-11 16:47:07 +0200 Edward Hervey + + * gst/arg-types.py: + arg-types: Remove guint8* argtype. + Partially reverts 7aef2834cff525906db15b4af0ee54b723bdd083 + +2009-04-11 16:08:51 +0200 Edward Hervey + + * gst/__init__.py: + __init__: Postpone registry update during initialization. Fixes #576145 + +2009-04-11 16:20:11 +0200 Alessandro Decina + + * gst/__init__.py: + * gstlibtoolimporter.py: + * gstltihooks.py: + * testsuite/common.py: + Fix uninstalled usage with python 2.6. Fixes #576546 + Also imports submodules as mentionned by Philippe Normand. + +2009-04-10 15:43:35 +0200 Thomas Vander Stichele + + Merge branch 'master' of ssh://thomasvs@git.freedesktop.org/git/gstreamer/gst-python into bz-577735 + +2009-04-04 21:19:46 +0300 Felipe Contreras + + * common: + Automatic update of common submodule + From d0ea89e to b3941ea + +2009-04-04 14:55:08 +0200 Edward Hervey + + * common: + Automatic update of common submodule + From f8b3d91 to d0ea89e + +2009-04-04 12:55:47 +0200 Thomas Vander Stichele + + * gst/gstobject.override: + handle actual GObject having been set to NULL in repr + (For example, when doing weak ref tracking) + +2009-04-04 10:05:50 +0200 Edward Hervey + + * pygst.py.in: + pygst.py.in: Fix license (LGPL). + +2009-02-10 12:07:52 +0100 Mark Nauwelaerts + + * gst/gst.defs: + * gst/gst.override: + Provide wrapper for gst_tag_get_type. Fixes #571156. + +2009-04-02 18:06:12 +0200 Thomas Vander Stichele + + * testsuite/test_pipeline.py: + make sure that we actually get the clock-provide message + +2009-04-02 17:21:58 +0200 Thomas Vander Stichele + + * gst/gstbin.override: + * testsuite/test_pipeline.py: + Fix for #577735: do_handle_message leaks messages + +2009-03-26 16:18:04 +0100 Edward Hervey + + * gst/base.defs: + Fix some leaks. + +2009-03-26 16:13:48 +0100 Edward Hervey + + * gst/arg-types.py: + * testsuite/Makefile.am: + * testsuite/test_adapter.py: + New guint8* ArgType. Wraps the various GstAdapter methods. Fixes #576505 + +2009-03-17 15:03:09 +0100 Alessandro Decina + + * gst/gstbus.override: + * testsuite/test_bus.py: + gstbus: fix refcounting in gst.Bus.set_sync_handler. + +2009-03-10 19:29:51 +0100 Edward Hervey + + * gst/base.defs: + base.defs: Allow passing NULL/None to gst.BaseTransform.suggest() + +2009-03-09 23:14:12 +0000 Jan Schmidt + + * common: + Automatic update of common submodule + From 7032163 to f8b3d91 + +2009-03-08 12:06:40 +0100 Sebastian Dröge + + * common: + Automatic update of common submodule + From ffa738d to 7032163 + +2009-03-08 11:22:17 +0100 Sebastian Dröge + + * common: + Automatic update of common submodule + From 3f13e4e to ffa738d + +2009-03-07 11:47:49 +0100 Sebastian Dröge + + * common: + Automatic update of common submodule + From 3c7456b to 3f13e4e + +2009-03-07 10:47:56 +0100 Sebastian Dröge + + * common: + Automatic update of common submodule + From 57c83f2 to 3c7456b + +2009-03-05 13:59:30 +0100 Edward Hervey + + * gst/gstcaps.override: + gstcaps: Remove dead code. + Those two lines will never be called, because caps2 will always be NULL + if we go to error (either we haven't used it yet (first goto and in this + case it's NULL), or.. it's NULL (second goto)). + +2009-03-05 13:45:07 +0100 Edward Hervey + + * gst/pbutils.override: + pbutils: Fix leaked GStrv. Fixes #574258 + +2009-03-05 13:21:19 +0100 Edward Hervey + + * gst/gst.override: + Fix leak in gst_flow_get_name() wrapper function. Fixes #574251 + PyString_FromString will make a copy of the provided string. + +2009-03-02 15:22:33 +0100 Edward Hervey + + * .gitignore: + .gitignore: Reorder ignores and add *~ + +2009-02-27 12:29:04 +0100 Edward Hervey + + * plugin/gstpythonplugin.c: + plugin: Don't import modules that were already imported. + This avoids warnings for the cases where pygst.require() was already + called. + +2009-02-25 15:14:42 +0000 Jan Schmidt + + * common: + * configure.ac: + build: Update shave init statement for changes in common. Bump common. + +2009-02-25 11:33:13 +0000 Jan Schmidt + + * common: + Automatic update of common submodule + From 9cf8c9b to a6ce5c6 + +2009-02-24 11:43:41 +0100 Alessandro Decina + + * gst/gstbase.override: + Don't steal a ref to event in gst.BaseTransform.do_src_event. + +2009-02-22 20:39:39 +0000 Jan Schmidt + + * configure.ac: + Use shave for the build output + +2009-02-22 20:08:54 +0100 Edward Hervey + + * gst/gstbus.override: + gstbus.override: Allow using set_sync_handler with None as a parameter + +2009-02-22 20:12:23 +0100 Edward Hervey + + * gst/gstpad.override: + * testsuite/test_pad.py: + GstPad: Use gst_pad_set_blocked_async_full() if available. + Avoids leaking arguments. + Fixes #514717 + +2009-02-22 16:01:49 +0000 Jan Schmidt + + * common: + Automatic update of common submodule + From 5d7c9cc to 9cf8c9b + +2009-02-21 11:14:13 -0800 David Schleef + + * common: + Automatic update of common submodule + From 80c627d to 5d7c9cc + +2009-02-20 18:29:20 +0100 Edward Hervey + + * gst/gstpad.override: + gstpad.override: Take a copy of gst_static_pad_template_get_caps() + This means that we take a completely new caps for the sole usage of + gst-python. The GstCaps return by gst_static_pad_template_get_caps() are + (surprise) static and therefore will always exist... as long as the + GstStaticPadTemplate (and the factory providing it) still exist. + This solves the case of getting the caps of a static pad template *before* + any element was created using the GstElementFactory. When the factory is + used to create an element, a new factory is created, replacing the old one, + and plainly discarding any static values (including those caps). + +2009-02-17 10:48:25 +0100 Edward Hervey + + * plugin/gstpythonplugin.c: + Plugin Loader: Don't register non-gstElement subclasses + +2009-02-20 08:34:38 +0100 Edward Hervey + + * gstltihooks.py: + gstltihooks: Sync with upstream pygobject/ltihooks.py commit. + Apply commit from James Henstridge 2009-02-20 : "I've updated the + license block in pygtk/ltihooks.py to LGPL (not sure why I + didn't just use LGPL like the rest of pygtk)." + Partially fixes #572487 + +2009-02-09 14:02:41 +0100 Edward Hervey + + * plugin/Makefile.am: + plugin/Makefile.am : Remove commented lines + +2009-01-19 08:38:10 +0100 Edward Hervey + + * Makefile.am: + * acinclude.m4: + * configure.ac: + * plugin/Makefile.am: + * plugin/gstpythonplugin.c: + Python plugin loader implementation. + Fixes #304361. + +2009-02-09 13:23:45 +0100 Edward Hervey + + * testsuite/Makefile.am: + Add a rule to generate valgrind suppressions for a single test. + +2009-02-09 13:25:11 +0100 Edward Hervey + + * gst/arg-types.py: + GstMiniObject: Re-increment the C refcount after using a miniobject. + This behaviour is symmetrical to what we do at the very beginning (incrementing + the Python refcount of the wrapper object and decrementing the C refcount of the + actual object). + +2009-02-09 12:04:04 +0100 Edward Hervey + + * common: + Bump revision to use for common submodule. + +2009-01-30 17:41:18 +0000 Jan Schmidt + + * common: + Bump common + +2009-01-30 09:06:31 +0100 Edward Hervey + + * autogen.sh: + Fix previous commit, wasn't actually setting up a symbolic link + +2009-01-30 08:59:21 +0100 Edward Hervey + + * autogen.sh: + * common: + Use a symbolic link for the pre-commit client-side hook + +2009-01-30 08:59:07 +0100 Edward Hervey + + * gst/.gitignore: + Ignore new auto-generated .c files + +2009-01-26 11:11:18 +0200 Stefan Kost + + * examples/cp.py: + Add progress report element to cp example. + +2009-01-23 22:17:21 +0200 Stefan Kost + + * examples/tagsetter.py: + Add an example for using the tagsetter iface. + +2009-01-22 13:50:33 +0100 Sebastian Dröge + + * common: + Fix pre-commit hook + +2009-01-22 12:00:08 +0000 Jan Schmidt + + * configure.ac: + Back to devel -> 0.10.14.1 + +2009-01-22 06:10:50 +0100 Edward Hervey + + * autogen.sh: + * common: + Install and use pre-commit indentation hook from common + +2009-01-21 04:36:02 +0100 Edward Hervey + + * autogen.sh: + autogen.sh : Use git submodule + +=== release 0.10.14 === + +2009-01-19 23:18:26 +0000 Jan Schmidt + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + * gst-python.doap: + Release 0.10.14 + Original commit message from CVS: + Release 0.10.14 + +2009-01-09 23:45:36 +0000 Jan Schmidt + + configure.ac: 0.10.13.3 pre-release + Original commit message from CVS: + * configure.ac: + 0.10.13.3 pre-release + +2009-01-08 12:25:26 +0000 Edward Hervey + + Raise an Exception when wrapping a NULL GstIterator. + Original commit message from CVS: + * gst/pygstiterator.c: (pygst_iterator_new): + * testsuite/test_iterator.py: + Raise an Exception when wrapping a NULL GstIterator. + Fixes #566903 + +2009-01-05 11:05:32 +0000 Vincent GENIEUX + + gst/gststructure.override: Don't leak key names in _wrap_gst_structure_keys. + Original commit message from CVS: + patch by: Vincent GENIEUX + * gst/gststructure.override: + Don't leak key names in _wrap_gst_structure_keys. + +2009-01-02 21:46:30 +0000 Edward Hervey + + gst/: Wrap more GstIndexEntry methods and properties. + Original commit message from CVS: + * gst/gst-types.defs: + * gst/gst.defs: + * gst/gst.override: + Wrap more GstIndexEntry methods and properties. + +2008-12-31 13:32:58 +0000 Edward Hervey + + Wrap gst-plugins-base's tag helper library. + Original commit message from CVS: + * configure.ac: + * gst/Makefile.am: + * gst/tag.defs: + * gst/tag.override: + * gst/tagmodule.c: (inittag): + Wrap gst-plugins-base's tag helper library. + Partially fixes #565762 + +2008-12-31 13:06:58 +0000 Edward Hervey + + Wrap gst-plugins-base's video helper library. + Original commit message from CVS: + * configure.ac: + * gst/Makefile.am: + * gst/video.defs: + * gst/video.override: + * gst/videomodule.c: (initvideo): + Wrap gst-plugins-base's video helper library. + Partially fixes #565762 + +2008-12-31 12:01:02 +0000 Edward Hervey + + Wrap gst-plugins-base's audio helper library. + Original commit message from CVS: + * configure.ac: + * gst/Makefile.am: + * gst/audio.defs: + * gst/audio.override: + * gst/audiomodule.c: (initaudio): + Wrap gst-plugins-base's audio helper library. + Partially fixes #565762 + +2008-12-30 19:20:31 +0000 Edward Hervey + + Updated core API additions + Original commit message from CVS: + * configure.ac: + * gst/Makefile.am: + * gst/gst-0.10.20.ignore: + * gst/gst-0.10.22.ignore: + * gst/gst-types.defs: + * gst/gst.defs: + * gst/gstversion.override.in: + Updated core API additions + +2008-12-09 14:30:43 +0000 Alessandro Decina + + gst/__init__.py: Add gst.Fourcc.__eq__ and gst.Fourcc.__ne__. + Original commit message from CVS: + * gst/__init__.py: + Add gst.Fourcc.__eq__ and gst.Fourcc.__ne__. + +2008-12-09 11:48:15 +0000 Edward Hervey + + gst/Makefile.am: Don't forget to dist/install gst-0.10.21.ignore + Original commit message from CVS: + * gst/Makefile.am: + Don't forget to dist/install gst-0.10.21.ignore + +2008-12-09 10:16:08 +0000 Vincent Genieux + + gst/arg-types.py: Fix memory leak for GstMiniObjects used as parameters in class method overrides. + Original commit message from CVS: + Patch by : Vincent Genieux + * gst/arg-types.py: + Fix memory leak for GstMiniObjects used as parameters in class method + overrides. + Fixes #543961 + +2008-12-06 15:52:31 +0000 Edward Hervey + + gst/gstpad.override: Fix memory leak for functions that return a newly created buffer as a function argument. + Original commit message from CVS: + * gst/gstpad.override: + Fix memory leak for functions that return a newly created buffer as + a function argument. + Fixes #554545 + +2008-12-06 15:41:41 +0000 Edward Hervey + + codegen/argtypes.py: Add handling of 'keep-refcount' for GBoxed arguments. + Original commit message from CVS: + * codegen/argtypes.py: + Add handling of 'keep-refcount' for GBoxed arguments. + * gst/gst.defs: + Mark the appropriate 'gst_message_new_*' arguments when the method + takes the ownership of the passed gst.Structure/gst.TagList + * testsuite/test_message.py: + Test for creating messages that take a gst.Structure/gst.TagList as + argument and make sure they're properly created. + Fixes #556054 + +2008-12-06 15:39:01 +0000 Edward Hervey + + testsuite/Makefile.am: Add a way to run individual tests. 'make test_bin.py.check' for example. + Original commit message from CVS: + * testsuite/Makefile.am: + Add a way to run individual tests. + 'make test_bin.py.check' for example. + +2008-12-06 14:13:55 +0000 Edward Hervey + + examples/gst-discover: Beautify output of discoverer's duration. + Original commit message from CVS: + * examples/gst-discover: + Beautify output of discoverer's duration. + +2008-12-06 14:10:51 +0000 Edward Hervey + + testsuite/test_event.py: Sinks now send GST_EVENT_LATENCY events upstream. Adapt test for that new behaviour. + Original commit message from CVS: + * testsuite/test_event.py: + Sinks now send GST_EVENT_LATENCY events upstream. Adapt test for that + new behaviour. + +2008-12-05 08:49:05 +0000 Sebastian Dröge + + Add common to SUBDIRS and generate common/Makefile and common/m4/Makefile. + Original commit message from CVS: + * Makefile.am: + * configure.ac: + Add common to SUBDIRS and generate common/Makefile and + common/m4/Makefile. + +2008-12-04 20:11:53 +0000 Sebastian Dröge + + configure.ac: Apparently AC_CONFIG_MACRO_DIR breaks when using more than one macro directory, reverting last change. + Original commit message from CVS: + * configure.ac: + Apparently AC_CONFIG_MACRO_DIR breaks when using more + than one macro directory, reverting last change. + +2008-12-04 19:50:23 +0000 Sebastian Dröge + + configure.ac: Set AC_CONFIG_MACRO_DIR to common/m4 to point autoconf to our M4 macros. + Original commit message from CVS: + * configure.ac: + Set AC_CONFIG_MACRO_DIR to common/m4 to point autoconf to + our M4 macros. + +2008-11-23 12:31:42 +0000 Thomas Vander Stichele + + * common: + * gst/extend/utils.py: + pep-8 cleanups + Original commit message from CVS: + pep-8 cleanups + +2008-11-19 16:54:58 +0000 Alessandro Decina + + Wrap gst_type_find_peek. + Original commit message from CVS: + * gst/gst.override: + * testsuite/test_typefind.py: + Wrap gst_type_find_peek. + +2008-11-08 12:16:31 +0000 Alessandro Decina + + gst/: Add GstBaseTransform::transform_size virtual. + Original commit message from CVS: + * gst/base.defs: + * gst/gstbase.override: + Add GstBaseTransform::transform_size virtual. + +2008-11-08 11:49:30 +0000 Alessandro Decina + + gst/__init__.py: Fix on systems that don't have dlopen or don't support RTLD_GLOBAL and + Original commit message from CVS: + reviewed by: Edward Hervey + * gst/__init__.py: + Fix on systems that don't have dlopen or don't support RTLD_GLOBAL and + RTLD_LAZY. + +2008-11-07 22:29:06 +0000 Jan Schmidt + + gst/gst.override: Fix compiler warning about missing format string. + Original commit message from CVS: + * gst/gst.override: + Fix compiler warning about missing format string. + +2008-10-05 11:36:16 +0000 Jan Schmidt + + configure.ac: Back to development -> 0.10.13.1 + Original commit message from CVS: + * configure.ac: + Back to development -> 0.10.13.1 + +2008-10-05 08:16:38 +0000 Thiemo Seufer + + gst/__init__.py: Use correct values for RTLD_GLOBAL and RTLD_LAZY on Linux/MIPS as the values are different there fro... + Original commit message from CVS: + Patch by: Thiemo Seufer + * gst/__init__.py: + Use correct values for RTLD_GLOBAL and RTLD_LAZY on Linux/MIPS + as the values are different there from all other Linux platforms. + Fixes bug #553134. + +2008-10-05 08:14:42 +0000 Alexander Wirt + + gst/__init__.py: Import modules in the correct order, i.e. libxml2 before + Original commit message from CVS: + Patch by: Alexander Wirt + * gst/__init__.py: + Import modules in the correct order, i.e. libxml2 before + GStreamer stuff, to prevent unresolved symbols. Fixes bug #553131. + +=== release 0.10.13 === + +2008-10-03 00:08:42 +0000 Jan Schmidt + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + * gst-python.doap: + Release 0.10.13 + Original commit message from CVS: + Release 0.10.13 + +2008-09-17 13:37:30 +0000 Jan Schmidt + + configure.ac: 0.10.20.2 pre-release + Original commit message from CVS: + * configure.ac: + 0.10.20.2 pre-release + +2008-09-09 10:41:27 +0000 Edward Hervey + + Add API additions for upcoming 0.10.21 core release + Original commit message from CVS: + * configure.ac: + * gst/base.defs: + * gst/gst-0.10.21.ignore: + * gst/gst.defs: + * gst/gstversion.override.in: + Add API additions for upcoming 0.10.21 core release + +2008-09-04 17:57:50 +0000 Brian Cameron + + examples/pipeline-tester: Don't hardcode audio/video source and sinks, and instead use more generic sources. + Original commit message from CVS: + * examples/pipeline-tester: + Don't hardcode audio/video source and sinks, and instead use more + generic sources. + Based on a patch by Brian Cameron + Fixes #517993 + +2008-08-26 15:58:15 +0000 Edward Hervey + + gst/gstcaps.override: Override gst_caps_append_structure() and make a copy of the structure given as argument. + Original commit message from CVS: + * gst/gstcaps.override: + Override gst_caps_append_structure() and make a copy of the structure + given as argument. + Fixes #549450 + +2008-08-11 16:40:45 +0000 Edward Hervey + + gst/: Add gstdebugutils.[ch] methods that weren't wrapped previously. + Original commit message from CVS: + * gst/gst-0.10.15.ignore: + * gst/gst-types.defs: + * gst/gst.defs: + Add gstdebugutils.[ch] methods that weren't wrapped previously. + We can now dump pipeline graphviz files from python ! :) + +2008-07-02 11:23:39 +0000 Edward Hervey + + update upstream API changes + Original commit message from CVS: + * configure.ac: + * gst/Makefile.am: + * gst/base.defs: + * gst/gst-0.10.18.ignore: + * gst/gst-0.10.20.ignore: + * gst/gst-pb-0.10.18.ignore: + * gst/gst-types.defs: + * gst/gst.defs: + * gst/gstversion.override.in: + * gst/interfaces.defs: + update upstream API changes + +2008-06-27 10:42:38 +0000 Edward Hervey + + testsuite/test_interface.py: Don't hardcode 'alsasrc' for testing GstMixer and GstPropertyProbe interfaces, but inste... + Original commit message from CVS: + * testsuite/test_interface.py: + Don't hardcode 'alsasrc' for testing GstMixer and GstPropertyProbe + interfaces, but instead search one through the registry. + If none are available, return gracefully. + +2008-06-27 10:29:58 +0000 Edward Hervey + + testsuite/test_xml.py: Don't attempt to test gst.XML if there's no available libxml2 module. + Original commit message from CVS: + * testsuite/test_xml.py: + Don't attempt to test gst.XML if there's no available libxml2 module. + +2008-06-27 08:39:37 +0000 Jan Schmidt + + gst/gstbuffer.override: the GstBuffer overrides seem to be confused about whether they're mini-objects or a GBoxed, a... + Original commit message from CVS: + * gst/gstbuffer.override: + the GstBuffer overrides seem to be confused about whether they're + mini-objects or a GBoxed, and it makes copy_on_write no actually + return a usable gst.Buffer. Fix up places where GstBuffers are + treated as GBoxed to use pygstminiobject functions. + Makes gst.Buffer('blah').copy_on_write() work. + * testsuite/test_buffer.py: + Add test for copy-on-write writability + * examples/buffer-draw.py: + Add an example of drawing on a GStreamer buffer with cairo + * gst/gstpad.override: + Make function static + +2008-06-26 14:57:29 +0000 Edward Hervey + + gst/: Fix double-import issues on macosx. + Original commit message from CVS: + * gst/common.h: + * gst/gstmodule.c: + * gst/interfaces.override: + * gst/pbutils.override: + * gst/pygstiterator.c: + * gst/pygstminiobject.c: + * gst/pygstminiobject.h: + Fix double-import issues on macosx. + Fixes #461838 + +2008-06-26 09:14:51 +0000 Edward Hervey + + gst/gstmodule.c: Return None if GstMiniObject GValue doesn't contain anything (NULL). + Original commit message from CVS: + * gst/gstmodule.c: (pygstminiobject_from_gvalue): + Return None if GstMiniObject GValue doesn't contain anything (NULL). + Fixes #540221 + +2008-06-20 08:55:48 +0000 Jan Schmidt + + configure.ac: Bump version back to dev -> 0.10.12.1 + Original commit message from CVS: + * configure.ac: + Bump version back to dev -> 0.10.12.1 + +=== release 0.10.12 === + +2008-06-18 14:50:35 +0000 Jan Schmidt + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + * gst-python.doap: + Release 0.10.12 + Original commit message from CVS: + Release 0.10.12 + +2008-06-13 11:21:27 +0000 Edward Hervey + + configure.ac: 0.10.11.3 pre-release + Original commit message from CVS: + * configure.ac: + 0.10.11.3 pre-release + +2008-06-13 11:11:38 +0000 Edward Hervey + + Re-opens #530417 + Original commit message from CVS: + * gst/__init__.py: + * gst/gstelement.override: + * testsuite/test_element.py: + Revert 2008-05-08 Edward Hervey + Re-opens #530417 + +2008-06-12 11:11:49 +0000 Edward Hervey + + Re-opens #514717 + Original commit message from CVS: + * gst/gstpad.override: + * testsuite/test_pad.py: + Revert 2008-02-10 Alessandro Decina + Re-opens #514717 + +2008-06-05 09:51:17 +0000 Jan Schmidt + + configure.ac: 0.10.11.2 pre-release + Original commit message from CVS: + * configure.ac: + 0.10.11.2 pre-release + +2008-05-26 10:20:06 +0000 Edward Hervey + + gst/gstevent.override: gst_event_new_tag takes ownership of the GstTagList given as argument, therefore make a copy b... + Original commit message from CVS: + * gst/gstevent.override: + gst_event_new_tag takes ownership of the GstTagList given + as argument, therefore make a copy before calling the + C function. + Fixes #534888 + +2008-05-17 13:13:05 +0000 Edward Hervey + + gst/extend/discoverer.py: Add timeout property. + Original commit message from CVS: + * gst/extend/discoverer.py: + Add timeout property. + Fix typos. + Beautify debugging. + Fix email. + +2008-05-14 16:00:39 +0000 Jan Schmidt + + gst/__init__.py: Make gst.Fraction simplify like the C counterpart + Original commit message from CVS: + Patch by: Jan Schmidt + * gst/__init__.py: + Make gst.Fraction simplify like the C counterpart + Fixes #532809 + +2008-05-14 15:48:18 +0000 Edward Hervey + + gst/gstcaps.override: Fix typo + Original commit message from CVS: + * gst/gstcaps.override: + Fix typo + +2008-05-08 14:06:45 +0000 Johan Dahlin + + New 'fancy' constructor for gst.Element, allows creating elements in a more pythonic way (i.e. myelement = gst.Elemen... + Original commit message from CVS: + Patch by: Johan Dahlin + * gst/__init__.py: + * gst/gstelement.override: + * testsuite/test_element.py: + New 'fancy' constructor for gst.Element, allows creating elements in a + more pythonic way (i.e. myelement = gst.Element("oggmux")). + Fixes #530417 + +2008-05-08 14:03:17 +0000 Edward Hervey + + gst/: Fix broken indentation + Original commit message from CVS: + * gst/__init__.py: + * gst/arg-types.py: + Fix broken indentation + Fixes #531697 + +2008-05-08 10:59:48 +0000 Edward Hervey + + gst/: Use G_GSSIZE_FORMAT for ssize_t types. + Original commit message from CVS: + * gst/gst.override: + * gst/gstbuffer.override: + Use G_GSSIZE_FORMAT for ssize_t types. + Fixes build on macosx. + +2008-05-07 16:05:19 +0000 Christian Schaller + + * common: + * gst-python.spec.in: + update spec file with latest changes + Original commit message from CVS: + update spec file with latest changes + +2008-04-28 10:49:03 +0000 Alessandro Decina + + gst/gst.override: Add wrapping of gst_type_find_register. + Original commit message from CVS: + Patch by: Alessandro Decina + * gst/gst.override: + Add wrapping of gst_type_find_register. + Fixes #529728 + +2008-04-28 10:36:10 +0000 Alessandro Decina + + gst/gstelementfactory.override: Release GIL in gst_element_factory_overrides. + Original commit message from CVS: + Patch by: Alessandro Decina + * gst/gstelementfactory.override: + Release GIL in gst_element_factory_overrides. + Fixes #529731 + +2008-04-24 11:35:38 +0000 Jan Schmidt + + examples/: Sync with the X server before giving an XID to our sink with a different display connection. This avoids s... + Original commit message from CVS: + * examples/play.py: + * examples/remuxer.py: + * examples/switch.py: + * examples/synchronizer.py: + Sync with the X server before giving an XID to our sink with a different + display connection. This avoids spurious X servers where the sink's + display connection doesn't know the XID that the GDK thread's does. + +2008-04-06 08:58:39 +0000 Damien Lespiau + + configure.ac: Actually build dlls when cross-compiling with mingw32. + Original commit message from CVS: + Patch by: Damien Lespiau + * configure.ac: + Actually build dlls when cross-compiling with mingw32. + Fixes bug #526247. + +2008-03-21 00:37:01 +0000 Jan Schmidt + + configure.ac: Back to development - 0.10.11.1 + Original commit message from CVS: + * configure.ac: + Back to development - 0.10.11.1 + +=== release 0.10.11 === + +2008-03-21 00:31:44 +0000 Jan Schmidt + + * ChangeLog: + * NEWS: + * RELEASE: + * common: + * configure.ac: + * gst-python.doap: + Release 0.10.11 + Original commit message from CVS: + Release 0.10.11 + +2008-03-04 00:31:22 +0000 Jan Schmidt + + configure.ac: 0.10.10.2 pre-release + Original commit message from CVS: + * configure.ac: + 0.10.10.2 pre-release + +2008-02-29 12:37:43 +0000 Rene Stadler + + gst/gst.override: Don't crash by unreffing NULL when calling the do_get_protocols_full method raises an exception. + Original commit message from CVS: + * gst/gst.override: + (_wrap_GstURIHandler__proxy_do_get_protocols_full): + Don't crash by unreffing NULL when calling the + do_get_protocols_full method raises an exception. + +2008-02-10 13:33:26 +0000 Edward Hervey + + Fix memleak in gst.Pad.set_blocked_async() + Original commit message from CVS: + reviewed by: Edward Hervey + * gst/gstpad.override: + * testsuite/test_pad.py: + Fix memleak in gst.Pad.set_blocked_async() + Fixes #514717 + +2008-02-10 13:30:11 +0000 Edward Hervey + + gst/gstpad.override: Wrap gst.Pad.start_task(). + Original commit message from CVS: + * gst/gstpad.override: + Wrap gst.Pad.start_task(). + +2008-02-08 08:37:36 +0000 Edward Hervey + + gst/base.defs: gst_adapter_push steals the refcount. + Original commit message from CVS: + * gst/base.defs: + gst_adapter_push steals the refcount. + +2008-01-31 19:57:26 +0000 Stefan Kost + + examples/video-controller.py: Demo how to use the controller on videomixer. + Original commit message from CVS: + * examples/video-controller.py: + Demo how to use the controller on videomixer. + +2008-01-31 14:14:50 +0000 Jan Schmidt + + gst/.cvsignore: Ignore generated pbutils.c + Original commit message from CVS: + * gst/.cvsignore: + Ignore generated pbutils.c + * gst/gst.override: + Fix compiler warning about the return type. + +2008-01-30 12:36:06 +0000 Edward Hervey + + gst/gstmodule.c: Remove do_pending_calls timeout which has been handled more gracefully in pygobject MainLoop for the... + Original commit message from CVS: + * gst/gstmodule.c: (init_gst): + Remove do_pending_calls timeout which has been handled more gracefully + in pygobject MainLoop for the past 3 years. + Fixes #512916 + +2008-01-28 23:37:31 +0000 Jan Schmidt + + configure.ac: Back to CVS + Original commit message from CVS: + * configure.ac: + Back to CVS + +=== release 0.10.10 === + +2008-01-28 23:36:10 +0000 Jan Schmidt + + * ChangeLog: + * NEWS: + * RELEASE: + * common: + * configure.ac: + * gst-python.doap: + Release 0.10.10 + Original commit message from CVS: + Release 0.10.10 + +2008-01-21 21:34:12 +0000 Jan Schmidt + + configure.ac: 0.10.9.4 pre-release + Original commit message from CVS: + * configure.ac: + 0.10.9.4 pre-release + +2008-01-21 21:21:00 +0000 Luca Ferretti + + Makefile.am: Include PYTHON_INCLUDES in the common CFLAGS in the top-level. + Original commit message from CVS: + * Makefile.am: + Include PYTHON_INCLUDES in the common CFLAGS in the top-level. + Fixes: #510437 + Patch By: Luca Ferretti + +2008-01-17 16:35:28 +0000 Edward Hervey + + configure.ac: 0.10.9.3 pre-release + Original commit message from CVS: + * configure.ac: + 0.10.9.3 pre-release + +2008-01-16 16:09:39 +0000 Edward Hervey + + Fix symbol generation for win32. + Original commit message from CVS: + Reviewed by : Edward Hervey + * configure.ac: + * win32/common/config.h.in: + Fix symbol generation for win32. + Fixes #509766 + +2008-01-15 11:41:51 +0000 Jan Schmidt + + gst/pbutils.override: Fix compilation against Python 2.4. + Original commit message from CVS: + * gst/pbutils.override: + Fix compilation against Python 2.4. + Fixes: #509522 + +2008-01-14 18:42:39 +0000 Edward Hervey + + configure.ac: 0.10.9.2 pre-release + Original commit message from CVS: + * configure.ac: + 0.10.9.2 pre-release + +2008-01-14 12:44:06 +0000 Edward Hervey + + Series of update for new API added to 0.10.16. + Original commit message from CVS: + * configure.ac: + * gst/Makefile.am: + * gst/base.defs: + * gst/gst-0.10.15.ignore: + * gst/gst-0.10.16.ignore: + * gst/gst-pb-0.10.15.ignore: + * gst/gst-pb-0.10.16.ignore: + * gst/gst.defs: + * gst/gstversion.override.in: + * gst/pbutils.override: + * testsuite/test_pbutils.py: + Series of update for new API added to 0.10.16. + Remove wrong ignore file for 0.10.15 -base. + +2008-01-13 21:51:31 +0000 Edward Hervey + + configure.ac: Bump requirement to core and -base >= 0.10.12 . + Original commit message from CVS: + * configure.ac: + Bump requirement to core and -base >= 0.10.12 . + * gst/Makefile.am: + * gst/gstversion.override.in: + * gst/gst-0.10.10.ignore: + * gst/gst-0.10.11.ignore: + * gst/gst-0.10.12.ignore: + * gst/gst-0.10.3.ignore: + * gst/gst-0.10.4.ignore: + * gst/gst-0.10.5.ignore: + * gst/gst-0.10.6.ignore: + * gst/gst-0.10.7.ignore: + * gst/gst-pb-0.10.11.ignore: + Remove no-longer needed files. + +2008-01-13 21:46:22 +0000 Sébastien Moutte + + win32/vs6/libgstpython.dsp: Setup two different builds, one for Python24 and one for Python25. + Original commit message from CVS: + * win32/vs6/libgstpython.dsp: + Setup two different builds, one for Python24 and one for Python25. + +2008-01-13 17:57:48 +0000 Edward Hervey + + Re-implement wrapping of gst_pad_add_*probe in order to avoid leaks of user-data associated with the probes. + Original commit message from CVS: + reviewed by: Edward Hervey + * gst/gstpad.override: + * testsuite/test_pad.py: + Re-implement wrapping of gst_pad_add_*probe in order to avoid leaks of + user-data associated with the probes. + Fixes #504786 + +2008-01-13 17:24:42 +0000 Edward Hervey + + gst/pbutils.override: Finish wrapping gst.pbutils by adding install_plugins_async() + Original commit message from CVS: + * gst/pbutils.override: + Finish wrapping gst.pbutils by adding install_plugins_async() + +2008-01-11 16:30:45 +0000 Edward Hervey + + gst/Makefile.am: gst.pbutils also needs to handle miniobjects + Original commit message from CVS: + * gst/Makefile.am: + gst.pbutils also needs to handle miniobjects + * gst/pbutils.defs: + Add new InstallPluginsContext boxed definition. + All the *_new() functions should be accessible (and not act as + constructors). + * gst/pbutils.override: + Add override for install_plugins_sync(). + * gst/pbutilsmodule.c: + Add pygst_debug debug category in this module too. + * testsuite/test_pbutils.py: + Test existence of new API. Needs more tests. + +2008-01-10 12:51:21 +0000 Sebastian Dröge + + autogen.sh: Add -Wno-portability to the automake parameters to stop warnings about GNU make extensions being used. We... + Original commit message from CVS: + * autogen.sh: + Add -Wno-portability to the automake parameters to stop warnings + about GNU make extensions being used. We require GNU make in almost + every Makefile anyway. + * configure.ac: + Check for a working C compiler with AC_PROG_CC. + Use AM_PROG_CC_C_O as a compiler that accepts both -c and -o + at the same time is required for per target flags. + +2008-01-01 13:22:21 +0000 Edward Hervey + + gst/: new gst.pbutils module that wraps the gst-plugins-base pbutils helper library. + Original commit message from CVS: + * gst/Makefile.am: + * gst/common.h: + * gst/pbutils.defs: + * gst/pbutils.override: + * gst/pbutilsmodule.c: (initpbutils): + new gst.pbutils module that wraps the gst-plugins-base pbutils + helper library. + * testsuite/Makefile.am: + * testsuite/common.py: + * testsuite/test_pbutils.py: + Test case for gst.pbutils + Fixes #472822 + +2007-12-18 16:48:32 +0000 Andy Wingo + + examples/switch.py: New file, a basic demo for a single-stream switcher. Could be expanded later -- look at flumotion... + Original commit message from CVS: + 2007-12-18 Andy Wingo + * examples/switch.py: New file, a basic demo for a single-stream + switcher. Could be expanded later -- look at + flumotion.component.combiners.switch.switch for some inspiration. + +2007-12-18 09:42:57 +0000 Tim-Philipp Müller + + Makefile.am: Include common/win32.mak for CRLF check of win32 project files (see #393626). + Original commit message from CVS: + * Makefile.am: + Include common/win32.mak for CRLF check of win32 project + files (see #393626). + * win32/vs6/gst_python.dsw: + * win32/vs6/libgstpython.dsp: + * win32/vs6/pygenfiles.dsp: + Fix line endings and do cvs admin -kb. + +2007-11-29 15:02:03 +0000 Sebastian Dröge + + acinclude.m4: Use pythonX.Y-config to detect the include path for the python version and use the old values as fallba... + Original commit message from CVS: + * acinclude.m4: + Use pythonX.Y-config to detect the include path for the python + version and use the old values as fallback if pythonX.Y-config + doesn't exist. + +2007-11-28 09:48:45 +0000 Edward Hervey + + configure.ac: Back to development cycle + Original commit message from CVS: + * configure.ac: + Back to development cycle + +=== release 0.10.9 === + +2007-11-28 09:46:34 +0000 Edward Hervey + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + * gst-python.doap: + Releasing 0.10.9 + Original commit message from CVS: + Releasing 0.10.9 + +2007-11-24 18:14:25 +0000 Edward Hervey + + configure.ac: 0.10.8.2 pre-releases + Original commit message from CVS: + * configure.ac: + 0.10.8.2 pre-releases + +2007-11-08 19:56:54 +0000 Edward Hervey + + gst/: Update API changes for core+base pre-releases + Original commit message from CVS: + * gst/base.defs: + * gst/gst-0.10.15.ignore: + * gst/gst.defs: + * gst/gst.override: + * gst/gstmodule.c: (init_gst): + Update API changes for core+base pre-releases + +2007-11-08 10:51:07 +0000 Johan Dahlin + + Add a new module, gstoption which allows you to fetch the + Original commit message from CVS: + 2007-11-05 Johan Dahlin + * gstoptionmodule.c: + * Makefile.am: + * configure.ac: + Add a new module, gstoption which allows you to fetch the + GOptionGroup from gstreamer without initializing and parsing + the command line arguments. Requires PyGObject 2.15.0 + Fixes #425847 + * examples/option-parser.py (main): Example + +2007-11-01 16:39:17 +0000 Johan Dahlin + + gst/: Make sure it still builds with GStreamer 0.10.14. + Original commit message from CVS: + 2007-11-01 Johan Dahlin + * gst/gst.override: + * gst/gst-0.10.15.ignore: + Make sure it still builds with GStreamer 0.10.14. + +2007-10-25 16:18:55 +0000 Alessandro Decina + + gst/gst.*: Patch from Alessandro Decina adding get_type_full and get_protocols_full private vfuncs to the URIHandler ... + Original commit message from CVS: + * gst/gst.defs: + * gst/gst.override: + Patch from Alessandro Decina adding get_type_full and + get_protocols_full private vfuncs to the URIHandler interface + to allow bindings to support creating URI handlers. + Partially fixes: #339279 + +2007-10-18 15:10:44 +0000 Jan Schmidt + + examples/play.py: Fix the sample player slightly so that the expose method actually gets called by pyGTK. + Original commit message from CVS: + * examples/play.py: + Fix the sample player slightly so that the expose method + actually gets called by pyGTK. + +2007-10-18 08:44:43 +0000 Edward Hervey + + gst/gst.*: Thanks to Sebastien Merle for resurrecting a patch I'd forgotten about that adds a constructor method for ... + Original commit message from CVS: + * gst/gst.defs: + * gst/gst.override: + Thanks to Sebastien Merle for resurrecting a patch I'd forgotten about + that adds a constructor method for gst.GError, so you can create + error gst.Message. + Added a few GIL releases for overrides. + +2007-10-16 15:01:59 +0000 Christian Schaller + + * gst-python.spec.in: + update spec file with latest changes + Original commit message from CVS: + update spec file with latest changes + +2007-10-13 16:32:52 +0000 Edward Hervey + + gst/gstobject.override: Release the GIL when calling gst_object_get_path_string() since it can cause deadlocks with n... + Original commit message from CVS: + * gst/gstobject.override: + Release the GIL when calling gst_object_get_path_string() since it can + cause deadlocks with new pygobject behaviour. + +2007-10-13 16:31:35 +0000 Edward Hervey + + gst/gstmodule.c: Added new gst.TAG_COMPOSER constant that appeared in core 0.10.15. + Original commit message from CVS: + * gst/gstmodule.c: (init_gst): + Added new gst.TAG_COMPOSER constant that appeared in core 0.10.15. + +2007-10-09 16:17:28 +0000 Edward Hervey + + gst/: Update API definitions for GStreamer core and gst-plugins-base. + Original commit message from CVS: + * gst/base.defs: + * gst/libs.defs: + * gst/gst.defs: + * gst/gst.override: + Update API definitions for GStreamer core and gst-plugins-base. + * configure.ac: + * gst/Makefile.am: + * gst/gst-0.10.15.ignore: + * gst/gst-pb-0.10.15.ignore: + * gst/gstversion.override.in: + New .ignore for 0.10.14.* API + +2007-10-09 14:27:18 +0000 Edward Hervey + + testsuite/: Fix unit tests for pygobject >= 2.13.0 + Original commit message from CVS: + * testsuite/common.py: + * testsuite/test_bin.py: + * testsuite/test_element.py: + * testsuite/test_ghostpad.py: + * testsuite/test_pad.py: + * testsuite/test_pipeline.py: + Fix unit tests for pygobject >= 2.13.0 + See the pygobject bug #320428 for more information about the changes. + +2007-10-08 22:05:29 +0000 Sébastien Moutte + + win32/vs6/: win32/MANIFEST + Original commit message from CVS: + * win32/vs6/gst_python.dsw: + * win32/vs6/libgstpython.dsp: + * win32/vs6/pygenfiles.dsp: + * win32/MANIFEST + Add new project files to build with VS6. + +2007-10-08 22:04:18 +0000 Sébastien Moutte + + gst/pygstminiobject.c: Move up variable declaration to the top of the function. + Original commit message from CVS: + * gst/pygstminiobject.c: (pygstminiobject_dealloc): + Move up variable declaration to the top of the function. + * win32/vs6/gst_python.dsw: + * win32/vs6/libgstpython.dsp: + * win32/vs6/pygenfiles.dsp: + * win32/MANIFEST + Add new project files to build with VS6. + +2007-09-11 11:49:50 +0000 Andy Wingo + + gst/gstmodule.c (DL_EXPORT): Remove the atexit(gst_deinit). + Original commit message from CVS: + 2007-09-11 Andy Wingo + * gst/gstmodule.c (DL_EXPORT): Remove the atexit(gst_deinit). + Atexit handlers are run after python has finalized (see Py_Exit in + pythonrun.c), but gst_deinit can potentially call back into python + e.g. for python-defined plugins. Not sure how other people are + avoiding this segfault, but I see it all the time on Gusty x86-64 + with Flumotion. + +2007-08-16 12:42:13 +0000 Stefan Kost + + gst/: Make ro memory to share. + Original commit message from CVS: + * ChangeLog: + * gst/pygstminiobject.c: + Make ro memory to share. + +2007-08-01 17:18:05 +0000 Edward Hervey + + configure.ac: Back to development cycle. + Original commit message from CVS: + * configure.ac: + Back to development cycle. + +=== release 0.10.8 === + +2007-08-01 17:14:09 +0000 Edward Hervey + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + Releasing 0.10.8 + Original commit message from CVS: + Releasing 0.10.8 + +2007-07-30 16:10:03 +0000 Edward Hervey + + configure.ac: 0.10.7.2 pre-release + Original commit message from CVS: + * configure.ac: + 0.10.7.2 pre-release + +2007-07-30 11:57:26 +0000 Edward Hervey + + gst/gst.override: And the dataqueue header only landed in 0.10.11 too. + Original commit message from CVS: + * gst/gst.override: + And the dataqueue header only landed in 0.10.11 too. + +2007-07-30 11:39:08 +0000 Edward Hervey + + gst/gst-0.10.11.ignore: GstDataQueue was added in gstreamer-0.10.11 + Original commit message from CVS: + * gst/gst-0.10.11.ignore: + GstDataQueue was added in gstreamer-0.10.11 + * gst/gst-0.10.14.ignore: + some GstDataQueue methods were added in 0.10.14 + +2007-07-28 14:26:54 +0000 Edward Hervey + + gst/: Adding new API additions + Original commit message from CVS: + * gst/base.defs: + * gst/gst.defs: + * gst/interfaces.defs: + * gst/libs.defs: + * gst/gst.override: + * gst/gstmodule.c: (init_gst): + Adding new API additions + * gst/gstmessage.override: + wrap GstMessage.parse_buffering. + * gst/interfaces.override: + wrap gst_mixer_message_parse_*() functions. + wrap GstVideoOrientation::get_*() methods. + +2007-07-28 14:22:49 +0000 Edward Hervey + + Adding version overrides for new core/base releases. + Original commit message from CVS: + * configure.ac: + * gst/Makefile.am: + * gst/gst-0.10.14.ignore: + * gst/gst-pb-0.10.14.ignore: + * gst/gstversion.override.in: + Adding version overrides for new core/base releases. + +2007-07-28 13:41:22 +0000 Edward Hervey + + gst/interfaces.override: Add more threadsafety in the overrides. + Original commit message from CVS: + * gst/interfaces.override: + Add more threadsafety in the overrides. + +2007-07-27 11:47:16 +0000 Edward Hervey + + Add win32 requirements. + Original commit message from CVS: + * Makefile.am: + * configure.ac: + * win32/MANIFEST: + * win32/common/.cvsignore: + * win32/common/config.h.in: + Add win32 requirements. + Fixes #433375 + +2007-07-27 11:21:31 +0000 Edward Hervey + + gst/gst.defs: Make .get_uri_type() methods return a GstURIType enum instead of an integer. + Original commit message from CVS: + reviewed by: Edward Hervey + * gst/gst.defs: + Make .get_uri_type() methods return a GstURIType enum instead of an + integer. + Fixes #436620 + +2007-07-27 11:12:33 +0000 Edward Hervey + + gst/extend/discoverer.py: New parameter to the discoverer to change the default maximum frame interleave. + Original commit message from CVS: + reviewed by: Edward Hervey + * gst/extend/discoverer.py: + New parameter to the discoverer to change the default maximum frame + interleave. + Fixes #418222 + +2007-07-27 11:04:55 +0000 Edward Hervey + + examples/gst-discover: Show duration of audio/video streams. + Original commit message from CVS: + reviewed by: Edward Hervey + * examples/gst-discover: + Show duration of audio/video streams. + Specify units for values. + Fixes #432521 + +2007-07-20 08:50:18 +0000 Stefan Kost + + gst/gst-disable-loadsave.ignore: Override more when having now xml. + Original commit message from CVS: + * gst/gst-disable-loadsave.ignore: + Override more when having now xml. + +2007-07-09 19:42:31 +0000 Edward Hervey + + gst/gstelement.override: Override the proxy method for GstElement::request_new_pad virtual methods since it can be ca... + Original commit message from CVS: + * gst/gstelement.override: + Override the proxy method for GstElement::request_new_pad virtual + methods since it can be called with NULL as the name. + Fixes #454259 + +2007-07-09 19:30:26 +0000 Zaheer Abbas Merali + + gst/gstevent.override: Copy the GstStructure given as argument to gst_event_new_custom and gst_event_new_navigation, ... + Original commit message from CVS: + Patch by: Zaheer Abbas Merali + * gst/gstevent.override: + Copy the GstStructure given as argument to gst_event_new_custom + and gst_event_new_navigation, else it would be freed when the python + object wrapping that structure goes out of scope. + Fixes #450117 + +2007-07-05 13:57:41 +0000 Rene Stadler + + gst/: Handle 'gchar**' (GStrv) arguments in a uniform way. + Original commit message from CVS: + Patch by: Rene Stadler + * gst/arg-types.py: + * gst/gst.defs: + * gst/gst.override: + Handle 'gchar**' (GStrv) arguments in a uniform way. + Fixes #385841 + +2007-06-27 15:40:12 +0000 Edward Hervey + + gst/gstbuffer.override: whoapadoooo wabada bada ... + Original commit message from CVS: + * gst/gstbuffer.override: + whoapadoooo wabada bada ... + nothing here... :) + Fixes #451645 + +2007-06-16 12:08:45 +0000 Edward Hervey + + gst/extend/: Fixes for thread-safety, changes in behaviour with gst.Pad and cleanup. Still has some issues. + Original commit message from CVS: + * gst/extend/jukebox.py: + * gst/extend/sources.py: + Fixes for thread-safety, changes in behaviour with gst.Pad and + cleanup. Still has some issues. + +2007-06-14 14:53:28 +0000 Edward Hervey + + gst/__init__.py: Cleaner way of checking for existence of symbols in gst module. + Original commit message from CVS: + * gst/__init__.py: + Cleaner way of checking for existence of symbols in gst module. + +2007-06-14 14:14:12 +0000 Jan Schmidt + + examples/sinkelement-registry.py: A quick modification of the sinkelement.py example that shows how to register a pur... + Original commit message from CVS: + * examples/sinkelement-registry.py: + A quick modification of the sinkelement.py example that + shows how to register a pure-python gst.Element into the + registry for use in autoplugging or parse_launch lines. + +2007-06-12 19:01:25 +0000 Edward Hervey + + gst/__init__.py: Fix API cleanups that cause API breakage. + Original commit message from CVS: + * gst/__init__.py: + Fix API cleanups that cause API breakage. + Fixes #446674 + +2007-06-11 22:00:20 +0000 Jan Schmidt + + gst/gstpad.override: Wrap gst_pad_set_blocked_async in pyg thread unlock/lock. + Original commit message from CVS: + * gst/gstpad.override: + Wrap gst_pad_set_blocked_async in pyg thread unlock/lock. + +2007-06-08 16:16:34 +0000 Michael Smith + + gst/extend/discoverer.py: Better support for demuxers that don't create all pads at startup. + Original commit message from CVS: + Patch by : Michael Smith + * gst/extend/discoverer.py: + Better support for demuxers that don't create all pads at startup. + Fixes #380966 + +2007-06-08 16:06:10 +0000 Edward Hervey + + gst/gst-0.10.12.ignore: Add more API additions that weren't explicit in the release notes. + Original commit message from CVS: + * gst/gst-0.10.12.ignore: + Add more API additions that weren't explicit in the release notes. + * gst/gst-0.10.13.ignore: + Personal note : remember to save file before commiting it. + +2007-06-08 15:16:08 +0000 Edward Hervey + + Updating ignores for API additions + Original commit message from CVS: + * configure.ac: + * gst/Makefile.am: + * gst/gst-0.10.12.ignore: + * gst/gst-0.10.13.ignore: + * gst/gstversion.override.in: + Updating ignores for API additions + * gst/base.defs: + * gst/gst-types.defs: + * gst/gst.defs: + * gst/interfaces.defs: + * gst/libs.defs: + Massive wrapping of new API additions + * gst/gstbase.override: + * gst/gstevent.override: + * gst/gstmessage.override: + * gst/gstquery.override: + Overrides for methods with return values as arguments. + * gst/xwindowlistener.defs: + What the $#@# is this file still doing here ?? Removing it. + +2007-05-23 09:49:07 +0000 Edward Hervey + + Example of how to properly ignore methods that aren't available if some feature is disabled in GStreamer core. + Original commit message from CVS: + * configure.ac: + * gst/Makefile.am: + * gst/gst-disable-loadsave.ignore: + * gst/gstversion.override.in: + Example of how to properly ignore methods that aren't available if + some feature is disabled in GStreamer core. + +2007-04-23 14:42:25 +0000 Stefan Kost + + configure.ac: Add example for the new AG_GST_PARSE_SUBSYSTEM_DISABLE macro. + Original commit message from CVS: + * configure.ac: + Add example for the new AG_GST_PARSE_SUBSYSTEM_DISABLE macro. + +2007-04-19 15:43:16 +0000 Edward Hervey + + gst/gstbin.override: Release the GIL in GstBin overrides. + Original commit message from CVS: + * gst/gstbin.override: + Release the GIL in GstBin overrides. + +2007-04-13 11:26:43 +0000 Jan Schmidt + + gst/gstelement.override: Release the python lock when performing GStreamer calls that might result in callbacks into ... + Original commit message from CVS: + * gst/gstelement.override: + Release the python lock when performing GStreamer calls that might + result in callbacks into python. + +2007-04-11 09:33:37 +0000 Jan Schmidt + + gst/gstbase.override: Unroll the GIL state in an error case where it was missing. + Original commit message from CVS: + * gst/gstbase.override: + Unroll the GIL state in an error case where it was missing. + +2007-04-11 09:22:15 +0000 Jan Schmidt + + gst/gstpad.override: Release the GIL lock while executing queries in GStreamer. + Original commit message from CVS: + * gst/gstpad.override: + Release the GIL lock while executing queries in GStreamer. + +2007-04-10 18:01:25 +0000 Jan Schmidt + + Implement pad query proxying so that python elements can answer pad queries. Fixes: #428299 + Original commit message from CVS: + * examples/pyidentity.py: + * gst/common.h: + * gst/gstpad.override: + Implement pad query proxying so that python elements can + answer pad queries. Fixes: #428299 + +2007-04-10 12:44:44 +0000 Jan Schmidt + + examples/pyidentity.py: Add a simple example that implements an identity-like element in python and passes buffers th... + Original commit message from CVS: + * examples/pyidentity.py: + Add a simple example that implements an identity-like element in + python and passes buffers through. It lacks buffer-alloc & query + handling at the moment, because the required gstreamer funcs aren't + wrapped. + * examples/sinkelement.py: + Make sure to call gobject.threads_init() in the example. + +2007-04-04 12:57:32 +0000 Edward Hervey + + codegen/codegen.py: Also ignore pointers and boxed if they're in ignore-type. + Original commit message from CVS: + * codegen/codegen.py: + Also ignore pointers and boxed if they're in ignore-type. + * gst/gst-0.10.7.ignore: + Add gst_type_find_factory_call_function to functions ignored before + 0.10.7 since it requires GstTypeFind arguments. + +2007-04-04 12:27:03 +0000 Jan Schmidt + + * ChangeLog: + Changelog surgery: Attribute the previous release to Monsieur Hervey + Original commit message from CVS: + Changelog surgery: Attribute the previous release to Monsieur Hervey + +2007-04-04 12:22:03 +0000 Jan Schmidt + + gst/: Fix the build for x86_64 when compiling against Python 2.5. + Original commit message from CVS: + * gst/common.h: + * gst/gst.override: + * gst/gstbuffer.override: + * gst/gstcaps.override: + * gst/gststructure.override: + * gst/gsttaglist.override: + * gst/interfaces.override: + Fix the build for x86_64 when compiling against Python 2.5. + Keeps backwards compatibility with Python 2.4. Tested on Ubuntu + Edgy 32-bit with python 2.4 & Feisty 64-bit with Python 2.4 & 2.5 + Fixes #415003. + +2007-03-25 19:02:23 +0000 Tim-Philipp Müller + + gst/interfaces.defs: GstTunerChannel and GstTunerNorm are not GstObjects, only GObjects. + Original commit message from CVS: + * gst/interfaces.defs: + GstTunerChannel and GstTunerNorm are not GstObjects, only GObjects. + +2007-03-19 01:21:12 +0000 Johan Dahlin + + gst/: Make it compilable on Python 2.4 and Python 2.5 + Original commit message from CVS: + * gst/common.h: + * gst/gsttaglist.override: + Make it compilable on Python 2.4 and Python 2.5 + +2007-03-18 17:45:16 +0000 Johan Dahlin + + gst/__init__.py: Implement multiplication, divison and float coercing for fractions. + Original commit message from CVS: + * gst/__init__.py: Implement multiplication, divison and float + coercing for fractions. + * testsuite/test_fraction.py: + Add fraction tests + +2007-03-17 13:36:48 +0000 Johan Dahlin + + Implement sq_contains and add tests for gst.TagList. + Original commit message from CVS: + * gst/gsttaglist.override (_wrap_gst_tag_list_contains): + * testsuite/test_taglist.py (TestTagList.testKeys): + Implement sq_contains and add tests for gst.TagList. + +2007-03-02 11:03:46 +0000 Edward Hervey + + gst/__init__.py: Import libxml2 (if available) at import time with GLOBAL and LAZY flags. + Original commit message from CVS: + * gst/__init__.py: + Import libxml2 (if available) at import time with GLOBAL and LAZY flags. + Fixes #398567 + +2007-03-01 14:21:52 +0000 Edward Hervey + + gst/__init__.py: Added __eq__ method to fractions so we can check if two fractions are equal. + Original commit message from CVS: + * gst/__init__.py: + Added __eq__ method to fractions so we can check if two fractions are + equal. + * gst/pygstvalue.c: (my_gcd), (pygst_value_from_pyobject): + Attempt to simplify gst.Fraction before filling in a GValue. + Fixes #381243 + * testsuite/test_caps.py: + * testsuite/test_struct.py: + Minor beauty fixes. framerates are fractions, not floats. + +2007-03-01 13:47:12 +0000 Edward Hervey + + gst/interfacesmodule.c: initialize pygobject in the gst.interfaces modules. The absence of it causes segfaults on Sol... + Original commit message from CVS: + reviewed by: Edward Hervey + * gst/interfacesmodule.c: (initinterfaces): + initialize pygobject in the gst.interfaces modules. The absence of it + causes segfaults on Solaris and MIPS machines. + Fixes #343980 + +2007-02-28 22:09:33 +0000 Thomas Vander Stichele + + * common: + * configure.ac: + trigger rebuild + Original commit message from CVS: + trigger rebuild + +2007-02-27 10:44:21 +0000 Michael Smith + + gst/base.defs: Limitations in the code generator mean that we can't handle PushSrc in a way which works, so just comm... + Original commit message from CVS: + * gst/base.defs: + Limitations in the code generator mean that we can't handle PushSrc + in a way which works, so just comment this out until someone wants + to tackle this more completely. + +2007-02-25 12:11:34 +0000 Michael Smith + + gst/pygstvalue.c: Make buffers-in-gvalues more generic: handle all miniobjects + Original commit message from CVS: + * gst/pygstvalue.c: (pygst_value_init_for_pyobject), + (pygst_value_from_pyobject): + Make buffers-in-gvalues more generic: handle all miniobjects + * testsuite/test_caps.py: + Add a bit to one the test for buffers in caps. + +2007-02-24 14:14:14 +0000 Michael Smith + + testsuite/test_caps.py: Add test for gst.Buffer in caps. + Original commit message from CVS: + * testsuite/test_caps.py: + Add test for gst.Buffer in caps. + +2007-02-22 16:13:53 +0000 Michael Smith + + gst/pygstvalue.c: Implement gst.Buffer support in GValues (e.g. for caps containing buffers) + Original commit message from CVS: + * gst/pygstvalue.c: (pygst_value_as_pyobject), + (pygst_value_init_for_pyobject), (pygst_value_from_pyobject): + Implement gst.Buffer support in GValues (e.g. for caps containing + buffers) + +2007-02-16 02:39:56 +0000 David Schleef + + Makefile.am: Add ACLOCAL_AMFLAGS + Original commit message from CVS: + * Makefile.am: Add ACLOCAL_AMFLAGS + +2007-02-04 11:40:09 +0000 Edward Hervey + + testsuite/common.py: A private variable of unittest.TestCase changed name in python 2.5. + Original commit message from CVS: + * testsuite/common.py: + A private variable of unittest.TestCase changed name in python 2.5. + This fixes make check with python2.5 + +2007-02-04 10:54:48 +0000 Edward Hervey + + gst/gstpad.override: Allow removing the negotiated pads of a cap by setting them to None. + Original commit message from CVS: + reviewed by: Edward Hervey + * gst/gstpad.override: + Allow removing the negotiated pads of a cap by setting them to None. + * testsuite/test_pad.py: + Added un-negotian of pads' caps to test above patch. + Fixes #363795 + +2007-02-04 10:44:40 +0000 Edward Hervey + + gst/interfaces.override: Gracefully handle the case where gst_property_probe_get_values_name() returns NULL. + Original commit message from CVS: + * gst/interfaces.override: + Gracefully handle the case where gst_property_probe_get_values_name() + returns NULL. + +2007-02-04 10:23:38 +0000 Edward Hervey + + Fully implement GstPropertyProbe interface, with unit test. + Original commit message from CVS: + reviewed by: Edward Hervey + * gst/interfaces.defs: + * gst/interfaces.override: + * testsuite/test_interface.py: + Fully implement GstPropertyProbe interface, with unit test. + Fixes #376996 + +2007-01-31 16:53:15 +0000 Edward Hervey + + configure.ac: Back to development cycle. + Original commit message from CVS: + * configure.ac: + Back to development cycle. + +=== release 0.10.7 === + +2007-01-31 16:51:37 +0000 Edward Hervey + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + Releasing 0.10.7 + Original commit message from CVS: + Releasing 0.10.7 + +2007-01-29 12:27:46 +0000 Edward Hervey + + codegen/codegen.py: Don't register interface if it is ignored + Original commit message from CVS: + * codegen/codegen.py: + Don't register interface if it is ignored + * configure.ac: + GST_PB_MINOR_VERSION doesn't appear by magic, you actually have to + parse it from pkg-config ! + * gst/gst-pb-0.10.11.ignore: + Ignore GstVideoOrientation type altogether. + * gst/interfaces.override: + Include gstversion.override so that non-existent API is properly ignored. + Should fix #401051 once and for good now. + +2007-01-29 11:17:45 +0000 Edward Hervey + + * ChangeLog: + ChangeLog surgery : Indicate which bug last ocmmit fixed. + Original commit message from CVS: + ChangeLog surgery : Indicate which bug last ocmmit fixed. + ---------------------------------------------------------------------- + +2007-01-29 11:16:35 +0000 Edward Hervey + + configure.ac: Check for availability of video-orientation interface + Original commit message from CVS: + * configure.ac: + Check for availability of video-orientation interface + * gst/gst.override: + don't forget to increment the refcount of Py_None before returning it. + * gst/interfaces.override: + If video-orientation interface isn't available, don't include the + header. + +2007-01-26 11:58:55 +0000 Edward Hervey + + Add ignore file for 0.10.12 API additions + Original commit message from CVS: + * configure.ac: + * gst/Makefile.am: + * gst/gstversion.override.in: + * gst/gst-0.10.12.ignore: + Add ignore file for 0.10.12 API additions + * gst/gst.defs: + * gst/base.defs: + * gst/gst-types.defs: + Add new API definitions + * gst/gst-0.10.10.ignore: + * gst/gst-0.10.11.ignore: + Fixup ignore files. + * testsuite/test_segment.py: + The update return value is uncertain and will soon be deprecated, don't + check against it anymore. + +2007-01-17 11:22:04 +0000 Thomas Vander Stichele + + wrap mixer set_volume, use tuple to match get_volume + Original commit message from CVS: + * examples/mixer.py: + * gst/interfaces.override: + wrap mixer set_volume, use tuple to match get_volume + +2007-01-17 07:30:11 +0000 Thomas Vander Stichele + + gst/pygstexception.*: gst.element_factory_make should raise ElementNotFoundError. + Original commit message from CVS: + * gst/pygstexception.c: (element_not_found_error_init), + (pygst_exceptions_register_classes): + * gst/pygstexception.h: + gst.element_factory_make should raise ElementNotFoundError. + Subclass it from PluginNotFoundError so we can add it compatibly + and remove the wrong one later. + * gst/gstelementfactory.override: + raise ElementNotFoundError + +2007-01-17 06:27:38 +0000 Thomas Vander Stichele + + gst/interfaces.*: wrap mixer get_volume + Original commit message from CVS: + * gst/interfaces.defs: + * gst/interfaces.override: + wrap mixer get_volume + * examples/Makefile.am: + * examples/mixer.py: + add an example using it + +2007-01-17 06:27:12 +0000 Thomas Vander Stichele + + * gst/gst-pb-0.10.11.ignore: + add pb ignore file + Original commit message from CVS: + add pb ignore file + +2007-01-17 06:15:33 +0000 Thomas Vander Stichele + + configure.ac: fix use of PKG_CHECK_MODULES check for a pygobject of at least 2.11 for a value_from_pyobject fix + Original commit message from CVS: + * configure.ac: + fix use of PKG_CHECK_MODULES + check for a pygobject of at least 2.11 for a value_from_pyobject fix + * gst/gstobject.override: + use it + +2007-01-17 05:02:01 +0000 Thomas Vander Stichele + + gst/extend/discoverer.py: this is a module, not a program, so don't require versions + Original commit message from CVS: + * gst/extend/discoverer.py: + this is a module, not a program, so don't require versions + +2007-01-17 04:40:33 +0000 Thomas Vander Stichele + + configure.ac: check for stuff added in gst-pb 0.10.11 + Original commit message from CVS: + * configure.ac: + check for stuff added in gst-pb 0.10.11 + * gst/Makefile.am: + * gst/interfaces.defs: + * gst/interfaces.override: + add video orientation interface + +2007-01-11 17:45:46 +0000 Edward Hervey + + gst/gst.defs: Add declaration of gst_object_set_property so we can use our MT-safe version of set_property(). + Original commit message from CVS: + * gst/gst.defs: + Add declaration of gst_object_set_property so we can use our MT-safe + version of set_property(). + * gst/gstobject.override: + Implement a MT-safe version of g_object_set_property for GstObject. + The problem is that currently g_object_set_property is called in + pygobject with the GIL lock taken. This can cause deadlocks. + Remove this hack once bug #395048 is fixed in pygobject and we depend on + the fixed version. + Thanks to Lord Wingo of the "realm.py haters club" for proposing the + idea. + +2007-01-10 16:13:29 +0000 Edward Hervey + + codegen/codegen.py: When chaining up to the parent class methods from python to C, we need to allow threads (i.e. rel... + Original commit message from CVS: + * codegen/codegen.py: + When chaining up to the parent class methods from python to C, we need + to allow threads (i.e. release the GIL). + * gst/gstbase.override: + * gst/gstbin.override: + Modify __do_*() overrides in the same way as above. + +2007-01-05 10:48:36 +0000 Thomas Vander Stichele + + gst/extend/discoverer.py: No shebang line needed since there is no main code. + Original commit message from CVS: + * gst/extend/discoverer.py: + No shebang line needed since there is no main code. + +2006-12-19 11:38:01 +0000 Edward Hervey + + gst/gst.defs: Update API definitions. + Original commit message from CVS: + * gst/gst.defs: + Update API definitions. + * gst/common.h: + * gst/gstpad.override: + Add wrapper functions for settings activate, activatepull and + activatepush functions on pads. + * gst/gst.override: + Wrapper for gst_segment_set_seek() and gst_segment_clip() + Remove global ignore for *_init(), allows gst_segment_init() to be + properly code-generated. + * testsuite/Makefile.am: + * testsuite/test_segment.py: + Add unit test for gst.Segment object. + +2006-12-16 15:33:02 +0000 Edward Hervey + + testsuite/test_pad.py: Activate pads before using them. + Original commit message from CVS: + * testsuite/test_pad.py: + Activate pads before using them. + +2006-12-16 15:16:33 +0000 Edward Hervey + + RELEASE: Commit 0.10.6 RELEASE file. Better late than never :( + Original commit message from CVS: + * RELEASE: + Commit 0.10.6 RELEASE file. Better late than never :( + +2006-12-16 14:41:21 +0000 Edward Hervey + + Move GstIterator ArgType definition and usage for the codegenerator to gst/arg-types.py. It has nothing to do in the ... + Original commit message from CVS: + * codegen/argtypes.py: + * gst/arg-types.py: + Move GstIterator ArgType definition and usage for the codegenerator + to gst/arg-types.py. It has nothing to do in the codegenerator code. + +2006-12-15 17:02:31 +0000 Thomas Vander Stichele + + add doap file + Original commit message from CVS: + * Makefile.am: + * gst-python.doap: + * gst-python.spec.in: + add doap file + +2006-12-11 09:58:51 +0000 Tim-Philipp Müller + + gst/interfaces.defs: GstColorBalanceChannel is a GObject, not a GstObject. Fixes #383805. + Original commit message from CVS: + * gst/interfaces.defs: + GstColorBalanceChannel is a GObject, not a GstObject. Fixes #383805. + +2006-12-04 19:54:19 +0000 Edward Hervey + + * ChangeLog: + changelog surgery, remove the conflict that has been there for 7 month + Original commit message from CVS: + changelog surgery, remove the conflict that has been there for 7 month + +2006-12-04 17:54:39 +0000 Edward Hervey + + configure.ac: Back to development cycle + Original commit message from CVS: + * configure.ac: + Back to development cycle + +=== release 0.10.6 === + +2006-12-04 17:19:44 +0000 Edward Hervey + + * ChangeLog: + * NEWS: + * configure.ac: + Releasing gst-python 0.10.6 + Original commit message from CVS: + Releasing gst-python 0.10.6 + +2006-12-04 16:41:12 +0000 Edward Hervey + + configure.ac: 0.10.5.4 pre-release + Original commit message from CVS: + * configure.ac: + 0.10.5.4 pre-release + +2006-12-01 17:41:28 +0000 Edward Hervey + + gst/: Add implementation of gst.Pad.set_setcaps_function(). + Original commit message from CVS: + * gst/common.h: + * gst/gstpad.override: + Add implementation of gst.Pad.set_setcaps_function(). + +2006-11-28 15:36:50 +0000 Edward Hervey + + configure.ac: 0.10.5.3 pre-release + Original commit message from CVS: + * configure.ac: + 0.10.5.3 pre-release + +2006-11-22 17:31:02 +0000 Edward Hervey + + examples/audio-controller.py: Fix example, use proper property name. Doesn't change anything to the way it used to wo... + Original commit message from CVS: + * examples/audio-controller.py: + Fix example, use proper property name. Doesn't change anything to the + way it used to work, but since it's an example it should be done + properly. + +2006-11-22 17:20:21 +0000 Edward Hervey + + codegen/override.py: Fix the lookup of override files in the specified search directories. + Original commit message from CVS: + * codegen/override.py: + Fix the lookup of override files in the specified search directories. + * gst/Makefile.am: + Don't distribute gstversion.override + Fixup .defs => .c make instructions + All the above fixes the cases where you're building in a directory + different from the source directory. + +2006-11-20 11:26:46 +0000 Christian Schaller + + * gst-python.spec.in: + Update spec file for latest changes + Original commit message from CVS: + Update spec file for latest changes + +2006-11-15 14:36:39 +0000 Michael Smith + + gst/extend/discoverer.py: Avoid buffering infinite amounts of decoded data if a decoder is feeding us data without a ... + Original commit message from CVS: + * gst/extend/discoverer.py: + Avoid buffering infinite amounts of decoded data if a decoder is + feeding us data without a duration (or with bad duration values). + +2006-11-07 12:24:13 +0000 Edward Hervey + + gst/extend/discoverer.py: Make the queue buffer up 1s of data before outputting to the sinks. This should give time f... + Original commit message from CVS: + * gst/extend/discoverer.py: Make the queue buffer up 1s of data before + outputting to the sinks. This should give time for some demuxers like + mpegdemux or fluasfdemux to discover a bit more about the muxed + stream and add the correct pads. + Fixes #371969 + +2006-11-07 11:47:26 +0000 Andy Wingo + + examples/: New tool, runs the discoverer on a file and prints out what we get. + Original commit message from CVS: + 2006-11-07 Andy Wingo + * examples/Makefile.am (examples_DATA): + * examples/gst-discover: New tool, runs the discoverer on a file + and prints out what we get. + +2006-11-03 15:54:47 +0000 Edward Hervey + + gst/gst.override: Use a copy of the caps. + Original commit message from CVS: + * gst/gst.override: + Use a copy of the caps. + +2006-10-20 11:51:35 +0000 Edward Hervey + + configure.ac: 0.10.5.2 pre-release + Original commit message from CVS: + * configure.ac: + 0.10.5.2 pre-release + +2006-10-20 11:33:01 +0000 Edward Hervey + + gst/gst-0.10.10.ignore: Added symbols added in 0.10.10 + Original commit message from CVS: + * gst/gst-0.10.10.ignore: + Added symbols added in 0.10.10 + * gst/gst-0.10.6.ignore: + gst_dp_packetizer_new() addition + * gst/gst.defs: + Updated API for 0.10.10 symbols + * gst/gstmodule.c: (init_gst): + Added GST_TAG_EXTENDED_COMMENT which appeared in 0.10.10 + * gst/libs.defs: + Added gst_dp_packetizer_new() which was added in 0.10.6. It still won't + work because GstDPPacketizer is a pointer. It needs to have a GBoxed + definition in order to be used properly within gst-python. + Also added controller-related additions + +2006-10-20 10:41:46 +0000 Edward Hervey + + Added ignore files for 0.10.11 gstreamer core + Original commit message from CVS: + * configure.ac: + * gst/Makefile.am: + * gst/gst-0.10.11.ignore: + * gst/gstversion.override.in: + Added ignore files for 0.10.11 gstreamer core + * gst/base.defs: + Updated API for base libs + * gst/gst.defs: + Updated API for core + * gst/gst.override: + remove #ifdef for methods which weren't available in versions of pygtk + we don't support anymore. + * gst/gstbase.override: + Added overrides for GstBaseSink::get_times() virtual method + * gst/gstbin.override: + Added override for GstBin::handle_message() virtual method + +2006-10-20 09:51:25 +0000 Edward Hervey + + examples/Makefile.am: Remove gst123 and vorbisplay.py from sources, and add decodebin.py + Original commit message from CVS: + * examples/Makefile.am: + Remove gst123 and vorbisplay.py from sources, and add decodebin.py + +2006-10-20 09:47:16 +0000 Edward Hervey + + examples/: Removed gst123 and vorbisplay examples which weren't working with 0.10, and replaced them with decodebin.py + Original commit message from CVS: + reviewed by: Edward Hervey + * examples/decodebin.py: + * examples/gst123: + * examples/vorbisplay.py: + Removed gst123 and vorbisplay examples which weren't working with + 0.10, and replaced them with decodebin.py + Closes #362183 and #362202 + +2006-10-20 09:27:43 +0000 Edward Hervey + + examples/: Closes #362290 and #362272 + Original commit message from CVS: + * examples/audioconcat.py: + * examples/cp.py: + Port to 0.10 by Jason Gerard DeRose + Closes #362290 and #362272 + * examples/bps.py: + Indentation fixes by Jason Gerard DeRose + Closes #362011 + Also small fix for Usage string + +2006-10-16 14:46:19 +0000 Tim-Philipp Müller + + gst/gst.defs: Don't use 'interface' as variable name, MingW doesn't like that (fixes #359375). + Original commit message from CVS: + * gst/gst.defs: + Don't use 'interface' as variable name, MingW doesn't like that + (fixes #359375). + +2006-10-12 19:02:41 +0000 Thomas Vander Stichele + + * common: + * gst/extend/.gitignore: + moap ignore + Original commit message from CVS: + moap ignore + +2006-10-05 18:27:58 +0000 Tim-Philipp Müller + + gst/pygstiterator.c: Printf format fix. + Original commit message from CVS: + * gst/pygstiterator.c: (pygst_iterator_new): + Printf format fix. + +2006-10-03 09:24:11 +0000 Edward Hervey + + codegen/argtypes.py: Revert the UInt64Arg modifications from upstream. It forces us to give a PyLong, whereas we can ... + Original commit message from CVS: + * codegen/argtypes.py: + Revert the UInt64Arg modifications from upstream. It forces us to give + a PyLong, whereas we can directly use the 'K' argument parsing for that. + +2006-09-29 09:53:11 +0000 Edward Hervey + + ltihooks.py: Removed + Original commit message from CVS: + * ltihooks.py: + Removed + * testsuite/common.py: + ltihooks is dead, long live gstltihooks. This should complete thomas' + fix of #357310. + +2006-09-28 10:03:22 +0000 Jan Schmidt + + gst/Makefile.am: Explicitly export _PyGObject_API from our modules, as it's apparently needed for import. Previously ... + Original commit message from CVS: + * gst/Makefile.am: + Explicitly export _PyGObject_API from our modules, as it's apparently + needed for import. Previously we implicitly relied on a bug in the + core providing --export-dynamic as a link flag. + +2006-09-23 10:43:18 +0000 Thomas Vander Stichele + + Fix #357310 + Original commit message from CVS: + * Makefile.am: + * gst/__init__.py: + * gstltihooks.py: + Fix #357310 + +2006-09-22 13:21:59 +0000 Rene Stadler + + gst/gstlibs.override: Fixes for GstController creation memleak fixes. + Original commit message from CVS: + Patch by: Rene Stadler + * gst/gstlibs.override: + Fixes for GstController creation + memleak fixes. + +2006-09-12 11:16:08 +0000 Edward Hervey + + gst/extend/Makefile.am: Forgot to add 3 previous files to the Makefile so they get installed. + Original commit message from CVS: + * gst/extend/Makefile.am: + Forgot to add 3 previous files to the Makefile so they get + installed. + +2006-09-12 11:14:24 +0000 Edward Hervey + + gst/extend/: Revival of the jukebox (and leveller) using 0.10 and gnonlin. + Original commit message from CVS: + * gst/extend/jukebox.py: + * gst/extend/leveller.py: + * gst/extend/sources.py: + Revival of the jukebox (and leveller) using 0.10 and gnonlin. + Still needs a bit of love, but functionnal enough. + +2006-09-10 08:56:22 +0000 Edward Hervey + + * ChangeLog: + Give proper credits to the author of the patch + Original commit message from CVS: + Give proper credits to the author of the patch + +2006-09-10 08:53:26 +0000 Edward Hervey + + gst/libs.defs: Add definition for GstParamFlags, extension of the GParamFlags. + Original commit message from CVS: + * gst/libs.defs: + Add definition for GstParamFlags, extension of the GParamFlags. + Only contains one flag, gst.PARAM_CONTROLLABLE. + Closes #355150 + +2006-08-31 14:03:44 +0000 Edward Hervey + + gst/gst-0.10.10.ignore: API addition + Original commit message from CVS: + * gst/gst-0.10.10.ignore: + API addition + * gst/gst.defs: + Added new ghostpad functions. + +2006-08-29 10:05:40 +0000 Edward Hervey + + gst/gst.override: We don't own a reference on the elements contained in the list returned by gst_xml_get_topelements(). + Original commit message from CVS: + * gst/gst.override: + We don't own a reference on the elements contained in the list + returned by gst_xml_get_topelements(). + +2006-08-29 09:23:59 +0000 Edward Hervey + + testsuite/test_pad.py: The bug was not a bug. Fixed the typo. + Original commit message from CVS: + * testsuite/test_pad.py: + The bug was not a bug. Fixed the typo. + +2006-08-29 07:43:42 +0000 Thomas Vander Stichele + + testsuite/test_pad.py: add a test for event probes - shows a bug, for which I commented the failUnless out + Original commit message from CVS: + * testsuite/test_pad.py: + add a test for event probes - shows a bug, for which I commented + the failUnless out + +2006-08-21 12:55:37 +0000 Edward Hervey + + configure.ac: Whoops, typo error :) + Original commit message from CVS: + * configure.ac: + Whoops, typo error :) + +2006-08-21 11:43:01 +0000 Edward Hervey + + configure.ac: attempt to fix build. + Original commit message from CVS: + * configure.ac: + attempt to fix build. + +2006-08-21 11:31:51 +0000 Edward Hervey + + configure.ac: If pygobject is available, only build with it, else try to find pygtk to stay compatible with older ver... + Original commit message from CVS: + * configure.ac: + If pygobject is available, only build with it, else try to find pygtk + to stay compatible with older version. + * gst/Makefile.am: + Switch to pygobject CFLAGS. + * testsuite/Makefile.am: + Switch to pygobject CFLAGS. + +2006-08-08 19:21:51 +0000 Edward Hervey + + codegen/codegen.py: newer pygobject's pyg_constant_strip_prefix() now return a const gchar * whereas PyModule_AddIntC... + Original commit message from CVS: + * codegen/codegen.py: + newer pygobject's pyg_constant_strip_prefix() now return a const gchar * + whereas PyModule_AddIntConstant() takes a normal gchar*. + Closes #349623 + +2006-08-05 17:15:52 +0000 Andy Wingo + + examples/synchronizer.py: Actually appears to work now, will have to try with guadec videos on Monday. + Original commit message from CVS: + 2006-08-05 Andy Wingo + * examples/synchronizer.py: Actually appears to work now, will + have to try with guadec videos on Monday. + * examples/remuxer.py (PlayerWindow.create_ui): Disable the + auto-adjusting of cut in and cut out times, it's annoying. + +2006-08-04 17:04:27 +0000 Andy Wingo + + * examples/synchronizer.py: + small updates, still ui only + Original commit message from CVS: + small updates, still ui only + +2006-08-04 16:42:15 +0000 Andy Wingo + + examples/synchronizer.py: New file, a bit of a hack to remuxer.py, but for resyncing a bad ogg. Only UI at the moment.. + Original commit message from CVS: + 2006-08-04 Andy Wingo + * examples/synchronizer.py: New file, a bit of a hack to + remuxer.py, but for resyncing a bad ogg. Only UI at the moment.. + +2006-07-28 13:56:43 +0000 Andy Wingo + + * ChangeLog: + changelog + Original commit message from CVS: + changelog + +2006-07-28 13:56:20 +0000 James Doc Livingston + + examples/remuxer.py (RemuxBin._do_seek, Remuxer._bus_watch): Use normal seeks instead of segment seeks so that EOS is... + Original commit message from CVS: + 2006-07-28 Andy Wingo + * examples/remuxer.py (RemuxBin._do_seek, Remuxer._bus_watch): Use + normal seeks instead of segment seeks so that EOS is handled + properly. Patch by James "Doc" Livingston . (#348416) + * examples/remuxer.py (RemuxBin._new_demuxed_pad): Increase the + buffer size for dealing with terribly muxed files. + +2006-07-20 17:05:22 +0000 Edward Hervey + + configure.ac: Back to development cycle + Original commit message from CVS: + * configure.ac: + Back to development cycle + +=== release 0.10.5 === + +2006-07-20 17:03:57 +0000 Edward Hervey + + * ChangeLog: + * NEWS: + 0.10.5 "My Little Poney wants some Funk" release + Original commit message from CVS: + 0.10.5 "My Little Poney wants some Funk" release + ---------------------------------------------------------------------- + +2006-07-19 14:21:36 +0000 Edward Hervey + + configure.ac: 0.10.4.2 pre-release + Original commit message from CVS: + * configure.ac: 0.10.4.2 pre-release + +2006-07-18 15:33:41 +0000 Edward Hervey + + Add new ignore for 0.10.10 API additions + Original commit message from CVS: + * configure.ac: + * gst/Makefile.am: + * gst/gst-0.10.10.ignore: + * gst/gstversion.override.in: + Add new ignore for 0.10.10 API additions + * gst/gst.defs: + Added definitions for new segtrap functions + +2006-07-05 11:35:12 +0000 Edward Hervey + + gst/gstmodule.c: Added gst.BUFFER_OFFSET_NONE for proper (guint64) -1 conversion between python and C. + Original commit message from CVS: + * gst/gstmodule.c: (init_gst): + Added gst.BUFFER_OFFSET_NONE for proper (guint64) -1 conversion between + python and C. + +2006-07-03 14:44:20 +0000 Edward Hervey + + gst/: Repeat 100 times : "I shouldn't commit patches without checking them thoroughly, especially if they come from s... + Original commit message from CVS: + * gst/gstelement.override: + * gst/gstevent.override: + * gst/gstmessage.override: + * gst/gstquery.override: + Repeat 100 times : "I shouldn't commit patches without checking + them thoroughly, especially if they come from someone I trust". + Fix the broken Py_BuildValue. + +2006-07-03 13:32:08 +0000 Thomas Vander Stichele + + add gcov stuff + Original commit message from CVS: + * Makefile.am: + * configure.ac: + * gst/Makefile.am: + add gcov stuff + +2006-07-03 13:31:19 +0000 Thomas Vander Stichele + + gst/gstmodule.c: don't crash when error is NULL + Original commit message from CVS: + * gst/gstmodule.c: (init_gst): + don't crash when error is NULL + +2006-07-03 09:31:26 +0000 Edward Hervey + + gst/gstmessage.override: State change is a list and not a tuple + Original commit message from CVS: + * gst/gstmessage.override: + State change is a list and not a tuple + * gst/gstpad.override: + query_position() got busted in previous commit. + +2006-07-03 09:01:18 +0000 Edward Hervey + + gst/: Use Py_BuildValue to construct tuples. + Original commit message from CVS: + reviewed by: Edward Hervey + * gst/gstelement.override: + * gst/gstevent.override: + * gst/gstmessage.override: + * gst/gstpad.override: + * gst/gstquery.override: + Use Py_BuildValue to construct tuples. + Use tuples for collection of different objects. + See http://www.python.org/doc/faq/general/#why-are-there-separate-tuple-and-list-data-types + * testsuite/test_event.py: + [message|query|event].parse_* now return tuples and not list. + Fixes #334548 + +2006-07-02 15:25:04 +0000 Edward Hervey + + Removal of all glib < 2.8 cruft since GStreamer core now requires glib >= 2.8 + Original commit message from CVS: + Removal of all glib < 2.8 cruft since GStreamer core now requires + glib >= 2.8 + * codegen/argtypes.py: + remove gstobject cruft from ObjectArg + * configure.ac: + Require glib >= 2.8.0 + * gst/Makefile.am: + * gst/pygstobject.c: + * gst/pygstobject.h: + Remove pygstobject.[ch] + * gst/common.h: + Don't include removed header file. + * gst/gst.override: + * gst/gstbin.override: + * gst/gstbus.override: + * gst/gstelement.override: + * gst/gstelementfactory.override: + * gst/gstmessage.override: + * gst/gstobject.override: + * gst/gstpad.override: + * gst/interfaces.override: + * gst/pygstiterator.c: (pygst_iterator_iter_next): + Switch from using pygstobject* functions to using pygobject* functions. + * gst/gstmodule.c: (sink_gstobject), (init_gst): + Move GstObject sink function here and use standard gobject refcounting. + +2006-06-22 19:12:36 +0000 Edward Hervey + + configure.ac: 0.10.7 ignore file is for 0.10.7 AND 0.10.8 (due to brown paperbag release). + Original commit message from CVS: + * configure.ac: (GST_LIBS): + 0.10.7 ignore file is for 0.10.7 AND 0.10.8 (due to brown paperbag + release). + +2006-06-15 09:58:08 +0000 Edward Hervey + + codegen/codegen.py: Always unblock threads when going to C. + Original commit message from CVS: + * codegen/codegen.py: + Always unblock threads when going to C. + * gst/gst.defs: + Revert unblock-threads noise. + +2006-06-14 10:00:32 +0000 Edward Hervey + + gst/gst-types.defs: Added fields for GstPadTemplate. + Original commit message from CVS: + * gst/gst-types.defs: + Added fields for GstPadTemplate. + * gst/gst.defs: + Made gst_element_class_get_template_list a GstElement method. + * gst/gstelement.override: + Override for gst.Element.get_template_list() + * gst/gstpad.override: + Override getter for GstStaticPadTemplate.static_caps so that it uses + the correct pointer. + +2006-06-13 17:43:40 +0000 Edward Hervey + + testsuite/gstpython.supp: Keeping suppresions + Original commit message from CVS: + * testsuite/gstpython.supp: + Keeping suppresions + +2006-06-13 16:52:05 +0000 Edward Hervey + + testsuite/gstpython.supp: Tim might have fixed this suppression. Commenting it. + Original commit message from CVS: + * testsuite/gstpython.supp: + Tim might have fixed this suppression. Commenting it. + +2006-06-13 14:43:41 +0000 Edward Hervey + + testsuite/gstpython.supp: One more suppression added to bug #344761 + Original commit message from CVS: + * testsuite/gstpython.supp: + One more suppression added to bug #344761 + +2006-06-13 13:45:33 +0000 Edward Hervey + + .cvsignore: Ignore more files + Original commit message from CVS: + * .cvsignore: + Ignore more files + +2006-06-13 13:28:47 +0000 Edward Hervey + + testsuite/gstpython.supp: Added suppresion for leaks of bug #344761. + Original commit message from CVS: + * testsuite/gstpython.supp: + Added suppresion for leaks of bug #344761. + +2006-06-13 11:05:08 +0000 Edward Hervey + + Ignore log files. + Original commit message from CVS: + * .cvsignore: + * testsuite/.cvsignore: + Ignore log files. + +2006-06-13 10:59:44 +0000 Edward Hervey + + Makefile.am: Cleanup pygst.pyc file. + Original commit message from CVS: + * Makefile.am: (CLEANFILES): + Cleanup pygst.pyc file. + +2006-06-13 10:55:09 +0000 Edward Hervey + + gst/gst.defs: Add 'unblock-threads #t' for critical functions/methods. + Original commit message from CVS: + * gst/gst.defs: + Add 'unblock-threads #t' for critical functions/methods. + +2006-06-12 16:51:36 +0000 Edward Hervey + + testsuite/: Added cleanup file to initialize registry before running checks. + Original commit message from CVS: + * testsuite/Makefile.am: + * testsuite/runtests.py: + * testsuite/cleanup.py: + Added cleanup file to initialize registry before running checks. + Added G_DEBUG=gc-friendly to valgrinding + Only test test_*.py files + +2006-06-11 16:32:18 +0000 Edward Hervey + + .cvsignore: more files to ignore + Original commit message from CVS: + * .cvsignore: + more files to ignore + +2006-06-09 17:21:40 +0000 Edward Hervey + + pygst.py.in: Raise RequiredVersionError(ValueError, AssertionError) wherever applicable. This makes the new system (r... + Original commit message from CVS: + * pygst.py.in: + Raise RequiredVersionError(ValueError, AssertionError) wherever + applicable. This makes the new system (raising an error) compatible + with the old system (assertions). + Fixes #341114 + +2006-06-09 14:19:16 +0000 Edward Hervey + + pygst.py.in: Don't import non-used modules + Original commit message from CVS: + * pygst.py.in: + Don't import non-used modules + * testsuite/Makefile.am: + Heavy valgrinding por favor ! + (%.valgrind): with always-malloc for GSlice + +2006-06-09 14:15:53 +0000 Edward Hervey + + pygst.py.in: Don't import non-used modules + Original commit message from CVS: + * pygst.py.in: + Don't import non-used modules + * testsuite/Makefile.am: + Heavy valgrinding por favor ! + +2006-06-09 10:50:21 +0000 Edward Hervey + + codegen/: Updated codegenerator to current pygtk one. + Original commit message from CVS: + * codegen/Makefile.am: + * codegen/argtypes.py: + * codegen/codegen.py: + * codegen/definitions.py: + * codegen/defsconvert.py: + * codegen/defsparser.py: + * codegen/docextract.py: + * codegen/docextract_to_xml.py: + * codegen/docgen.py: + * codegen/h2def.py: + * codegen/mergedefs.py: + * codegen/missingdefs.py: + * codegen/mkskel.py: + * codegen/override.py: + * codegen/reversewrapper.py: + Updated codegenerator to current pygtk one. + * gst/gst.defs: + * gst/gst.override: + * gst/gstpad.override: + Update defs for new constructor definition. + * testsuite/test_bin.py: + With new constructors, pygobject will try to convert the argument to the + proper GType (here a string). + +2006-06-09 10:12:16 +0000 Edward Hervey + + gst/: Update for API additions. + Original commit message from CVS: + * gst/base.defs: + * gst/gst-0.10.7.ignore: + * gst/gst-types.defs: + * gst/gst.defs: + * gst/gstbase.override: + * gst/libs.defs: + Update for API additions. + * gst/gstmodule.c: (init_gst): + Added new GST_TAG_IMAGE and GST_TAG_PREVIEW_IMAGE + +2006-05-27 12:18:54 +0000 Edward Hervey + + gst/__init__.py: Make gst-python work on OS without dl.so + Original commit message from CVS: + reviewed by: Edward Hervey + * gst/__init__.py: + Make gst-python work on OS without dl.so + Fixes #341799 + +2006-05-27 12:13:46 +0000 Edward Hervey + + examples/filesrc.py: Port to 0.10. + Original commit message from CVS: + reviewed by: Edward Hervey + * examples/filesrc.py: Port to 0.10. + +2006-05-27 12:08:08 +0000 Edward Hervey + + examples/audio-controller.py: Make it work with 0.10, still had cruft from 0.9 + Original commit message from CVS: + * examples/audio-controller.py: + Make it work with 0.10, still had cruft from 0.9 + +2006-05-19 08:48:22 +0000 Edward Hervey + + Added ignore file for core 0.10.7 + Original commit message from CVS: + * configure.ac: + * gst/Makefile.am: + * gst/gst-0.10.7.ignore: + * gst/gstversion.override.in: + Added ignore file for core 0.10.7 + * gst/base.defs: + Added gst_adapter_take_buffer + * gst/gst-0.10.6.ignore: + Filed API addition for 0.10.6 + * gst/gst-types.defs: + Added GstTypeFind pointer definition + * gst/gst.defs: + * gst/gst.override: + Added fake function gst_type_find_new() to create a GstTypeFind that can + be used in all typefinding function. + GstTypeFind * + gst_type_find_new(data, peekfunction, suggestfunction [, getlenghtfunction]) + +2006-05-09 14:24:02 +0000 Edward Hervey + + Update for API changes. + Original commit message from CVS: + * configure.ac: + * gst/Makefile.am: + * gst/gst-0.10.6.ignore: + * gst/gst.defs: + * gst/gstversion.override.in: + Update for API changes. + Added ignore files for core 0.10.6 API additions. + +2006-05-09 14:00:10 +0000 Edward Hervey + + gst/gst.override: Reverting previous patches for conditional ignore. + Original commit message from CVS: + * gst/gst.override: + Reverting previous patches for conditional ignore. + It can't be done from within override files. + The only one left is the python gst_debug_log function + which will do nothing #ifdef GST_DISABLE_GST_DEBUG. + Also removed the conditional ignore for API changes since it didn't + have any effect either. + +2006-05-09 13:36:51 +0000 Edward Hervey + + gst/gst.override: Better conditional ignore for types and methods. + Original commit message from CVS: + * gst/gst.override: + Better conditional ignore for types and methods. + +2006-05-09 13:13:48 +0000 Edward Hervey + + codegen/: Added code to ignore type and the function/methods/classes that use them. + Original commit message from CVS: + * codegen/codegen.py: + * codegen/override.py: + Added code to ignore type and the function/methods/classes that use + them. + * gst/gst.override: + ignore methods/classes/types depending on how GStreamer core was built: + _ GST_DISABLE_GST_DEBUG + _ GST_DISABLE_LOADSAVE + _ GST_DISABLE_PARSE + +2006-05-09 10:25:17 +0000 Edward Hervey + + testsuite/python.supp: Added suppressions for FC5 64 bit + Original commit message from CVS: + * testsuite/python.supp: + Added suppressions for FC5 64 bit + +2006-05-08 11:59:56 +0000 Edward Hervey + + autogen.sh: libtoolize on Darwin/MacOSX is called glibtoolize + Original commit message from CVS: + * autogen.sh: (CONFIGURE_DEF_OPT): + libtoolize on Darwin/MacOSX is called glibtoolize + +2006-05-05 13:32:37 +0000 Andy Wingo + + * examples/remuxer.py: + smaller title + Original commit message from CVS: + smaller title + +2006-05-05 13:30:01 +0000 Andy Wingo + + examples/remuxer.py (PlayerWindow.update_scale_cb): Fix a race condition getting the initial cutin time via inserting... + Original commit message from CVS: + 2006-05-05 Andy Wingo + * examples/remuxer.py (PlayerWindow.update_scale_cb): Fix a race + condition getting the initial cutin time via inserting whitespace. + (all over): UI fixes to make Mike happy. + +2006-05-05 11:00:44 +0000 Andy Wingo + + examples/remuxer.py: Updates! Nothing gstreamery, it's all ui, so I won't bother you with the details. + Original commit message from CVS: + 2006-05-05 Andy Wingo + * examples/remuxer.py: Updates! Nothing gstreamery, it's all ui, + so I won't bother you with the details. + +2006-04-29 16:59:16 +0000 Edward Hervey + + examples/gstfile.py: Threaded application, we NEED gobject.threads_init(). + Original commit message from CVS: + * examples/gstfile.py: + Threaded application, we NEED gobject.threads_init(). + This should finally gets rid of the crashes when used on single files. + * gst/extend/discoverer.py: + Re-order the imports. + +2006-04-28 17:35:26 +0000 Edward Hervey + + gst/arg-types.py: Caps used as arguments of virtual methods should keep their initial refcount when calling the pytho... + Original commit message from CVS: + * gst/arg-types.py: + Caps used as arguments of virtual methods should keep their initial + refcount when calling the python methods. + This is similar to the patch done for GstMiniObjects. + * gst/gstbase.override: + Adjust the gst.BaseTransform.get_unit_size() virtual method for above + fix. + +2006-04-28 15:23:52 +0000 Edward Hervey + + gst/gstbase.override: gst.BaseTransform.get_unit_size() virtual method override. + Original commit message from CVS: + reviewed by: Edward Hervey + * gst/gstbase.override: + gst.BaseTransform.get_unit_size() virtual method override. + Closes #339248 + +2006-04-28 15:07:41 +0000 Edward Hervey + + gst/arg-types.py: GstMiniObject used as virtual methods parameters should be unreffed before calling the method and t... + Original commit message from CVS: + * gst/arg-types.py: + GstMiniObject used as virtual methods parameters should be unreffed + before calling the method and the ref-ed. + Added Params and Returns for const-gchar*, GType and gulong so the + code generator can generate more virtual methods handlers/proxys. + * gst/gst-types.defs: + * gst/gst.defs: + * gst/interfaces.defs: + Added vtable and virtual method definition for interfaces so we can properly use virtual + methods from those interfaces in python. + +2006-04-28 14:55:15 +0000 Edward Hervey + + gst/gstpad.override: (pad_block_callback_marshal) + Original commit message from CVS: + 2006-04-19 Andy Wingo + * gst/gstpad.override: (pad_block_callback_marshal) + (_wrap_gst_pad_set_blocked_async): Fix refcounting problems and + indent. + Fixes #338982 + +2006-04-28 14:54:45 +0000 Edward Hervey + + gst/gstmodule.c: Wrap the gstreamer error domains quark. + Original commit message from CVS: + * gst/gstmodule.c: (init_gst): + Wrap the gstreamer error domains quark. + Fixes #339040 + +2006-04-28 14:51:52 +0000 Edward Hervey + + * ChangeLog: + gst/gstpad.override (pad_block_callback_marshal) + Original commit message from CVS: + * gst/gstpad.override (pad_block_callback_marshal) + (_wrap_gst_pad_set_blocked_async): Fix refcounting problems and + indent. + Fixes #338982 + +2006-04-28 14:07:38 +0000 Thomas Vander Stichele + + * ChangeLog: + * configure.ac: + back to HEAD + Original commit message from CVS: + back to HEAD + +=== release 0.10.4 === + +2006-04-28 14:06:21 +0000 Thomas Vander Stichele + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + releasing 0.10.4 + Original commit message from CVS: + releasing 0.10.4 + +2006-04-19 12:04:56 +0000 Andy Wingo + + * examples/fvumeter.py: + BPB(tm) + Original commit message from CVS: + BPB(tm) + +2006-04-19 12:04:19 +0000 Andy Wingo + + * ChangeLog: + * examples/fvumeter.py: + * gst/arg-types.py: + gst/arg-types.py (GstCapsArg.write_const_param) + Original commit message from CVS: + 2006-04-19 Andy Wingo + * gst/arg-types.py (GstCapsArg.write_const_param) + (GstCapsArg.write_param): If there is a default value, initialize + the py_caps variable to NULL. PyArgs_Parse* doesn't touch c + variables if the optional arg isn't there. Fixes #339010. + +2006-04-19 11:58:14 +0000 Andy Wingo + + examples/remuxer.py (GstPlayer.seek): Don't do accurate seeks, because the output won't be readable without a keyfram... + Original commit message from CVS: + 2006-04-19 Andy Wingo + * examples/remuxer.py (GstPlayer.seek): Don't do accurate seeks, + because the output won't be readable without a keyframe anyway. + +2006-04-19 08:50:48 +0000 Andy Wingo + + examples/remuxer.py: Another code dump. I know it breaks the freeze but it's just a wee example :) + Original commit message from CVS: + 2006-04-19 Andy Wingo + * examples/remuxer.py: Another code dump. I know it breaks the + freeze but it's just a wee example :) + +2006-04-13 16:38:41 +0000 Thomas Vander Stichele + + * configure.ac: + prereleasing gst-python + Original commit message from CVS: + prereleasing gst-python + +2006-04-10 14:47:19 +0000 Edward Hervey + + gst/gsttaglist.override: Return tag value if present more than once (instead of exactly once). + Original commit message from CVS: + * gst/gsttaglist.override: (tag_foreach_func_list): + Return tag value if present more than once (instead of exactly once). + Fixes #337876 + +2006-04-10 09:21:09 +0000 Edward Hervey + + codegen/argtypes.py: Update from upstream codegen for UInt argtype. + Original commit message from CVS: + * codegen/argtypes.py: + Update from upstream codegen for UInt argtype. + * gst/gst-types.defs: + Added GstIndexEntry boxed type. + * gst/gstbase.override: + Wrapped gst.BaseSrc::get_times() and gst.PushSrc::create() virtual + methods. + gst.BaseSrc and gst.PushSrc virtual methods are now completely wrapped. + +2006-04-08 18:46:44 +0000 Stefan Kost + + testsuite/test-object.h: Fix broken GObject macros + Original commit message from CVS: + * testsuite/test-object.h: + Fix broken GObject macros + +2006-04-07 18:33:35 +0000 Andy Wingo + + examples/remuxer.py: Code dump, work in progress... + Original commit message from CVS: + 2006-04-07 Andy Wingo + * examples/remuxer.py: Code dump, work in progress... + +2006-04-07 17:58:18 +0000 Edward Hervey + + testsuite/test_ghostpad.py: more assertions to figure out an speed issue. + Original commit message from CVS: + * testsuite/test_ghostpad.py: + more assertions to figure out an speed issue. + +2006-04-07 17:21:27 +0000 Andy Wingo + + gst/arg-types.py (GstCapsArg.beforenull): py_caps can be NULL if it is an optional argument. Translate this python no... + Original commit message from CVS: + 2006-04-07 Andy Wingo + * gst/arg-types.py (GstCapsArg.beforenull): py_caps can be NULL if + it is an optional argument. Translate this python non-value to the + C NULL. + * gst/gst.defs (get_compatible_pad): Filter caps is optional and + can be None. It defaults to None. + +2006-04-07 15:41:00 +0000 Edward Hervey + + Makefile.am: make check-valgrind calls make valgrind in the testsuite directory. + Original commit message from CVS: + * Makefile.am: + make check-valgrind calls make valgrind in the testsuite directory. + * testsuite/Makefile.am: + prepend $(top_srcdir) to PYTHONPATH for all tests so it uses the built + library and not the installed one. + * testsuite/python.supp: + Added suppressions discovered on x86/gentoo. + +2006-04-07 14:54:49 +0000 Andy Wingo + + gst/gstelement.override (_wrap_gst_element_link): Allow errors parsing the optional filter caps to propagate up. + Original commit message from CVS: + 2006-04-07 Andy Wingo + * gst/gstelement.override (_wrap_gst_element_link): Allow errors + parsing the optional filter caps to propagate up. + +2006-04-07 14:32:08 +0000 Andy Wingo + + gst/gst.defs (element_make_from_uri): Element name is optional and can be None. It defaults to None. + Original commit message from CVS: + 2006-04-07 Andy Wingo + * gst/gst.defs (element_make_from_uri): Element name is optional + and can be None. It defaults to None. + +2006-04-05 17:05:43 +0000 Edward Hervey + + testsuite/test_message.py: GstBus is flushing in NULL, so we need to set the pipeline to READY in order to receive th... + Original commit message from CVS: + * testsuite/test_message.py: + GstBus is flushing in NULL, so we need to set the pipeline to READY in + order to receive the messages in the bus watch. + +2006-04-05 11:55:48 +0000 Andy Wingo + + configure.ac (PYGST_MICRO_VERSION): Doc fix. + Original commit message from CVS: + 2006-04-05 Andy Wingo + * configure.ac (PYGST_MICRO_VERSION): Doc fix. + (PYGST_NANO_VERSION): New define. + * gst/__init__.py (version): Add as an alias for get_gst_version. + Should use the deprecation infrastructure here. + * gst/gst.defs: Add defs for the new wrapped functions. + * gst/gst.override (_wrap_gst_get_pygst_version) + (_wrap_gst_get_gst_version): New overrides, functions to access + the gstreamer and pygst versions. The first used to be called + gst_version(); we ignore gst_version now. + +2006-04-05 08:37:32 +0000 Andy Wingo + + gst/gstpad.override (_wrap_gst_pad_set_blocked_async): PyObject_IsTrue, not PyBool_Check. Grr. + Original commit message from CVS: + 2006-04-05 Andy Wingo + * gst/gstpad.override (_wrap_gst_pad_set_blocked_async): + PyObject_IsTrue, not PyBool_Check. Grr. + +2006-04-04 16:16:46 +0000 Edward Hervey + + gst/gst.defs: gst_element_post_message: Adding keep-refcount tag to the message since the function will unref it. + Original commit message from CVS: + * gst/gst.defs: + gst_element_post_message: Adding keep-refcount tag to the message since + the function will unref it. + +2006-04-01 10:10:48 +0000 Thomas Vander Stichele + + * examples/Makefile.am: + fix makefile + Original commit message from CVS: + fix makefile + +2006-04-01 10:07:07 +0000 Thomas Vander Stichele + + configure.ac: use AS_VERSION and AS_NANO + Original commit message from CVS: + * configure.ac: + use AS_VERSION and AS_NANO + +2006-03-31 17:12:50 +0000 Andy Wingo + + examples/remuxer.py: Example GUI for a remuxer, unfinished -- dropping it here while I hack on it. Based on player.py. + Original commit message from CVS: + 2006-03-31 Andy Wingo + * examples/remuxer.py: Example GUI for a remuxer, unfinished -- + dropping it here while I hack on it. Based on player.py. + * examples/Makefile.am (examples_DATA): Add remuxer.py, reorder + list. + +2006-03-30 03:46:56 +0000 David I. Lehn + + configure.ac: Better empty string test fix for "Fixes to how we figure out what API to ignore" + Original commit message from CVS: + * configure.ac: + Better empty string test fix for "Fixes to how we figure out what API + to ignore" + +2006-03-24 11:07:22 +0000 Edward Hervey + + configure.ac: Fixes in how we figure out what API to ignore + Original commit message from CVS: + * configure.ac: + Fixes in how we figure out what API to ignore + * gst/Makefile.am: + * gst/gst-0.10.5.ignore: + * gst/gstversion.override.in: + Added file for handling API additions for gstreamer 0.10.5 + * gst/base.defs: + * gst/gst.defs: + New API + * gst/gstpad.override: + Overrides for gst.Pad.query_peer_*() + +2006-03-21 21:49:46 +0000 Jan Schmidt + + * configure.ac: + Bump nano back to CVS + Original commit message from CVS: + Bump nano back to CVS + +=== release 0.10.3 === + +2006-03-21 21:48:08 +0000 Jan Schmidt + + configure.ac: releasing 0.10.3, "Maybe not today. Maybe not tomorrow, but soon..." + Original commit message from CVS: + === release 0.10.3 === + 2006-03-21 Jan Schmidt + * configure.ac: + releasing 0.10.3, "Maybe not today. Maybe not tomorrow, but soon..." + +2006-03-21 14:01:07 +0000 Jan Schmidt + + testsuite/: Another attempt at making the tests deterministic on the buildbots + Original commit message from CVS: + * testsuite/test_ghostpad.py: + * testsuite/test_pad.py: + Another attempt at making the tests deterministic on the buildbots + +2006-03-21 00:14:38 +0000 Jan Schmidt + + configure.ac: pre-release 0.10.2.2 + Original commit message from CVS: + 2006-03-20 Jan Schmidt + * configure.ac: + pre-release 0.10.2.2 + +2006-03-20 19:08:34 +0000 Jan Schmidt + + testsuite/test_ghostpad.py: Add while loop in teardown to wait for the pipeline state to hit NULL. Hopefully this wil... + Original commit message from CVS: + * testsuite/test_ghostpad.py: + Add while loop in teardown to wait for the pipeline state + to hit NULL. Hopefully this will ensure the refcount has always hit 1. + +2006-03-14 12:56:46 +0000 Edward Hervey + + configure.ac: Only require GStreamer core >= 0.10.2 + Original commit message from CVS: + * configure.ac: + Only require GStreamer core >= 0.10.2 + Detect version of core the bindings are being compiled against and + write gst/gstversion.override file with eventual API additions that + should be ignored. + * gst/Makefile.am: + * gst/base.defs: + Added gst_base_sync_[set|get]_[sync|max_lateness]() and + gst_type_find_helper_get_range() definitions + * gst/gst-0.10.3.ignore: + API added in gstreamer core 0.10.3 + * gst/gst-0.10.4.ignore: + API added in gstreamer core 0.10.4 + * gst/gst.override: + Include gstversion.override. + * gst/gstversion.override.in: + Magic file for API additions to ignore. + +2006-03-14 12:25:22 +0000 Edward Hervey + + codegen/: New --extendpath option for codegenerator so we can add extra path to search for included override files. + Original commit message from CVS: + * codegen/codegen.py: + * codegen/override.py: + New --extendpath option for codegenerator so we can add + extra path to search for included override files. + +2006-03-13 11:19:10 +0000 Edward Hervey + + gst/: Added base elements override file. + Original commit message from CVS: + * gst/Makefile.am: + * gst/gst.override: + * gst/gstbase.override: + Added base elements override file. + * gst/gstpad.override: + Added override for gst_pad_alloc_buffer_and_set_caps + +2006-03-10 11:28:01 +0000 Edward Hervey + + gst/gst.override: Commited a bit too much :) + Original commit message from CVS: + * gst/gst.override: + Commited a bit too much :) + +2006-03-10 11:22:31 +0000 Edward Hervey + + gst/base.defs: typo fix for gst_type_find_helper() + Original commit message from CVS: + * gst/base.defs: + typo fix for gst_type_find_helper() + Added new API : gst_type_find_helper_for_buffer() + * gst/gst.override: + override for gst.type_find_helper_for_buffer() + +2006-03-10 10:54:40 +0000 Edward Hervey + + gst/: Added new API: gst_pipeline_[get|set]_auto_flush_bus() gst_uri_has_protocol() + Original commit message from CVS: + * gst/gst-types.defs: + * gst/gst.defs: + Added new API: + gst_pipeline_[get|set]_auto_flush_bus() + gst_uri_has_protocol() + GST_RESOURCE_ERROR_NO_SPACE_LEFT + +2006-03-07 19:44:35 +0000 Edward Hervey + + gst/arg-types.py: Add ReturnType and Parameter for GstCaps. + Original commit message from CVS: + * gst/arg-types.py: + Add ReturnType and Parameter for GstCaps. + This allows the codegenerator to wrap properly more virtual proxies. + +2006-03-07 19:08:43 +0000 Edward Hervey + + gst/base.defs: Update for new check_get_range virtual method in GstBaseSrc + Original commit message from CVS: + * gst/base.defs: + Update for new check_get_range virtual method in GstBaseSrc + +2006-03-06 16:24:53 +0000 Michael Smith + + gst/: Don't leak PyObjects wrapping GValues when indexing into a + Original commit message from CVS: + * gst/gststructure.override: + * gst/gsttaglist.override: + Don't leak PyObjects wrapping GValues when indexing into a + GStStructure. Also fix a copy/paste identical bug in taglists. + +2006-03-02 09:40:13 +0000 Edward Hervey + + gst/pygstminiobject.h: Some crack distributions do weirdo stuff with PYGIL_API_IS_BUGGY. + Original commit message from CVS: + * gst/pygstminiobject.h: + Some crack distributions do weirdo stuff with PYGIL_API_IS_BUGGY. + Let's keep our own detection. + Closes #333055 + +2006-02-28 00:17:45 +0000 Jan Schmidt + + pygst.py.in: Fix a silly logic inversion typo + Original commit message from CVS: + * pygst.py.in: + Fix a silly logic inversion typo + +2006-02-27 16:22:10 +0000 Edward Hervey + + pygst.py.in: use 'raise StandardError' instead of 'assert' so that compiled code raise a noticeable exception. + Original commit message from CVS: + * pygst.py.in: + use 'raise StandardError' instead of 'assert' so that compiled code + raise a noticeable exception. + Closes #332586 + +2006-02-22 10:16:33 +0000 Edward Hervey + + gst/gstmodule.c: gst.gst_version uses the result of gst_version() rather than use the GST_VERSION_* hardcoded values. + Original commit message from CVS: + reviewed by: Edward Hervey + * gst/gstmodule.c: (init_gst): + gst.gst_version uses the result of gst_version() rather than use + the GST_VERSION_* hardcoded values. + Closes #331616 + +2006-02-20 18:07:59 +0000 Edward Hervey + + examples/vumeter.py: In fact it wasn't an application message, but an element message :) + Original commit message from CVS: + * examples/vumeter.py: + In fact it wasn't an application message, but an element message :) + +2006-02-20 16:58:14 +0000 Zaheer Abbas Merali + + * ChangeLog: + * examples/vumeter.py: + fix vumeter example + Original commit message from CVS: + fix vumeter example + +2006-02-17 15:35:34 +0000 Edward Hervey + + gst/: Updated and properly wrapped new GstQuery formats API. + Original commit message from CVS: + * gst/gst.defs: + * gst/gstquery.override: + Updated and properly wrapped new GstQuery formats API. + +2006-02-10 17:49:47 +0000 Andy Wingo + + gst/gst.defs (disable_sync_message_emission) + Original commit message from CVS: + 2006-02-10 Andy Wingo + * gst/gst.defs (disable_sync_message_emission) + (enable_sync_message_emission): Wrap new functions from GStreamer + CVS. + * configure.ac (GST_REQ): Require GStreamer 0.10.3.1. + * examples/play.py: A bit of refactoring. Make use of the + sync-message signals. Reacts to events on the bus. Keeps aspect + ratio. Better scrubbing, play/pause button instead of + play+pause+stop. Not a bad player now, although the code still + lacks cleanliness. + +2006-02-10 10:53:22 +0000 Andy Wingo + + examples/play.py (GstPlayer.query_position) + Original commit message from CVS: + 2006-02-10 Andy Wingo + * examples/play.py (GstPlayer.query_position) + (PlayerWindow.update_scale_cb): Only return position, duration + from query_position -- fixes a bugaboo. + (main): Add some input validation. + * examples/pipeline-tester (data): Add a pipeline to test software + scaling. + +2006-02-07 18:54:52 +0000 Edward Hervey + + gst/: Remove deprecated code dating back from 0.8 era. + Original commit message from CVS: + * gst/gst.override: + * gst/gstmodule.c: (python_do_pending_calls): + Remove deprecated code dating back from 0.8 era. + +2006-02-06 16:24:23 +0000 Andy Wingo + + codegen/argtypes.py (UInt64Arg.write_param): Parse long arguments using ParseTuple and friends; allows ints to passed... + Original commit message from CVS: + 2006-02-06 Andy Wingo + * codegen/argtypes.py (UInt64Arg.write_param): Parse long + arguments using ParseTuple and friends; allows ints to passed for + longs as a side benefit. + +2006-02-02 16:30:01 +0000 Edward Hervey + + gst/gst.override: (gst.TIME_ARGS) return "CLOCK_TIME_NONE" for invalid times instead of outputing gibberish value. + Original commit message from CVS: + * gst/gst.override: + (gst.TIME_ARGS) return "CLOCK_TIME_NONE" for invalid times instead of + outputing gibberish value. + +2006-02-02 15:54:07 +0000 Edward Hervey + + gst/gst.defs: Update for current GStreamer core API + Original commit message from CVS: + * gst/gst.defs: + Update for current GStreamer core API + +2006-02-01 16:37:41 +0000 Edward Hervey + + testsuite/test_event.py: Properly use tempfile + Original commit message from CVS: + * testsuite/test_event.py: + Properly use tempfile + +2006-02-01 14:19:55 +0000 Edward Hervey + + gst/gst.defs: When using gst.Element.send_event() and gst.Pad.send_event() we keep a refcount on the sent event. + Original commit message from CVS: + * gst/gst.defs: + When using gst.Element.send_event() and gst.Pad.send_event() we keep + a refcount on the sent event. + * testsuite/test_event.py: + Uncomment test to prove above fix + +2006-02-01 11:52:04 +0000 Thomas Vander Stichele + + testsuite/test_event.py: add a test case for autoplugging behaviour: create a source, connect probes, store new-segme... + Original commit message from CVS: + * testsuite/test_event.py: + add a test case for autoplugging behaviour: + create a source, connect probes, store new-segment event, + add element in buffer probe callback, and forward event + Currently fails due to refcounting on the stored new-segment + event + +2006-02-01 11:14:20 +0000 Thomas Vander Stichele + + testsuite/test_element.py: add another link test + Original commit message from CVS: + 2006-02-01 Thomas Vander Stichele + * testsuite/test_element.py: + add another link test + +2006-01-30 12:57:02 +0000 Edward Hervey + + Link against Gst Data protocol libraries. + Original commit message from CVS: + * configure.ac: + * gst/Makefile.am: + Link against Gst Data protocol libraries. + * gst/__init__.py: + Restore dlopenflags after importing gst. + Closes #329110 + +2006-01-25 11:23:20 +0000 Christian Schaller + + * common: + * gst-python.spec.in: + update spec file + Original commit message from CVS: + update spec file + +2006-01-16 21:01:03 +0000 Thomas Vander Stichele + + * configure.ac: + back to head + Original commit message from CVS: + back to head + +=== release 0.10.2 === + +2006-01-16 20:59:29 +0000 Thomas Vander Stichele + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + releasing 0.10.2 + Original commit message from CVS: + releasing 0.10.2 + +2006-01-14 22:59:52 +0000 Thomas Vander Stichele + + * ChangeLog: + * configure.ac: + prerelease + Original commit message from CVS: + prerelease + +2006-01-13 17:40:09 +0000 Edward Hervey + + gst/gstlibs.override: GstController : don't use values that are now in non-public API. + Original commit message from CVS: + * gst/gstlibs.override: + GstController : don't use values that are now in non-public API. + +2006-01-09 11:42:25 +0000 Edward Hervey + + gst/base.defs: Revert guint8* to gchar* modifications for the adapter + Original commit message from CVS: + * gst/base.defs: + Revert guint8* to gchar* modifications for the adapter + * gst/gst.defs: + Cleanups and API additions + +2006-01-08 12:26:35 +0000 Edward Hervey + + gst/gststructure.override: Properly check for gstvalue data types. This makes it possible to set fields with fractions. + Original commit message from CVS: + * gst/gststructure.override: (_wrap_gst_structure_set_value): + Properly check for gstvalue data types. This makes it possible to + set fields with fractions. + * testsuite/test_caps.py: + * testsuite/test_struct.py: + Test for above modifications + +2006-01-05 14:49:27 +0000 Edward Hervey + + gst/base.defs: Use gchar* instead of guint8* for GstAdapter + Original commit message from CVS: + * gst/base.defs: + Use gchar* instead of guint8* for GstAdapter + Added virtual methods definitions for base classes. + Still have to override some functions, and figure + out how to properly add reverse wrappers to the codegenerator. + +2006-01-01 21:18:28 +0000 Edward Hervey + + First step at wrapping base elements in gst-python + Original commit message from CVS: + First step at wrapping base elements in gst-python + * configure.ac: + Commenting out weird debugging statement dating from gst-python's + and which causes problems with gstbasesrc.h anonymous union. + * gst/Makefile.am: + Added base.defs + * gst/base.defs: + New base elements definition files + * gst/gst.defs: + * gst/gst.override: + Add base elements + +2005-12-23 18:16:44 +0000 Thomas Vander Stichele + + * configure.ac: + back to HEAD + Original commit message from CVS: + back to HEAD + +=== release 0.10.1 === + +2005-12-23 18:10:51 +0000 Thomas Vander Stichele + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + releasing 0.10.1 + Original commit message from CVS: + releasing 0.10.1 + +2005-12-22 19:02:03 +0000 Thomas Vander Stichele + + * pygst.py.in: + duh, typo + Original commit message from CVS: + duh, typo + +2005-12-22 15:56:41 +0000 Thomas Vander Stichele + + install in pyexecdir as well + Original commit message from CVS: + * configure.ac: + * gst/Makefile.am: + * gst/extend/Makefile.am: + install in pyexecdir as well + +2005-12-22 11:20:44 +0000 Thomas Vander Stichele + + pygst.py.in: give the correct error when not finding the version + Original commit message from CVS: + * pygst.py.in: give the correct error when not finding the version + +2005-12-20 15:58:02 +0000 Thomas Vander Stichele + + * configure.ac: + * gst-python.spec.in: + * testsuite/test_message.py: + prereleasing + Original commit message from CVS: + prereleasing + +2005-12-20 11:15:50 +0000 Edward Hervey + + gst/gst-types.defs: Added GstStaticCaps and GstStaticPadTemplate, using the new GType. + Original commit message from CVS: + * gst/gst-types.defs: + Added GstStaticCaps and GstStaticPadTemplate, using the new GType. + * gst/gst.defs: + Doesn't return a const anymore. + * gst/gstelementfactory.override: + Wrapped gst_element_factory_get_static_pad_templates() + +2005-12-19 17:49:30 +0000 Martin Soto + + gst/gstbus.override (_wrap_gst_bus_add_watch): This function incorrectly returned self, which was causing the message... + Original commit message from CVS: + 2005-12-19 Martin Soto + * gst/gstbus.override (_wrap_gst_bus_add_watch): This function + incorrectly returned self, which was causing the message bus to + get prematurely destroyed by the Python interpreter. Now returns + Py_None. + +2005-12-19 16:05:34 +0000 Edward Hervey + + gst/gst.override: ignore gst_object_sink + Original commit message from CVS: + * gst/gst.override: + ignore gst_object_sink + +2005-12-19 10:45:45 +0000 Edward Hervey + + gst/: Properly wrap the gst_dp_* functions (cast gchar* to guint8*). + Original commit message from CVS: + * gst/gstlibs.override: + * gst/libs.defs: + Properly wrap the gst_dp_* functions (cast gchar* to guint8*). + +2005-12-18 18:15:57 +0000 Edward Hervey + + gst/gst.override: ignore gst_plugin_get_module, GModule aren't wrapped in pygtk anyway. + Original commit message from CVS: + * gst/gst.override: + ignore gst_plugin_get_module, GModule aren't wrapped in + pygtk anyway. + wrap gst_clock_get_calibration + * gst/gstbus.override: + Ignore the following: + gst_bus_create_watch, since GSource aren't wrapped in pygtk + gst_bus_sync_signal_handler and gst_bus_async_signal_func since + these functions are used by the default bus handler anyway. + * gst/gstevent.override: + wrapped gst_event_parse_buffer_size + * gst/libs.defs: + Replace all guint8* for gst_dp_ functions by gchar * since they + are the same, but at least get generated properly by the code + generator. + +2005-12-18 17:20:12 +0000 Edward Hervey + + gst/gst.defs: gst_object_sink is a method of GstObject const of enums is a stupidity (_element_make_from_uri) + Original commit message from CVS: + * gst/gst.defs: + gst_object_sink is a method of GstObject + const of enums is a stupidity (_element_make_from_uri) + * gst/gst.override: + Ignore more functions that have no place in bindings or have better + python equivalents (list filtering for example) + Wrapped gst_version() and gst_type_find_factory_get_list() + * gst/gststructure.override: + More ignores + * gst/gsttaglist.override: + ignore gst_is_tag_list. + * gst/interfaces.override: + wrap gst_mixer_options_get_values() + +2005-12-16 14:47:12 +0000 Andy Wingo + + * ChangeLog: + * gst/gstpad.override: + gst/gstpad.override (handle_event_function_exception) + Original commit message from CVS: + 2005-12-16 Andy Wingo + * gst/gstpad.override (handle_event_function_exception) + (handle_chain_function_exception): GCC told me I needed braces + here. + +2005-12-14 17:18:38 +0000 Thomas Vander Stichele + + Follow pygtk's lead in installing pygst.py and .pth in pyexecdir - this will do the right thing on multilib 64 bit + Original commit message from CVS: + * Makefile.am: + * configure.ac: + Follow pygtk's lead in installing pygst.py and .pth in pyexecdir - + this will do the right thing on multilib 64 bit + +2005-12-12 15:15:28 +0000 Edward Hervey + + examples/gstfile.py: Moved the Discoverer class to gst.extend + Original commit message from CVS: + * examples/gstfile.py: + Moved the Discoverer class to gst.extend + Now works asynchronous... bl**dy fast :) + * gst/extend/Makefile.am: + * gst/extend/discoverer.py: + Discoverer has landed in extend and is now asynchronous. + It emits a 'discovered' signal when it has finished. + +2005-12-09 13:06:43 +0000 Edward Hervey + + gst/arg-types.py: This covers for the codegenerator not being able to handle (unsigned) int64 as parameters and retur... + Original commit message from CVS: + * gst/arg-types.py: + This covers for the codegenerator not being able to handle + (unsigned) int64 as parameters and return values. + +2005-12-09 12:49:08 +0000 Edward Hervey + + gst/arg-types.py: Added (reverse_)wrapper for GBoxed and GstMiniObject + Original commit message from CVS: + * gst/arg-types.py: + Added (reverse_)wrapper for GBoxed and GstMiniObject + * gst/gst.defs: + push_event() and chain() takes the reference on the + MiniObject. + +2005-12-07 14:41:37 +0000 Edward Hervey + + gst/gstmessage.override: Fix for memleak + Original commit message from CVS: + * gst/gstmessage.override: + Fix for memleak + +2005-12-05 18:12:42 +0000 Thomas Vander Stichele + + * configure.ac: + back to HEAD + Original commit message from CVS: + back to HEAD + +=== release 0.10.0 === + +2005-12-05 18:04:34 +0000 Thomas Vander Stichele + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + releasing 0.10.0 + Original commit message from CVS: + releasing 0.10.0 + diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..b42a17a --- /dev/null +++ b/INSTALL @@ -0,0 +1,182 @@ +Basic Installation +================== + + These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, a file +`config.cache' that saves the results of its tests to speed up +reconfiguring, and a file `config.log' containing compiler output +(useful mainly for debugging `configure'). + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If at some point `config.cache' +contains results you don't want to keep, you may remove or edit it. + + The file `configure.in' is used to create `configure' by a program +called `autoconf'. You only need `configure.in' if you want to change +it or regenerate `configure' using a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. You can give `configure' +initial values for variables by setting them in the environment. Using +a Bourne-compatible shell, you can do that on the command line like +this: + CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure + +Or on systems that have the `env' program, you can do it like this: + env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not supports the `VPATH' +variable, you have to compile the package for one architecture at a time +in the source code directory. After you have installed the package for +one architecture, use `make distclean' before reconfiguring for another +architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=PATH' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' can not figure out +automatically, but needs to determine by the type of host the package +will run on. Usually `configure' can figure that out, but if it prints +a message saying it can not guess the host type, give it the +`--host=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name with three fields: + CPU-COMPANY-SYSTEM + +See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the host type. + + If you are building compiler tools for cross-compiling, you can also +use the `--target=TYPE' option to select the type of system they will +produce code for and the `--build=TYPE' option to select the type of +system on which you are compiling the package. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Operation Controls +================== + + `configure' recognizes the following options to control how it +operates. + +`--cache-file=FILE' + Use and save the results of the tests in FILE instead of + `./config.cache'. Set FILE to `/dev/null' to disable caching, for + debugging `configure'. + +`--help' + Print a summary of the options to `configure', and exit. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--version' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`configure' also accepts some other, not widely useful, options. diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..89721d5 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,78 @@ +SUBDIRS = common codegen gst examples plugin testsuite pkgconfig + +common_cflags = $(PYTHON_INCLUDES) $(PYGOBJECT_CFLAGS) $(GST_CFLAGS) $(GST_OPTION_CFLAGS) -fno-strict-aliasing +common_libadd = $(GST_LIBS) $(GST_OPTION_LIBS) +common_ldflags = -module -avoid-version + +# include before EXTRA_DIST for win32 assignment +include $(top_srcdir)/common/win32.mak + +ACLOCAL_AMFLAGS = -I m4 -I common/m4 + +pyexec_LTLIBRARIES = + +if HAVE_PYGOBJECT_2_16 +pyexec_LTLIBRARIES += gstoption.la +endif + +# GStreamer option bindings +gstoption_la_CFLAGS = $(common_cflags) +gstoption_la_LIBADD = $(common_libadd) +gstoption_la_LDFLAGS = $(common_ldflags) \ + -export-symbols-regex "^(initgstoption|_PyGObject_API).*" +gstoption_la_SOURCES = gstoptionmodule.c + +EXTRA_DIST = \ + gstlibtoolimporter.py \ + pygst.py.in \ + gst-python.spec.in \ + gst-python.spec \ + RELEASE gst-python.doap \ + $(win32) + +BUILT_SOURCES = pygst.py +CLEANFILES = pygst.py pygst.pyc + +include $(top_srcdir)/common/release.mak + +pygst.py: $(top_srcdir)/pygst.py.in Makefile + if test -f $@; then chmod +w $@; fi + sed -e "s|@PYGSTDIR\@|$(shell pwd)|g" \ + -e "s|@GST_MAJORMINOR\@|$(GST_MAJORMINOR)|g" \ + $< > $@ + chmod -w $@ + +# rewrite pygst path in installed pygst.py, install pth file. +# they go in pyexecdir, should make 64bit users happy +install-exec-local: Makefile + $(mkinstalldirs) $(DESTDIR)$(pyexecdir) + sed -e "s|@PYGSTDIR\@|$(PYEXECDIR)/gst-$(GST_MAJORMINOR)|g" \ + -e "s|@GST_MAJORMINOR\@|$(GST_MAJORMINOR)|g" \ + $(srcdir)/pygst.py.in > $(DESTDIR)$(pyexecdir)/pygst.py + chmod 644 $(DESTDIR)$(pyexecdir)/pygst.py + echo "gst-$(GST_MAJORMINOR)" > $(DESTDIR)$(pyexecdir)/pygst.pth + +uninstall-local: + @rm $(DESTDIR)/$(pyexecdir)/pygst.py > /dev/null 2>&1 || true + @rm $(DESTDIR)/$(pyexecdir)/pygst.pth > /dev/null 2>&1 || true + +check-valgrind: + cd testsuite/ && make check-valgrind + +check-torture: + @true + +include $(top_srcdir)/common/coverage/lcov.mak + +CRUFT_FILES = \ + $(top_builddir)/common/shave \ + $(top_builddir)/common/shave-libtool \ + $(top_builddir)/common/m4/libtool.m4 \ + $(top_builddir)/common/m4/ltoptions.m4 \ + $(top_builddir)/common/m4/ltsugar.m4 \ + $(top_builddir)/common/m4/ltversion.m4 \ + $(top_builddir)/common/m4/lt~obsolete.m4 + +include $(top_srcdir)/common/cruft.mak + +all-local: check-cruft diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..5206c2c --- /dev/null +++ b/Makefile.in @@ -0,0 +1,1241 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# various tests to make sure we dist the win32 stuff (for MSVC builds) right + +# include this snippet to add a common release: target by using +# include $(top_srcdir)/common/release.mak + +# checks for left-over files in the (usually uninstalled) tree, ie. for +# stuff that best be deleted to avoid problems like having old plugin binaries +# lying around. +# +# set CRUFT_FILES and/or CRUFT_DIRS in your Makefile.am when you include this + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/config.h.in \ + $(srcdir)/gst-python.spec.in \ + $(top_srcdir)/common/coverage/lcov.mak \ + $(top_srcdir)/common/cruft.mak \ + $(top_srcdir)/common/release.mak \ + $(top_srcdir)/common/win32.mak $(top_srcdir)/configure \ + $(top_srcdir)/win32/common/config.h.in AUTHORS COPYING \ + ChangeLog INSTALL NEWS TODO compile config.guess config.sub \ + depcomp install-sh ltmain.sh missing py-compile +@HAVE_PYGOBJECT_2_16_TRUE@am__append_1 = gstoption.la +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ + $(top_srcdir)/common/m4/as-compiler-flag.m4 \ + $(top_srcdir)/common/m4/as-version.m4 \ + $(top_srcdir)/common/m4/gst-args.m4 \ + $(top_srcdir)/common/m4/gst-error.m4 \ + $(top_srcdir)/common/m4/gst-feature.m4 \ + $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ + $(top_srcdir)/common/m4/gst-plugindir.m4 \ + $(top_srcdir)/common/m4/gst-valgrind.m4 \ + $(top_srcdir)/common/m4/gst.m4 $(top_srcdir)/common/m4/pkg.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = win32/common/config.h gst-python.spec +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(pyexecdir)" +LTLIBRARIES = $(pyexec_LTLIBRARIES) +am__DEPENDENCIES_1 = +am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +gstoption_la_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_gstoption_la_OBJECTS = gstoption_la-gstoptionmodule.lo +gstoption_la_OBJECTS = $(am_gstoption_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +gstoption_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(gstoption_la_CFLAGS) \ + $(CFLAGS) $(gstoption_la_LDFLAGS) $(LDFLAGS) -o $@ +@HAVE_PYGOBJECT_2_16_TRUE@am_gstoption_la_rpath = -rpath $(pyexecdir) +DEFAULT_INCLUDES = -I.@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(gstoption_la_SOURCES) +DIST_SOURCES = $(gstoption_la_SOURCES) +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + { test ! -d "$(distdir)" \ + || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr "$(distdir)"; }; } +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2 +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ + +# include before EXTRA_DIST for win32 assignment +ACLOCAL_AMFLAGS = -I m4 -I common/m4 +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ERROR_CFLAGS = @ERROR_CFLAGS@ +EXEEXT = @EXEEXT@ +FFLAGS = @FFLAGS@ +FGREP = @FGREP@ +GCOV = @GCOV@ +GCOV_CFLAGS = @GCOV_CFLAGS@ +GCOV_LIBS = @GCOV_LIBS@ +GLIB_REQ = @GLIB_REQ@ +GREP = @GREP@ +GSTPB_REQ = @GSTPB_REQ@ +GST_BASE_CFLAGS = @GST_BASE_CFLAGS@ +GST_BASE_LIBS = @GST_BASE_LIBS@ +GST_CFLAGS = @GST_CFLAGS@ +GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@ +GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@ +GST_DISABLE_ALLOC_TRACE = @GST_DISABLE_ALLOC_TRACE@ +GST_DISABLE_GST_DEBUG = @GST_DISABLE_GST_DEBUG@ +GST_DISABLE_LOADSAVE = @GST_DISABLE_LOADSAVE@ +GST_DISABLE_PARSE = @GST_DISABLE_PARSE@ +GST_DISABLE_PLUGIN = @GST_DISABLE_PLUGIN@ +GST_DISABLE_REGISTRY = @GST_DISABLE_REGISTRY@ +GST_DISABLE_TRACE = @GST_DISABLE_TRACE@ +GST_DISABLE_XML = @GST_DISABLE_XML@ +GST_DP_CFLAGS = @GST_DP_CFLAGS@ +GST_DP_LIBS = @GST_DP_LIBS@ +GST_LIBS = @GST_LIBS@ +GST_MAJORMINOR = @GST_MAJORMINOR@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ +GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ +GST_OPTION_LIBS = @GST_OPTION_LIBS@ +GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@ +GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@ +GST_REQ = @GST_REQ@ +GTK_REQ = @GTK_REQ@ +IGNORE_GST_0_10_21 = @IGNORE_GST_0_10_21@ +IGNORE_GST_0_10_22 = @IGNORE_GST_0_10_22@ +IGNORE_GST_0_10_23 = @IGNORE_GST_0_10_23@ +IGNORE_GST_0_10_24 = @IGNORE_GST_0_10_24@ +IGNORE_GST_0_10_25 = @IGNORE_GST_0_10_25@ +IGNORE_GST_0_10_26 = @IGNORE_GST_0_10_26@ +IGNORE_GST_0_10_29 = @IGNORE_GST_0_10_29@ +IGNORE_GST_0_10_30 = @IGNORE_GST_0_10_30@ +IGNORE_GST_0_10_31 = @IGNORE_GST_0_10_31@ +IGNORE_GST_0_10_32 = @IGNORE_GST_0_10_32@ +IGNORE_GST_LOADSAVE = @IGNORE_GST_LOADSAVE@ +IGNORE_GST_PB_0_10_23 = @IGNORE_GST_PB_0_10_23@ +IGNORE_GST_PB_0_10_25 = @IGNORE_GST_PB_0_10_25@ +IGNORE_GST_PB_0_10_26 = @IGNORE_GST_PB_0_10_26@ +IGNORE_GST_PB_0_10_29 = @IGNORE_GST_PB_0_10_29@ +IGNORE_GST_PB_0_10_30 = @IGNORE_GST_PB_0_10_30@ +IGNORE_GST_PB_0_10_31 = @IGNORE_GST_PB_0_10_31@ +IGNORE_GST_PB_0_10_32 = @IGNORE_GST_PB_0_10_32@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@ +PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@ +PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@ +PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@ +PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PLUGINDIR = @PLUGINDIR@ +PYEXECDIR = @PYEXECDIR@ +PYGOBJECT_2_12_CFLAGS = @PYGOBJECT_2_12_CFLAGS@ +PYGOBJECT_2_12_LIBS = @PYGOBJECT_2_12_LIBS@ +PYGOBJECT_2_16_CFLAGS = @PYGOBJECT_2_16_CFLAGS@ +PYGOBJECT_2_16_LIBS = @PYGOBJECT_2_16_LIBS@ +PYGOBJECT_CFLAGS = @PYGOBJECT_CFLAGS@ +PYGOBJECT_LIBS = @PYGOBJECT_LIBS@ +PYGOBJECT_REQ = @PYGOBJECT_REQ@ +PYGST_CFLAGS = @PYGST_CFLAGS@ +PYGTK_CFLAGS = @PYGTK_CFLAGS@ +PYGTK_LIBS = @PYGTK_LIBS@ +PYGTK_REQ = @PYGTK_REQ@ +PYTHON = @PYTHON@ +PYTHONDIR = @PYTHONDIR@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_LIB_LOC = @PYTHON_LIB_LOC@ +PYTHON_LIB_SUFFIX = @PYTHON_LIB_SUFFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VALGRIND_PATH = @VALGRIND_PATH@ +VERSION = @VERSION@ +WARNING_CFLAGS = @WARNING_CFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +plugindir = @plugindir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = common codegen gst examples plugin testsuite pkgconfig +common_cflags = $(PYTHON_INCLUDES) $(PYGOBJECT_CFLAGS) $(GST_CFLAGS) $(GST_OPTION_CFLAGS) -fno-strict-aliasing +common_libadd = $(GST_LIBS) $(GST_OPTION_LIBS) +common_ldflags = -module -avoid-version + +# the MANIFEST contains all win32 related files that should be disted +win32 = $(shell cat $(top_srcdir)/win32/MANIFEST) + +# wildcard is apparently not portable to other makes, hence the use of find +# these are library .def files with the symbols to export +win32defs = $(shell find $(top_srcdir)/win32/common -name '*.def') + +# wildcard is apparently not portable to other makes, hence the use of find +# these are files that need to be disted with CRLF line endings: +win32crlf = $(shell find $(top_srcdir)/win32 -name '*.dsw' -o -name '*.dsp') +pyexec_LTLIBRARIES = $(am__append_1) + +# GStreamer option bindings +gstoption_la_CFLAGS = $(common_cflags) +gstoption_la_LIBADD = $(common_libadd) +gstoption_la_LDFLAGS = $(common_ldflags) \ + -export-symbols-regex "^(initgstoption|_PyGObject_API).*" + +gstoption_la_SOURCES = gstoptionmodule.c +EXTRA_DIST = \ + gstlibtoolimporter.py \ + pygst.py.in \ + gst-python.spec.in \ + gst-python.spec \ + RELEASE gst-python.doap \ + $(win32) + +BUILT_SOURCES = pygst.py +CLEANFILES = pygst.py pygst.pyc + +# make bz2 as well +AUTOMAKE_OPTIONS = dist-bzip2 +CRUFT_FILES = \ + $(top_builddir)/common/shave \ + $(top_builddir)/common/shave-libtool \ + $(top_builddir)/common/m4/libtool.m4 \ + $(top_builddir)/common/m4/ltoptions.m4 \ + $(top_builddir)/common/m4/ltsugar.m4 \ + $(top_builddir)/common/m4/ltversion.m4 \ + $(top_builddir)/common/m4/lt~obsolete.m4 + +all: $(BUILT_SOURCES) config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +am--refresh: + @: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/win32.mak $(top_srcdir)/common/release.mak $(top_srcdir)/common/coverage/lcov.mak $(top_srcdir)/common/cruft.mak $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ + else :; fi + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 +win32/common/config.h: $(top_builddir)/config.status $(top_srcdir)/win32/common/config.h.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +gst-python.spec: $(top_builddir)/config.status $(srcdir)/gst-python.spec.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +install-pyexecLTLIBRARIES: $(pyexec_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(pyexecdir)" || $(MKDIR_P) "$(DESTDIR)$(pyexecdir)" + @list='$(pyexec_LTLIBRARIES)'; test -n "$(pyexecdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pyexecdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pyexecdir)"; \ + } + +uninstall-pyexecLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(pyexec_LTLIBRARIES)'; test -n "$(pyexecdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pyexecdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pyexecdir)/$$f"; \ + done + +clean-pyexecLTLIBRARIES: + -test -z "$(pyexec_LTLIBRARIES)" || rm -f $(pyexec_LTLIBRARIES) + @list='$(pyexec_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +gstoption.la: $(gstoption_la_OBJECTS) $(gstoption_la_DEPENDENCIES) + $(AM_V_CCLD)$(gstoption_la_LINK) $(am_gstoption_la_rpath) $(gstoption_la_OBJECTS) $(gstoption_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gstoption_la-gstoptionmodule.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +gstoption_la-gstoptionmodule.lo: gstoptionmodule.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gstoption_la_CFLAGS) $(CFLAGS) -MT gstoption_la-gstoptionmodule.lo -MD -MP -MF $(DEPDIR)/gstoption_la-gstoptionmodule.Tpo -c -o gstoption_la-gstoptionmodule.lo `test -f 'gstoptionmodule.c' || echo '$(srcdir)/'`gstoptionmodule.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gstoption_la-gstoptionmodule.Tpo $(DEPDIR)/gstoption_la-gstoptionmodule.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstoptionmodule.c' object='gstoption_la-gstoptionmodule.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gstoption_la_CFLAGS) $(CFLAGS) -c -o gstoption_la-gstoptionmodule.lo `test -f 'gstoptionmodule.c' || echo '$(srcdir)/'`gstoptionmodule.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool config.lt + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && $(MAKE) $(AM_MAKEFLAGS) distcheck-hook \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @$(am__cd) '$(distuninstallcheck_dir)' \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-recursive +all-am: Makefile $(LTLIBRARIES) config.h all-local +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(pyexecdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-recursive + +clean-am: clean-generic clean-libtool clean-pyexecLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: install-exec-local install-pyexecLTLIBRARIES + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-local uninstall-pyexecLTLIBRARIES + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ + ctags-recursive install install-am install-strip \ + tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am all-local am--refresh check check-am clean \ + clean-generic clean-libtool clean-pyexecLTLIBRARIES ctags \ + ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-hook \ + dist-lzma dist-shar dist-tarZ dist-xz dist-zip distcheck \ + distclean distclean-compile distclean-generic distclean-hdr \ + distclean-libtool distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-exec-local \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-pyexecLTLIBRARIES install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ + uninstall-local uninstall-pyexecLTLIBRARIES + + +win32-debug: + @echo; \ + echo win32 = $(win32); \ + echo; \ + echo win32defs = $(win32defs); \ + echo; \ + echo win32crlf = $(win32crlf); \ + echo + +win32-check-crlf: + @echo Checking win32 files for CR LF line endings ...; \ + fail=0 ; \ + for each in $(win32crlf) ; do \ + result=`perl -e 'print grep(/\r\n/,<>)' "$$each" | wc -l`; \ + if test "$$result" = 0 ; then \ + echo $$each must be fixed to have CRLF line endings ; \ + fail=1; \ + fi ; \ + done ; \ + exit $$fail + +# make sure all symbols we export on linux are defined in the win32 .def too +# (don't care about other unixes for now, it's enough if it works on one of +# the linux build bots; we assume .so ) +check-exports: + @fail=0 ; \ + for l in $(win32defs); do \ + libbase=`basename "$$l" ".def"`; \ + libso=`find "$(top_builddir)" -name "$$libbase-@GST_MAJORMINOR@.so" | grep -v /_build/ | head -n1`; \ + libdef="$(top_srcdir)/win32/common/$$libbase.def"; \ + if test "x$$libso" != "x"; then \ + echo Checking symbols in $$libso; \ + if ! ($(top_srcdir)/common/check-exports $$libdef $$libso) ; then \ + fail=1; \ + fi; \ + fi; \ + done ; \ + if test $$fail != 0; then \ + echo '-----------------------------------------------------------'; \ + echo 'Run this to update the .def files:'; \ + echo 'make check-exports 2>&1 | patch -p1'; \ + echo '-----------------------------------------------------------'; \ + fi; \ + exit $$fail + +# complain about nonportable printf format strings (%lld, %llu, %zu etc.) +check-nonportable-print-format: + @fail=0 ; \ + loc=`find "$(top_srcdir)" -name '*.c' | xargs grep -n -e '%[0-9]*ll[udx]' -e '%[0-9]*z[udx]'`; \ + if test "x$$loc" != "x"; then \ + echo "Please fix the following print format strings:" ; \ + find "$(top_srcdir)" -name '*.c' | xargs grep -n -e '%[0-9]*ll[udx]' -e '%[0-9]*z[udx]'; \ + fail=1; \ + fi; \ + exit $$fail + +dist-hook: check-exports win32-check-crlf + +release: dist + $(MAKE) $(PACKAGE)-$(VERSION).tar.gz.md5 + $(MAKE) $(PACKAGE)-$(VERSION).tar.bz2.md5 + +# generate md5 sum files +%.md5: % + md5sum $< > $@ + +# check that no marshal or enumtypes files are included +# this in turn ensures that distcheck fails for missing .list files which is currently +# shadowed when the corresponding .c and .h files are included. +distcheck-hook: + @test "x" = "x`find $(distdir) -name \*-enumtypes.[ch] | grep -v win32`" && \ + test "x" = "x`find $(distdir) -name \*-marshal.[ch]`" || \ + ( $(ECHO) "*** Leftover enumtypes or marshal files in the tarball." && \ + $(ECHO) "*** Make sure the following files are not disted:" && \ + find $(distdir) -name \*-enumtypes.[ch] | grep -v win32 && \ + find $(distdir) -name \*-marshal.[ch] && \ + false ) + +pygst.py: $(top_srcdir)/pygst.py.in Makefile + if test -f $@; then chmod +w $@; fi + sed -e "s|@PYGSTDIR\@|$(shell pwd)|g" \ + -e "s|@GST_MAJORMINOR\@|$(GST_MAJORMINOR)|g" \ + $< > $@ + chmod -w $@ + +# rewrite pygst path in installed pygst.py, install pth file. +# they go in pyexecdir, should make 64bit users happy +install-exec-local: Makefile + $(mkinstalldirs) $(DESTDIR)$(pyexecdir) + sed -e "s|@PYGSTDIR\@|$(PYEXECDIR)/gst-$(GST_MAJORMINOR)|g" \ + -e "s|@GST_MAJORMINOR\@|$(GST_MAJORMINOR)|g" \ + $(srcdir)/pygst.py.in > $(DESTDIR)$(pyexecdir)/pygst.py + chmod 644 $(DESTDIR)$(pyexecdir)/pygst.py + echo "gst-$(GST_MAJORMINOR)" > $(DESTDIR)$(pyexecdir)/pygst.pth + +uninstall-local: + @rm $(DESTDIR)/$(pyexecdir)/pygst.py > /dev/null 2>&1 || true + @rm $(DESTDIR)/$(pyexecdir)/pygst.pth > /dev/null 2>&1 || true + +check-valgrind: + cd testsuite/ && make check-valgrind + +check-torture: + @true +.PHONY: lcov-reset lcov lcov-run lcov-report lcov-upload + +# run lcov from scratch, always +lcov-reset: + $(MAKE) lcov-run + $(MAKE) lcov-report + +# run lcov from scratch if the dir is not there +lcov: + $(MAKE) lcov-reset + +# reset run coverage tests +@GST_GCOV_ENABLED_TRUE@lcov-run: +@GST_GCOV_ENABLED_TRUE@ @-rm -rf lcov +@GST_GCOV_ENABLED_TRUE@ lcov --directory . --zerocounters +@GST_GCOV_ENABLED_TRUE@ -if test -d tests/check; then $(MAKE) -C tests/check inspect; fi +@GST_GCOV_ENABLED_TRUE@ -$(MAKE) check + +# generate report based on current coverage data +@GST_GCOV_ENABLED_TRUE@lcov-report: +@GST_GCOV_ENABLED_TRUE@ mkdir lcov +@GST_GCOV_ENABLED_TRUE@ lcov --compat-libtool --directory . --capture --output-file lcov/lcov.info +@GST_GCOV_ENABLED_TRUE@ lcov --list-full-path -l lcov/lcov.info | grep -v "`cd $(top_srcdir) && pwd`" | cut -d\| -f1 > lcov/remove +@GST_GCOV_ENABLED_TRUE@ lcov --list-full-path -l lcov/lcov.info | grep "tests/check/" | cut -d\| -f1 >> lcov/remove +@GST_GCOV_ENABLED_TRUE@ lcov --list-full-path -l lcov/lcov.info | grep "docs/plugins/" | cut -d\| -f1 >> lcov/remove +@GST_GCOV_ENABLED_TRUE@ lcov -r lcov/lcov.info `cat lcov/remove` > lcov/lcov.cleaned.info +@GST_GCOV_ENABLED_TRUE@ rm lcov/remove +@GST_GCOV_ENABLED_TRUE@ mv lcov/lcov.cleaned.info lcov/lcov.info +@GST_GCOV_ENABLED_TRUE@ genhtml -t "$(PACKAGE_STRING)" -o lcov --num-spaces 2 lcov/lcov.info + +@GST_GCOV_ENABLED_TRUE@lcov-upload: lcov +@GST_GCOV_ENABLED_TRUE@ rsync -rvz -e ssh --delete lcov/* gstreamer.freedesktop.org:/srv/gstreamer.freedesktop.org/www/data/coverage/lcov/$(PACKAGE) + +@GST_GCOV_ENABLED_FALSE@lcov-run: +@GST_GCOV_ENABLED_FALSE@ echo "Need to reconfigure with --enable-gcov" + +@GST_GCOV_ENABLED_FALSE@lcov-report: +@GST_GCOV_ENABLED_FALSE@ echo "Need to reconfigure with --enable-gcov" + +check-cruft: + @cruft_files=""; cruft_dirs=""; \ + for f in $(CRUFT_FILES); do \ + if test -e $$f; then \ + cruft_files="$$cruft_files $$f"; \ + fi \ + done; \ + for d in $(CRUFT_DIRS); do \ + if test -e $$d; then \ + cruft_dirs="$$cruft_dirs $$d"; \ + fi \ + done; \ + if test "x$$cruft_files$$cruft_dirs" != x; then \ + echo; \ + echo "**** CRUFT ALERT *****"; \ + echo; \ + echo "The following files and directories may not be needed any "; \ + echo "longer (usually because a plugin has been merged into "; \ + echo "another plugin, moved to a different module, or been "; \ + echo "renamed), and you probably want to clean them up if you "; \ + echo "don't have local changes: "; \ + echo; \ + for f in $$cruft_files; do echo "file $$f"; done; \ + echo; \ + for d in $$cruft_dirs; do echo "directory $$d"; done; \ + echo; \ + echo "'make clean-cruft' will remove these for you."; \ + echo; \ + fi + +clean-cruft-dirs: + @for d in $(CRUFT_DIRS); do \ + if test -e $$d; then \ + rm -r "$$d" && echo "Removed directory $$d"; \ + fi \ + done + +clean-cruft-files: + @for f in $(CRUFT_FILES); do \ + if test -e $$f; then \ + rm "$$f" && echo "Removed file $$f"; \ + fi \ + done + +clean-cruft: clean-cruft-dirs clean-cruft-files + +# also might want to add this to your Makefile.am: +# +# all-local: check-cruft + +all-local: check-cruft + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..c479baa --- /dev/null +++ b/NEWS @@ -0,0 +1,355 @@ +This is GStreamer Python Bindings 0.10.22, "Ninety Tons of Thunder" + +Changes since 0.10.21: + + * pad probes working properly with recent GStreamer + * fixes for encoding profiles and encodebin + * build fixes + * install pygst.h, pygstminiobject.h and other headers + so they can be used by other python bindings such the + ones for gstreamer-editing-services + +Bugs fixed since 0.10.21: + + * 587432 : Update .defs for changed API + * 639421 : remuxer.py: do not crash when clicking open without having selected a file + * 639423 : remuxer.py: list files named *.og[gvax], not only *.ogg + * 639427 : remuxer.py: allow more than one stream of the same type + * 640207 : Fix make check when locale is not the default one + * 640341 : gst-python 0.10.21 does not compile + * 640410 : codegen: Respect ignore-type for miniobjects + * 640837 : GStreamer-python fails to build + * 649227 : Check for Py_None when setting a miniobject + * 650986 : Fix overrides of pad probes + * 650987 : 0.10.34 gstreamer has pad_probe counting issues + * 656289 : We should be able to reuse (Py)GstMiniObject and its subclasses from outside of pygst + * 657435 : Does not add the include path to the pkg-config file, needed in an uninstalled setup by g-e-s + +Changes since 0.10.20: + + * gstreamer core/base 0.10.32 API additions + * Fix GstDiscover methods + +Changes since 0.10.19: + + * libpython loading fixes + * MacOSX standard python support + +Changes since 0.10.18: + + * Updates to 0.10.29/0.10.30 core/base API addition + +Changes since 0.10.17: + + * Updates to 0.10.26 core/base API addition + +Bugs fixed since 0.10.17: + + * 592459 : info.print_info() uses info.tags.pop() to get values, but pop is destructive, so calling print_info twice can return different results + * 599818 : Import of pygst fails with Element missing + +Changes since 0.10.16: + + * Fix leak in gst_base_sink_get_last_buffer() + * Fix linking of pygstminiobject + * Add test_audio.py example + * Fix deadlocks calling gst_pad_link() + +Bugs fixed since 0.10.16: + + * 590348 : [audio (and other modules)] can't use pygstminiobject ! + * 590803 : checks fail in non-English locale + * 592447 : memory leak on certain pipelines with appsink + +Changes since 0.10.15: + + * Update bindings for GStreamer 0.10.24 + * Fixes for the python plugin loader + +Bugs fixed since 0.10.15: + + * 580992 : gst_preset_get_preset_names not wrapped in gst-python + * 583378 : libgstpython.so causes a segfault + * 583607 : Error when building from tarball + * 584445 : gst.TagList getters and setters should convert unicode ob... + +Changes since 0.10.14: + + * Support new API in core/base + * Fixes for python 2.6 + * Other bug-fixes and improvements + +Bugs fixed since 0.10.14: + + * 304361 : Python plugin loader + * 576145 : pygst programs skip python plugins on registry update + * 514717 : memleak in Pad.set_blocked_async() + * 571156 : gst_tag_get_type not wrapped + * 571380 : Allow user to specify filename and line number for gst_de... + * 572487 : Fix licensing screwups + * 574251 : leaks the flow name + * 574258 : _wrap_gst_install_plugins_sync might leak details + * 574272 : Python plugin loader causes SIGSEGV if " import gst " fails + * 576505 : not all gst_adapter_* methods are wrapped + * 577735 : python bins with do_handle_message leak messages + * 578435 : gst-python pkgconfig file lies about needing pygtk + * 578731 : Python plugin loader deadlocks registry scanning + * 578848 : Wrap new core/base API + * 579183 : freshly created QUERY_SEEKING is immutable + * 579325 : gstlibtoolimporter is not disted + * 579383 : gst-python doesn't compile with glib < = 2.16.0 + * 581546 : Elements do_query function is broken + * 581729 : Fails to build with previous core/base releases (0.10.22) + * 581737 : Python examples need to take the GDK lock + * 579416 : Nasty gst-python deadlock + * 579455 : gst.TIME_ARGS doesn't validate input + * 576546 : Problems with Python 2.6 + +Changes since 0.10.13: + + * Handle keep-refcount for GBoxed arguments + * Mark gst.message* that take ownership of the gst.Structure/gst.TagList + * Wrap new API in Core and Base + * Various other bug fixes and improvements + +Bugs fixed since 0.10.13: + + * 543961 : Memory leak in gst.Bin.do_handle_message + * 553131 : Import modules in correct order + * 553134 : Assumes wrong RTLD constants for Linux/MIPS + * 554545 : gst.Pad methods that return a new buffer as function argu... + * 556054 : codegen: Add 'keep-refcount' handling for GBoxed arguments + * 559406 : Add proxy for gst_base_transform_transform_size + * 559768 : Fix gst-python on systems that don't support RTLD_GLOBAL ... + * 564580 : Memory leak in gst.Structure.keys() + * 566903 : gst.Pad.iterate_internal_links may raise critical warning... + +Changes since 0.10.12: + + * Updated for GStreamer 0.10.21 API + * New examples + * Fix double import issues on OS/X + * Bug fixes + +Bugs fixed since 0.10.12: + + * 553131 : Import modules in correct order + * 553134 : Assumes wrong RTLD constants for Linux/MIPS + * 461838 : Fails to build on Mac OS X i686 with multiply defined sym... + * 517993 : pipeline-tester should not be hardcoded to ALSA + * 540221 : Empty GstMiniObject GValues raise a SystemError + * 546689 : Add GST_DEBUG_BIN_TO_DOT_FILE* to python bindings + * 549450 : caps.append_structure() gives warnings if structure is no... + +Changes since 0.10.11: + + * Build fixes + * make gst.Fraction do simplification like GstFraction does in C + * Wrap gst_type_find_register + * Various bug-fixes + +Bugs fixed since 0.10.11: + + * 529728 : wrap gst_type_find_register + * 529731 : release the GIL around gst_element_factory_make + * 531697 : wrong indentation + * 532809 : gst-python version of gst.Fraction doesn't simplify + * 534888 : gst-python refcount error with gst_event_new_tag + +Changes since 0.10.10: + + * Wrap gst.Pad.start_task + * New videomixer example + * Various other fixes + +Bugs fixed since 0.10.10: + + * 512916 : python_do_pending_calls timer is apparently redundant + * 514717 : memleak in Pad.set_blocked_async() + +Changes since 0.10.9: + + * Wrap new API for 0.10.16 GStreamer and Base releases. + * New gst.pbutils module wraps the gst-plugins-base pbutils library. + * Rework gst_pad_add_*probe function wrapping to avoid leaks. + * Various build fixes. + +Bugs fixed since 0.10.9: + + * 509522 : New gst-python bindings don't compile with python2.4 + * 472822 : Wrap -base utils helper library + * 504786 : pad probes leak refs to their data + * 509766 : generated win32/common/config.h miss some defines + * 510437 : Build failure due to missing Python.h + +Changes since 0.10.8 + * Major crasher fixed when using latest pygobject + * Build system for Visual Studio 6 + * Added wrapping for 0.10.15 gstreamer core/base + +Bugs fixed since 0.10.8: + + * 490195 : [gst.URIHandler] interfaces with class-global virtual met... + * 425847 : Silently overrides some functions of default module optparse + +Changes since 0.10.7: + +Bugs fixed since 0.10.7: + + * 398567 : undefined symbol: libxml_xmlDocPtrWrap + * 343980 : [solaris] import gst crash python + * 363795 : Impossible to reset a pad to " unnegotiated " from Python + * 380966 : Discoverer doesn't cope well with demuxers that don't cre... + * 381243 : No checks are made when converting from gst.Fraction to G... + * 385841 : Handle gchar** (GStrv) arguments + * 410838 : gst-python doesn't handle gst.Buffers in GValues (e.g. in... + * 418222 : New parameter to the discoverer to change the default max... + * 432521 : [gst-discover] show audio and video length in ms + * 433375 : [win32] autogenerated win32/common/config.h needed + * 436620 : get_uri_type methods should return enum objects + * 446674 : API break + * 450117 : [PATCH] gst.event_new_custom needs to copy structure as C... + * 451645 : gst.Buffer.stamp() is broked + * 454259 : Requestable Pad Segfaults When No Name Is Supplied + * 376996 : [PATCH] Fully implement GstPropertyProbe interface + * 415003 : build warnings against python 2.5 on x86_64 + * 428299 : Allow python elements to implement pad queries + +Changes since 0.10.6: + * Threadsafe fix + +Bugs fixed since 0.10.6: + + * 383805 : segfault with videobalance + * 401051 : Fails to build with gst-plugins-base < 0.10.11 + +Changes since 0.10.5: + + * Can now build without requiring pygtk and its dependencies + * installation fixes + +Bugs fixed since 0.10.5: + + * 355150 : Expose GST_PARAM_CONTROLLABLE in the bindings + * 343980 : import gst crash python + * 346190 : allow build/install without pygtk (ie pygobject) + * 349623 : Build failure due to "discards qualifiers from pointer ta... + * 359375 : variable 'interface' results in syntax error with MingW + * 362011 : [patch] Indentation typo in examples/bps.py + * 362183 : Please remove examples/gst123 + * 362202 : [patch] A replacement of examples/vorbisplay.py for 0.10 + * 362272 : [patch] Ports examples/audioconcat.py to 0.10 + * 362290 : [patch] Ports examples/cp.py to 0.10 + * 371969 : [Discoverer] Issues with demuxers that don't create pads ... + * 348416 : remuxer example should use normal seek + * 349107 : gst.BaseSrc can't negotiate with ffmpegcolorspace + +Changes since 0.10.4: + + * now requires glib >= 2.8 + * switch to up-to-date pygtk codegenerator + +Bugs fixed since 0.10.4: + + * 319871 : drop GIL state lock when doing something that can cause a... + * 338982 : python refcounting problems in gstpad.override + * 313138 : Need to update constructors to use properties + * 329075 : __gsignals__ doesn' t work in classes derived from gst.Pi... + * 334548 : Proper use of PyTuple and PyList for return values + * 339040 : [patch] Error domains from gsterror are not wrapped + * 339248 : Wrapper for virtual method GstBaseTransform.get_unit_size + * 339308 : MiniObject arguments for virtual methods shouldn't have t... + * 339767 : An example of subclassing GstBaseTransform + * 339938 : filesrc.py example still uses 0.8 API + * 341114 : pygst.require uses asserts rather than real error checking + * 341799 : patch to make gst-python work on OSes without dl.so + * 342493 : audio-controller.py needs slight updates for 0.10 + * 343652 : gstfile.py sometimes results in " *** glibc detected *** c... + +Changes since 0.10.3: + + * Conditional compile of core API additions + * wrapped gst.BaseSrc and gst.PushSrc + +Bugs fixed since 0.10.3: + + * 339010 : segfault/undefined behavior with optional GstCaps args + * 337876 : TagList does not retreive tags by key if 2 or more tags w... + +API added since 0.10.3: + + * gst.get_gst_version() + * gst.get_pygst_version() + +Changes since 0.10.2: + + * Backwards compatibility with older GStreamer installations + * Wrapping of new API in GStreamer + * Bug-fixes and enhancements + +Bugs fixed since 0.10.2: + + * 329110 : gst-python sets RTLD_GLOBAL when importing, but doesn't s... + * 332586 : pygst.require should raise an error based on StandardErro... + * 333055 : PYGIL_API_IS_BUGGY is already defined in pygobect.h + * 331616 : gst.version and gst.gst_version differ + +Changes since 0.10.1: + + * Parallel installability with 0.8.x series + * Threadsafe design and API + * allow fractions in structures + * added vmethods for base classes + +Bugs fixed since 0.10.1: + + * 325459 : Fractions cannot be used as values for gst.Structure fileds + +Changes since 0.10.0: + + * added discoverer + * updated for core API additions + +API changed since 0.10.0: + + * gst.extend.discoverer + * wrapped gst_version() + * wrapped gst_type_find_factory_get_list() + * wrapped gst_mixer_options_get_values() + * wrapped gst_dp_*() + * wrapped gst_element_factory_get_static_pad_templates() + +Changes since 0.9.6: + + * Updates for API changes + +Bugs fixed since 0.9.6: + + * 322250 : Remove *_full wrappers + +Changes since 0.9.5: + + * added FractionRange + * updated for API changes + +Bugs fixed since 0.9.5: + + * 318793 : check whether new date/tag API needs wrapping + * 321839 : pipeline hangs in get_state after changing trival pipeline + +Changes since 0.9.4: + + * Remove mini-object caching, fixes crashes + * added gst.TagList + * added gst.TIME_ARGS + +Bugs fixed since 0.9.4: + + * 306817 : No way to set tags in gst-python + * 320357 : element_query_duration not wrapped + +Bugs fixed since 0.9.3: + + * 315433 : gst.element_factory_make and some other functions should ... + * 318684 : [PATCH] reference leaks when using PyList_Append to popul... + * 318692 : gst-python fails to build with python 2.3 diff --git a/README b/README new file mode 100644 index 0000000..92ffc66 --- /dev/null +++ b/README @@ -0,0 +1 @@ +This file will be autogenerated. Please read README-docs. diff --git a/RELEASE b/RELEASE new file mode 100644 index 0000000..692cabc --- /dev/null +++ b/RELEASE @@ -0,0 +1,79 @@ + +Release notes for GStreamer Python bindings 0.10.22 "Ninety Tons of Thunder" + + + +The GStreamer team is proud to announce a new release +in the 0.10.x stable series of the +GStreamer Python Bindings. + + +The 0.10.x series is a stable series targeted at end users. + + + + +Features of this release + + * pad probes working properly with recent GStreamer + * fixes for encoding profiles and encodebin + * build fixes + * install pygst.h, pygstminiobject.h and other headers so they can be used by other python bindings such the ones for gstreamer-editing-services + +Bugs fixed in this release + + * 587432 : Update .defs for changed API + * 639421 : remuxer.py: do not crash when clicking open without having selected a file + * 639423 : remuxer.py: list files named *.og[gvax], not only *.ogg + * 639427 : remuxer.py: allow more than one stream of the same type + * 640207 : Fix make check when locale is not the default one + * 640341 : gst-python 0.10.21 does not compile + * 640410 : codegen: Respect ignore-type for miniobjects + * 640837 : GStreamer-python fails to build + * 649227 : [python] Check for Py_None when setting a miniobject + * 650986 : [gst-python] Fix overrides of pad probes + * 650987 : 0.10.34 gstreamer has pad_probe counting issues + * 656289 : We should be able to reuse (Py)GstMiniObject and its subclasses from outside of pygst + * 657435 : Does not add the include path to the pkg-config file, needed in an uninstalled setup by g-e-s + +Download + +You can find source releases of gst-python in the download directory: +http://gstreamer.freedesktop.org/src/gst-python/ + +GStreamer Homepage + +More details can be found on the project's website: +http://gstreamer.freedesktop.org/ + +Support and Bugs + +We use GNOME's bugzilla for bug reports and feature requests: +http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer + +Developers + +GStreamer is stored in Git, hosted at git.freedesktop.org, and can be cloned from there. +Interested developers of the core library, plug-ins, and applications should +subscribe to the gstreamer-devel list. If there is sufficient interest we +will create more lists as necessary. + + +Applications + +Contributors to this release + + * Andoni Morales Alastruey + * Arun Raghavan + * David Schleef + * Edward Hervey + * Luis de Bethencourt + * Mark Nauwelaerts + * Sebastian Dröge + * Stefan Kost + * Stefan Sauer + * Thiago Santos + * Thibault Saunier + * Tim-Philipp Müller + * Vincent Penquerc'h +  \ No newline at end of file diff --git a/TODO b/TODO new file mode 100644 index 0000000..c882122 --- /dev/null +++ b/TODO @@ -0,0 +1 @@ +Add a pygst-private.h and put some common stuff in there. diff --git a/acinclude.m4 b/acinclude.m4 new file mode 100644 index 0000000..85e7805 --- /dev/null +++ b/acinclude.m4 @@ -0,0 +1,122 @@ +## this one is commonly used with AM_PATH_PYTHONDIR ... +dnl AM_CHECK_PYMOD(MODNAME [,SYMBOL [,ACTION-IF-FOUND [,ACTION-IF-NOT-FOUND]]]) +dnl Check if a module containing a given symbol is visible to python. +AC_DEFUN([AM_CHECK_PYMOD], +[AC_REQUIRE([AM_PATH_PYTHON]) +py_mod_var=`echo $1['_']$2 | sed 'y%./+-%__p_%'` +AC_MSG_CHECKING(for ifelse([$2],[],,[$2 in ])python module $1) +AC_CACHE_VAL(py_cv_mod_$py_mod_var, [ +ifelse([$2],[], [prog=" +import sys +try: + import $1 +except ImportError: + sys.exit(1) +except: + sys.exit(0) +sys.exit(0)"], [prog=" +import $1 +$1.$2"]) +if $PYTHON -c "$prog" 1>&AC_FD_CC 2>&AC_FD_CC + then + eval "py_cv_mod_$py_mod_var=yes" + else + eval "py_cv_mod_$py_mod_var=no" + fi +]) +py_val=`eval "echo \`echo '$py_cv_mod_'$py_mod_var\`"` +if test "x$py_val" != xno; then + AC_MSG_RESULT(yes) + ifelse([$3], [],, [$3 +])dnl +else + AC_MSG_RESULT(no) + ifelse([$4], [],, [$4 +])dnl +fi +]) + +dnl a macro to check for ability to create python extensions +dnl AM_CHECK_PYTHON_HEADERS([ACTION-IF-POSSIBLE], [ACTION-IF-NOT-POSSIBLE]) +dnl function also defines PYTHON_INCLUDES +AC_DEFUN([AM_CHECK_PYTHON_HEADERS], +[AC_REQUIRE([AM_PATH_PYTHON]) +AC_MSG_CHECKING(for headers required to compile python extensions) +dnl deduce PYTHON_INCLUDES +py_prefix=`$PYTHON -c "import sys; print sys.prefix"` +py_exec_prefix=`$PYTHON -c "import sys; print sys.exec_prefix"` +if $PYTHON-config --help 2>/dev/null; then + PYTHON_INCLUDES=`$PYTHON-config --includes 2>/dev/null` +else + PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}" + if test "$py_prefix" != "$py_exec_prefix"; then + PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}" + fi +fi +AC_SUBST(PYTHON_INCLUDES) +dnl check if the headers exist: +save_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="$CPPFLAGS $PYTHON_INCLUDES" +AC_TRY_CPP([#include ],dnl +[AC_MSG_RESULT(found) +$1],dnl +[AC_MSG_RESULT(not found) +$2]) +CPPFLAGS="$save_CPPFLAGS" +]) + +dnl a macro to check for ability to embed python +dnl AM_CHECK_PYTHON_LIBS([ACTION-IF-POSSIBLE], [ACTION-IF-NOT-POSSIBLE]) +dnl function also defines PYTHON_LIBS +AC_DEFUN([AM_CHECK_PYTHON_LIBS], +[AC_REQUIRE([AM_CHECK_PYTHON_HEADERS]) +AC_MSG_CHECKING(for libraries required to embed python) + +dnl deduce PYTHON_LIBS +if $PYTHON-config --help 2>/dev/null; then + PYTHON_LIBS=`$PYTHON-config --ldflags 2>/dev/null` + PYTHON_LIB=`$PYTHON -c "import distutils.sysconfig as s; print s.get_python_lib(standard_lib=1)"` + if echo "$host_os" | grep darwin >/dev/null 2>&1; then + dnl OSX is a pain. Python as shipped by apple installs libpython in /usr/lib + dnl so we hardcode that. Other systems can use --with-libpython-dir to + dnl overrid this. + PYTHON_LIB_LOC=/usr/lib + else + PYTHON_LIB_LOC=$PYTHON_LIB/config + + # default to prefix/lib for distros that don't have a link in + # .../pythonX.Y/config/ + if test ! -e $PYTHON_LIB_LOC/libpython${PYTHON_VERSION}.so; then + PYTHON_LIB_LOC=${py_prefix}/lib + fi + fi +else + PYTHON_LIBS="-L${py_prefix}/lib -lpython${PYTHON_VERSION}" + PYTHON_LIB_LOC="${py_prefix}/lib" +fi + +AC_ARG_WITH([libpython-dir], + AS_HELP_STRING([--with-libpython-dir], [the directory containing libpython${PYTHON_VERSION}]), + [ + PYTHON_LIB_LOC=`echo "$withval" | sed -e 's/\/$//g'` + ] +) + +if echo "$host_os" | grep darwin >/dev/null 2>&1; then + dnl workaround libtool brokenness under OSX + PYTHON_LIB_SUFFIX=\\\"dylib\\\" +else + PYTHON_LIB_SUFFIX=G_MODULE_SUFFIX +fi + +AC_SUBST(PYTHON_LIBS) +AC_SUBST(PYTHON_LIB_LOC) +AC_SUBST(PYTHON_LIB_SUFFIX) +dnl check if the headers exist: +save_LIBS="$LIBS" +LIBS="$LIBS $PYTHON_LIBS" +AC_TRY_LINK_FUNC(Py_Initialize, dnl + [LIBS="$save_LIBS"; AC_MSG_RESULT(yes); $1], dnl + [LIBS="$save_LIBS"; AC_MSG_RESULT(no); $2]) + +]) diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 0000000..6a80734 --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,1287 @@ +# generated automatically by aclocal 1.11.1 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, +[m4_warning([this file was generated for autoconf 2.68. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) + +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.11' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.11.1], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.11.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 9 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 10 + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +#serial 5 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 8 + +# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. +AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 16 + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.62])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) + +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST(install_sh)]) + +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- +# From Jim Meyering + +# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_MAINTAINER_MODE([DEFAULT-MODE]) +# ---------------------------------- +# Control maintainer-specific portions of Makefiles. +# Default is to disable them, unless `enable' is passed literally. +# For symmetry, `disable' may be passed as well. Anyway, the user +# can override the default with the --enable/--disable switch. +AC_DEFUN([AM_MAINTAINER_MODE], +[m4_case(m4_default([$1], [disable]), + [enable], [m4_define([am_maintainer_other], [disable])], + [disable], [m4_define([am_maintainer_other], [enable])], + [m4_define([am_maintainer_other], [enable]) + m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) +AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles]) + dnl maintainer-mode's default is 'disable' unless 'enable' is passed + AC_ARG_ENABLE([maintainer-mode], +[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful + (and sometimes confusing) to the casual installer], + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST([MAINT])dnl +] +) + +AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 6 + +# AM_PROG_CC_C_O +# -------------- +# Like AC_PROG_CC_C_O, but changed for automake. +AC_DEFUN([AM_PROG_CC_C_O], +[AC_REQUIRE([AC_PROG_CC_C_O])dnl +AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +# FIXME: we rely on the cache variable name because +# there is no other way. +set dummy $CC +am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` +eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o +if test "$am_t" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +dnl Make sure AC_PROG_CC is never called again, or it will override our +dnl setting of CC. +m4_define([AC_PROG_CC], + [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])]) +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 6 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_MKDIR_P +# --------------- +# Check for `mkdir -p'. +AC_DEFUN([AM_PROG_MKDIR_P], +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# --------------------------------------------------------------------------- +# Adds support for distributing Python modules and packages. To +# install modules, copy them to $(pythondir), using the python_PYTHON +# automake variable. To install a package with the same name as the +# automake package, install to $(pkgpythondir), or use the +# pkgpython_PYTHON automake variable. +# +# The variables $(pyexecdir) and $(pkgpyexecdir) are provided as +# locations to install python extension modules (shared libraries). +# Another macro is required to find the appropriate flags to compile +# extension modules. +# +# If your package is configured with a different prefix to python, +# users will have to add the install directory to the PYTHONPATH +# environment variable, or create a .pth file (see the python +# documentation for details). +# +# If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will +# cause an error if the version of python installed on the system +# doesn't meet the requirement. MINIMUM-VERSION should consist of +# numbers and dots only. +AC_DEFUN([AM_PATH_PYTHON], + [ + dnl Find a Python interpreter. Python versions prior to 2.0 are not + dnl supported. (2.0 was released on October 16, 2000). + m4_define_default([_AM_PYTHON_INTERPRETER_LIST], + [python python2 python3 python3.0 python2.5 python2.4 python2.3 python2.2 dnl +python2.1 python2.0]) + + m4_if([$1],[],[ + dnl No version check is needed. + # Find any Python interpreter. + if test -z "$PYTHON"; then + AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :) + fi + am_display_PYTHON=python + ], [ + dnl A version check is needed. + if test -n "$PYTHON"; then + # If the user set $PYTHON, use it and don't search something else. + AC_MSG_CHECKING([whether $PYTHON version >= $1]) + AM_PYTHON_CHECK_VERSION([$PYTHON], [$1], + [AC_MSG_RESULT(yes)], + [AC_MSG_ERROR(too old)]) + am_display_PYTHON=$PYTHON + else + # Otherwise, try each interpreter until we find one that satisfies + # VERSION. + AC_CACHE_CHECK([for a Python interpreter with version >= $1], + [am_cv_pathless_PYTHON],[ + for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do + test "$am_cv_pathless_PYTHON" = none && break + AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break]) + done]) + # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. + if test "$am_cv_pathless_PYTHON" = none; then + PYTHON=: + else + AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON]) + fi + am_display_PYTHON=$am_cv_pathless_PYTHON + fi + ]) + + if test "$PYTHON" = :; then + dnl Run any user-specified action, or abort. + m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])]) + else + + dnl Query Python for its version number. Getting [:3] seems to be + dnl the best way to do this; it's what "site.py" does in the standard + dnl library. + + AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version], + [am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[[:3]])"`]) + AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) + + dnl Use the values of $prefix and $exec_prefix for the corresponding + dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made + dnl distinct variables so they can be overridden if need be. However, + dnl general consensus is that you shouldn't need this ability. + + AC_SUBST([PYTHON_PREFIX], ['${prefix}']) + AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}']) + + dnl At times (like when building shared libraries) you may want + dnl to know which OS platform Python thinks this is. + + AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform], + [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`]) + AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) + + + dnl Set up 4 directories: + + dnl pythondir -- where to install python scripts. This is the + dnl site-packages directory, not the python standard library + dnl directory like in previous automake betas. This behavior + dnl is more consistent with lispdir.m4 for example. + dnl Query distutils for this directory. distutils does not exist in + dnl Python 1.5, so we fall back to the hardcoded directory if it + dnl doesn't work. + AC_CACHE_CHECK([for $am_display_PYTHON script directory], + [am_cv_python_pythondir], + [if test "x$prefix" = xNONE + then + am_py_prefix=$ac_default_prefix + else + am_py_prefix=$prefix + fi + am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null || + echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pythondir in + $am_py_prefix*) + am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` + am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` + ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) + am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + ]) + AC_SUBST([pythondir], [$am_cv_python_pythondir]) + + dnl pkgpythondir -- $PACKAGE directory under pythondir. Was + dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is + dnl more consistent with the rest of automake. + + AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) + + dnl pyexecdir -- directory for installing python extension modules + dnl (shared libraries) + dnl Query distutils for this directory. distutils does not exist in + dnl Python 1.5, so we fall back to the hardcoded directory if it + dnl doesn't work. + AC_CACHE_CHECK([for $am_display_PYTHON extension module directory], + [am_cv_python_pyexecdir], + [if test "x$exec_prefix" = xNONE + then + am_py_exec_prefix=$am_py_prefix + else + am_py_exec_prefix=$exec_prefix + fi + am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null || + echo "$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pyexecdir in + $am_py_exec_prefix*) + am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` + am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` + ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) + am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + ]) + AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) + + dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE) + + AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) + + dnl Run any user-specified action. + $2 + fi + +]) + + +# AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) +# --------------------------------------------------------------------------- +# Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION. +# Run ACTION-IF-FALSE otherwise. +# This test uses sys.hexversion instead of the string equivalent (first +# word of sys.version), in order to cope with versions such as 2.2c1. +# This supports Python 2.0 or higher. (2.0 was released on October 16, 2000). +AC_DEFUN([AM_PYTHON_CHECK_VERSION], + [prog="import sys +# split strings by '.' and convert to numeric. Append some zeros +# because we need at least 4 digits for the hex conversion. +# map returns an iterator in Python 3.0 and a list in 2.x +minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]] +minverhex = 0 +# xrange is not present in Python 3.0 and range returns an iterator +for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]] +sys.exit(sys.hexversion < minverhex)" + AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# Copyright (C) 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 1 + +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# (`yes' being less verbose, `no' or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], +[ --enable-silent-rules less verbose build output (undo: `make V=1') + --disable-silent-rules verbose build output (undo: `make V=0')]) +case $enable_silent_rules in +yes) AM_DEFAULT_VERBOSITY=0;; +no) AM_DEFAULT_VERBOSITY=1;; +*) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of `v7', `ustar', or `pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([common/m4/as-ac-expand.m4]) +m4_include([common/m4/as-compiler-flag.m4]) +m4_include([common/m4/as-version.m4]) +m4_include([common/m4/gst-args.m4]) +m4_include([common/m4/gst-error.m4]) +m4_include([common/m4/gst-feature.m4]) +m4_include([common/m4/gst-package-release-datetime.m4]) +m4_include([common/m4/gst-plugindir.m4]) +m4_include([common/m4/gst-valgrind.m4]) +m4_include([common/m4/gst.m4]) +m4_include([common/m4/pkg.m4]) +m4_include([m4/libtool.m4]) +m4_include([m4/ltoptions.m4]) +m4_include([m4/ltsugar.m4]) +m4_include([m4/ltversion.m4]) +m4_include([m4/lt~obsolete.m4]) +m4_include([acinclude.m4]) diff --git a/codegen/Makefile.am b/codegen/Makefile.am new file mode 100644 index 0000000..dd3eea0 --- /dev/null +++ b/codegen/Makefile.am @@ -0,0 +1,15 @@ +EXTRA_DIST = \ + argtypes.py \ + code-coverage.py \ + codegen.py \ + definitions.py \ + defsparser.py \ + docextract.py \ + docgen.py \ + h2def.py \ + __init__.py \ + mergedefs.py \ + mkskel.py \ + override.py \ + reversewrapper.py \ + scmexpr.py diff --git a/codegen/Makefile.in b/codegen/Makefile.in new file mode 100644 index 0000000..208b34b --- /dev/null +++ b/codegen/Makefile.in @@ -0,0 +1,478 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = codegen +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ + $(top_srcdir)/common/m4/as-compiler-flag.m4 \ + $(top_srcdir)/common/m4/as-version.m4 \ + $(top_srcdir)/common/m4/gst-args.m4 \ + $(top_srcdir)/common/m4/gst-error.m4 \ + $(top_srcdir)/common/m4/gst-feature.m4 \ + $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ + $(top_srcdir)/common/m4/gst-plugindir.m4 \ + $(top_srcdir)/common/m4/gst-valgrind.m4 \ + $(top_srcdir)/common/m4/gst.m4 $(top_srcdir)/common/m4/pkg.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ERROR_CFLAGS = @ERROR_CFLAGS@ +EXEEXT = @EXEEXT@ +FFLAGS = @FFLAGS@ +FGREP = @FGREP@ +GCOV = @GCOV@ +GCOV_CFLAGS = @GCOV_CFLAGS@ +GCOV_LIBS = @GCOV_LIBS@ +GLIB_REQ = @GLIB_REQ@ +GREP = @GREP@ +GSTPB_REQ = @GSTPB_REQ@ +GST_BASE_CFLAGS = @GST_BASE_CFLAGS@ +GST_BASE_LIBS = @GST_BASE_LIBS@ +GST_CFLAGS = @GST_CFLAGS@ +GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@ +GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@ +GST_DISABLE_ALLOC_TRACE = @GST_DISABLE_ALLOC_TRACE@ +GST_DISABLE_GST_DEBUG = @GST_DISABLE_GST_DEBUG@ +GST_DISABLE_LOADSAVE = @GST_DISABLE_LOADSAVE@ +GST_DISABLE_PARSE = @GST_DISABLE_PARSE@ +GST_DISABLE_PLUGIN = @GST_DISABLE_PLUGIN@ +GST_DISABLE_REGISTRY = @GST_DISABLE_REGISTRY@ +GST_DISABLE_TRACE = @GST_DISABLE_TRACE@ +GST_DISABLE_XML = @GST_DISABLE_XML@ +GST_DP_CFLAGS = @GST_DP_CFLAGS@ +GST_DP_LIBS = @GST_DP_LIBS@ +GST_LIBS = @GST_LIBS@ +GST_MAJORMINOR = @GST_MAJORMINOR@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ +GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ +GST_OPTION_LIBS = @GST_OPTION_LIBS@ +GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@ +GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@ +GST_REQ = @GST_REQ@ +GTK_REQ = @GTK_REQ@ +IGNORE_GST_0_10_21 = @IGNORE_GST_0_10_21@ +IGNORE_GST_0_10_22 = @IGNORE_GST_0_10_22@ +IGNORE_GST_0_10_23 = @IGNORE_GST_0_10_23@ +IGNORE_GST_0_10_24 = @IGNORE_GST_0_10_24@ +IGNORE_GST_0_10_25 = @IGNORE_GST_0_10_25@ +IGNORE_GST_0_10_26 = @IGNORE_GST_0_10_26@ +IGNORE_GST_0_10_29 = @IGNORE_GST_0_10_29@ +IGNORE_GST_0_10_30 = @IGNORE_GST_0_10_30@ +IGNORE_GST_0_10_31 = @IGNORE_GST_0_10_31@ +IGNORE_GST_0_10_32 = @IGNORE_GST_0_10_32@ +IGNORE_GST_LOADSAVE = @IGNORE_GST_LOADSAVE@ +IGNORE_GST_PB_0_10_23 = @IGNORE_GST_PB_0_10_23@ +IGNORE_GST_PB_0_10_25 = @IGNORE_GST_PB_0_10_25@ +IGNORE_GST_PB_0_10_26 = @IGNORE_GST_PB_0_10_26@ +IGNORE_GST_PB_0_10_29 = @IGNORE_GST_PB_0_10_29@ +IGNORE_GST_PB_0_10_30 = @IGNORE_GST_PB_0_10_30@ +IGNORE_GST_PB_0_10_31 = @IGNORE_GST_PB_0_10_31@ +IGNORE_GST_PB_0_10_32 = @IGNORE_GST_PB_0_10_32@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@ +PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@ +PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@ +PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@ +PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PLUGINDIR = @PLUGINDIR@ +PYEXECDIR = @PYEXECDIR@ +PYGOBJECT_2_12_CFLAGS = @PYGOBJECT_2_12_CFLAGS@ +PYGOBJECT_2_12_LIBS = @PYGOBJECT_2_12_LIBS@ +PYGOBJECT_2_16_CFLAGS = @PYGOBJECT_2_16_CFLAGS@ +PYGOBJECT_2_16_LIBS = @PYGOBJECT_2_16_LIBS@ +PYGOBJECT_CFLAGS = @PYGOBJECT_CFLAGS@ +PYGOBJECT_LIBS = @PYGOBJECT_LIBS@ +PYGOBJECT_REQ = @PYGOBJECT_REQ@ +PYGST_CFLAGS = @PYGST_CFLAGS@ +PYGTK_CFLAGS = @PYGTK_CFLAGS@ +PYGTK_LIBS = @PYGTK_LIBS@ +PYGTK_REQ = @PYGTK_REQ@ +PYTHON = @PYTHON@ +PYTHONDIR = @PYTHONDIR@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_LIB_LOC = @PYTHON_LIB_LOC@ +PYTHON_LIB_SUFFIX = @PYTHON_LIB_SUFFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VALGRIND_PATH = @VALGRIND_PATH@ +VERSION = @VERSION@ +WARNING_CFLAGS = @WARNING_CFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +plugindir = @plugindir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = \ + argtypes.py \ + code-coverage.py \ + codegen.py \ + definitions.py \ + defsparser.py \ + docextract.py \ + docgen.py \ + h2def.py \ + __init__.py \ + mergedefs.py \ + mkskel.py \ + override.py \ + reversewrapper.py \ + scmexpr.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu codegen/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu codegen/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/codegen/__init__.py b/codegen/__init__.py new file mode 100644 index 0000000..cfa896e --- /dev/null +++ b/codegen/__init__.py @@ -0,0 +1,15 @@ +# -*- Mode: Python; py-indent-offset: 4 -*- + +__all__ = [ + 'argtypes', + 'codegen', + 'definitions', + 'defsparser', + 'docextract', + 'docgen', + 'h2def', + 'mergedefs', + 'mkskel', + 'override', + 'scmexpr' +] diff --git a/codegen/argtypes.py b/codegen/argtypes.py new file mode 100644 index 0000000..4dc5faa --- /dev/null +++ b/codegen/argtypes.py @@ -0,0 +1,1085 @@ +# -*- Mode: Python; py-indent-offset: 4 -*- +import string +import keyword +import struct + +class VarList: + """Nicely format a C variable list""" + def __init__(self): + self.vars = {} + def add(self, ctype, name): + if self.vars.has_key(ctype): + self.vars[ctype] = self.vars[ctype] + (name,) + else: + self.vars[ctype] = (name,) + def __str__(self): + ret = [] + for type in self.vars.keys(): + ret.append(' ') + ret.append(type) + ret.append(' ') + ret.append(string.join(self.vars[type], ', ')) + ret.append(';\n') + if ret: + ret.append('\n') + return string.join(ret, '') + return '' + +class WrapperInfo: + """A class that holds information about variable defs, code + snippets, etcd for use in writing out the function/method + wrapper.""" + def __init__(self): + self.varlist = VarList() + self.parsestr = '' + self.parselist = ['', 'kwlist'] + self.codebefore = [] + self.codeafter = [] + self.arglist = [] + self.kwlist = [] + def get_parselist(self): + return string.join(self.parselist, ', ') + def get_codebefore(self): + return string.join(self.codebefore, '') + def get_codeafter(self): + return string.join(self.codeafter, '') + def get_arglist(self): + return string.join(self.arglist, ', ') + def get_varlist(self): + return str(self.varlist) + def get_kwlist(self): + ret = ' static char *kwlist[] = { %s };\n' % \ + string.join(self.kwlist + [ 'NULL' ], ', ') + if not self.get_varlist(): + ret = ret + '\n' + return ret + + def add_parselist(self, codes, parseargs, keywords): + self.parsestr = self.parsestr + codes + for arg in parseargs: + self.parselist.append(arg) + for kw in keywords: + if keyword.iskeyword(kw): + kw = kw + '_' + self.kwlist.append('"%s"' % kw) + +class ArgType: + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + """Add code to the WrapperInfo instance to handle + parameter.""" + raise RuntimeError, "write_param not implemented for %s" % \ + self.__class__.__name__ + def write_return(self, ptype, ownsreturn, info): + """Adds a variable named ret of the return type to + info.varlist, and add any required code to info.codeafter to + convert the return value to a python object.""" + raise RuntimeError, "write_return not implemented for %s" % \ + self.__class__.__name__ + +class NoneArg(ArgType): + def write_return(self, ptype, ownsreturn, info): + info.codeafter.append(' Py_INCREF(Py_None);\n' + + ' return Py_None;') + +class StringArg(ArgType): + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + if pdflt != 'NULL': pdflt = '"' + pdflt + '"' + info.varlist.add('char', '*' + pname + ' = ' + pdflt) + else: + info.varlist.add('char', '*' + pname) + info.arglist.append(pname) + if pnull: + info.add_parselist('z', ['&' + pname], [pname]) + else: + info.add_parselist('s', ['&' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + if ownsreturn: + # have to free result ... + info.varlist.add('gchar', '*ret') + info.codeafter.append(' if (ret) {\n' + + ' PyObject *py_ret = PyString_FromString(ret);\n' + + ' g_free(ret);\n' + + ' return py_ret;\n' + + ' }\n' + + ' Py_INCREF(Py_None);\n' + + ' return Py_None;') + else: + info.varlist.add('const gchar', '*ret') + info.codeafter.append(' if (ret)\n' + + ' return PyString_FromString(ret);\n'+ + ' Py_INCREF(Py_None);\n' + + ' return Py_None;') + +class UCharArg(ArgType): + # allows strings with embedded NULLs. + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + info.varlist.add('guchar', '*' + pname + ' = "' + pdflt + '"') + else: + info.varlist.add('guchar', '*' + pname) + info.varlist.add('int', pname + '_len') + info.arglist.append(pname) + if pnull: + info.add_parselist('z#', ['&' + pname, '&' + pname + '_len'], + [pname]) + else: + info.add_parselist('s#', ['&' + pname, '&' + pname + '_len'], + [pname]) + +class CharArg(ArgType): + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + info.varlist.add('char', pname + " = '" + pdflt + "'") + else: + info.varlist.add('char', pname) + info.arglist.append(pname) + info.add_parselist('c', ['&' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('gchar', 'ret') + info.codeafter.append(' return PyString_FromStringAndSize(&ret, 1);') +class GUniCharArg(ArgType): + ret_tmpl = ('#if !defined(Py_UNICODE_SIZE) || Py_UNICODE_SIZE == 2\n' + ' if (ret > 0xffff) {\n' + ' PyErr_SetString(PyExc_RuntimeError, "returned character can not be represented in 16-bit unicode");\n' + ' return NULL;\n' + ' }\n' + '#endif\n' + ' py_ret = (Py_UNICODE)ret;\n' + ' return PyUnicode_FromUnicode(&py_ret, 1);\n') + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + info.varlist.add('gunichar', pname + " = '" + pdflt + "'") + else: + info.varlist.add('gunichar', pname) + info.arglist.append(pname) + info.add_parselist('O&', ['pyg_pyobj_to_unichar_conv', '&' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('gunichar', 'ret') + info.varlist.add('Py_UNICODE', 'py_ret') + info.codeafter.append(self.ret_tmpl) + + +class IntArg(ArgType): + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + info.varlist.add('int', pname + ' = ' + pdflt) + else: + info.varlist.add('int', pname) + info.arglist.append(pname) + info.add_parselist('i', ['&' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('int', 'ret') + info.codeafter.append(' return PyInt_FromLong(ret);') + +class UIntArg(ArgType): + dflt = (' if (py_%(name)s) {\n' + ' if (PyLong_Check(py_%(name)s))\n' + ' %(name)s = PyLong_AsUnsignedLong(py_%(name)s);\n' + ' else if (PyInt_Check(py_%(name)s))\n' + ' %(name)s = PyInt_AsLong(py_%(name)s);\n' + ' else\n' + ' PyErr_SetString(PyExc_TypeError, "Parameter \'%(name)s\' must be an int or a long");\n' + ' if (PyErr_Occurred())\n' + ' return NULL;\n' + ' }\n') + before = (' if (PyLong_Check(py_%(name)s))\n' + ' %(name)s = PyLong_AsUnsignedLong(py_%(name)s);\n' + ' else if (PyInt_Check(py_%(name)s))\n' + ' %(name)s = PyInt_AsLong(py_%(name)s);\n' + ' else\n' + ' PyErr_SetString(PyExc_TypeError, "Parameter \'%(name)s\' must be an int or a long");\n' + ' if (PyErr_Occurred())\n' + ' return NULL;\n') + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if not pdflt: + pdflt = '0'; + + info.varlist.add(ptype, pname + ' = ' + pdflt) + info.codebefore.append(self.dflt % {'name':pname}) + info.varlist.add('PyObject', "*py_" + pname + ' = NULL') + info.arglist.append(pname) + info.add_parselist('O', ['&py_' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add(ptype, 'ret') + info.codeafter.append(' return PyLong_FromUnsignedLong(ret);') + +class SizeArg(ArgType): + + if struct.calcsize('P') <= struct.calcsize('l'): + llp64 = True + else: + llp64 = False + + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + info.varlist.add(ptype, pname + ' = ' + pdflt) + else: + info.varlist.add(ptype, pname) + info.arglist.append(pname) + if self.llp64: + info.add_parselist('k', ['&' + pname], [pname]) + else: + info.add_parselist('K', ['&' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add(ptype, 'ret') + if self.llp64: + info.codeafter.append(' return PyLong_FromUnsignedLongLong(ret);\n') + else: + info.codeafter.append(' return PyLong_FromUnsignedLong(ret);\n') + +class SSizeArg(ArgType): + + if struct.calcsize('P') <= struct.calcsize('l'): + llp64 = True + else: + llp64 = False + + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + info.varlist.add(ptype, pname + ' = ' + pdflt) + else: + info.varlist.add(ptype, pname) + info.arglist.append(pname) + if self.llp64: + info.add_parselist('l', ['&' + pname], [pname]) + else: + info.add_parselist('L', ['&' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add(ptype, 'ret') + if self.llp64: + info.codeafter.append(' return PyLong_FromLongLong(ret);\n') + else: + info.codeafter.append(' return PyLong_FromLong(ret);\n') + +class LongArg(ArgType): + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + info.varlist.add(ptype, pname + ' = ' + pdflt) + else: + info.varlist.add(ptype, pname) + info.arglist.append(pname) + info.add_parselist('l', ['&' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add(ptype, 'ret') + info.codeafter.append(' return PyInt_FromLong(ret);\n') + +class BoolArg(IntArg): + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('int', 'ret') + info.codeafter.append(' return PyBool_FromLong(ret);\n') + +class TimeTArg(ArgType): + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + info.varlist.add('time_t', pname + ' = ' + pdflt) + else: + info.varlist.add('time_t', pname) + info.arglist.append(pname) + info.add_parselist('i', ['&' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('time_t', 'ret') + info.codeafter.append(' return PyInt_FromLong(ret);') + +class ULongArg(ArgType): + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + info.varlist.add('unsigned long', pname + ' = ' + pdflt) + else: + info.varlist.add('unsigned long', pname) + info.arglist.append(pname) + info.add_parselist('k', ['&' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add(ptype, 'ret') + info.codeafter.append(' return PyLong_FromUnsignedLong(ret);\n') + +class UInt32Arg(ULongArg): + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + ULongArg.write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info) + ## if sizeof(unsigned long) > sizeof(unsigned int), we need to + ## check the value is within guint32 range + if struct.calcsize('L') > struct.calcsize('I'): + info.codebefore.append(( + ' if (%(pname)s > G_MAXUINT32) {\n' + ' PyErr_SetString(PyExc_ValueError,\n' + ' "Value out of range in conversion of"\n' + ' " %(pname)s parameter to unsigned 32 bit integer");\n' + ' return NULL;\n' + ' }\n') % vars()) + +class Int64Arg(ArgType): + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + info.varlist.add('gint64', pname + ' = ' + pdflt) + else: + info.varlist.add('gint64', pname) + info.arglist.append(pname) + info.add_parselist('L', ['&' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('gint64', 'ret') + info.codeafter.append(' return PyLong_FromLongLong(ret);') + +class UInt64Arg(ArgType): + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + info.varlist.add('guint64', pname + ' = ' + pdflt) + else: + info.varlist.add('guint64', pname) + info.arglist.append(pname) + info.add_parselist('K', ['&' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('guint64', 'ret') + info.codeafter.append(' return PyLong_FromUnsignedLongLong(ret);') + + +class DoubleArg(ArgType): + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + info.varlist.add('double', pname + ' = ' + pdflt) + else: + info.varlist.add('double', pname) + info.arglist.append(pname) + info.add_parselist('d', ['&' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('double', 'ret') + info.codeafter.append(' return PyFloat_FromDouble(ret);') + +class FileArg(ArgType): + nulldflt = (' if (py_%(name)s == Py_None)\n' + ' %(name)s = NULL;\n' + ' else if (py_%(name)s && PyFile_Check(py_%(name)s)\n' + ' %s = PyFile_AsFile(py_%(name)s);\n' + ' else if (py_%(name)s) {\n' + ' PyErr_SetString(PyExc_TypeError, "%(name)s should be a file object or None");\n' + ' return NULL;\n' + ' }') + null = (' if (py_%(name)s && PyFile_Check(py_%(name)s)\n' + ' %(name)s = PyFile_AsFile(py_%(name)s);\n' + ' else if (py_%(name)s != Py_None) {\n' + ' PyErr_SetString(PyExc_TypeError, "%(name)s should be a file object or None");\n' + ' return NULL;\n' + ' }\n') + dflt = (' if (py_%(name)s)\n' + ' %(name)s = PyFile_AsFile(py_%(name)s);\n') + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pnull: + if pdflt: + info.varlist.add('FILE', '*' + pname + ' = ' + pdflt) + info.varlist.add('PyObject', '*py_' + pname + ' = NULL') + info.codebefore.append(self.nulldflt % {'name':pname}) + else: + info.varlist.add('FILE', '*' + pname + ' = NULL') + info.varlist.add('PyObject', '*py_' + pname) + info.codebefore.append(self.null & {'name':pname}) + info.arglist.appned(pname) + info.add_parselist('O', ['&py_' + pname], [pname]) + else: + if pdflt: + info.varlist.add('FILE', '*' + pname + ' = ' + pdflt) + info.varlist.add('PyObject', '*py_' + pname + ' = NULL') + info.codebefore.append(self.dflt % {'name':pname}) + info.arglist.append(pname) + else: + info.varlist.add('PyObject', '*' + pname) + info.arglist.append('PyFile_AsFile(' + pname + ')') + info.add_parselist('O!', ['&PyFile_Type', '&' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('FILE', '*ret') + info.codeafter.append(' if (ret)\n' + + ' return PyFile_FromFile(ret, "", "", fclose);\n' + + ' Py_INCREF(Py_None);\n' + + ' return Py_None;') + +class EnumArg(ArgType): + enum = (' if (pyg_enum_get_value(%(typecode)s, py_%(name)s, (gint *)&%(name)s))\n' + ' return NULL;\n') + def __init__(self, enumname, typecode): + self.enumname = enumname + self.typecode = typecode + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + info.varlist.add(self.enumname, pname + ' = ' + pdflt) + else: + info.varlist.add(self.enumname, pname) + info.varlist.add('PyObject', '*py_' + pname + ' = NULL') + info.codebefore.append(self.enum % { 'typecode': self.typecode, + 'name': pname}) + info.arglist.append(pname) + info.add_parselist('O', ['&py_' + pname], [pname]); + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('gint', 'ret') + info.codeafter.append(' return pyg_enum_from_gtype(%s, ret);' % self.typecode) + +class FlagsArg(ArgType): + flag = (' if (%(default)spyg_flags_get_value(%(typecode)s, py_%(name)s, (gint *)&%(name)s))\n' + ' return NULL;\n') + def __init__(self, flagname, typecode): + self.flagname = flagname + self.typecode = typecode + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + info.varlist.add(self.flagname, pname + ' = ' + pdflt) + default = "py_%s && " % (pname,) + else: + info.varlist.add(self.flagname, pname) + default = "" + info.varlist.add('PyObject', '*py_' + pname + ' = NULL') + info.codebefore.append(self.flag % {'default':default, + 'typecode':self.typecode, + 'name':pname}) + info.arglist.append(pname) + info.add_parselist('O', ['&py_' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('guint', 'ret') + info.codeafter.append(' return pyg_flags_from_gtype(%s, ret);' % self.typecode) + +class ObjectArg(ArgType): + # should change these checks to more typesafe versions that check + # a little further down in the class heirachy. + nulldflt = (' if ((PyObject *)py_%(name)s == Py_None)\n' + ' %(name)s = NULL;\n' + ' else if (py_%(name)s && pygobject_check(py_%(name)s, &Py%(type)s_Type))\n' + ' %(name)s = %(cast)s(py_%(name)s->obj);\n' + ' else if (py_%(name)s) {\n' + ' PyErr_SetString(PyExc_TypeError, "%(name)s should be a %(type)s or None");\n' + ' return NULL;\n' + ' }\n') + null = (' if (py_%(name)s && pygobject_check(py_%(name)s, &Py%(type)s_Type))\n' + ' %(name)s = %(cast)s(py_%(name)s->obj);\n' + ' else if ((PyObject *)py_%(name)s != Py_None) {\n' + ' PyErr_SetString(PyExc_TypeError, "%(name)s should be a %(type)s or None");\n' + ' return NULL;\n' + ' }\n') + dflt = ' if (py_%(name)s)\n' \ + ' %(name)s = %(cast)s(py_%(name)s->obj);\n' + def __init__(self, objname, parent, typecode): + self.objname = objname + self.cast = string.replace(typecode, '_TYPE_', '_', 1) + self.parent = parent + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pnull: + if pdflt: + info.varlist.add(self.objname, '*' + pname + ' = ' + pdflt) + info.varlist.add('PyGObject', '*py_' + pname + ' = NULL') + info.codebefore.append(self.nulldflt % {'name':pname, + 'cast':self.cast, + 'type':self.objname}) + else: + info.varlist.add(self.objname, '*' + pname + ' = NULL') + info.varlist.add('PyGObject', '*py_' + pname) + info.codebefore.append(self.null % {'name':pname, + 'cast':self.cast, + 'type':self.objname}) + if ptype.endswith('*'): + typename = ptype[:-1] + try: + const, typename = typename.split('const-') + except ValueError: + const = '' + if typename != ptype: + info.arglist.append('(%s *) %s' % (ptype[:-1], pname)) + else: + info.arglist.append(pname) + + info.add_parselist('O', ['&py_' + pname], [pname]) + else: + if pdflt: + info.varlist.add(self.objname, '*' + pname + ' = ' + pdflt) + info.varlist.add('PyGObject', '*py_' + pname + ' = NULL') + info.codebefore.append(self.dflt % {'name':pname, + 'cast':self.cast}) + info.arglist.append(pname) + info.add_parselist('O!', ['&Py%s_Type' % self.objname, + '&py_' + pname], [pname]) + else: + info.varlist.add('PyGObject', '*' + pname) + info.arglist.append('%s(%s->obj)' % (self.cast, pname)) + info.add_parselist('O!', ['&Py%s_Type' % self.objname, + '&' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + if ptype.endswith('*'): + typename = ptype[:-1] + try: + const, typename = typename.split('const-') + except ValueError: + const = '' + info.varlist.add(typename, '*ret') + if ownsreturn: + info.varlist.add('PyObject', '*py_ret') + # < GLib 2.8: using our custom _new and _unref functions + # makes sure we update the proper GstObject refcount + info.codeafter.append(' py_ret = pygobject_new((GObject *)ret);\n' + ' if (ret != NULL)\n' + ' g_object_unref((GObject *)ret);\n' + ' return py_ret;') + else: + info.codeafter.append(' /* pygobject_new handles NULL checking */\n' + + ' return pygobject_new((GObject *)ret);') + +class MiniObjectArg(ArgType): + # should change these checks to more typesafe versions that check + # a little further down in the class heirachy. + nulldflt = (' if ((PyObject *)py_%(name)s == Py_None)\n' + ' %(name)s = NULL;\n' + ' else if (py_%(name)s) && pygstminiobject_check(py_%(name)s, &Py%(type)s_Type))\n' + ' %(name)s = %(cast)s(py_%(name)s->obj);\n' + ' else if (py_%(name)s) {\n' + ' PyErr_SetString(PyExc_TypeError, "%(name)s should be a %(type)s or None");\n' + ' return NULL;\n' + ' }\n') + null = (' if (py_%(name)s && pygstminiobject_check(py_%(name)s, &Py%(type)s_Type))\n' + ' %(name)s = %(cast)s(py_%(name)s->obj);\n' + ' else if ((PyObject *)py_%(name)s != Py_None) {\n' + ' PyErr_SetString(PyExc_TypeError, "%(name)s should be a %(type)s or None");\n' + ' return NULL;\n' + ' }\n') + dflt = ' if (py_%(name)s)\n' \ + ' %(name)s = %(cast)s(py_%(name)s->obj);\n' + def __init__(self, objname, parent, typecode): + self.objname = objname + self.cast = string.replace(typecode, '_TYPE_', '_', 1) + self.parent = parent + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pnull: + if pdflt: + info.varlist.add(self.objname, '*' + pname + ' = ' + pdflt) + info.varlist.add('PyGstMiniObject', '*py_' + pname + ' = NULL') + info.codebefore.append(self.nulldflt % {'name':pname, + 'cast':self.cast, + 'type':self.objname}) + else: + info.varlist.add(self.objname, '*' + pname + ' = NULL') + info.varlist.add('PyGstMiniObject', '*py_' + pname) + info.codebefore.append(self.null % {'name':pname, + 'cast':self.cast, + 'type':self.objname}) + if ptype.endswith('*'): + typename = ptype[:-1] + try: + const, typename = typename.split('const-') + except ValueError: + const = '' + if typename != ptype: + info.arglist.append('(%s *) %s' % (ptype[:-1], pname)) + else: + info.arglist.append(pname) + + info.add_parselist('O', ['&py_' + pname], [pname]) + else: + if pdflt: + info.varlist.add(self.objname, '*' + pname + ' = ' + pdflt) + info.varlist.add('PyGstMiniObject', '*py_' + pname + ' = NULL') + info.codebefore.append(self.dflt % {'name':pname, + 'cast':self.cast}) + info.arglist.append(pname) + info.add_parselist('O', ['&Py%s_Type' % self.objname, + '&py_' + pname], [pname]) + else: + info.varlist.add('PyGstMiniObject', '*' + pname) + info.arglist.append('%s(%s->obj)' % (self.cast, pname)) + info.add_parselist('O!', ['&Py%s_Type' % self.objname, + '&' + pname], [pname]) + if keeprefcount: + info.codebefore.append(' gst_mini_object_ref(GST_MINI_OBJECT(%s->obj));\n' % pname) + def write_return(self, ptype, ownsreturn, info): + if ptype.endswith('*'): + typename = ptype[:-1] + try: + const, typename = typename.split('const-') + except ValueError: + const = '' + info.varlist.add(typename, '*ret') + if ownsreturn: + info.varlist.add('PyObject', '*py_ret') + info.codeafter.append(' py_ret = pygstminiobject_new((GstMiniObject *)ret);\n' + ' if (ret != NULL)\n' + ' gst_mini_object_unref((GstMiniObject *)ret);\n' + ' return py_ret;') + else: + info.codeafter.append(' /* pygobject_new handles NULL checking */\n' + + ' return pygstminiobject_new((GstMiniObject *)ret);') + +class BoxedArg(ArgType): + # haven't done support for default args. Is it needed? + check = (' if (pyg_boxed_check(py_%(name)s, %(typecode)s))\n' + ' %(name)s = pyg_boxed_get(py_%(name)s, %(typename)s);\n' + ' else {\n' + ' PyErr_SetString(PyExc_TypeError, "%(name)s should be a %(typename)s");\n' + ' return NULL;\n' + ' }\n') + null = (' if (pyg_boxed_check(py_%(name)s, %(typecode)s))\n' + ' %(name)s = pyg_boxed_get(py_%(name)s, %(typename)s);\n' + ' else if (py_%(name)s != Py_None) {\n' + ' PyErr_SetString(PyExc_TypeError, "%(name)s should be a %(typename)s or None");\n' + ' return NULL;\n' + ' }\n') + acopy = (' %(name)s = g_boxed_copy(%(typecode)s, %(name)s);\n') + def __init__(self, ptype, typecode): + self.typename = ptype + self.typecode = typecode + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pnull: + info.varlist.add(self.typename, '*' + pname + ' = NULL') + info.varlist.add('PyObject', '*py_' + pname + ' = Py_None') + info.codebefore.append(self.null % {'name': pname, + 'typename': self.typename, + 'typecode': self.typecode}) + else: + info.varlist.add(self.typename, '*' + pname + ' = NULL') + info.varlist.add('PyObject', '*py_' + pname) + info.codebefore.append(self.check % {'name': pname, + 'typename': self.typename, + 'typecode': self.typecode}) + if keeprefcount: + # We need to grab a copy of the GBoxed + info.codebefore.append(self.acopy % {'name': pname, + 'typecode': self.typecode}) + if ptype[-1] == '*': + typename = ptype[:-1] + if typename[:6] == 'const-': typename = typename[6:] + if typename != self.typename: + info.arglist.append('(%s *)%s' % (ptype[:-1], pname)) + else: + info.arglist.append(pname) + else: + info.arglist.append(pname) + info.add_parselist('O', ['&py_' + pname], [pname]) + ret_tmpl = ' /* pyg_boxed_new handles NULL checking */\n' \ + ' return pyg_boxed_new(%(typecode)s, (%(saferet)s) %(ret)s, %(copy)s, TRUE);' + def write_return(self, ptype, ownsreturn, info): + if ptype[:6] == 'const-': + ptype = "const " + ptype[6:] + if ptype[-1] == '*': + info.varlist.add(ptype[:-1], '*ret') + ret = 'ret' + stype = self.typename + '*' + else: + info.varlist.add(ptype, 'ret') + ret = '&ret' + ownsreturn = 0 # of course it can't own a ref to a local var ... + stype = self.typename + info.codeafter.append(self.ret_tmpl % + { 'typecode': self.typecode, + 'ret': ret, + 'saferet' : stype, + 'copy': ownsreturn and 'FALSE' or 'TRUE'}) + +class CustomBoxedArg(ArgType): + # haven't done support for default args. Is it needed? + null = (' if (%(check)s(py_%(name)s))\n' + ' %(name)s = %(get)s(py_%(name)s);\n' + ' else if (py_%(name)s != Py_None) {\n' + ' PyErr_SetString(PyExc_TypeError, "%(name)s should be a %(type)s or None");\n' + ' return NULL;\n' + ' }\n') + def __init__(self, ptype, pytype, getter, new): + self.pytype = pytype + self.getter = getter + self.checker = 'Py' + ptype + '_Check' + self.new = new + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pnull: + info.varlist.add(ptype[:-1], '*' + pname + ' = NULL') + info.varlist.add('PyObject', '*py_' + pname + ' = Py_None') + info.codebefore.append(self.null % {'name': pname, + 'get': self.getter, + 'check': self.checker, + 'type': ptype[:-1]}) + info.arglist.append(pname) + info.add_parselist('O', ['&py_' + pname], [pname]) + else: + info.varlist.add('PyObject', '*' + pname) + info.arglist.append(self.getter + '(' + pname + ')') + info.add_parselist('O!', ['&' + self.pytype, '&' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add(ptype[:-1], '*ret') + info.codeafter.append(' if (ret)\n' + + ' return ' + self.new + '(ret);\n' + + ' Py_INCREF(Py_None);\n' + + ' return Py_None;') + +class PointerArg(ArgType): + # haven't done support for default args. Is it needed? + check = (' if (pyg_pointer_check(py_%(name)s, %(typecode)s))\n' + ' %(name)s = pyg_pointer_get(py_%(name)s, %(typename)s);\n' + ' else {\n' + ' PyErr_SetString(PyExc_TypeError, "%(name)s should be a %(typename)s");\n' + ' return NULL;\n' + ' }\n') + null = (' if (pyg_pointer_check(py_%(name)s, %(typecode)s))\n' + ' %(name)s = pyg_pointer_get(py_%(name)s, %(typename)s);\n' + ' else if (py_%(name)s != Py_None) {\n' + ' PyErr_SetString(PyExc_TypeError, "%(name)s should be a %(typename)s or None");\n' + ' return NULL;\n' + ' }\n') + def __init__(self, ptype, typecode): + self.typename = ptype + self.typecode = typecode + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pnull: + info.varlist.add(self.typename, '*' + pname + ' = NULL') + info.varlist.add('PyObject', '*py_' + pname + ' = Py_None') + info.codebefore.append(self.null % {'name': pname, + 'typename': self.typename, + 'typecode': self.typecode}) + else: + info.varlist.add(self.typename, '*' + pname + ' = NULL') + info.varlist.add('PyObject', '*py_' + pname) + info.codebefore.append(self.check % {'name': pname, + 'typename': self.typename, + 'typecode': self.typecode}) + info.arglist.append(pname) + info.add_parselist('O', ['&py_' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + if ptype[-1] == '*': + info.varlist.add(self.typename, '*ret') + info.codeafter.append(' /* pyg_pointer_new handles NULL checking */\n' + + ' return pyg_pointer_new(' + self.typecode + ', ret);') + else: + info.varlist.add(self.typename, 'ret') + info.codeafter.append(' /* pyg_pointer_new handles NULL checking */\n' + + ' return pyg_pointer_new(' + self.typecode + ', &ret);') + +class AtomArg(IntArg): + dflt = ' if (py_%(name)s) {\n' \ + ' %(name)s = pygdk_atom_from_pyobject(py_%(name)s);\n' \ + ' if (PyErr_Occurred())\n' \ + ' return NULL;\n' \ + ' }\n' + atom = (' %(name)s = pygdk_atom_from_pyobject(py_%(name)s);\n' + ' if (PyErr_Occurred())\n' + ' return NULL;\n') + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + info.varlist.add('GdkAtom', pname + ' = ' + pdflt) + info.varlist.add('PyObject', '*py_' + pname + ' = NULL') + info.codebefore.append(self.dflt % {'name': pname}) + else: + info.varlist.add('GdkAtom', pname) + info.varlist.add('PyObject', '*py_' + pname + ' = NULL') + info.codebefore.append(self.atom % {'name': pname}) + info.arglist.append(pname) + info.add_parselist('O', ['&py_' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('GdkAtom', 'ret') + info.varlist.add('PyObject *', 'py_ret') + info.varlist.add('gchar *', 'name') + info.codeafter.append(' name = gdk_atom_name(ret);\n' + ' py_ret = PyString_FromString(name);\n' + ' g_free(name);\n' + ' return py_ret;') + +class GTypeArg(ArgType): + gtype = (' if ((%(name)s = pyg_type_from_object(py_%(name)s)) == 0)\n' + ' return NULL;\n') + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + info.varlist.add('GType', pname) + info.varlist.add('PyObject', '*py_' + pname + ' = NULL') + info.codebefore.append(self.gtype % {'name': pname}) + info.arglist.append(pname) + info.add_parselist('O', ['&py_' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('GType', 'ret') + info.codeafter.append(' return pyg_type_wrapper_new(ret);') + +# simple GError handler. +class GErrorArg(ArgType): + handleerror = (' if (pyg_error_check(&%(name)s))\n' + ' return NULL;\n') + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + info.varlist.add('GError', '*' + pname + ' = NULL') + info.arglist.append('&' + pname) + info.codeafter.append(self.handleerror % { 'name': pname }) + +class GtkTreePathArg(ArgType): + # haven't done support for default args. Is it needed? + normal = (' %(name)s = pygtk_tree_path_from_pyobject(py_%(name)s);\n' + ' if (!%(name)s) {\n' + ' PyErr_SetString(PyExc_TypeError, "could not convert %(name)s to a GtkTreePath");\n' + ' return NULL;\n' + ' }\n') + null = (' if (py_%(name)s != Py_None) {\n' + ' %(name)s = pygtk_tree_path_from_pyobject(py_%(name)s);\n' + ' if (!%(name)s) {\n' + ' PyErr_SetString(PyExc_TypeError, "could not convert %(name)s to a GtkTreePath");\n' + ' return NULL;\n' + ' }\n' + ' }\n') + freepath = (' if (%(name)s)\n' + ' gtk_tree_path_free(%(name)s);\n') + def __init__(self): + pass + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pnull: + info.varlist.add('GtkTreePath', '*' + pname + ' = NULL') + info.varlist.add('PyObject', '*py_' + pname + ' = Py_None') + info.codebefore.append(self.null % {'name': pname}) + info.arglist.append(pname) + info.add_parselist('O', ['&py_' + pname], [pname]) + else: + info.varlist.add('GtkTreePath', '*' + pname) + info.varlist.add('PyObject', '*py_' + pname) + info.codebefore.append(self.normal % {'name': pname}) + info.arglist.append(pname) + info.add_parselist('O', ['&py_' + pname], [pname]) + info.codeafter.append(self.freepath % {'name': pname}) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('GtkTreePath', '*ret') + if ownsreturn: + info.codeafter.append(' if (ret) {\n' + ' PyObject *py_ret = pygtk_tree_path_to_pyobject(ret);\n' + ' gtk_tree_path_free(ret);\n' + ' return py_ret;\n' + ' }\n' + ' Py_INCREF(Py_None);\n' + ' return Py_None;') + else: + info.codeafter.append(' if (ret) {\n' + ' PyObject *py_ret = pygtk_tree_path_to_pyobject(ret);\n' + ' return py_ret;\n' + ' }\n' + ' Py_INCREF(Py_None);\n' + ' return Py_None;') + +class GdkRectanglePtrArg(ArgType): + normal = (' if (!pygdk_rectangle_from_pyobject(py_%(name)s, &%(name)s))\n' + ' return NULL;\n') + null = (' if (py_%(name)s == Py_None)\n' + ' %(name)s = NULL;\n' + ' else if (pygdk_rectangle_from_pyobject(py_%(name)s, &%(name)s_rect))\n' + ' %(name)s = &%(name)s_rect;\n' + ' else\n' + ' return NULL;\n') + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pnull: + info.varlist.add('GdkRectangle', pname + '_rect = { 0, 0, 0, 0 }') + info.varlist.add('GdkRectangle', '*' + pname) + info.varlist.add('PyObject', '*py_' + pname + ' = Py_None') + info.add_parselist('O', ['&py_' + pname], [pname]) + info.arglist.append(pname) + info.codebefore.append(self.null % {'name': pname}) + else: + info.varlist.add('GdkRectangle', pname + ' = { 0, 0, 0, 0 }') + info.varlist.add('PyObject', '*py_' + pname) + info.add_parselist('O', ['&py_' + pname], [pname]) + info.arglist.append('&' + pname) + info.codebefore.append(self.normal % {'name': pname}) + +class GdkRectangleArg(ArgType): + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('GdkRectangle', 'ret') + info.codeafter.append(' return pyg_boxed_new(GDK_TYPE_RECTANGLE, &ret, TRUE, TRUE);') + +class PyObjectArg(ArgType): + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + info.varlist.add('PyObject', '*' + pname) + info.add_parselist('O', ['&' + pname], [pname]) + info.arglist.append(pname) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add("PyObject", "*ret") + if ownsreturn: + info.codeafter.append(' if (ret) {\n' + ' return ret;\n' + ' }\n' + ' Py_INCREF(Py_None);\n' + ' return Py_None;') + else: + info.codeafter.append(' if (!ret) ret = Py_None;\n' + ' Py_INCREF(ret);\n' + ' return ret;') + +class ArgMatcher: + def __init__(self): + self.argtypes = {} + self.reverse_argtypes = {} + self.reverse_rettypes = {} + + def register(self, ptype, handler): + self.argtypes[ptype] = handler + def register_reverse(self, ptype, handler): + self.reverse_argtypes[ptype] = handler + def register_reverse_ret(self, ptype, handler): + self.reverse_rettypes[ptype] = handler + + def register_enum(self, ptype, typecode): + if typecode is None: + typecode = "G_TYPE_NONE" + self.register(ptype, EnumArg(ptype, typecode)) + def register_flag(self, ptype, typecode): + if typecode is None: + typecode = "G_TYPE_NONE" + self.register(ptype, FlagsArg(ptype, typecode)) + def register_object(self, ptype, parent, typecode): + oa = ObjectArg(ptype, parent, typecode) + self.register(ptype, oa) # in case I forget the * in the .defs + self.register(ptype+'*', oa) + self.register('const-'+ptype+'*', oa) + if ptype == 'GdkPixmap': + # hack to handle GdkBitmap synonym. + self.register('GdkBitmap', oa) + self.register('GdkBitmap*', oa) + def register_miniobject(self, ptype, parent, typecode): + oa = MiniObjectArg(ptype, parent, typecode) + self.register(ptype, oa) # in case I forget the * in the .defs + self.register(ptype+'*', oa) + def register_boxed(self, ptype, typecode): + if self.argtypes.has_key(ptype): return + arg = BoxedArg(ptype, typecode) + self.register(ptype, arg) + self.register(ptype+'*', arg) + self.register('const-'+ptype+'*', arg) + def register_custom_boxed(self, ptype, pytype, getter, new): + arg = CustomBoxedArg(ptype, pytype, getter, new) + self.register(ptype+'*', arg) + self.register('const-'+ptype+'*', arg) + def register_pointer(self, ptype, typecode): + arg = PointerArg(ptype, typecode) + self.register(ptype, arg) + self.register(ptype+'*', arg) + self.register('const-'+ptype+'*', arg) + + def get(self, ptype): + try: + return self.argtypes[ptype] + except KeyError: + if ptype[:8] == 'GdkEvent' and ptype[-1] == '*': + return self.argtypes['GdkEvent*'] + raise + def _get_reverse_common(self, ptype, registry): + props = dict(c_type=ptype) + try: + return registry[ptype], props + except KeyError: + try: + handler = self.argtypes[ptype] + except KeyError: + if ptype.startswith('GdkEvent') and ptype.endswith('*'): + handler = self.argtypes['GdkEvent*'] + else: + raise + if isinstance(handler, ObjectArg): + return registry['GObject*'], props + elif isinstance(handler, EnumArg): + props['typecode'] = handler.typecode + props['enumname'] = handler.enumname + return registry['GEnum'], props + elif isinstance(handler, FlagsArg): + props['typecode'] = handler.typecode + props['flagname'] = handler.flagname + return registry['GFlags'], props + elif isinstance(handler, BoxedArg): + props['typecode'] = handler.typecode + props['typename'] = handler.typename + return registry['GBoxed'], props + else: + raise + def get_reverse(self, ptype): + return self._get_reverse_common(ptype, self.reverse_argtypes) + def get_reverse_ret(self, ptype): + return self._get_reverse_common(ptype, self.reverse_rettypes) + + def object_is_a(self, otype, parent): + if otype == None: return 0 + if otype == parent: return 1 + if not self.argtypes.has_key(otype): return 0 + return self.object_is_a(self.get(otype).parent, parent) + +matcher = ArgMatcher() + +arg = NoneArg() +matcher.register(None, arg) +matcher.register('none', arg) + +arg = StringArg() +matcher.register('char*', arg) +matcher.register('gchar*', arg) +matcher.register('const-char*', arg) +matcher.register('char-const*', arg) +matcher.register('const-gchar*', arg) +matcher.register('gchar-const*', arg) +matcher.register('string', arg) +matcher.register('static_string', arg) + +arg = UCharArg() +matcher.register('unsigned-char*', arg) +matcher.register('const-guchar*', arg) +matcher.register('guchar*', arg) + +arg = CharArg() +matcher.register('char', arg) +matcher.register('gchar', arg) +matcher.register('guchar', arg) + +arg = GUniCharArg() +matcher.register('gunichar', arg) + +arg = IntArg() +matcher.register('int', arg) +matcher.register('gint', arg) +matcher.register('short', arg) +matcher.register('gshort', arg) +matcher.register('gushort', arg) +matcher.register('gsize', SizeArg()) +matcher.register('gssize', SSizeArg()) +matcher.register('guint8', arg) +matcher.register('gint8', arg) +matcher.register('guint16', arg) +matcher.register('gint16', arg) +matcher.register('gint32', arg) +matcher.register('GTime', arg) + +arg = LongArg() +matcher.register('long', arg) +matcher.register('glong', arg) + +arg = UIntArg() +matcher.register('guint', arg) + +arg = BoolArg() +matcher.register('gboolean', arg) + +arg = TimeTArg() +matcher.register('time_t', arg) + +matcher.register('guint32', UInt32Arg()) + +arg = ULongArg() +matcher.register('gulong', arg) + +arg = Int64Arg() +matcher.register('gint64', arg) +matcher.register('long-long', arg) + +arg = UInt64Arg() +matcher.register('guint64', arg) +matcher.register('unsigned-long-long', arg) + +arg = DoubleArg() +matcher.register('double', arg) +matcher.register('gdouble', arg) +matcher.register('float', arg) +matcher.register('gfloat', arg) + +arg = FileArg() +matcher.register('FILE*', arg) + +# enums, flags, objects + +matcher.register('GdkAtom', AtomArg()) + +matcher.register('GType', GTypeArg()) +matcher.register('GtkType', GTypeArg()) + +matcher.register('GError**', GErrorArg()) +matcher.register('GtkTreePath*', GtkTreePathArg()) +matcher.register('GdkRectangle*', GdkRectanglePtrArg()) +matcher.register('GtkAllocation*', GdkRectanglePtrArg()) +matcher.register('GdkRectangle', GdkRectangleArg()) +matcher.register('PyObject*', PyObjectArg()) + +matcher.register('GdkNativeWindow', ULongArg()) + +matcher.register_object('GObject', None, 'G_TYPE_OBJECT') +matcher.register_miniobject('GstMiniObject', None, 'GST_TYPE_MINI_OBJECT') + +del arg diff --git a/codegen/code-coverage.py b/codegen/code-coverage.py new file mode 100755 index 0000000..fd15034 --- /dev/null +++ b/codegen/code-coverage.py @@ -0,0 +1,42 @@ +from __future__ import generators +import sys, os + +def read_symbols(file, type=None, dynamic=0): + if dynamic: + cmd = 'nm -D %s' % file + else: + cmd = 'nm %s' % file + for line in os.popen(cmd, 'r'): + if line[0] != ' ': # has an address as first bit of line + while line[0] != ' ': + line = line[1:] + while line[0] == ' ': + line = line[1:] + # we should be up to "type symbolname" now + sym_type = line[0] + symbol = line[1:].strip() + + if not type or type == sym_type: + yield symbol + +def main(): + if len(sys.argv) != 3: + sys.stderr.write('usage: coverage-check library.so wrapper.so\n') + sys.exit(1) + library = sys.argv[1] + wrapper = sys.argv[2] + + # first create a dict with all referenced symbols in the wrapper + # should really be a set, but a dict will do ... + wrapper_symbols = {} + for symbol in read_symbols(wrapper, type='U', dynamic=1): + wrapper_symbols[symbol] = 1 + + # now go through the library looking for matches on the defined symbols: + for symbol in read_symbols(library, type='T', dynamic=1): + if symbol[0] == '_': continue + if symbol not in wrapper_symbols: + print symbol + +if __name__ == '__main__': + main() diff --git a/codegen/codegen.py b/codegen/codegen.py new file mode 100644 index 0000000..740199d --- /dev/null +++ b/codegen/codegen.py @@ -0,0 +1,1577 @@ +import getopt +import keyword +import os +import string +import sys + +import argtypes +import definitions +import defsparser +import override +import reversewrapper + +class Coverage(object): + def __init__(self, name): + self.name = name + self.wrapped = 0 + self.not_wrapped = 0 + + def declare_wrapped(self): + self.wrapped += 1 + + def declare_not_wrapped(self): + self.not_wrapped += 1 + + def printstats(self): + total = self.wrapped + self.not_wrapped + fd = sys.stderr + if total: + fd.write("***INFO*** The coverage of %s is %.2f%% (%i/%i)\n" % + (self.name, + float(self.wrapped*100)/total, + self.wrapped, + total)) + else: + fd.write("***INFO*** There are no declared %s." % self.name) + +functions_coverage = Coverage("global functions") +methods_coverage = Coverage("methods") +vproxies_coverage = Coverage("virtual proxies") +vaccessors_coverage = Coverage("virtual accessors") +iproxies_coverage = Coverage("interface proxies") + +def exc_info(): + #traceback.print_exc() + etype, value, tb = sys.exc_info() + ret = "" + try: + sval = str(value) + if etype == KeyError: + ret = "No ArgType for %s" % (sval,) + else: + ret = sval + finally: + del etype, value, tb + return ret + +def fixname(name): + if keyword.iskeyword(name): + return name + '_' + return name + +class FileOutput: + '''Simple wrapper for file object, that makes writing #line + statements easier.''' # " + def __init__(self, fp, filename=None): + self.fp = fp + self.lineno = 1 + if filename: + self.filename = filename + else: + self.filename = self.fp.name + # handle writing to the file, and keep track of the line number ... + def write(self, str): + self.fp.write(str) + self.lineno = self.lineno + string.count(str, '\n') + def writelines(self, sequence): + for line in sequence: + self.write(line) + def close(self): + self.fp.close() + def flush(self): + self.fp.flush() + + def setline(self, linenum, filename): + '''writes out a #line statement, for use by the C + preprocessor.''' # " + self.write('#line %d "%s"\n' % (linenum, filename)) + def resetline(self): + '''resets line numbering to the original file''' + self.setline(self.lineno + 1, self.filename) + +class Wrapper: + type_tmpl = ( + 'PyTypeObject Py%(typename)s_Type = {\n' + ' PyObject_HEAD_INIT(NULL)\n' + ' 0, /* ob_size */\n' + ' "%(classname)s", /* tp_name */\n' + ' sizeof(%(tp_basicsize)s), /* tp_basicsize */\n' + ' 0, /* tp_itemsize */\n' + ' /* methods */\n' + ' (destructor)%(tp_dealloc)s, /* tp_dealloc */\n' + ' (printfunc)0, /* tp_print */\n' + ' (getattrfunc)%(tp_getattr)s, /* tp_getattr */\n' + ' (setattrfunc)%(tp_setattr)s, /* tp_setattr */\n' + ' (cmpfunc)%(tp_compare)s, /* tp_compare */\n' + ' (reprfunc)%(tp_repr)s, /* tp_repr */\n' + ' (PyNumberMethods*)%(tp_as_number)s, /* tp_as_number */\n' + ' (PySequenceMethods*)%(tp_as_sequence)s, /* tp_as_sequence */\n' + ' (PyMappingMethods*)%(tp_as_mapping)s, /* tp_as_mapping */\n' + ' (hashfunc)%(tp_hash)s, /* tp_hash */\n' + ' (ternaryfunc)%(tp_call)s, /* tp_call */\n' + ' (reprfunc)%(tp_str)s, /* tp_str */\n' + ' (getattrofunc)%(tp_getattro)s, /* tp_getattro */\n' + ' (setattrofunc)%(tp_setattro)s, /* tp_setattro */\n' + ' (PyBufferProcs*)%(tp_as_buffer)s, /* tp_as_buffer */\n' + ' %(tp_flags)s, /* tp_flags */\n' + ' %(tp_doc)s, /* Documentation string */\n' + ' (traverseproc)%(tp_traverse)s, /* tp_traverse */\n' + ' (inquiry)%(tp_clear)s, /* tp_clear */\n' + ' (richcmpfunc)%(tp_richcompare)s, /* tp_richcompare */\n' + ' %(tp_weaklistoffset)s, /* tp_weaklistoffset */\n' + ' (getiterfunc)%(tp_iter)s, /* tp_iter */\n' + ' (iternextfunc)%(tp_iternext)s, /* tp_iternext */\n' + ' (struct PyMethodDef*)%(tp_methods)s, /* tp_methods */\n' + ' (struct PyMemberDef*)0, /* tp_members */\n' + ' (struct PyGetSetDef*)%(tp_getset)s, /* tp_getset */\n' + ' NULL, /* tp_base */\n' + ' NULL, /* tp_dict */\n' + ' (descrgetfunc)%(tp_descr_get)s, /* tp_descr_get */\n' + ' (descrsetfunc)%(tp_descr_set)s, /* tp_descr_set */\n' + ' %(tp_dictoffset)s, /* tp_dictoffset */\n' + ' (initproc)%(tp_init)s, /* tp_init */\n' + ' (allocfunc)%(tp_alloc)s, /* tp_alloc */\n' + ' (newfunc)%(tp_new)s, /* tp_new */\n' + ' (freefunc)%(tp_free)s, /* tp_free */\n' + ' (inquiry)%(tp_is_gc)s /* tp_is_gc */\n' + '};\n\n' + ) + + slots_list = [ + 'tp_getattr', 'tp_setattr', 'tp_getattro', 'tp_setattro', + 'tp_compare', 'tp_repr', + 'tp_as_number', 'tp_as_sequence', 'tp_as_mapping', 'tp_hash', + 'tp_call', 'tp_str', 'tp_as_buffer', 'tp_richcompare', 'tp_iter', + 'tp_iternext', 'tp_descr_get', 'tp_descr_set', 'tp_init', + 'tp_alloc', 'tp_new', 'tp_free', 'tp_is_gc', + 'tp_traverse', 'tp_clear', 'tp_dealloc', 'tp_flags', 'tp_doc' + ] + + getter_tmpl = ( + 'static PyObject *\n' + '%(funcname)s(PyObject *self, void *closure)\n' + '{\n' + '%(varlist)s' + ' ret = %(field)s;\n' + '%(codeafter)s\n' + '}\n\n' + ) + + parse_tmpl = ( + ' if (!PyArg_ParseTupleAndKeywords(args, kwargs,' + '"%(typecodes)s:%(name)s"%(parselist)s))\n' + ' return %(errorreturn)s;\n' + ) + + deprecated_tmpl = ( + ' if (PyErr_Warn(PyExc_DeprecationWarning, ' + '"%(deprecationmsg)s") < 0)\n' + ' return %(errorreturn)s;\n' + ) + + methdef_tmpl = ( + ' { "%(name)s", (PyCFunction)%(cname)s, %(flags)s,\n' + ' %(docstring)s },\n' + ) + + noconstructor = ( + 'static int\n' + 'pygobject_no_constructor(PyObject *self, PyObject *args, ' + 'PyObject *kwargs)\n' + '{\n' + ' gchar buf[512];\n' + '\n' + ' g_snprintf(buf, sizeof(buf), "%s is an abstract widget", ' + 'self->ob_type->tp_name);\n' + ' PyErr_SetString(PyExc_NotImplementedError, buf);\n' + ' return -1;\n' + '}\n\n' + ) + + function_tmpl = ( + 'static PyObject *\n' + '_wrap_%(cname)s(PyObject *self%(extraparams)s)\n' + '{\n' + '%(varlist)s' + '%(parseargs)s' + '%(codebefore)s' + ' %(begin_allow_threads)s\n' + ' %(setreturn)s%(cname)s(%(arglist)s);\n' + ' %(end_allow_threads)s\n' + '%(codeafter)s\n' + '}\n\n' + ) + + virtual_accessor_tmpl = ( + 'static PyObject *\n' + '_wrap_%(cname)s(PyObject *cls%(extraparams)s)\n' + '{\n' + ' gpointer klass;\n' + '%(varlist)s' + '%(parseargs)s' + '%(codebefore)s' + ' klass = g_type_class_ref(pyg_type_from_object(cls));\n' + ' if (%(class_cast_macro)s(klass)->%(virtual)s) {\n' + ' pyg_begin_allow_threads;\n' + ' %(setreturn)s%(class_cast_macro)s(klass)->' + '%(virtual)s(%(arglist)s);\n' + ' pyg_end_allow_threads;\n' + ' } else {\n' + ' PyErr_SetString(PyExc_NotImplementedError, ' + '"virtual method %(name)s not implemented");\n' + ' g_type_class_unref(klass);\n' + ' return NULL;\n' + ' }\n' + ' g_type_class_unref(klass);\n' + '%(codeafter)s\n' + '}\n\n' + ) + + # template for method calls + constructor_tmpl = None + method_tmpl = None + + def __init__(self, parser, objinfo, overrides, fp=FileOutput(sys.stdout)): + self.parser = parser + self.objinfo = objinfo + self.overrides = overrides + self.fp = fp + + def get_lower_name(self): + return string.lower(string.replace(self.objinfo.typecode, + '_TYPE_', '_', 1)) + + def get_field_accessor(self, fieldname): + raise NotImplementedError + + def get_initial_class_substdict(self): return {} + + def get_initial_constructor_substdict(self, constructor): + return { 'name': '%s.__init__' % self.objinfo.c_name, + 'errorreturn': '-1' } + def get_initial_method_substdict(self, method): + substdict = { 'name': '%s.%s' % (self.objinfo.c_name, method.name) } + substdict['begin_allow_threads'] = 'pyg_begin_allow_threads;' + substdict['end_allow_threads'] = 'pyg_end_allow_threads;' + return substdict + + def write_class(self): + if self.overrides.is_type_ignored(self.objinfo.c_name): + return + self.fp.write('\n/* ----------- %s ----------- */\n\n' % + self.objinfo.c_name) + substdict = self.get_initial_class_substdict() + if not substdict.has_key('tp_flags'): + substdict['tp_flags'] = 'Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE' + substdict['typename'] = self.objinfo.c_name + if self.overrides.modulename: + substdict['classname'] = '%s.%s' % (self.overrides.modulename, + self.objinfo.name) + else: + substdict['classname'] = self.objinfo.name + substdict['tp_doc'] = self.objinfo.docstring + + # Maybe this could be done in a nicer way, but I'll leave it as it is + # for now: -- Johan + if not self.overrides.slot_is_overriden('%s.tp_init' % + self.objinfo.c_name): + substdict['tp_init'] = self.write_constructor() + substdict['tp_methods'] = self.write_methods() + substdict['tp_getset'] = self.write_getsets() + + # handle slots ... + for slot in self.slots_list: + + slotname = '%s.%s' % (self.objinfo.c_name, slot) + slotfunc = '_wrap_%s_%s' % (self.get_lower_name(), slot) + if slot[:6] == 'tp_as_': + slotfunc = '&' + slotfunc + if self.overrides.slot_is_overriden(slotname): + data = self.overrides.slot_override(slotname) + self.write_function(slotname, data) + substdict[slot] = slotfunc + else: + if not substdict.has_key(slot): + substdict[slot] = '0' + + self.fp.write(self.type_tmpl % substdict) + + self.write_virtuals() + + def write_function_wrapper(self, function_obj, template, + handle_return=0, is_method=0, kwargs_needed=0, + substdict=None): + '''This function is the guts of all functions that generate + wrappers for functions, methods and constructors.''' + if not substdict: substdict = {} + + info = argtypes.WrapperInfo() + + substdict.setdefault('errorreturn', 'NULL') + + # for methods, we want the leading comma + if is_method: + info.arglist.append('') + + if function_obj.varargs: + raise ValueError, "varargs functions not supported" + + for param in function_obj.params: + if param.pdflt and '|' not in info.parsestr: + info.add_parselist('|', [], []) + handler = argtypes.matcher.get(param.ptype) + handler.write_param(param.ptype, param.pname, param.pdflt, + param.pnull, param.keeprefcount, info) + + substdict['setreturn'] = '' + if handle_return: + if function_obj.ret not in ('none', None): + substdict['setreturn'] = 'ret = ' + handler = argtypes.matcher.get(function_obj.ret) + handler.write_return(function_obj.ret, + function_obj.caller_owns_return, info) + + if function_obj.deprecated != None: + deprecated = self.deprecated_tmpl % { + 'deprecationmsg': function_obj.deprecated, + 'errorreturn': substdict['errorreturn'] } + else: + deprecated = '' + + # if name isn't set, set it to function_obj.name + substdict.setdefault('name', function_obj.name) + + substdict['begin_allow_threads'] = 'pyg_begin_allow_threads;' + substdict['end_allow_threads'] = 'pyg_end_allow_threads;' + + if self.objinfo: + substdict['typename'] = self.objinfo.c_name + substdict.setdefault('cname', function_obj.c_name) + substdict['varlist'] = info.get_varlist() + substdict['typecodes'] = info.parsestr + substdict['parselist'] = info.get_parselist() + substdict['arglist'] = info.get_arglist() + substdict['codebefore'] = deprecated + ( + string.replace(info.get_codebefore(), + 'return NULL', 'return ' + substdict['errorreturn']) + ) + substdict['codeafter'] = ( + string.replace(info.get_codeafter(), + 'return NULL', + 'return ' + substdict['errorreturn'])) + + if info.parsestr or kwargs_needed: + substdict['parseargs'] = self.parse_tmpl % substdict + substdict['extraparams'] = ', PyObject *args, PyObject *kwargs' + flags = 'METH_VARARGS|METH_KEYWORDS' + + # prepend the keyword list to the variable list + substdict['varlist'] = info.get_kwlist() + substdict['varlist'] + else: + substdict['parseargs'] = '' + substdict['extraparams'] = '' + flags = 'METH_NOARGS' + + return template % substdict, flags + + def write_constructor(self): + initfunc = '0' + constructor = self.parser.find_constructor(self.objinfo,self.overrides) + if not constructor: + return self.write_default_constructor() + + funcname = constructor.c_name + try: + if self.overrides.is_overriden(funcname): + data = self.overrides.override(funcname) + self.write_function(funcname, data) + self.objinfo.has_new_constructor_api = ( + self.objinfo.typecode in + self.overrides.newstyle_constructors) + else: + # ok, a hack to determine if we should use + # new-style constructores :P + property_based = getattr(self, + 'write_property_based_constructor', + None) + if property_based: + if (len(constructor.params) == 0 or + isinstance(constructor.params[0], + definitions.Property)): + # write_property_based_constructor is only + # implemented in GObjectWrapper + return self.write_property_based_constructor( + constructor) + else: + sys.stderr.write( + "Warning: generating old-style constructor for:" + + constructor.c_name + '\n') + + # write constructor from template ... + code = self.write_function_wrapper(constructor, + self.constructor_tmpl, + handle_return=0, is_method=0, kwargs_needed=1, + substdict=self.get_initial_constructor_substdict( + constructor))[0] + self.fp.write(code) + initfunc = '_wrap_' + funcname + except: + sys.stderr.write('Could not write constructor for %s: %s\n' + % (self.objinfo.c_name, exc_info())) + + initfunc = self.write_noconstructor() + return initfunc + + def write_noconstructor(self): + # this is a hack ... + if not hasattr(self.overrides, 'no_constructor_written'): + self.fp.write(self.noconstructor) + self.overrides.no_constructor_written = 1 + initfunc = 'pygobject_no_constructor' + return initfunc + + def write_default_constructor(self): + return self.write_noconstructor() + + def get_methflags(self, funcname): + if self.overrides.wants_kwargs(funcname): + flags = 'METH_VARARGS|METH_KEYWORDS' + elif self.overrides.wants_noargs(funcname): + flags = 'METH_NOARGS' + elif self.overrides.wants_onearg(funcname): + flags = 'METH_O' + else: + flags = 'METH_VARARGS' + if self.overrides.is_staticmethod(funcname): + flags += '|METH_STATIC' + elif self.overrides.is_classmethod(funcname): + flags += '|METH_CLASS' + return flags + + def write_function(self, funcname, data): + lineno, filename = self.overrides.getstartline(funcname) + self.fp.setline(lineno, filename) + self.fp.write(data) + self.fp.resetline() + self.fp.write('\n\n') + + def _get_class_virtual_substdict(self, meth, cname, parent): + substdict = self.get_initial_method_substdict(meth) + substdict['virtual'] = substdict['name'].split('.')[1] + substdict['cname'] = cname + substdict['class_cast_macro'] = parent.typecode.replace( + '_TYPE_', '_', 1) + "_CLASS" + substdict['typecode'] = self.objinfo.typecode + substdict['cast'] = string.replace(parent.typecode, '_TYPE_', '_', 1) + return substdict + + def write_methods(self): + methods = [] + klass = self.objinfo.c_name + # First, get methods from the defs files + for meth in self.parser.find_methods(self.objinfo): + method_name = meth.c_name + if self.overrides.is_ignored(method_name): + continue + try: + if self.overrides.is_overriden(method_name): + if not self.overrides.is_already_included(method_name): + data = self.overrides.override(method_name) + self.write_function(method_name, data) + + methflags = self.get_methflags(method_name) + else: + # write constructor from template ... + code, methflags = self.write_function_wrapper(meth, + self.method_tmpl, handle_return=1, is_method=1, + substdict=self.get_initial_method_substdict(meth)) + self.fp.write(code) + methods.append(self.methdef_tmpl % + { 'name': fixname(meth.name), + 'cname': '_wrap_' + method_name, + 'flags': methflags, + 'docstring': meth.docstring }) + methods_coverage.declare_wrapped() + except: + methods_coverage.declare_not_wrapped() + sys.stderr.write('Could not write method %s.%s: %s\n' + % (klass, meth.name, exc_info())) + + # Now try to see if there are any defined in the override + for method_name in self.overrides.get_defines_for(klass): + c_name = override.class2cname(klass, method_name) + if self.overrides.is_already_included(method_name): + continue + + try: + data = self.overrides.define(klass, method_name) + self.write_function(method_name, data) + methflags = self.get_methflags(method_name) + + methods.append(self.methdef_tmpl % + { 'name': method_name, + 'cname': '_wrap_' + c_name, + 'flags': methflags, + 'docstring': meth.docstring }) + methods_coverage.declare_wrapped() + except: + methods_coverage.declare_not_wrapped() + sys.stderr.write('Could not write method %s.%s: %s\n' + % (klass, meth.name, exc_info())) + + # Add GObject virtual method accessors, for chaining to parent + # virtuals from subclasses + methods += self.write_virtual_accessors() + + if methods: + methoddefs = '_Py%s_methods' % self.objinfo.c_name + # write the PyMethodDef structure + methods.append(' { NULL, NULL, 0, NULL }\n') + self.fp.write('static const PyMethodDef %s[] = {\n' % methoddefs) + self.fp.write(string.join(methods, '')) + self.fp.write('};\n\n') + else: + methoddefs = 'NULL' + return methoddefs + + def write_virtual_accessors(self): + klass = self.objinfo.c_name + methods = [] + for meth in self.parser.find_virtuals(self.objinfo): + method_name = self.objinfo.c_name + "__do_" + meth.name + if self.overrides.is_ignored(method_name): + continue + try: + if self.overrides.is_overriden(method_name): + if not self.overrides.is_already_included(method_name): + data = self.overrides.override(method_name) + self.write_function(method_name, data) + methflags = self.get_methflags(method_name) + else: + # temporarily add a 'self' parameter as first argument + meth.params.insert(0, definitions.Parameter( + ptype=(self.objinfo.c_name + '*'), + pname='self', pdflt=None, pnull=None)) + try: + # write method from template ... + code, methflags = self.write_function_wrapper( + meth, self.virtual_accessor_tmpl, + handle_return=True, is_method=False, + substdict=self._get_class_virtual_substdict( + meth, method_name, self.objinfo)) + self.fp.write(code) + finally: + del meth.params[0] + methods.append(self.methdef_tmpl % + { 'name': "do_" + fixname(meth.name), + 'cname': '_wrap_' + method_name, + 'flags': methflags + '|METH_CLASS', + 'docstring': 'NULL'}) + vaccessors_coverage.declare_wrapped() + except: + vaccessors_coverage.declare_not_wrapped() + sys.stderr.write( + 'Could not write virtual accessor method %s.%s: %s\n' + % (klass, meth.name, exc_info())) + return methods + + def write_virtuals(self): + ''' + Write _wrap_FooBar__proxy_do_zbr() reverse wrapers for + GObject virtuals + ''' + klass = self.objinfo.c_name + virtuals = [] + for meth in self.parser.find_virtuals(self.objinfo): + method_name = self.objinfo.c_name + "__proxy_do_" + meth.name + if self.overrides.is_ignored(method_name): + continue + try: + if self.overrides.is_overriden(method_name): + if not self.overrides.is_already_included(method_name): + data = self.overrides.override(method_name) + self.write_function(method_name, data) + else: + # write virtual proxy ... + ret, props = argtypes.matcher.get_reverse_ret(meth.ret) + wrapper = reversewrapper.ReverseWrapper( + '_wrap_' + method_name, is_static=True) + wrapper.set_return_type(ret(wrapper, **props)) + wrapper.add_parameter(reversewrapper.PyGObjectMethodParam( + wrapper, "self", method_name="do_" + meth.name, + c_type=(klass + ' *'))) + for param in meth.params: + handler, props = argtypes.matcher.get_reverse( + param.ptype) + props["direction"] = param.pdir + wrapper.add_parameter(handler(wrapper, + param.pname, **props)) + buf = reversewrapper.MemoryCodeSink() + wrapper.generate(buf) + self.fp.write(buf.flush()) + virtuals.append((fixname(meth.name), '_wrap_' + method_name)) + vproxies_coverage.declare_wrapped() + except (KeyError, ValueError): + vproxies_coverage.declare_not_wrapped() + virtuals.append((fixname(meth.name), None)) + sys.stderr.write('Could not write virtual proxy %s.%s: %s\n' + % (klass, meth.name, exc_info())) + if virtuals: + # Write a 'pygtk class init' function for this object, + # except when the object type is explicitly ignored (like + # GtkPlug and GtkSocket on win32). + if self.overrides.is_ignored(self.objinfo.typecode): + return + class_cast_macro = self.objinfo.typecode.replace( + '_TYPE_', '_', 1) + "_CLASS" + cast_macro = self.objinfo.typecode.replace('_TYPE_', '_', 1) + funcname = "__%s_class_init" % klass + self.objinfo.class_init_func = funcname + have_implemented_virtuals = not not [True + for name, cname in virtuals + if cname is not None] + self.fp.write( + ('\nstatic int\n' + '%(funcname)s(gpointer gclass, PyTypeObject *pyclass)\n' + '{\n') % vars()) + + if have_implemented_virtuals: + self.fp.write(' PyObject *o;\n') + self.fp.write( + ' %(klass)sClass *klass = ' + '%(class_cast_macro)s(gclass);\n' + ' PyObject *gsignals = ' + 'PyDict_GetItemString(pyclass->tp_dict, "__gsignals__");\n' + % vars()) + + for name, cname in virtuals: + do_name = 'do_' + name + if cname is None: + self.fp.write('\n /* overriding %(do_name)s ' + 'is currently not supported */\n' % vars()) + else: + self.fp.write(''' + o = PyObject_GetAttrString((PyObject *) pyclass, "%(do_name)s"); + if (o == NULL) + PyErr_Clear(); + else { + if (!PyObject_TypeCheck(o, &PyCFunction_Type) + && !(gsignals && PyDict_GetItemString(gsignals, "%(name)s"))) + klass->%(name)s = %(cname)s; + Py_DECREF(o); + } +''' % vars()) + self.fp.write(' return 0;\n}\n') + + def write_getsets(self): + lower_name = self.get_lower_name() + getsets_name = lower_name + '_getsets' + getterprefix = '_wrap_' + lower_name + '__get_' + setterprefix = '_wrap_' + lower_name + '__set_' + + # no overrides for the whole function. If no fields, + # don't write a func + if not self.objinfo.fields: + return '0' + getsets = [] + for ftype, cfname in self.objinfo.fields: + fname = cfname.replace('.', '_') + gettername = '0' + settername = '0' + attrname = self.objinfo.c_name + '.' + fname + if self.overrides.attr_is_overriden(attrname): + code = self.overrides.attr_override(attrname) + self.write_function(attrname, code) + if string.find(code, getterprefix + fname) >= 0: + gettername = getterprefix + fname + if string.find(code, setterprefix + fname) >= 0: + settername = setterprefix + fname + if gettername == '0': + try: + funcname = getterprefix + fname + info = argtypes.WrapperInfo() + handler = argtypes.matcher.get(ftype) + # for attributes, we don't own the "return value" + handler.write_return(ftype, 0, info) + self.fp.write(self.getter_tmpl % + { 'funcname': funcname, + 'varlist': info.varlist, + 'field': self.get_field_accessor(cfname), + 'codeafter': info.get_codeafter() }) + gettername = funcname + except: + sys.stderr.write( + "Could not write getter for %s.%s: %s\n" + % (self.objinfo.c_name, fname, exc_info())) + if gettername != '0' or settername != '0': + getsets.append(' { "%s", (getter)%s, (setter)%s },\n' % + (fixname(fname), gettername, settername)) + + if not getsets: + return '0' + self.fp.write('static const PyGetSetDef %s[] = {\n' % getsets_name) + for getset in getsets: + self.fp.write(getset) + self.fp.write(' { NULL, (getter)0, (setter)0 },\n') + self.fp.write('};\n\n') + + return getsets_name + + def write_functions(self, prefix): + self.fp.write('\n/* ----------- functions ----------- */\n\n') + functions = [] + + # First, get methods from the defs files + for func in self.parser.find_functions(): + funcname = func.c_name + if self.overrides.is_ignored(funcname) or \ + self.overrides.is_type_ignored(func.ret): + continue + try: + if self.overrides.is_overriden(funcname): + data = self.overrides.override(funcname) + self.write_function(funcname, data) + + methflags = self.get_methflags(funcname) + else: + # write constructor from template ... + code, methflags = self.write_function_wrapper(func, + self.function_tmpl, handle_return=1, is_method=0) + self.fp.write(code) + functions.append(self.methdef_tmpl % + { 'name': func.name, + 'cname': '_wrap_' + funcname, + 'flags': methflags, + 'docstring': func.docstring }) + functions_coverage.declare_wrapped() + except: + functions_coverage.declare_not_wrapped() + sys.stderr.write('Could not write function %s: %s\n' + % (func.name, exc_info())) + + # Now try to see if there are any defined in the override + for funcname in self.overrides.get_functions(): + try: + data = self.overrides.function(funcname) + self.write_function(funcname, data) + methflags = self.get_methflags(funcname) + functions.append(self.methdef_tmpl % + { 'name': funcname, + 'cname': '_wrap_' + funcname, + 'flags': methflags, + 'docstring': 'NULL'}) + functions_coverage.declare_wrapped() + except: + functions_coverage.declare_not_wrapped() + sys.stderr.write('Could not write function %s: %s\n' + % (funcname, exc_info())) + + # write the PyMethodDef structure + functions.append(' { NULL, NULL, 0, NULL }\n') + + self.fp.write('const PyMethodDef ' + prefix + '_functions[] = {\n') + self.fp.write(string.join(functions, '')) + self.fp.write('};\n\n') + +class GObjectWrapper(Wrapper): + constructor_tmpl = ( + 'static int\n' + '_wrap_%(cname)s(PyGObject *self%(extraparams)s)\n' + '{\n' + '%(varlist)s' + '%(parseargs)s' + '%(codebefore)s' + ' self->obj = (GObject *)%(cname)s(%(arglist)s);\n' + '%(codeafter)s\n' + ' if (!self->obj) {\n' + ' PyErr_SetString(PyExc_RuntimeError, ' + '"could not create %(typename)s object");\n' + ' return -1;\n' + ' }\n' + '%(aftercreate)s' + ' pygobject_register_wrapper((PyObject *)self);\n' + ' return 0;\n' + '}\n\n' + ) + + method_tmpl = ( + 'static PyObject *\n' + '_wrap_%(cname)s(PyGObject *self%(extraparams)s)\n' + '{\n' + '%(varlist)s' + '%(parseargs)s' + '%(codebefore)s' + ' %(begin_allow_threads)s\n' + ' %(setreturn)s%(cname)s(%(cast)s(self->obj)%(arglist)s);\n' + ' %(end_allow_threads)s\n' + '%(codeafter)s\n' + '}\n\n' + ) + def __init__(self, parser, objinfo, overrides, fp=FileOutput(sys.stdout)): + Wrapper.__init__(self, parser, objinfo, overrides, fp) + if self.objinfo: + self.castmacro = string.replace(self.objinfo.typecode, + '_TYPE_', '_', 1) + + def get_initial_class_substdict(self): + return { 'tp_basicsize' : 'PyGObject', + 'tp_weaklistoffset' : 'offsetof(PyGObject, weakreflist)', + 'tp_dictoffset' : 'offsetof(PyGObject, inst_dict)' } + + def get_field_accessor(self, fieldname): + castmacro = string.replace(self.objinfo.typecode, '_TYPE_', '_', 1) + return '%s(pygobject_get(self))->%s' % (castmacro, fieldname) + + def get_initial_constructor_substdict(self, constructor): + substdict = Wrapper.get_initial_constructor_substdict(self, + constructor) + if not constructor.caller_owns_return: + substdict['aftercreate'] = " g_object_ref(self->obj);\n" + else: + substdict['aftercreate'] = '' + return substdict + + def get_initial_method_substdict(self, method): + substdict = Wrapper.get_initial_method_substdict(self, method) + substdict['cast'] = string.replace(self.objinfo.typecode, + '_TYPE_', '_', 1) + return substdict + + def write_default_constructor(self): + try: + parent = self.parser.find_object(self.objinfo.parent) + except ValueError: + parent = None + if parent is not None: + ## just like the constructor is inheritted, we should + # inherit the new API compatibility flag + self.objinfo.has_new_constructor_api = ( + parent.has_new_constructor_api) + elif self.objinfo.parent == 'GObject': + self.objinfo.has_new_constructor_api = True + return '0' + + def write_property_based_constructor(self, constructor): + self.objinfo.has_new_constructor_api = True + out = self.fp + print >> out, "static int" + print >> out, '_wrap_%s(PyGObject *self, PyObject *args,' \ + ' PyObject *kwargs)\n{' % constructor.c_name + if constructor.params: + s = " GType obj_type = pyg_type_from_object((PyObject *) self);" + print >> out, s + + def py_str_list_to_c(arg): + if arg: + return "{" + ", ".join( + map(lambda s: '"' + s + '"', arg)) + ", NULL }" + else: + return "{ NULL }" + + classname = '%s.%s' % (self.overrides.modulename, + self.objinfo.name) + + if constructor.params: + mandatory_arguments = [param for param in constructor.params + if not param.optional] + optional_arguments = [param for param in constructor.params + if param.optional] + arg_names = py_str_list_to_c( + [param.argname + for param in mandatory_arguments + optional_arguments]) + + prop_names = py_str_list_to_c( + [param.pname + for param in mandatory_arguments + optional_arguments]) + + print >> out, " GParameter params[%i];" % \ + len(constructor.params) + print >> out, " PyObject *parsed_args[%i] = {NULL, };" % \ + len(constructor.params) + print >> out, " char *arg_names[] = %s;" % arg_names + print >> out, " char *prop_names[] = %s;" % prop_names + print >> out, " guint nparams, i;" + print >> out + if constructor.deprecated is not None: + out.write( + ' if (PyErr_Warn(PyExc_DeprecationWarning, ' + '"%s") < 0)\n' % + constructor.deprecated) + print >> out, ' return -1;' + print >> out + out.write(" if (!PyArg_ParseTupleAndKeywords(args, kwargs, ") + template = '"' + if mandatory_arguments: + template += "O"*len(mandatory_arguments) + if optional_arguments: + template += "|" + "O"*len(optional_arguments) + template += ':%s.__init__"' % classname + print >> out, template, ", arg_names", + for i in range(len(constructor.params)): + print >> out, ", &parsed_args[%i]" % i, + + out.write( + "))\n" + " return -1;\n" + "\n" + " memset(params, 0, sizeof(GParameter)*%i);\n" + " if (!pyg_parse_constructor_args(obj_type, arg_names,\n" + " prop_names, params, \n" + " &nparams, parsed_args))\n" + " return -1;\n" + " pygobject_constructv(self, nparams, params);\n" + " for (i = 0; i < nparams; ++i)\n" + " g_value_unset(¶ms[i].value);\n" + % len(constructor.params)) + else: + out.write( + " static char* kwlist[] = { NULL };\n" + "\n") + + if constructor.deprecated is not None: + out.write( + ' if (PyErr_Warn(PyExc_DeprecationWarning, "%s") < 0)\n' + ' return -1;\n' + '\n' % constructor.deprecated) + + out.write( + ' if (!PyArg_ParseTupleAndKeywords(args, kwargs,\n' + ' ":%s.__init__",\n' + ' kwlist))\n' + ' return -1;\n' + '\n' + ' pygobject_constructv(self, 0, NULL);\n' % classname) + out.write( + ' if (!self->obj) {\n' + ' PyErr_SetString(\n' + ' PyExc_RuntimeError, \n' + ' "could not create %s object");\n' + ' return -1;\n' + ' }\n' % classname) + + if not constructor.caller_owns_return: + print >> out, " g_object_ref(self->obj);\n" + + out.write( + ' return 0;\n' + '}\n\n') + + return "_wrap_%s" % constructor.c_name + + +## TODO : Add GstMiniObjectWrapper(Wrapper) +class GstMiniObjectWrapper(Wrapper): + constructor_tmpl = ( + 'static int\n' + '_wrap_%(cname)s(PyGstMiniObject *self%(extraparams)s)\n' + '{\n' + '%(varlist)s' + '%(parseargs)s' + '%(codebefore)s' + ' self->obj = (GstMiniObject *)%(cname)s(%(arglist)s);\n' + '%(codeafter)s\n' + ' if (!self->obj) {\n' + ' PyErr_SetString(PyExc_RuntimeError, ' + '"could not create %(typename)s miniobject");\n' + ' return -1;\n' + ' }\n' + '%(aftercreate)s' + ' pygstminiobject_register_wrapper((PyObject *)self);\n' + ' return 0;\n' + '}\n\n' + ) + method_tmpl = ( + 'static PyObject *\n' + '_wrap_%(cname)s(PyGstMiniObject *self%(extraparams)s)\n' + '{\n' + '%(varlist)s' + '%(parseargs)s' + '%(codebefore)s' + ' %(begin_allow_threads)s\n' + ' %(setreturn)s%(cname)s(%(cast)s(self->obj)%(arglist)s);\n' + ' %(end_allow_threads)s\n' + '%(codeafter)s\n' + '}\n\n' + ) + def __init__(self, parser, objinfo, overrides, fp=FileOutput(sys.stdout)): + Wrapper.__init__(self, parser, objinfo, overrides, fp) + if self.objinfo: + self.castmacro = string.replace(self.objinfo.typecode, + '_TYPE_', '_', 1) + + def get_initial_class_substdict(self): + return { 'tp_basicsize' : 'PyGstMiniObject', + 'tp_weaklistoffset' : 'offsetof(PyGstMiniObject, weakreflist)', + 'tp_dictoffset' : 'offsetof(PyGstMiniObject, inst_dict)' } + + def get_field_accessor(self, fieldname): + castmacro = string.replace(self.objinfo.typecode, '_TYPE_', '_', 1) + return '%s(pygstminiobject_get(self))->%s' % (castmacro, fieldname) + + def get_initial_constructor_substdict(self, constructor): + substdict = Wrapper.get_initial_constructor_substdict(self, + constructor) + if not constructor.caller_owns_return: + substdict['aftercreate'] = " gst_mini_object_ref(self->obj);\n" + else: + substdict['aftercreate'] = '' + return substdict + + def get_initial_method_substdict(self, method): + substdict = Wrapper.get_initial_method_substdict(self, method) + substdict['cast'] = string.replace(self.objinfo.typecode, + '_TYPE_', '_', 1) + return substdict + + + +class GInterfaceWrapper(GObjectWrapper): + virtual_accessor_tmpl = ( + 'static PyObject *\n' + '_wrap_%(cname)s(PyObject *cls%(extraparams)s)\n' + '{\n' + ' %(vtable)s *iface;\n' + '%(varlist)s' + '%(parseargs)s' + '%(codebefore)s' + ' iface = g_type_interface_peek(' + 'g_type_class_peek(pyg_type_from_object(cls)), %(typecode)s);\n' + ' if (iface->%(virtual)s)\n' + ' %(setreturn)siface->%(virtual)s(%(arglist)s);\n' + ' else {\n' + ' PyErr_SetString(PyExc_NotImplementedError, ' + '"interface method %(name)s not implemented");\n' + ' return NULL;\n' + ' }\n' + '%(codeafter)s\n' + '}\n\n' + ) + + def get_initial_class_substdict(self): + return { 'tp_basicsize' : 'PyObject', + 'tp_weaklistoffset' : '0', + 'tp_dictoffset' : '0'} + + def write_constructor(self): + # interfaces have no constructors ... + return '0' + def write_getsets(self): + # interfaces have no fields ... + return '0' + + def _get_class_virtual_substdict(self, meth, cname, parent): + substdict = self.get_initial_method_substdict(meth) + substdict['virtual'] = substdict['name'].split('.')[1] + substdict['cname'] = cname + substdict['typecode'] = self.objinfo.typecode + substdict['vtable'] = self.objinfo.vtable + return substdict + + def write_virtuals(self): + ## Now write reverse method wrappers, which let python code + ## implement interface methods. + # First, get methods from the defs files + klass = self.objinfo.c_name + proxies = [] + for meth in self.parser.find_virtuals(self.objinfo): + method_name = self.objinfo.c_name + "__proxy_do_" + meth.name + if self.overrides.is_ignored(method_name): + continue + try: + if self.overrides.is_overriden(method_name): + if not self.overrides.is_already_included(method_name): + data = self.overrides.override(method_name) + self.write_function(method_name, data) + else: + # write proxy ... + ret, props = argtypes.matcher.get_reverse_ret(meth.ret) + wrapper = reversewrapper.ReverseWrapper( + '_wrap_' + method_name, is_static=True) + wrapper.set_return_type(ret(wrapper, **props)) + wrapper.add_parameter(reversewrapper.PyGObjectMethodParam( + wrapper, "self", method_name="do_" + meth.name, + c_type=(klass + ' *'))) + for param in meth.params: + handler, props = argtypes.matcher.get_reverse( + param.ptype) + props["direction"] = param.pdir + wrapper.add_parameter( + handler(wrapper, param.pname, **props)) + buf = reversewrapper.MemoryCodeSink() + wrapper.generate(buf) + self.fp.write(buf.flush()) + proxies.append((fixname(meth.name), '_wrap_' + method_name)) + iproxies_coverage.declare_wrapped() + except (KeyError, ValueError): + iproxies_coverage.declare_not_wrapped() + proxies.append((fixname(meth.name), None)) + sys.stderr.write('Could not write interface proxy %s.%s: %s\n' + % (klass, meth.name, exc_info())) + + if not proxies: + return + + # Make sure we have at least one proxy function + if not [cname for name,cname in proxies if not cname is None]: + return + + ## Write an interface init function for this object + funcname = "__%s__interface_init" % klass + vtable = self.objinfo.vtable + self.fp.write( + '\nstatic void\n' + '%(funcname)s(%(vtable)s *iface, PyTypeObject *pytype)\n' + '{\n' + ' %(vtable)s *parent_iface = ' + 'g_type_interface_peek_parent(iface);\n' + ' PyObject *py_method;\n' + '\n' + % vars()) + + for name, cname in proxies: + do_name = 'do_' + name + if cname is None: + continue + + self.fp.write(( + ' py_method = pytype? PyObject_GetAttrString(' + '(PyObject *) pytype, "%(do_name)s") : NULL;\n' + ' if (py_method && !PyObject_TypeCheck(py_method, ' + '&PyCFunction_Type)) {\n' + ' iface->%(name)s = %(cname)s;\n' + ' } else {\n' + ' PyErr_Clear();\n' + ' if (parent_iface) {\n' + ' iface->%(name)s = parent_iface->%(name)s;\n' + ' }\n' + ' Py_XDECREF(py_method);\n' + ' }\n' + ) % vars()) + self.fp.write('}\n\n') + interface_info = "__%s__iinfo" % klass + self.fp.write(''' +static const GInterfaceInfo %s = { + (GInterfaceInitFunc) %s, + NULL, + NULL +}; +''' % (interface_info, funcname)) + self.objinfo.interface_info = interface_info + +class GBoxedWrapper(Wrapper): + constructor_tmpl = ( + 'static int\n' + '_wrap_%(cname)s(PyGBoxed *self%(extraparams)s)\n' + '{\n' \ + '%(varlist)s' + '%(parseargs)s' + '%(codebefore)s' + ' self->gtype = %(typecode)s;\n' + ' self->free_on_dealloc = FALSE;\n' + ' self->boxed = %(cname)s(%(arglist)s);\n' + '%(codeafter)s\n' + ' if (!self->boxed) {\n' + ' PyErr_SetString(PyExc_RuntimeError, ' + '"could not create %(typename)s object");\n' + ' return -1;\n' + ' }\n' + ' self->free_on_dealloc = TRUE;\n' + ' return 0;\n' + '}\n\n' + ) + + method_tmpl = ( + 'static PyObject *\n' + '_wrap_%(cname)s(PyObject *self%(extraparams)s)\n' + '{\n' + '%(varlist)s' + '%(parseargs)s' + '%(codebefore)s' + ' %(begin_allow_threads)s\n' + ' %(setreturn)s%(cname)s(pyg_boxed_get(self, ' + '%(typename)s)%(arglist)s);\n' + ' %(end_allow_threads)s\n' + '%(codeafter)s\n' + '}\n\n' + ) + + def get_initial_class_substdict(self): + return { 'tp_basicsize' : 'PyGBoxed', + 'tp_weaklistoffset' : '0', + 'tp_dictoffset' : '0' } + + def get_field_accessor(self, fieldname): + return 'pyg_boxed_get(self, %s)->%s' % (self.objinfo.c_name, fieldname) + + def get_initial_constructor_substdict(self, constructor): + substdict = Wrapper.get_initial_constructor_substdict( + self, constructor) + substdict['typecode'] = self.objinfo.typecode + return substdict + +class GPointerWrapper(GBoxedWrapper): + constructor_tmpl = ( + 'static int\n' + '_wrap_%(cname)s(PyGPointer *self%(extraparams)s)\n' + '{\n' + '%(varlist)s' + '%(parseargs)s' + '%(codebefore)s' + ' self->gtype = %(typecode)s;\n' + ' self->pointer = %(cname)s(%(arglist)s);\n' + '%(codeafter)s\n' + ' if (!self->pointer) {\n' + ' PyErr_SetString(PyExc_RuntimeError, ' + '"could not create %(typename)s object");\n' + ' return -1;\n' + ' }\n' + ' return 0;\n' + '}\n\n' + ) + + method_tmpl = ( + 'static PyObject *\n' + '_wrap_%(cname)s(PyObject *self%(extraparams)s)\n' + '{\n' + '%(varlist)s' + '%(parseargs)s' + '%(codebefore)s' + ' %(setreturn)s%(cname)s(pyg_pointer_get(self, ' + '%(typename)s)%(arglist)s);\n' + '%(codeafter)s\n' + '}\n\n' + ) + + def get_initial_class_substdict(self): + return { 'tp_basicsize' : 'PyGPointer', + 'tp_weaklistoffset' : '0', + 'tp_dictoffset' : '0' } + + def get_field_accessor(self, fieldname): + return 'pyg_pointer_get(self, %s)->%s' % (self.objinfo.c_name, + fieldname) + + def get_initial_constructor_substdict(self, constructor): + substdict = Wrapper.get_initial_constructor_substdict( + self, constructor) + substdict['typecode'] = self.objinfo.typecode + return substdict + +def write_headers(data, fp): + fp.write('/* -- THIS FILE IS GENERATED - DO NOT EDIT */') + fp.write('/* -*- Mode: C; c-basic-offset: 4 -*- */\n\n') + fp.write('#include \n\n\n') + fp.write(data) + fp.resetline() + fp.write('\n\n') + +def write_body(data, fp): + fp.write(data) + fp.resetline() + fp.write('\n\n') + +def write_imports(overrides, fp): + fp.write('/* ---------- types from other modules ---------- */\n') + for module, pyname, cname in overrides.get_imports(): + fp.write('static PyTypeObject *_%s;\n' % cname) + fp.write('#define %s (*_%s)\n' % (cname, cname)) + fp.write('\n\n') + +def write_type_declarations(parser, fp): + fp.write('/* ---------- forward type declarations ---------- */\n') + for obj in parser.boxes: + fp.write('PyTypeObject Py' + obj.c_name + '_Type;\n') + for obj in parser.objects: + fp.write('PyTypeObject Py' + obj.c_name + '_Type;\n') + for obj in parser.miniobjects: + fp.write('PyTypeObject Py' + obj.c_name + '_Type;\n') + for interface in parser.interfaces: + fp.write('PyTypeObject Py' + interface.c_name + '_Type;\n') + fp.write('\n') + + +def sort_parent_children(objects): + objects = list(objects) + modified = True + while modified: + modified = False + parent_index = None + child_index = None + for i, obj in enumerate(objects): + if obj.parent == 'GObject': + continue + if obj.parent not in [info.c_name for info in objects[:i]]: + for j, info in enumerate(objects[i+1:]): + if info.c_name == obj.parent: + parent_index = i + 1 + j + child_index = i + break + else: + continue + break + if child_index is not None and parent_index is not None: + if child_index != parent_index: + objects.insert(child_index, objects.pop(parent_index)) + modified = True + return objects + +def write_classes(parser, overrides, fp): + ## Sort the objects, so that we generate code for the parent types + ## before their children. + objects = sort_parent_children(parser.objects) + for klass, items in ((GBoxedWrapper, parser.boxes), + (GPointerWrapper, parser.pointers), + (GObjectWrapper, objects), + (GstMiniObjectWrapper, parser.miniobjects), + (GInterfaceWrapper, parser.interfaces)): + for item in items: + instance = klass(parser, item, overrides, fp) + instance.write_class() + fp.write('\n') + +def write_enums(parser, overrides, prefix, fp=sys.stdout): + if not parser.enums: + return + fp.write('\n/* ----------- enums and flags ----------- */\n\n') + fp.write( + 'void\n' + prefix + + '_add_constants(PyObject *module, const gchar *strip_prefix)\n{\n') + + for enum in parser.enums: + if overrides.is_type_ignored(enum.c_name): + continue + if enum.typecode is None: + for nick, value in enum.values: + if overrides.is_ignored(value): + continue + fp.write( + ' PyModule_AddIntConstant(module, ' + '(char *) pyg_constant_strip_prefix("%s", strip_prefix), %s);\n' + % (value, value)) + else: + if enum.deftype == 'enum': + fp.write(' pyg_enum_add(module, "%s", strip_prefix, %s);\n' + % (enum.name, enum.typecode)) + else: + fp.write(' pyg_flags_add(module, "%s", strip_prefix, %s);\n' + % (enum.name, enum.typecode)) + + fp.write('\n') + fp.write(' if (PyErr_Occurred())\n') + fp.write(' PyErr_Print();\n') + fp.write('}\n\n') + +def write_extension_init(overrides, prefix, fp): + fp.write('/* initialise stuff extension classes */\n') + fp.write('void\n' + prefix + '_register_classes(PyObject *d)\n{\n') + imports = overrides.get_imports()[:] + if imports: + bymod = {} + for module, pyname, cname in imports: + bymod.setdefault(module, []).append((pyname, cname)) + fp.write(' PyObject *module;\n\n') + for module in bymod: + fp.write( + ' if ((module = PyImport_ImportModule("%s")) != NULL) {\n' + % module) + fp.write( + ' PyObject *moddict = PyModule_GetDict(module);\n\n') + for pyname, cname in bymod[module]: + fp.write( + ' _%s = (PyTypeObject *)PyDict_GetItemString(' + 'moddict, "%s");\n' % (cname, pyname)) + fp.write(' if (_%s == NULL) {\n' % cname) + fp.write(' PyErr_SetString(PyExc_ImportError,\n') + fp.write(' "cannot import name %s from %s");\n' + % (pyname, module)) + fp.write(' return;\n') + fp.write(' }\n') + fp.write(' } else {\n') + fp.write(' PyErr_SetString(PyExc_ImportError,\n') + fp.write(' "could not import %s");\n' % module) + fp.write(' return;\n') + fp.write(' }\n') + fp.write('\n') + fp.write(overrides.get_init() + '\n') + fp.resetline() + +def write_registers(parser, overrides, fp): + for boxed in parser.boxes: + if overrides.is_type_ignored(boxed.c_name): + continue + fp.write(' pyg_register_boxed(d, "' + boxed.name + + '", ' + boxed.typecode + + ', &Py' + boxed.c_name + + '_Type);\n') + for pointer in parser.pointers: + if overrides.is_type_ignored(pointer.c_name): + continue + fp.write(' pyg_register_pointer(d, "' + pointer.name + + '", ' + pointer.typecode + + ', &Py' + pointer.c_name + '_Type);\n') + for interface in parser.interfaces: + if overrides.is_type_ignored(interface.c_name): + continue + fp.write(' pyg_register_interface(d, "' + interface.name + + '", '+ interface.typecode + ', &Py' + interface.c_name + + '_Type);\n') + if interface.interface_info is not None: + fp.write(' pyg_register_interface_info(%s, &%s);\n' % + (interface.typecode, interface.interface_info)) + + objects = parser.objects[:] + pos = 0 + while pos < len(objects): + parent = objects[pos].parent + for i in range(pos+1, len(objects)): + if objects[i].c_name == parent: + objects.insert(i+1, objects[pos]) + del objects[pos] + break + else: + pos = pos + 1 + for obj in objects: + if overrides.is_type_ignored(obj.c_name): + continue + bases = [] + if obj.parent != None: + bases.append(obj.parent) + bases = bases + obj.implements + if bases: + fp.write(' pygobject_register_class(d, "' + obj.c_name + + '", ' + obj.typecode + ', &Py' + obj.c_name + + '_Type, Py_BuildValue("(' + 'O' * len(bases) + ')", ' + + string.join(map(lambda s: '&Py'+s+'_Type', bases), ', ') + + '));\n') + else: + fp.write(' pygobject_register_class(d, "' + obj.c_name + + '", ' + obj.typecode + ', &Py' + obj.c_name + + '_Type, NULL);\n') + if obj.has_new_constructor_api: + fp.write(' pyg_set_object_has_new_constructor(%s);\n' % + obj.typecode) + else: + print >> sys.stderr, ( + "Warning: Constructor for %s needs to be updated to new API\n" + " See http://live.gnome.org/PyGTK_2fWhatsNew28" + "#update-constructors") % obj.c_name + if obj.class_init_func is not None: + fp.write(' pyg_register_class_init(%s, %s);\n' % + (obj.typecode, obj.class_init_func)) + #TODO: register mini-objects + miniobjects = parser.miniobjects[:] + for obj in miniobjects: + if overrides.is_type_ignored(obj.c_name): + continue + bases = [] + if obj.parent != None: + bases.append(obj.parent) + bases = bases + obj.implements + if bases: + fp.write(' pygstminiobject_register_class(d, "' + obj.c_name + + '", ' + obj.typecode + ', &Py' + obj.c_name + + '_Type, Py_BuildValue("(' + 'O' * len(bases) + ')", ' + + string.join(map(lambda s: '&Py'+s+'_Type', bases), ', ') + + '));\n') + else: + fp.write(' pygstminiobject_register_class(d, "' + obj.c_name + + '", ' + obj.typecode + ', &Py' + obj.c_name + + '_Type, NULL);\n') + + fp.write('}\n') + +def write_source(parser, overrides, prefix, fp=FileOutput(sys.stdout)): + write_headers(overrides.get_headers(), fp) + write_imports(overrides, fp) + write_type_declarations(parser, fp) + write_body(overrides.get_body(), fp) + write_classes(parser, overrides, fp) + + wrapper = Wrapper(parser, None, overrides, fp) + wrapper.write_functions(prefix) + + write_enums(parser, overrides, prefix, fp) + write_extension_init(overrides, prefix, fp) + write_registers(parser, overrides, fp) + +def register_types(parser): + for boxed in parser.boxes: + argtypes.matcher.register_boxed(boxed.c_name, boxed.typecode) + for pointer in parser.pointers: + argtypes.matcher.register_pointer(pointer.c_name, pointer.typecode) + for obj in parser.objects: + argtypes.matcher.register_object(obj.c_name, obj.parent, obj.typecode) + for obj in parser.miniobjects: + argtypes.matcher.register_miniobject(obj.c_name, obj.parent, obj.typecode) + for obj in parser.interfaces: + argtypes.matcher.register_object(obj.c_name, None, obj.typecode) + for enum in parser.enums: + if enum.deftype == 'flags': + argtypes.matcher.register_flag(enum.c_name, enum.typecode) + else: + argtypes.matcher.register_enum(enum.c_name, enum.typecode) + +usage = 'usage: codegen.py [-o overridesfile] [-p prefix] defsfile' +def main(argv): + o = override.Overrides() + prefix = 'pygtk' + outfilename = None + errorfilename = None + extendpath = [] + opts, args = getopt.getopt(argv[1:], "o:p:r:t:D:x", + ["override=", "prefix=", "register=", "outfilename=", + "load-types=", "errorfilename=", "extendpath="]) + defines = {} # -Dkey[=val] options + + for opt, arg in opts: + if opt in ('-x', '--extendpath'): + extendpath.append(arg) + extendpath.insert(0, os.getcwd()) + o = override.Overrides(path=extendpath) + + for opt, arg in opts: + if opt in ('-o', '--override'): + o = override.Overrides(arg, path=extendpath) + elif opt in ('-p', '--prefix'): + prefix = arg + elif opt in ('-r', '--register'): + # Warning: user has to make sure all -D options appear before -r + p = defsparser.DefsParser(arg, defines) + p.startParsing() + register_types(p) + del p + elif opt == '--outfilename': + outfilename = arg + elif opt == '--errorfilename': + errorfilename = arg + elif opt in ('-t', '--load-types'): + globals = {} + execfile(arg, globals) + elif opt == '-D': + nameval = arg.split('=') + try: + defines[nameval[0]] = nameval[1] + except IndexError: + defines[nameval[0]] = None + if len(args) < 1: + print >> sys.stderr, usage + return 1 + if errorfilename: + sys.stderr = open(errorfilename, "w") + p = defsparser.DefsParser(args[0], defines) + if not outfilename: + outfilename = os.path.splitext(args[0])[0] + '.c' + + p.startParsing() + + register_types(p) + write_source(p, o, prefix, FileOutput(sys.stdout, outfilename)) + + functions_coverage.printstats() + methods_coverage.printstats() + vproxies_coverage.printstats() + vaccessors_coverage.printstats() + iproxies_coverage.printstats() + +if __name__ == '__main__': + sys.exit(main(sys.argv)) diff --git a/codegen/definitions.py b/codegen/definitions.py new file mode 100644 index 0000000..911c8dd --- /dev/null +++ b/codegen/definitions.py @@ -0,0 +1,607 @@ +# -*- Mode: Python; py-indent-offset: 4 -*- +import copy +import sys + +def get_valid_scheme_definitions(defs): + return [x for x in defs if isinstance(x, tuple) and len(x) >= 2] + +def unescape(s): + s = s.replace('\r\n', '\\r\\n').replace('\t', '\\t') + return s.replace('\r', '\\r').replace('\n', '\\n') + +def make_docstring(lines): + return "(char *) " + '\n'.join(['"%s"' % unescape(s) for s in lines]) + +# New Parameter class, wich emulates a tuple for compatibility reasons +class Parameter(object): + def __init__(self, ptype, pname, pdflt, pnull, pdir=None, keeprefcount = False): + self.ptype = ptype + self.pname = pname + self.pdflt = pdflt + self.pnull = pnull + self.pdir = pdir + self.keeprefcount = keeprefcount + + def __len__(self): return 4 + def __getitem__(self, i): + return (self.ptype, self.pname, self.pdflt, self.pnull)[i] + + def merge(self, old): + if old.pdflt is not None: + self.pdflt = old.pdflt + if old.pnull is not None: + self.pnull = old.pnull + +# Parameter for property based constructors +class Property(object): + def __init__(self, pname, optional, argname): + self.pname = pname + self.optional = optional + self.argname = argname + + def merge(self, old): + if old.optional is not None: + self.optional = old.optional + if old.argname is not None: + self.argname = old.argname + + +class Definition: + docstring = "NULL" + def __init__(self, *args): + """Create a new defs object of this type. The arguments are the + components of the definition""" + raise RuntimeError, "this is an abstract class" + def merge(self, old): + """Merge in customisations from older version of definition""" + raise RuntimeError, "this is an abstract class" + def write_defs(self, fp=sys.stdout): + """write out this definition in defs file format""" + raise RuntimeError, "this is an abstract class" + + def guess_return_value_ownership(self): + "return 1 if caller owns return value" + if getattr(self, 'is_constructor_of', False): + self.caller_owns_return = True + elif self.ret in ('char*', 'gchar*', 'string'): + self.caller_owns_return = True + else: + self.caller_owns_return = False + + +class ObjectDef(Definition): + def __init__(self, name, *args): + self.name = name + self.module = None + self.parent = None + self.c_name = None + self.typecode = None + self.fields = [] + self.implements = [] + self.class_init_func = None + self.has_new_constructor_api = False + for arg in get_valid_scheme_definitions(args): + if arg[0] == 'in-module': + self.module = arg[1] + elif arg[0] == 'docstring': + self.docstring = make_docstring(arg[1:]) + elif arg[0] == 'parent': + self.parent = arg[1] + elif arg[0] == 'c-name': + self.c_name = arg[1] + elif arg[0] == 'gtype-id': + self.typecode = arg[1] + elif arg[0] == 'fields': + for parg in arg[1:]: + self.fields.append((parg[0], parg[1])) + elif arg[0] == 'implements': + self.implements.append(arg[1]) + def merge(self, old): + # currently the .h parser doesn't try to work out what fields of + # an object structure should be public, so we just copy the list + # from the old version ... + self.fields = old.fields + self.implements = old.implements + def write_defs(self, fp=sys.stdout): + fp.write('(define-object ' + self.name + '\n') + if self.module: + fp.write(' (in-module "' + self.module + '")\n') + if self.parent != (None, None): + fp.write(' (parent "' + self.parent + '")\n') + for interface in self.implements: + fp.write(' (implements "' + interface + '")\n') + if self.c_name: + fp.write(' (c-name "' + self.c_name + '")\n') + if self.typecode: + fp.write(' (gtype-id "' + self.typecode + '")\n') + if self.fields: + fp.write(' (fields\n') + for (ftype, fname) in self.fields: + fp.write(' \'("' + ftype + '" "' + fname + '")\n') + fp.write(' )\n') + fp.write(')\n\n') + +class MiniObjectDef(Definition): + def __init__(self, name, *args): + self.name = name + self.module = None + self.parent = None + self.c_name = None + self.typecode = None + self.fields = [] + self.implements = [] + for arg in args: + if type(arg) != type(()) or len(arg) < 2: + continue + if arg[0] == 'in-module': + self.module = arg[1] + elif arg[0] == 'parent': + self.parent = arg[1] + elif arg[0] == 'c-name': + self.c_name = arg[1] + elif arg[0] == 'gtype-id': + self.typecode = arg[1] + elif arg[0] == 'fields': + for parg in arg[1:]: + self.fields.append((parg[0], parg[1])) + elif arg[0] == 'implements': + self.implements.append(arg[1]) + def merge(self, old): + # currently the .h parser doesn't try to work out what fields of + # an object structure should be public, so we just copy the list + # from the old version ... + self.fields = old.fields + self.implements = old.implements + def write_defs(self, fp=sys.stdout): + fp.write('(define-object ' + self.name + '\n') + if self.module: + fp.write(' (in-module "' + self.module + '")\n') + if self.parent != (None, None): + fp.write(' (parent "' + self.parent + '")\n') + for interface in self.implements: + fp.write(' (implements "' + interface + '")\n') + if self.c_name: + fp.write(' (c-name "' + self.c_name + '")\n') + if self.typecode: + fp.write(' (gtype-id "' + self.typecode + '")\n') + if self.fields: + fp.write(' (fields\n') + for (ftype, fname) in self.fields: + fp.write(' \'("' + ftype + '" "' + fname + '")\n') + fp.write(' )\n') + fp.write(')\n\n') + + +class InterfaceDef(Definition): + def __init__(self, name, *args): + self.name = name + self.module = None + self.c_name = None + self.typecode = None + self.vtable = None + self.fields = [] + self.interface_info = None + for arg in get_valid_scheme_definitions(args): + if arg[0] == 'in-module': + self.module = arg[1] + elif arg[0] == 'docstring': + self.docstring = make_docstring(arg[1:]) + elif arg[0] == 'c-name': + self.c_name = arg[1] + elif arg[0] == 'gtype-id': + self.typecode = arg[1] + elif arg[0] == 'vtable': + self.vtable = arg[1] + if self.vtable is None: + self.vtable = self.c_name + "Iface" + def write_defs(self, fp=sys.stdout): + fp.write('(define-interface ' + self.name + '\n') + if self.module: + fp.write(' (in-module "' + self.module + '")\n') + if self.c_name: + fp.write(' (c-name "' + self.c_name + '")\n') + if self.typecode: + fp.write(' (gtype-id "' + self.typecode + '")\n') + fp.write(')\n\n') + +class EnumDef(Definition): + def __init__(self, name, *args): + self.deftype = 'enum' + self.name = name + self.in_module = None + self.c_name = None + self.typecode = None + self.values = [] + for arg in get_valid_scheme_definitions(args): + if arg[0] == 'in-module': + self.in_module = arg[1] + elif arg[0] == 'c-name': + self.c_name = arg[1] + elif arg[0] == 'gtype-id': + self.typecode = arg[1] + elif arg[0] == 'values': + for varg in arg[1:]: + self.values.append((varg[0], varg[1])) + def merge(self, old): + pass + def write_defs(self, fp=sys.stdout): + fp.write('(define-' + self.deftype + ' ' + self.name + '\n') + if self.in_module: + fp.write(' (in-module "' + self.in_module + '")\n') + fp.write(' (c-name "' + self.c_name + '")\n') + fp.write(' (gtype-id "' + self.typecode + '")\n') + if self.values: + fp.write(' (values\n') + for name, val in self.values: + fp.write(' \'("' + name + '" "' + val + '")\n') + fp.write(' )\n') + fp.write(')\n\n') + +class FlagsDef(EnumDef): + def __init__(self, *args): + apply(EnumDef.__init__, (self,) + args) + self.deftype = 'flags' + +class BoxedDef(Definition): + def __init__(self, name, *args): + self.name = name + self.module = None + self.c_name = None + self.typecode = None + self.copy = None + self.release = None + self.fields = [] + for arg in get_valid_scheme_definitions(args): + if arg[0] == 'in-module': + self.module = arg[1] + elif arg[0] == 'c-name': + self.c_name = arg[1] + elif arg[0] == 'gtype-id': + self.typecode = arg[1] + elif arg[0] == 'copy-func': + self.copy = arg[1] + elif arg[0] == 'release-func': + self.release = arg[1] + elif arg[0] == 'fields': + for parg in arg[1:]: + self.fields.append((parg[0], parg[1])) + def merge(self, old): + # currently the .h parser doesn't try to work out what fields of + # an object structure should be public, so we just copy the list + # from the old version ... + self.fields = old.fields + def write_defs(self, fp=sys.stdout): + fp.write('(define-boxed ' + self.name + '\n') + if self.module: + fp.write(' (in-module "' + self.module + '")\n') + if self.c_name: + fp.write(' (c-name "' + self.c_name + '")\n') + if self.typecode: + fp.write(' (gtype-id "' + self.typecode + '")\n') + if self.copy: + fp.write(' (copy-func "' + self.copy + '")\n') + if self.release: + fp.write(' (release-func "' + self.release + '")\n') + if self.fields: + fp.write(' (fields\n') + for (ftype, fname) in self.fields: + fp.write(' \'("' + ftype + '" "' + fname + '")\n') + fp.write(' )\n') + fp.write(')\n\n') + +class PointerDef(Definition): + def __init__(self, name, *args): + self.name = name + self.module = None + self.c_name = None + self.typecode = None + self.fields = [] + for arg in get_valid_scheme_definitions(args): + if arg[0] == 'in-module': + self.module = arg[1] + elif arg[0] == 'c-name': + self.c_name = arg[1] + elif arg[0] == 'gtype-id': + self.typecode = arg[1] + elif arg[0] == 'fields': + for parg in arg[1:]: + self.fields.append((parg[0], parg[1])) + def merge(self, old): + # currently the .h parser doesn't try to work out what fields of + # an object structure should be public, so we just copy the list + # from the old version ... + self.fields = old.fields + def write_defs(self, fp=sys.stdout): + fp.write('(define-pointer ' + self.name + '\n') + if self.module: + fp.write(' (in-module "' + self.module + '")\n') + if self.c_name: + fp.write(' (c-name "' + self.c_name + '")\n') + if self.typecode: + fp.write(' (gtype-id "' + self.typecode + '")\n') + if self.fields: + fp.write(' (fields\n') + for (ftype, fname) in self.fields: + fp.write(' \'("' + ftype + '" "' + fname + '")\n') + fp.write(' )\n') + fp.write(')\n\n') + +class MethodDefBase(Definition): + def __init__(self, name, *args): + dump = 0 + self.name = name + self.ret = None + self.caller_owns_return = None + self.unblock_threads = None + self.c_name = None + self.typecode = None + self.of_object = None + self.params = [] # of form (type, name, default, nullok) + self.varargs = 0 + self.deprecated = None + for arg in get_valid_scheme_definitions(args): + if arg[0] == 'of-object': + self.of_object = arg[1] + elif arg[0] == 'docstring': + self.docstring = make_docstring(arg[1:]) + elif arg[0] == 'c-name': + self.c_name = arg[1] + elif arg[0] == 'gtype-id': + self.typecode = arg[1] + elif arg[0] == 'return-type': + self.ret = arg[1] + elif arg[0] == 'caller-owns-return': + self.caller_owns_return = arg[1] in ('t', '#t') + elif arg[0] == 'unblock-threads': + self.unblock_threads = arg[1] in ('t', '#t') + elif arg[0] == 'parameters': + for parg in arg[1:]: + ptype = parg[0] + pname = parg[1] + pdflt = None + pnull = 0 + pdir = None + keeprefcount = False + for farg in parg[2:]: + assert isinstance(farg, tuple) + if farg[0] == 'default': + pdflt = farg[1] + elif farg[0] == 'null-ok': + pnull = 1 + elif farg[0] == 'direction': + pdir = farg[1] + elif farg[0] == 'keep-refcount': + keeprefcount = True + self.params.append(Parameter(ptype, pname, pdflt, pnull, pdir, + keeprefcount=keeprefcount)) + elif arg[0] == 'varargs': + self.varargs = arg[1] in ('t', '#t') + elif arg[0] == 'deprecated': + self.deprecated = arg[1] + else: + sys.stderr.write("Warning: %s argument unsupported.\n" + % (arg[0])) + dump = 1 + if dump: + self.write_defs(sys.stderr) + + if self.caller_owns_return is None and self.ret is not None: + self.guess_return_value_ownership() + + def merge(self, old, parmerge): + self.caller_owns_return = old.caller_owns_return + self.varargs = old.varargs + # here we merge extra parameter flags accross to the new object. + if not parmerge: + self.params = copy.deepcopy(old.params) + return + for i in range(len(self.params)): + ptype, pname, pdflt, pnull = self.params[i] + for p2 in old.params: + if p2[1] == pname: + self.params[i] = (ptype, pname, p2[2], p2[3]) + break + def _write_defs(self, fp=sys.stdout): + if self.of_object != (None, None): + fp.write(' (of-object "' + self.of_object + '")\n') + if self.c_name: + fp.write(' (c-name "' + self.c_name + '")\n') + if self.typecode: + fp.write(' (gtype-id "' + self.typecode + '")\n') + if self.caller_owns_return: + fp.write(' (caller-owns-return #t)\n') + if self.unblock_threads: + fp.write(' (unblock_threads #t)\n') + if self.ret: + fp.write(' (return-type "' + self.ret + '")\n') + if self.deprecated: + fp.write(' (deprecated "' + self.deprecated + '")\n') + if self.params: + fp.write(' (parameters\n') + for ptype, pname, pdflt, pnull in self.params: + fp.write(' \'("' + ptype + '" "' + pname +'"') + if pdflt: fp.write(' (default "' + pdflt + '")') + if pnull: fp.write(' (null-ok)') + fp.write(')\n') + fp.write(' )\n') + if self.varargs: + fp.write(' (varargs #t)\n') + fp.write(')\n\n') + + +class MethodDef(MethodDefBase): + def __init__(self, name, *args): + MethodDefBase.__init__(self, name, *args) + for item in ('c_name', 'of_object'): + if self.__dict__[item] == None: + self.write_defs(sys.stderr) + raise RuntimeError, "definition missing required %s" % (item,) + + def write_defs(self, fp=sys.stdout): + fp.write('(define-method ' + self.name + '\n') + self._write_defs(fp) + +class VirtualDef(MethodDefBase): + def write_defs(self, fp=sys.stdout): + fp.write('(define-virtual ' + self.name + '\n') + self._write_defs(fp) + +class FunctionDef(Definition): + def __init__(self, name, *args): + dump = 0 + self.name = name + self.in_module = None + self.is_constructor_of = None + self.ret = None + self.caller_owns_return = None + self.unblock_threads = None + self.c_name = None + self.typecode = None + self.params = [] # of form (type, name, default, nullok) + self.varargs = 0 + self.deprecated = None + for arg in get_valid_scheme_definitions(args): + if arg[0] == 'in-module': + self.in_module = arg[1] + elif arg[0] == 'docstring': + self.docstring = make_docstring(arg[1:]) + elif arg[0] == 'is-constructor-of': + self.is_constructor_of = arg[1] + elif arg[0] == 'c-name': + self.c_name = arg[1] + elif arg[0] == 'gtype-id': + self.typecode = arg[1] + elif arg[0] == 'return-type': + self.ret = arg[1] + elif arg[0] == 'caller-owns-return': + self.caller_owns_return = arg[1] in ('t', '#t') + elif arg[0] == 'unblock-threads': + self.unblock_threads = arg[1] in ('t', '#t') + elif arg[0] == 'parameters': + for parg in arg[1:]: + ptype = parg[0] + pname = parg[1] + pdflt = None + pnull = 0 + keeprefcount = False + for farg in parg[2:]: + if farg[0] == 'default': + pdflt = farg[1] + elif farg[0] == 'null-ok': + pnull = 1 + elif farg[0] == 'keep-refcount': + keeprefcount = True + self.params.append(Parameter(ptype, pname, pdflt, pnull, + keeprefcount = keeprefcount)) + elif arg[0] == 'properties': + if self.is_constructor_of is None: + print >> sys.stderr, "Warning: (properties ...) "\ + "is only valid for constructors" + for prop in arg[1:]: + pname = prop[0] + optional = False + argname = pname + for farg in prop[1:]: + if farg[0] == 'optional': + optional = True + elif farg[0] == 'argname': + argname = farg[1] + self.params.append(Property(pname, optional, argname)) + elif arg[0] == 'varargs': + self.varargs = arg[1] in ('t', '#t') + elif arg[0] == 'deprecated': + self.deprecated = arg[1] + else: + sys.stderr.write("Warning: %s argument unsupported\n" + % (arg[0],)) + dump = 1 + if dump: + self.write_defs(sys.stderr) + + if self.caller_owns_return is None and self.ret is not None: + self.guess_return_value_ownership() + for item in ('c_name',): + if self.__dict__[item] == None: + self.write_defs(sys.stderr) + raise RuntimeError, "definition missing required %s" % (item,) + + _method_write_defs = MethodDef.__dict__['write_defs'] + + def merge(self, old, parmerge): + self.caller_owns_return = old.caller_owns_return + self.varargs = old.varargs + if not parmerge: + self.params = copy.deepcopy(old.params) + return + # here we merge extra parameter flags accross to the new object. + def merge_param(param): + for old_param in old.params: + if old_param.pname == param.pname: + if isinstance(old_param, Property): + # h2def never scans Property's, therefore if + # we have one it was manually written, so we + # keep it. + return copy.deepcopy(old_param) + else: + param.merge(old_param) + return param + raise RuntimeError, "could not find %s in old_parameters %r" % ( + param.pname, [p.pname for p in old.params]) + try: + self.params = map(merge_param, self.params) + except RuntimeError: + # parameter names changed and we can't find a match; it's + # safer to keep the old parameter list untouched. + self.params = copy.deepcopy(old.params) + + if not self.is_constructor_of: + try: + self.is_constructor_of = old.is_constructor_of + except AttributeError: + pass + if isinstance(old, MethodDef): + self.name = old.name + # transmogrify from function into method ... + self.write_defs = self._method_write_defs + self.of_object = old.of_object + del self.params[0] + def write_defs(self, fp=sys.stdout): + fp.write('(define-function ' + self.name + '\n') + if self.in_module: + fp.write(' (in-module "' + self.in_module + '")\n') + if self.is_constructor_of: + fp.write(' (is-constructor-of "' + self.is_constructor_of +'")\n') + if self.c_name: + fp.write(' (c-name "' + self.c_name + '")\n') + if self.typecode: + fp.write(' (gtype-id "' + self.typecode + '")\n') + if self.caller_owns_return: + fp.write(' (caller-owns-return #t)\n') + if self.unblock_threads: + fp.write(' (unblock-threads #t)\n') + if self.ret: + fp.write(' (return-type "' + self.ret + '")\n') + if self.deprecated: + fp.write(' (deprecated "' + self.deprecated + '")\n') + if self.params: + if isinstance(self.params[0], Parameter): + fp.write(' (parameters\n') + for ptype, pname, pdflt, pnull in self.params: + fp.write(' \'("' + ptype + '" "' + pname +'"') + if pdflt: fp.write(' (default "' + pdflt + '")') + if pnull: fp.write(' (null-ok)') + fp.write(')\n') + fp.write(' )\n') + elif isinstance(self.params[0], Property): + fp.write(' (properties\n') + for prop in self.params: + fp.write(' \'("' + prop.pname +'"') + if prop.optional: fp.write(' (optional)') + fp.write(')\n') + fp.write(' )\n') + else: + assert False, "strange parameter list %r" % self.params[0] + if self.varargs: + fp.write(' (varargs #t)\n') + + fp.write(')\n\n') diff --git a/codegen/defsparser.py b/codegen/defsparser.py new file mode 100644 index 0000000..e24a969 --- /dev/null +++ b/codegen/defsparser.py @@ -0,0 +1,143 @@ +# -*- Mode: Python; py-indent-offset: 4 -*- +import os, sys +import scmexpr +from definitions import BoxedDef, EnumDef, FlagsDef, FunctionDef, \ + InterfaceDef, MethodDef, ObjectDef, MiniObjectDef, PointerDef, \ + VirtualDef + +class IncludeParser(scmexpr.Parser): + """A simple parser that follows include statements automatically""" + def include(self, filename): + if not os.path.isabs(filename): + filename = os.path.join(os.path.dirname(self.filename), filename) + + # set self.filename to the include name, to handle recursive includes + oldfile = self.filename + self.filename = filename + self.startParsing() + self.filename = oldfile + +class DefsParser(IncludeParser): + def __init__(self, arg, defines={}): + IncludeParser.__init__(self, arg) + self.objects = [] + self.miniobjects = [] + self.interfaces = [] + self.enums = [] # enums and flags + self.boxes = [] # boxed types + self.pointers = [] # pointer types + self.functions = [] # functions and methods + self.virtuals = [] # virtual methods + self.c_name = {} # hash of c names of functions + self.methods = {} # hash of methods of particular objects + self.defines = defines # -Dfoo=bar options, as dictionary + + def define_object(self, *args): + odef = apply(ObjectDef, args) + self.objects.append(odef) + self.c_name[odef.c_name] = odef + # TODO: define_mini_object + def define_miniobject(self, *args): + odef = apply(MiniObjectDef, args) + self.miniobjects.append(odef) + self.c_name[odef.c_name] = odef + def define_interface(self, *args): + idef = apply(InterfaceDef, args) + self.interfaces.append(idef) + self.c_name[idef.c_name] = idef + def define_enum(self, *args): + edef = apply(EnumDef, args) + self.enums.append(edef) + self.c_name[edef.c_name] = edef + def define_flags(self, *args): + fdef = apply(FlagsDef, args) + self.enums.append(fdef) + self.c_name[fdef.c_name] = fdef + def define_boxed(self, *args): + bdef = apply(BoxedDef, args) + self.boxes.append(bdef) + self.c_name[bdef.c_name] = bdef + def define_pointer(self, *args): + pdef = apply(PointerDef, args) + self.pointers.append(pdef) + self.c_name[pdef.c_name] = pdef + def define_function(self, *args): + fdef = apply(FunctionDef, args) + self.functions.append(fdef) + self.c_name[fdef.c_name] = fdef + def define_method(self, *args): + mdef = apply(MethodDef, args) + self.functions.append(mdef) + self.c_name[mdef.c_name] = mdef + def define_virtual(self, *args): + vdef = apply(VirtualDef, args) + self.virtuals.append(vdef) + def merge(self, old, parmerge): + for obj in self.objects: + if old.c_name.has_key(obj.c_name): + obj.merge(old.c_name[obj.c_name]) + for f in self.functions: + if old.c_name.has_key(f.c_name): + f.merge(old.c_name[f.c_name], parmerge) + + def printMissing(self, old): + for obj in self.objects: + if not old.c_name.has_key(obj.c_name): + obj.write_defs() + for f in self.functions: + if not old.c_name.has_key(f.c_name): + f.write_defs() + + def write_defs(self, fp=sys.stdout): + for obj in self.objects: + obj.write_defs(fp) + # TODO: Add miniobject + for obj in self.miniobjects: + obj.write_defs(fp) + for enum in self.enums: + enum.write_defs(fp) + for boxed in self.boxes: + boxed.write_defs(fp) + for pointer in self.pointers: + pointer.write_defs(fp) + for func in self.functions: + func.write_defs(fp) + + def find_object(self, c_name): + for obj in self.objects: + if obj.c_name == c_name: + return obj + else: + raise ValueError, 'object not found' + + def find_constructor(self, obj, overrides): + for func in self.functions: + if isinstance(func, FunctionDef) and \ + func.is_constructor_of == obj.c_name and \ + not overrides.is_ignored(func.c_name): + return func + + def find_methods(self, obj): + objname = obj.c_name + return filter(lambda func, on=objname: isinstance(func, MethodDef) and + func.of_object == on, self.functions) + + def find_virtuals(self, obj): + objname = obj.c_name + retval = filter(lambda func, on=objname: isinstance(func, VirtualDef) and + func.of_object == on, self.virtuals) + return retval + + def find_functions(self): + return filter(lambda func: isinstance(func, FunctionDef) and + not func.is_constructor_of, self.functions) + + def ifdef(self, *args): + if args[0] in self.defines: + for arg in args[1:]: + self.handle(arg) + + def ifndef(self, *args): + if args[0] not in self.defines: + for arg in args[1:]: + self.handle(arg) diff --git a/codegen/docextract.py b/codegen/docextract.py new file mode 100644 index 0000000..e6c6505 --- /dev/null +++ b/codegen/docextract.py @@ -0,0 +1,185 @@ +# -*- Mode: Python; py-indent-offset: 4 -*- +'''Simple module for extracting GNOME style doc comments from C +sources, so I can use them for other purposes.''' + +import sys, os, string, re + +__all__ = ['extract'] + +class FunctionDoc: + def __init__(self): + self.name = None + self.params = [] + self.description = '' + self.ret = '' + def set_name(self, name): + self.name = name + def add_param(self, name, description): + if name == '...': + name = 'Varargs' + self.params.append((name, description)) + def append_to_last_param(self, extra): + self.params[-1] = (self.params[-1][0], self.params[-1][1] + extra) + def append_to_named_param(self, name, extra): + for i in range(len(self.params)): + if self.params[i][0] == name: + self.params[i] = (name, self.params[i][1] + extra) + return + # fall through to adding extra parameter ... + self.add_param(name, extra) + def append_description(self, extra): + self.description = self.description + extra + def append_return(self, extra): + self.ret = self.ret + extra + + def get_param_description(self, name): + for param, description in self.params: + if param == name: + return description + else: + return '' + +comment_start_pat = re.compile(r'^\s*/\*\*\s') +comment_end_pat = re.compile(r'^\s*\*+/') +comment_line_lead = re.compile(r'^\s*\*\s*') +funcname_pat = re.compile(r'^(\w+)\s*:?') +return_pat = re.compile(r'^(returns:|return\s+value:|returns\s*)(.*\n?)$', + re.IGNORECASE) +param_pat = re.compile(r'^@(\S+)\s*:(.*\n?)$') + +def parse_file(fp, doc_dict): + line = fp.readline() + in_comment_block = 0 + while line: + if not in_comment_block: + if comment_start_pat.match(line): + in_comment_block = 1 + cur_doc = FunctionDoc() + in_description = 0 + in_return = 0 + line = fp.readline() + continue + + # we are inside a comment block ... + if comment_end_pat.match(line): + if not cur_doc.name: + sys.stderr.write("no function name found in doc comment\n") + else: + doc_dict[cur_doc.name] = cur_doc + in_comment_block = 0 + line = fp.readline() + continue + + # inside a comment block, and not the end of the block ... + line = comment_line_lead.sub('', line) + if not line: line = '\n' + + if not cur_doc.name: + match = funcname_pat.match(line) + if match: + cur_doc.set_name(match.group(1)) + elif in_return: + match = return_pat.match(line) + if match: + # assume the last return statement was really part of the + # description + return_start = match.group(1) + cur_doc.ret = match.group(2) + cur_doc.description = cur_doc.description + return_start + \ + cur_doc.ret + else: + cur_doc.append_return(line) + elif in_description: + if line[:12] == 'Description:': + line = line[12:] + match = return_pat.match(line) + if match: + in_return = 1 + return_start = match.group(1) + cur_doc.append_return(match.group(2)) + else: + cur_doc.append_description(line) + elif line == '\n': + # end of parameters + in_description = 1 + else: + match = param_pat.match(line) + if match: + param = match.group(1) + desc = match.group(2) + if param == 'returns': + cur_doc.ret = desc + else: + cur_doc.add_param(param, desc) + else: + # must be continuation + try: + if param == 'returns': + cur_doc.append_return(line) + else: + cur_doc.append_to_last_param(line) + except: + sys.stderr.write('something weird while reading param\n') + line = fp.readline() + +def parse_dir(dir, doc_dict): + for file in os.listdir(dir): + if file in ('.', '..'): continue + path = os.path.join(dir, file) + if os.path.isdir(path): + parse_dir(path, doc_dict) + if len(file) > 2 and file[-2:] == '.c': + parse_file(open(path, 'r'), doc_dict) + +def extract(dirs, doc_dict=None): + if not doc_dict: doc_dict = {} + for dir in dirs: + parse_dir(dir, doc_dict) + return doc_dict + +tmpl_section_pat = re.compile(r'^$') +def parse_tmpl(fp, doc_dict): + cur_doc = None + + line = fp.readline() + while line: + match = tmpl_section_pat.match(line) + if match: + cur_doc = None # new input shouldn't affect the old doc dict + sect_type = match.group(1) + sect_name = match.group(2) + + if sect_type == 'FUNCTION': + cur_doc = doc_dict.get(sect_name) + if not cur_doc: + cur_doc = FunctionDoc() + cur_doc.set_name(sect_name) + doc_dict[sect_name] = cur_doc + elif line == '\n': + cur_doc = None # don't worry about unused params. + elif cur_doc: + if line[:10] == '@Returns: ': + if string.strip(line[10:]): + cur_doc.append_return(line[10:]) + elif line[0] == '@': + pos = string.find(line, ':') + if pos >= 0: + cur_doc.append_to_named_param(line[1:pos], line[pos+1:]) + else: + cur_doc.append_description(line) + else: + cur_doc.append_description(line) + + line = fp.readline() + +def extract_tmpl(dirs, doc_dict=None): + if not doc_dict: doc_dict = {} + for dir in dirs: + for file in os.listdir(dir): + if file in ('.', '..'): continue + path = os.path.join(dir, file) + if os.path.isdir(path): + continue + if len(file) > 2 and file[-2:] == '.sgml': + parse_tmpl(open(path, 'r'), doc_dict) + return doc_dict diff --git a/codegen/docgen.py b/codegen/docgen.py new file mode 100644 index 0000000..6905a14 --- /dev/null +++ b/codegen/docgen.py @@ -0,0 +1,752 @@ +#!/usr/bin/env python +# -*- Mode: Python; py-indent-offset: 4 -*- +import sys, os, string, re, getopt + +import defsparser +import definitions +import override +import docextract + +class Node: + def __init__(self, name, interfaces=[]): + self.name = name + self.interfaces = interfaces + self.subclasses = [] + def add_child(self, node): + self.subclasses.append(node) + +def build_object_tree(parser): + # reorder objects so that parent classes come first ... + objects = parser.objects[:] + pos = 0 + while pos < len(objects): + parent = objects[pos].parent + for i in range(pos+1, len(objects)): + if objects[i].c_name == parent: + objects.insert(i+1, objects[pos]) + del objects[pos] + break + else: + pos = pos + 1 + + root = Node(None) + nodes = { None: root } + for obj_def in objects: + print obj_def.name + parent_node = nodes[obj_def.parent] + node = Node(obj_def.c_name, obj_def.implements) + parent_node.add_child(node) + nodes[node.name] = node + + if parser.interfaces: + interfaces = Node('gobject.GInterface') + root.add_child(interfaces) + nodes[interfaces.name] = interfaces + for obj_def in parser.interfaces: + node = Node(obj_def.c_name) + interfaces.add_child(node) + nodes[node.name] = node + + if parser.boxes: + boxed = Node('gobject.GBoxed') + root.add_child(boxed) + nodes[boxed.name] = boxed + for obj_def in parser.boxes: + node = Node(obj_def.c_name) + boxed.add_child(node) + nodes[node.name] = node + + if parser.pointers: + pointers = Node('gobject.GPointer') + root.add_child(pointers) + nodes[pointers.name] = pointers + for obj_def in parser.pointers: + node = Node(obj_def.c_name) + pointers.add_child(node) + nodes[node.name] = node + + return root + +class DocWriter: + def __init__(self): + # parse the defs file + self.parser = defsparser.DefsParser(()) + self.overrides = override.Overrides() + self.classmap = {} + self.docs = {} + + def add_sourcedirs(self, source_dirs): + self.docs = docextract.extract(source_dirs, self.docs) + def add_tmpldirs(self, tmpl_dirs): + self.docs = docextract.extract_tmpl(tmpl_dirs, self.docs) + + def add_docs(self, defs_file, overrides_file, module_name): + '''parse information about a given defs file''' + self.parser.filename = defs_file + self.parser.startParsing(defs_file) + if overrides_file: + self.overrides.handle_file(overrides_file) + + for obj in self.parser.objects: + if not self.classmap.has_key(obj.c_name): + self.classmap[obj.c_name] = '%s.%s' % (module_name, obj.name) + for obj in self.parser.interfaces: + if not self.classmap.has_key(obj.c_name): + self.classmap[obj.c_name] = '%s.%s' % (module_name, obj.name) + for obj in self.parser.boxes: + if not self.classmap.has_key(obj.c_name): + self.classmap[obj.c_name] = '%s.%s' % (module_name, obj.name) + for obj in self.parser.pointers: + if not self.classmap.has_key(obj.c_name): + self.classmap[obj.c_name] = '%s.%s' % (module_name, obj.name) + + def pyname(self, name): + return self.classmap.get(name, name) + + def __compare(self, obja, objb): + return cmp(self.pyname(obja.c_name), self.pyname(objb.c_name)) + def output_docs(self, output_prefix): + files = [] + + # class hierarchy + hierarchy = build_object_tree(self.parser) + filename = self.create_filename('hierarchy', output_prefix) + fp = open(filename, 'w') + self.write_full_hierarchy(hierarchy, fp) + fp.close() + + obj_defs = self.parser.objects + self.parser.interfaces + \ + self.parser.boxes + self.parser.pointers + obj_defs.sort(self.__compare) + for obj_def in obj_defs: + filename = self.create_filename(obj_def.c_name, output_prefix) + fp = open(filename, 'w') + if isinstance(obj_def, definitions.ObjectDef): + self.output_object_docs(obj_def, fp) + elif isinstance(obj_def, definitions.InterfaceDef): + self.output_interface_docs(obj_def, fp) + elif isinstance(obj_def, definitions.BoxedDef): + self.output_boxed_docs(obj_def, fp) + elif isinstance(obj_def, definitions.PointerDef): + self.output_boxed_docs(obj_def, fp) + fp.close() + files.append((os.path.basename(filename), obj_def)) + + if files: + filename = self.create_toc_filename(output_prefix) + fp = open(filename, 'w') + self.output_toc(files, fp) + fp.close() + + def output_object_docs(self, obj_def, fp=sys.stdout): + self.write_class_header(obj_def.c_name, fp) + + self.write_heading('Synopsis', fp) + self.write_synopsis(obj_def, fp) + self.close_section(fp) + + # construct the inheritence hierarchy ... + ancestry = [ (obj_def.c_name, obj_def.implements) ] + try: + parent = obj_def.parent + while parent != None: + if parent == 'GObject': + ancestry.append(('GObject', [])) + parent = None + else: + parent_def = self.parser.find_object(parent) + ancestry.append((parent_def.c_name, parent_def.implements)) + parent = parent_def.parent + except ValueError: + pass + ancestry.reverse() + self.write_heading('Ancestry', fp) + self.write_hierarchy(obj_def.c_name, ancestry, fp) + self.close_section(fp) + + constructor = self.parser.find_constructor(obj_def, self.overrides) + if constructor: + self.write_heading('Constructor', fp) + self.write_constructor(constructor, + self.docs.get(constructor.c_name, None), + fp) + self.close_section(fp) + + methods = self.parser.find_methods(obj_def) + methods = filter(lambda meth, self=self: + not self.overrides.is_ignored(meth.c_name), methods) + if methods: + self.write_heading('Methods', fp) + for method in methods: + self.write_method(method, self.docs.get(method.c_name, None), fp) + self.close_section(fp) + + self.write_class_footer(obj_def.c_name, fp) + + def output_interface_docs(self, int_def, fp=sys.stdout): + self.write_class_header(int_def.c_name, fp) + + self.write_heading('Synopsis', fp) + self.write_synopsis(int_def, fp) + self.close_section(fp) + + methods = self.parser.find_methods(int_def) + methods = filter(lambda meth, self=self: + not self.overrides.is_ignored(meth.c_name), methods) + if methods: + self.write_heading('Methods', fp) + for method in methods: + self.write_method(method, self.docs.get(method.c_name, None), fp) + self.close_section(fp) + + self.write_class_footer(int_def.c_name, fp) + + def output_boxed_docs(self, box_def, fp=sys.stdout): + self.write_class_header(box_def.c_name, fp) + + self.write_heading('Synopsis', fp) + self.write_synopsis(box_def, fp) + self.close_section(fp) + + constructor = self.parser.find_constructor(box_def, self.overrides) + if constructor: + self.write_heading('Constructor', fp) + self.write_constructor(constructor, + self.docs.get(constructor.c_name, None), + fp) + self.close_section(fp) + + methods = self.parser.find_methods(box_def) + methods = filter(lambda meth, self=self: + not self.overrides.is_ignored(meth.c_name), methods) + if methods: + self.write_heading('Methods', fp) + for method in methods: + self.write_method(method, self.docs.get(method.c_name, None), fp) + self.close_section(fp) + + self.write_class_footer(box_def.c_name, fp) + + def output_toc(self, files, fp=sys.stdout): + fp.write('TOC\n\n') + for filename, obj_def in files: + fp.write(obj_def.c_name + ' - ' + filename + '\n') + + # override the following to create a more complex output format + def create_filename(self, obj_name, output_prefix): + '''Create output filename for this particular object''' + return output_prefix + '-' + string.lower(obj_name) + '.txt' + def create_toc_filename(self, output_prefix): + return self.create_filename(self, 'docs', output_prefix) + + def write_full_hierarchy(self, hierarchy, fp): + def handle_node(node, fp, indent=''): + for child in node.subclasses: + fp.write(indent + node.name) + if node.interfaces: + fp.write(' (implements ') + fp.write(string.join(node.interfaces, ', ')) + fp.write(')\n') + else: + fp.write('\n') + handle_node(child, fp, indent + ' ') + handle_node(hierarchy, fp) + + # these need to handle default args ... + def create_constructor_prototype(self, func_def): + return func_def.is_constructor_of + '(' + \ + string.join(map(lambda x: x[1], func_def.params), ', ') + \ + ')' + def create_function_prototype(self, func_def): + return func_def.name + '(' + \ + string.join(map(lambda x: x[1], func_def.params), ', ') + \ + ')' + def create_method_prototype(self, meth_def): + return meth_def.of_object + '.' + \ + meth_def.name + '(' + \ + string.join(map(lambda x: x[1], meth_def.params), ', ') + \ + ')' + + def write_class_header(self, obj_name, fp): + fp.write('Class %s\n' % obj_name) + fp.write('======%s\n\n' % ('=' * len(obj_name))) + def write_class_footer(self, obj_name, fp): + pass + def write_heading(self, text, fp): + fp.write('\n' + text + '\n' + ('-' * len(text)) + '\n') + def close_section(self, fp): + pass + def write_synopsis(self, obj_def, fp): + fp.write('class %s' % obj_def.c_name) + if isinstance(obj_def, definitions.ObjectDef): + bases = [] + if obj_def.parent: bases.append(obj_def.parent) + bases = bases = obj_def.implements + if bases: + fp.write('(%s)' % string.join(bases, ', ')) + fp.write(':\n') + + constructor = self.parser.find_constructor(obj_def, self.overrides) + if constructor: + prototype = self.create_constructor_prototype(constructor) + fp.write(' def %s\n' % prototype) + methods = self.parser.find_methods(obj_def) + methods = filter(lambda meth, self=self: + not self.overrides.is_ignored(meth.c_name), methods) + for meth in methods: + prototype = self.create_method_prototype(meth) + fp.write(' def %s\n' % prototype) + + def write_hierarchy(self, obj_name, ancestry, fp): + indent = '' + for name, interfaces in ancestry: + fp.write(indent + '+-- ' + name) + if interfaces: + fp.write(' (implements ') + fp.write(string.join(interfaces, ', ')) + fp.write(')\n') + else: + fp.write('\n') + indent = indent + ' ' + fp.write('\n') + def write_constructor(self, func_def, func_doc, fp): + prototype = self.create_constructor_prototype(func_def) + fp.write(prototype + '\n\n') + for type, name, dflt, null in func_def.params: + if func_doc: + descr = func_doc.get_param_description(name) + else: + descr = 'a ' + type + fp.write(' ' + name + ': ' + descr + '\n') + if func_def.ret and func_def.ret != 'none': + if func_doc and func_doc.ret: + descr = func_doc.ret + else: + descr = 'a ' + func_def.ret + fp.write(' Returns: ' + descr + '\n') + if func_doc and func_doc.description: + fp.write(func_doc.description) + fp.write('\n\n\n') + def write_method(self, meth_def, func_doc, fp): + prototype = self.create_method_prototype(meth_def) + fp.write(prototype + '\n\n') + for type, name, dflt, null in meth_def.params: + if func_doc: + descr = func_doc.get_param_description(name) + else: + descr = 'a ' + type + fp.write(' ' + name + ': ' + descr + '\n') + if meth_def.ret and meth_def.ret != 'none': + if func_doc and func_doc.ret: + descr = func_doc.ret + else: + descr = 'a ' + meth_def.ret + fp.write(' Returns: ' + descr + '\n') + if func_doc and func_doc.description: + fp.write('\n') + fp.write(func_doc.description) + fp.write('\n\n') + +class DocbookDocWriter(DocWriter): + def __init__(self, use_xml=0): + DocWriter.__init__(self) + self.use_xml = use_xml + + def create_filename(self, obj_name, output_prefix): + '''Create output filename for this particular object''' + stem = output_prefix + '-' + string.lower(obj_name) + if self.use_xml: + return stem + '.xml' + else: + return stem + '.sgml' + def create_toc_filename(self, output_prefix): + if self.use_xml: + return self.create_filename('classes', output_prefix) + else: + return self.create_filename('docs', output_prefix) + + # make string -> reference translation func + __transtable = [ '-' ] * 256 + for digit in '0123456789': + __transtable[ord(digit)] = digit + for letter in 'abcdefghijklmnopqrstuvwxyz': + __transtable[ord(letter)] = letter + __transtable[ord(string.upper(letter))] = letter + __transtable = string.join(__transtable, '') + + def make_class_ref(self, obj_name): + return 'class-' + string.translate(obj_name, self.__transtable) + def make_method_ref(self, meth_def): + return 'method-' + string.translate(meth_def.of_object, + self.__transtable) + \ + '--' + string.translate(meth_def.name, self.__transtable) + + __function_pat = re.compile(r'(\w+)\s*\(\)') + def __format_function(self, match): + info = self.parser.c_name.get(match.group(1), None) + if info: + if isinstance(info, defsparser.FunctionDef): + if info.is_constructor_of is not None: + # should have a link here + return '%s()' % \ + self.pyname(info.is_constructor_of) + else: + return '' + info.name + '()' + if isinstance(info, defsparser.MethodDef): + return '' + self.pyname(info.of_object) + '.' + \ + info.name + '()' + # fall through through + return '' + match.group(1) + '()' + __parameter_pat = re.compile(r'\@(\w+)') + def __format_param(self, match): + return '' + match.group(1) + '' + __constant_pat = re.compile(r'\%(-?\w+)') + def __format_const(self, match): + return '' + match.group(1) + '' + __symbol_pat = re.compile(r'#([\w-]+)') + def __format_symbol(self, match): + info = self.parser.c_name.get(match.group(1), None) + if info: + if isinstance(info, defsparser.FunctionDef): + if info.is_constructor_of is not None: + # should have a link here + return '' + self.pyname(info.is_constructor_of) + \ + '' + else: + return '' + info.name + '' + if isinstance(info, defsparser.MethodDef): + return '' + self.pyname(info.of_object) + '.' + \ + info.name + '' + if isinstance(info, defsparser.ObjectDef) or \ + isinstance(info, defsparser.InterfaceDef) or \ + isinstance(info, defsparser.BoxedDef) or \ + isinstance(info, defsparser.PointerDef): + return '' + self.pyname(info.c_name) + \ + '' + # fall through through + return '' + match.group(1) + '' + + def reformat_text(self, text, singleline=0): + # replace special strings ... + text = self.__function_pat.sub(self.__format_function, text) + text = self.__parameter_pat.sub(self.__format_param, text) + text = self.__constant_pat.sub(self.__format_const, text) + text = self.__symbol_pat.sub(self.__format_symbol, text) + + # don't bother with expansion for single line text. + if singleline: return text + + lines = string.split(string.strip(text), '\n') + for index in range(len(lines)): + if string.strip(lines[index]) == '': + lines[index] = '\n' + continue + lines.insert(0, '') + lines.append('') + return string.join(lines, '\n') + + # write out hierarchy + def write_full_hierarchy(self, hierarchy, fp): + def handle_node(node, fp, indent=''): + if node.name: + fp.write('%s%s' % + (indent, self.make_class_ref(node.name), + self.pyname(node.name))) + if node.interfaces: + fp.write(' (implements ') + for i in range(len(node.interfaces)): + fp.write('%s' % + (self.make_class_ref(node.interfaces[i]), + self.pyname(node.interfaces[i]))) + if i != len(node.interfaces) - 1: + fp.write(', ') + fp.write(')\n') + else: + fp.write('\n') + + indent = indent + ' ' + node.subclasses.sort(lambda a,b: + cmp(self.pyname(a.name), self.pyname(b.name))) + for child in node.subclasses: + handle_node(child, fp, indent) + if self.use_xml: + fp.write('\n') + fp.write('\n') + fp.write('') + handle_node(hierarchy, fp) + fp.write('\n') + + # these need to handle default args ... + def create_constructor_prototype(self, func_def): + sgml = [ '\n'] + sgml.append(' __init__\n') + for type, name, dflt, null in func_def.params: + sgml.append(' ') + sgml.append(name) + sgml.append('') + if dflt: + sgml.append('') + sgml.append(dflt) + sgml.append('') + sgml.append('\n') + if not func_def.params: + sgml.append(' ') + sgml.append(' ') + return string.join(sgml, '') + def create_function_prototype(self, func_def): + sgml = [ '\n \n'] + sgml.append(' ') + sgml.append(func_def.name) + sgml.append('\n') + for type, name, dflt, null in func_def.params: + sgml.append(' ') + sgml.append(name) + sgml.append('') + if dflt: + sgml.append('') + sgml.append(dflt) + sgml.append('') + sgml.append('\n') + if not func_def.params: + sgml.append(' \n ') + return string.join(sgml, '') + def create_method_prototype(self, meth_def, addlink=0): + sgml = [ '\n'] + sgml.append(' ') + if addlink: + sgml.append('' % self.make_method_ref(meth_def)) + sgml.append(self.pyname(meth_def.name)) + if addlink: + sgml.append('') + sgml.append('\n') + for type, name, dflt, null in meth_def.params: + sgml.append(' ') + sgml.append(name) + sgml.append('') + if dflt: + sgml.append('') + sgml.append(dflt) + sgml.append('') + sgml.append('\n') + if not meth_def.params: + sgml.append(' ') + sgml.append(' ') + return string.join(sgml, '') + + def write_class_header(self, obj_name, fp): + if self.use_xml: + fp.write('\n') + fp.write('\n') + fp.write('\n') + fp.write(' \n') + fp.write(' %s\n' + % self.pyname(obj_name)) + fp.write(' 3\n') + fp.write(' PyGTK Docs\n') + fp.write(' \n\n') + fp.write(' \n') + fp.write(' %s\n' + % self.pyname(obj_name)) + fp.write(' \n\n') + def write_class_footer(self, obj_name, fp): + fp.write('\n') + def write_heading(self, text, fp): + fp.write(' \n') + fp.write(' ' + text + '\n\n') + def close_section(self, fp): + fp.write(' \n') + + def write_synopsis(self, obj_def, fp): + fp.write('\n') + fp.write(' %s\n' + % self.pyname(obj_def.c_name)) + if isinstance(obj_def, definitions.ObjectDef): + if obj_def.parent: + fp.write(' %s' + '\n' + % (self.make_class_ref(obj_def.parent), + self.pyname(obj_def.parent))) + for base in obj_def.implements: + fp.write(' %s' + '\n' + % (self.make_class_ref(base), self.pyname(base))) + elif isinstance(obj_def, definitions.InterfaceDef): + fp.write(' gobject.GInterface' + '\n') + elif isinstance(obj_def, definitions.BoxedDef): + fp.write(' gobject.GBoxed' + '\n') + elif isinstance(obj_def, definitions.PointerDef): + fp.write(' gobject.GPointer' + '\n') + + constructor = self.parser.find_constructor(obj_def, self.overrides) + if constructor: + fp.write('%s\n' % self.create_constructor_prototype(constructor)) + methods = self.parser.find_methods(obj_def) + methods = filter(lambda meth, self=self: + not self.overrides.is_ignored(meth.c_name), methods) + for meth in methods: + fp.write('%s\n' % self.create_method_prototype(meth, addlink=1)) + fp.write('\n\n') + + def write_hierarchy(self, obj_name, ancestry, fp): + fp.write('') + indent = '' + for name, interfaces in ancestry: + fp.write(indent + '+-- '+ self.pyname(name) + '') + if interfaces: + fp.write(' (implements ') + for i in range(len(interfaces)): + fp.write('%s' % + (self.make_class_ref(interfaces[i]), + self.pyname(interfaces[i]))) + if i != len(interfaces) - 1: + fp.write(', ') + fp.write(')\n') + else: + fp.write('\n') + indent = indent + ' ' + fp.write('\n\n') + + def write_params(self, params, ret, func_doc, fp): + if not params and (not ret or ret == 'none'): + return + fp.write(' \n') + for type, name, dflt, null in params: + if func_doc: + descr = string.strip(func_doc.get_param_description(name)) + else: + descr = 'a ' + type + fp.write(' \n') + fp.write(' %s :\n' % name) + fp.write(' %s\n' % + self.reformat_text(descr, singleline=1)) + fp.write(' \n') + if ret and ret != 'none': + if func_doc and func_doc.ret: + descr = string.strip(func_doc.ret) + else: + descr = 'a ' + ret + fp.write(' \n') + fp.write(' Returns :\n') + fp.write(' %s\n' % + self.reformat_text(descr, singleline=1)) + fp.write(' \n') + fp.write(' \n') + + def write_constructor(self, func_def, func_doc, fp): + prototype = self.create_constructor_prototype(func_def) + fp.write('%s\n' % prototype) + self.write_params(func_def.params, func_def.ret, func_doc, fp) + + if func_doc and func_doc.description: + fp.write(self.reformat_text(func_doc.description)) + fp.write('\n\n\n') + + def write_method(self, meth_def, func_doc, fp): + fp.write(' \n') + fp.write(' ' + self.pyname(meth_def.of_object) + '.' + + meth_def.name + '\n\n') + prototype = self.create_method_prototype(meth_def) + fp.write('%s\n' % prototype) + self.write_params(meth_def.params, meth_def.ret, func_doc, fp) + if func_doc and func_doc.description: + fp.write(self.reformat_text(func_doc.description)) + fp.write(' \n\n\n') + + def output_toc(self, files, fp=sys.stdout): + if self.use_xml: + fp.write('\n') + fp.write('\n') + #for filename, obj_def in files: + # fp.write(' \n') + #fp.write(']>\n\n') + + #fp.write('\n') + #fp.write(' Class Documentation\n') + #for filename, obj_def in files: + # fp.write('&' + string.translate(obj_def.c_name, + # self.__transtable) + ';\n') + #fp.write('\n') + + fp.write('\n') + fp.write(' Class Reference\n') + for filename, obj_def in files: + fp.write(' \n' % filename) + fp.write('\n') + else: + fp.write('\n') + fp.write(']>\n\n') + + fp.write('\n\n') + fp.write(' \n') + fp.write(' PyGTK Docs\n') + fp.write(' \n') + fp.write(' \n') + fp.write(' James\n') + fp.write(' Henstridge\n') + fp.write(' \n') + fp.write(' \n') + fp.write(' \n\n') + + fp.write(' \n') + fp.write(' Class Hierarchy\n') + fp.write(' Not done yet\n') + fp.write(' \n\n') + + fp.write(' \n') + fp.write(' Class Documentation\n') + for filename, obj_def in files: + fp.write('&' + string.translate(obj_def.c_name, + self.__transtable) + ';\n') + + fp.write(' \n') + fp.write('\n') + +if __name__ == '__main__': + try: + opts, args = getopt.getopt(sys.argv[1:], "d:s:o:", + ["defs-file=", "override=", "source-dir=", + "output-prefix="]) + except getopt.error, e: + sys.stderr.write('docgen.py: %s\n' % e) + sys.stderr.write( + 'usage: docgen.py -d file.defs [-s /src/dir] [-o output-prefix]\n') + sys.exit(1) + defs_file = None + overrides_file = None + source_dirs = [] + output_prefix = 'docs' + for opt, arg in opts: + if opt in ('-d', '--defs-file'): + defs_file = arg + if opt in ('--override',): + overrides_file = arg + elif opt in ('-s', '--source-dir'): + source_dirs.append(arg) + elif opt in ('-o', '--output-prefix'): + output_prefix = arg + if len(args) != 0 or not defs_file: + sys.stderr.write( + 'usage: docgen.py -d file.defs [-s /src/dir] [-o output-prefix]\n') + sys.exit(1) + + d = DocbookDocWriter() + d.add_sourcedirs(source_dirs) + d.add_docs(defs_file, overrides_file, 'gtk') + d.output_docs(output_prefix) diff --git a/codegen/h2def.py b/codegen/h2def.py new file mode 100755 index 0000000..d4b2135 --- /dev/null +++ b/codegen/h2def.py @@ -0,0 +1,536 @@ +#!/usr/bin/env python +# -*- Mode: Python; py-indent-offset: 4 -*- +# Search through a header file looking for function prototypes. +# For each prototype, generate a scheme style definition. +# GPL'ed +# Toby D. Reeves +# +# Modified by James Henstridge to output stuff in +# Havoc's new defs format. Info on this format can be seen at: +# http://www.gnome.org/mailing-lists/archives/gtk-devel-list/2000-January/0085.shtml +# Updated to be PEP-8 compatible and refactored to use OOP + +import getopt +import os +import re +import string +import sys + +import defsparser + +# ------------------ Create typecodes from typenames --------- + +_upperstr_pat1 = re.compile(r'([^A-Z])([A-Z])') +_upperstr_pat2 = re.compile(r'([A-Z][A-Z])([A-Z][0-9a-z])') +_upperstr_pat3 = re.compile(r'^([A-Z])([A-Z])') + +def to_upper_str(name): + """Converts a typename to the equivalent upercase and underscores + name. This is used to form the type conversion macros and enum/flag + name variables""" + name = _upperstr_pat1.sub(r'\1_\2', name) + name = _upperstr_pat2.sub(r'\1_\2', name) + name = _upperstr_pat3.sub(r'\1_\2', name, count=1) + return string.upper(name) + +def typecode(typename): + """create a typecode (eg. GTK_TYPE_WIDGET) from a typename""" + return string.replace(to_upper_str(typename), '_', '_TYPE_', 1) + + +# ------------------ Find object definitions ----------------- + +def strip_comments(buf): + parts = [] + lastpos = 0 + while 1: + pos = string.find(buf, '/*', lastpos) + if pos >= 0: + parts.append(buf[lastpos:pos]) + pos = string.find(buf, '*/', pos) + if pos >= 0: + lastpos = pos + 2 + else: + break + else: + parts.append(buf[lastpos:]) + break + return string.join(parts, '') + +obj_name_pat = "[A-Z][a-z]*[A-Z][A-Za-z0-9]*" + +split_prefix_pat = re.compile('([A-Z]+[a-z]*)([A-Za-z0-9]+)') + +def find_obj_defs(buf, objdefs=[]): + """ + Try to find object definitions in header files. + """ + + # filter out comments from buffer. + buf = strip_comments(buf) + + maybeobjdefs = [] # contains all possible objects from file + + # first find all structures that look like they may represent a GtkObject + pat = re.compile("struct _(" + obj_name_pat + ")\s*{\s*" + + "(" + obj_name_pat + ")\s+", re.MULTILINE) + pos = 0 + while pos < len(buf): + m = pat.search(buf, pos) + if not m: break + maybeobjdefs.append((m.group(1), m.group(2))) + pos = m.end() + + # handle typedef struct { ... } style struct defs. + pat = re.compile("typedef struct\s+[_\w]*\s*{\s*" + + "(" + obj_name_pat + ")\s+[^}]*}\s*" + + "(" + obj_name_pat + ")\s*;", re.MULTILINE) + pos = 0 + while pos < len(buf): + m = pat.search(buf, pos) + if not m: break + maybeobjdefs.append((m.group(2), m.group(2))) + pos = m.end() + + # now find all structures that look like they might represent a class: + pat = re.compile("struct _(" + obj_name_pat + ")Class\s*{\s*" + + "(" + obj_name_pat + ")Class\s+", re.MULTILINE) + pos = 0 + while pos < len(buf): + m = pat.search(buf, pos) + if not m: break + t = (m.group(1), m.group(2)) + # if we find an object structure together with a corresponding + # class structure, then we have probably found a GtkObject subclass. + if t in maybeobjdefs: + objdefs.append(t) + pos = m.end() + + pat = re.compile("typedef struct\s+[_\w]*\s*{\s*" + + "(" + obj_name_pat + ")Class\s+[^}]*}\s*" + + "(" + obj_name_pat + ")Class\s*;", re.MULTILINE) + pos = 0 + while pos < len(buf): + m = pat.search(buf, pos) + if not m: break + t = (m.group(2), m.group(1)) + # if we find an object structure together with a corresponding + # class structure, then we have probably found a GtkObject subclass. + if t in maybeobjdefs: + objdefs.append(t) + pos = m.end() + + # now find all structures that look like they might represent + # a class inherited from GTypeInterface: + pat = re.compile("struct _(" + obj_name_pat + ")Class\s*{\s*" + + "GTypeInterface\s+", re.MULTILINE) + pos = 0 + while pos < len(buf): + m = pat.search(buf, pos) + if not m: break + t = (m.group(1), '') + t2 = (m.group(1)+'Class', 'GTypeInterface') + # if we find an object structure together with a corresponding + # class structure, then we have probably found a GtkObject subclass. + if t2 in maybeobjdefs: + objdefs.append(t) + pos = m.end() + + # now find all structures that look like they might represent + # an Iface inherited from GTypeInterface: + pat = re.compile("struct _(" + obj_name_pat + ")Iface\s*{\s*" + + "GTypeInterface\s+", re.MULTILINE) + pos = 0 + while pos < len(buf): + m = pat.search(buf, pos) + if not m: break + t = (m.group(1), '') + t2 = (m.group(1)+'Iface', 'GTypeInterface') + # if we find an object structure together with a corresponding + # class structure, then we have probably found a GtkObject subclass. + if t2 in maybeobjdefs: + objdefs.append(t) + pos = m.end() + +def sort_obj_defs(objdefs): + objdefs.sort() # not strictly needed, but looks nice + pos = 0 + while pos < len(objdefs): + klass,parent = objdefs[pos] + for i in range(pos+1, len(objdefs)): + # parent below subclass ... reorder + if objdefs[i][0] == parent: + objdefs.insert(i+1, objdefs[pos]) + del objdefs[pos] + break + else: + pos = pos + 1 + return objdefs + +# ------------------ Find enum definitions ----------------- + +def find_enum_defs(buf, enums=[]): + # strip comments + # bulk comments + buf = strip_comments(buf) + + buf = re.sub('\n', ' ', buf) + + enum_pat = re.compile(r'enum\s*{([^}]*)}\s*([A-Z][A-Za-z]*)(\s|;)') + splitter = re.compile(r'\s*,\s', re.MULTILINE) + pos = 0 + while pos < len(buf): + m = enum_pat.search(buf, pos) + if not m: break + + name = m.group(2) + vals = m.group(1) + isflags = string.find(vals, '<<') >= 0 + entries = [] + for val in splitter.split(vals): + if not string.strip(val): continue + entries.append(string.split(val)[0]) + if name != 'GdkCursorType': + enums.append((name, isflags, entries)) + + pos = m.end() + +# ------------------ Find function definitions ----------------- + +def clean_func(buf): + """ + Ideally would make buf have a single prototype on each line. + Actually just cuts out a good deal of junk, but leaves lines + where a regex can figure prototypes out. + """ + # bulk comments + buf = strip_comments(buf) + + # compact continued lines + pat = re.compile(r"""\\\n""", re.MULTILINE) + buf = pat.sub('', buf) + + # Preprocess directives + pat = re.compile(r"""^[#].*?$""", re.MULTILINE) + buf = pat.sub('', buf) + + #typedefs, stucts, and enums + pat = re.compile(r"""^(typedef|struct|enum)(\s|.|\n)*?;\s*""", + re.MULTILINE) + buf = pat.sub('', buf) + + #strip DECLS macros + pat = re.compile(r"""G_BEGIN_DECLS|BEGIN_LIBGTOP_DECLS""", re.MULTILINE) + buf = pat.sub('', buf) + + #extern "C" + pat = re.compile(r"""^\s*(extern)\s+\"C\"\s+{""", re.MULTILINE) + buf = pat.sub('', buf) + + #multiple whitespace + pat = re.compile(r"""\s+""", re.MULTILINE) + buf = pat.sub(' ', buf) + + #clean up line ends + pat = re.compile(r""";\s*""", re.MULTILINE) + buf = pat.sub('\n', buf) + buf = buf.lstrip() + + #associate *, &, and [] with type instead of variable + #pat = re.compile(r'\s+([*|&]+)\s*(\w+)') + pat = re.compile(r' \s* ([*|&]+) \s* (\w+)', re.VERBOSE) + buf = pat.sub(r'\1 \2', buf) + pat = re.compile(r'\s+ (\w+) \[ \s* \]', re.VERBOSE) + buf = pat.sub(r'[] \1', buf) + + # make return types that are const work. + buf = string.replace(buf, 'G_CONST_RETURN ', 'const-') + buf = string.replace(buf, 'const ', 'const-') + + return buf + +proto_pat=re.compile(r""" +(?P(-|\w|\&|\*)+\s*) # return type +\s+ # skip whitespace +(?P\w+)\s*[(] # match the function name until the opening ( +\s*(?P.*?)\s*[)] # group the function arguments +""", re.IGNORECASE|re.VERBOSE) +#""" +arg_split_pat = re.compile("\s*,\s*") + +get_type_pat = re.compile(r'(const-)?([A-Za-z0-9]+)\*?\s+') +pointer_pat = re.compile('.*\*$') +func_new_pat = re.compile('(\w+)_new$') + +class DefsWriter: + def __init__(self, fp=None, prefix=None, verbose=False, + defsfilter=None): + if not fp: + fp = sys.stdout + + self.fp = fp + self.prefix = prefix + self.verbose = verbose + + self._enums = {} + self._objects = {} + self._functions = {} + if defsfilter: + filter = defsparser.DefsParser(defsfilter) + filter.startParsing() + for func in filter.functions + filter.methods.values(): + self._functions[func.c_name] = func + for obj in filter.objects + filter.boxes + filter.interfaces: + self._objects[obj.c_name] = func + for obj in filter.enums: + self._enums[obj.c_name] = func + + def write_def(self, deffile): + buf = open(deffile).read() + + self.fp.write('\n;; From %s\n\n' % os.path.basename(deffile)) + self._define_func(buf) + self.fp.write('\n') + + def write_enum_defs(self, enums, fp=None): + if not fp: + fp = self.fp + + fp.write(';; Enumerations and flags ...\n\n') + trans = string.maketrans(string.uppercase + '_', + string.lowercase + '-') + filter = self._enums + for cname, isflags, entries in enums: + if filter: + if cname in filter: + continue + name = cname + module = None + m = split_prefix_pat.match(cname) + if m: + module = m.group(1) + name = m.group(2) + if isflags: + fp.write('(define-flags ' + name + '\n') + else: + fp.write('(define-enum ' + name + '\n') + if module: + fp.write(' (in-module "' + module + '")\n') + fp.write(' (c-name "' + cname + '")\n') + fp.write(' (gtype-id "' + typecode(cname) + '")\n') + prefix = entries[0] + for ent in entries: + # shorten prefix til we get a match ... + # and handle GDK_FONT_FONT, GDK_FONT_FONTSET case + while ent[:len(prefix)] != prefix or len(prefix) >= len(ent): + prefix = prefix[:-1] + prefix_len = len(prefix) + fp.write(' (values\n') + for ent in entries: + fp.write(' \'("%s" "%s")\n' % + (string.translate(ent[prefix_len:], trans), ent)) + fp.write(' )\n') + fp.write(')\n\n') + + def write_obj_defs(self, objdefs, fp=None): + if not fp: + fp = self.fp + + fp.write(';; -*- scheme -*-\n') + fp.write('; object definitions ...\n') + + filter = self._objects + for klass, parent in objdefs: + if filter: + if klass in filter: + continue + m = split_prefix_pat.match(klass) + cmodule = None + cname = klass + if m: + cmodule = m.group(1) + cname = m.group(2) + fp.write('(define-object ' + cname + '\n') + if cmodule: + fp.write(' (in-module "' + cmodule + '")\n') + if parent: + fp.write(' (parent "' + parent + '")\n') + fp.write(' (c-name "' + klass + '")\n') + fp.write(' (gtype-id "' + typecode(klass) + '")\n') + # should do something about accessible fields + fp.write(')\n\n') + + def _define_func(self, buf): + buf = clean_func(buf) + buf = string.split(buf,'\n') + filter = self._functions + for p in buf: + if not p: + continue + m = proto_pat.match(p) + if m == None: + if self.verbose: + sys.stderr.write('No match:|%s|\n' % p) + continue + func = m.group('func') + if func[0] == '_': + continue + if filter: + if func in filter: + continue + ret = m.group('ret') + args = m.group('args') + args = arg_split_pat.split(args) + for i in range(len(args)): + spaces = string.count(args[i], ' ') + if spaces > 1: + args[i] = string.replace(args[i], ' ', '-', spaces - 1) + + self._write_func(func, ret, args) + + def _write_func(self, name, ret, args): + if len(args) >= 1: + # methods must have at least one argument + munged_name = name.replace('_', '') + m = get_type_pat.match(args[0]) + if m: + obj = m.group(2) + if munged_name[:len(obj)] == obj.lower(): + self._write_method(obj, name, ret, args) + return + + if self.prefix: + l = len(self.prefix) + if name[:l] == self.prefix and name[l] == '_': + fname = name[l+1:] + else: + fname = name + else: + fname = name + + # it is either a constructor or normal function + self.fp.write('(define-function ' + fname + '\n') + self.fp.write(' (c-name "' + name + '")\n') + + # Hmmm... Let's asume that a constructor function name + # ends with '_new' and it returns a pointer. + m = func_new_pat.match(name) + if pointer_pat.match(ret) and m: + cname = '' + for s in m.group(1).split ('_'): + cname += s.title() + if cname != '': + self.fp.write(' (is-constructor-of "' + cname + '")\n') + + self._write_return(ret) + self._write_arguments(args) + + def _write_method(self, obj, name, ret, args): + regex = string.join(map(lambda x: x+'_?', string.lower(obj)),'') + mname = re.sub(regex, '', name, 1) + if self.prefix: + l = len(self.prefix) + 1 + if mname[:l] == self.prefix and mname[l+1] == '_': + mname = mname[l+1:] + self.fp.write('(define-method ' + mname + '\n') + self.fp.write(' (of-object "' + obj + '")\n') + self.fp.write(' (c-name "' + name + '")\n') + self._write_return(ret) + self._write_arguments(args[1:]) + + def _write_return(self, ret): + if ret != 'void': + self.fp.write(' (return-type "' + ret + '")\n') + else: + self.fp.write(' (return-type "none")\n') + + def _write_arguments(self, args): + is_varargs = 0 + has_args = len(args) > 0 + for arg in args: + if arg == '...': + is_varargs = 1 + elif arg in ('void', 'void '): + has_args = 0 + if has_args: + self.fp.write(' (parameters\n') + for arg in args: + if arg != '...': + tupleArg = tuple(string.split(arg)) + if len(tupleArg) == 2: + self.fp.write(' \'("%s" "%s")\n' % tupleArg) + self.fp.write(' )\n') + if is_varargs: + self.fp.write(' (varargs #t)\n') + self.fp.write(')\n\n') + +# ------------------ Main function ----------------- + +def main(args): + verbose = False + onlyenums = False + onlyobjdefs = False + separate = False + modulename = None + defsfilter = None + opts, args = getopt.getopt(args[1:], 'vs:m:f:', + ['onlyenums', 'onlyobjdefs', + 'modulename=', 'separate=', + 'defsfilter=']) + for o, v in opts: + if o == '-v': + verbose = True + if o == '--onlyenums': + onlyenums = True + if o == '--onlyobjdefs': + onlyobjdefs = True + if o in ('-s', '--separate'): + separate = v + if o in ('-m', '--modulename'): + modulename = v + if o in ('-f', '--defsfilter'): + defsfilter = v + + if not args[0:1]: + print 'Must specify at least one input file name' + return -1 + + # read all the object definitions in + objdefs = [] + enums = [] + for filename in args: + buf = open(filename).read() + find_obj_defs(buf, objdefs) + find_enum_defs(buf, enums) + objdefs = sort_obj_defs(objdefs) + + if separate: + methods = file(separate + '.defs', 'w') + types = file(separate + '-types.defs', 'w') + + dw = DefsWriter(methods, prefix=modulename, verbose=verbose, + defsfilter=defsfilter) + dw.write_obj_defs(objdefs, types) + dw.write_enum_defs(enums, types) + print "Wrote %s-types.defs" % separate + + for filename in args: + dw.write_def(filename) + print "Wrote %s.defs" % separate + else: + dw = DefsWriter(prefix=modulename, verbose=verbose, + defsfilter=defsfilter) + + if onlyenums: + dw.write_enum_defs(enums) + elif onlyobjdefs: + dw.write_obj_defs(objdefs) + else: + dw.write_obj_defs(objdefs) + dw.write_enum_defs(enums) + + for filename in args: + dw.write_def(filename) + +if __name__ == '__main__': + sys.exit(main(sys.argv)) diff --git a/codegen/mergedefs.py b/codegen/mergedefs.py new file mode 100755 index 0000000..773e499 --- /dev/null +++ b/codegen/mergedefs.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python +# -*- Mode: Python; py-indent-offset: 4 -*- + +import optparse + +import defsparser + +parser = optparse.OptionParser( + usage="usage: %prog [options] generated-defs old-defs") +parser.add_option("-p", "--merge-parameters", + help="Merge changes in function/methods parameter lists", + action="store_true", dest="parmerge", default=False) +(options, args) = parser.parse_args() + +if len(args) != 2: + parser.error("wrong number of arguments") + +newp = defsparser.DefsParser(args[0]) +oldp = defsparser.DefsParser(args[1]) + +newp.startParsing() +oldp.startParsing() + +newp.merge(oldp, options.parmerge) + +newp.write_defs() diff --git a/codegen/mkskel.py b/codegen/mkskel.py new file mode 100755 index 0000000..61f520b --- /dev/null +++ b/codegen/mkskel.py @@ -0,0 +1,89 @@ +#!/usr/bin/env python +# -*- Mode: Python; py-indent-offset: 4 -*- + +import sys, os, getopt + +module_init_template = \ +'/* -*- Mode: C; c-basic-offset: 4 -*- */\n' + \ +'#ifdef HAVE_CONFIG_H\n' + \ +'# include "config.h"\n' + \ +'#endif\n' + \ +'#include \n' + \ +'#include \n' + \ +'\n' + \ +'/* include any extra headers needed here */\n' + \ +'\n' + \ +'void %(prefix)s_register_classes(PyObject *d);\n' + \ +'extern PyMethodDef %(prefix)s_functions[];\n' + \ +'\n' + \ +'DL_EXPORT(void)\n' + \ +'init%(module)s(void)\n' + \ +'{\n' + \ +' PyObject *m, *d;\n' + \ +'\n' + \ +' /* perform any initialisation required by the library here */\n' + \ +'\n' + \ +' m = Py_InitModule("%(module)s", %(prefix)s_functions);\n' + \ +' d = PyModule_GetDict(m);\n' + \ +'\n' + \ +' init_pygtk();\n' + \ +'\n' + \ +' %(prefix)s_register_classes(d);\n' + \ +'\n' + \ +' /* add anything else to the module dictionary (such as constants) */\n' +\ +'\n' + \ +' if (PyErr_Occurred())\n' + \ +' Py_FatalError("could not initialise module %(module)s");\n' + \ +'}\n' + +override_template = \ +'/* -*- Mode: C; c-basic-offset: 4 -*- */\n' + \ +'%%%%\n' + \ +'headers\n' + \ +'/* include any required headers here */\n' + \ +'%%%%\n' + \ +'init\n' + \ +' /* include any code here that needs to be executed before the\n' + \ +' * extension classes get initialised */\n' + \ +'%%%%\n' + \ +'\n' + \ +'/* you should add appropriate ignore, ignore-glob and\n' + \ +' * override sections here */\n' + +def open_with_backup(file): + if os.path.exists(file): + try: + os.rename(file, file+'~') + except OSError: + # fail silently if we can't make a backup + pass + return open(file, 'w') + +def write_skels(fileprefix, prefix, module): + fp = open_with_backup(fileprefix+'module.c') + fp.write(module_init_template % { 'prefix': prefix, 'module': module }) + fp.close() + fp = open_with_backup(fileprefix+'.override') + fp.write(override_template % { 'prefix': prefix, 'module': module }) + fp.close() + +if __name__ == '__main__': + opts, args = getopt.getopt(sys.argv[1:], 'f:p:m:h', + ['file-prefix=', 'prefix=', 'module=', 'help']) + fileprefix = None + prefix = None + module = None + for opt, arg in opts: + if opt in ('-f', '--file-prefix'): + fileprefix = arg + elif opt in ('-p', '--prefix'): + prefix = arg + elif opt in ('-m', '--module'): + module = arg + elif opt in ('-h', '--help'): + print 'usage: mkskel.py -f fileprefix -p prefix -m module' + sys.exit(0) + if not fileprefix or not prefix or not module: + print 'usage: mkskel.py -f fileprefix -p prefix -m module' + sys.exit(1) + write_skels(fileprefix, prefix, module) diff --git a/codegen/override.py b/codegen/override.py new file mode 100644 index 0000000..c5932ee --- /dev/null +++ b/codegen/override.py @@ -0,0 +1,290 @@ +# -*- Mode: Python; py-indent-offset: 4 -*- + +# this file contains code for loading up an override file. The override file +# provides implementations of functions where the code generator could not +# do its job correctly. + +import fnmatch +import os +import re +import string +import sys + +def class2cname(klass, method): + c_name = '' + for c in klass: + if c.isupper(): + c_name += '_' + c.lower() + else: + c_name += c + return c_name[1:] + '_' + method + +import_pat = re.compile(r'\s*import\s+(\S+)\.([^\s.]+)\s+as\s+(\S+)') + +class Overrides: + def __init__(self, filename=None, path=[]): + self.modulename = None + self.ignores = {} + self.glob_ignores = [] + self.type_ignores = {} + self.overrides = {} + self.overridden = {} + self.kwargs = {} + self.noargs = {} + self.onearg = {} + self.staticmethod = {} + self.classmethod = {} + self.startlines = {} + self.override_attrs = {} + self.override_slots = {} + self.headers = '' + self.body = '' + self.init = '' + self.imports = [] + self.defines = {} + self.functions = {} + self.newstyle_constructors = {} + self.path = [os.path.abspath(x) for x in path] + if filename: + self.handle_file(filename) + + def handle_file(self, filename): + oldpath = os.getcwd() + + fp = None + for path in self.path: + os.chdir(oldpath) + os.chdir(path) + try: + fp = open(filename, 'r') + break + except: + os.chdir(oldpath) + if not fp: + raise Exception, "Couldn't find file %s" % filename + + dirname = path + + if dirname != oldpath: + os.chdir(dirname) + + # read all the components of the file ... + bufs = [] + startline = 1 + lines = [] + line = fp.readline() + linenum = 1 + while line: + if line == '%%\n' or line == '%%': + if lines: + bufs.append((string.join(lines, ''), startline)) + startline = linenum + 1 + lines = [] + else: + lines.append(line) + line = fp.readline() + linenum = linenum + 1 + if lines: + bufs.append((string.join(lines, ''), startline)) + if not bufs: return + + for buf, startline in bufs: + self.__parse_override(buf, startline, filename) + + os.chdir(oldpath) + + def __parse_override(self, buffer, startline, filename): + pos = string.find(buffer, '\n') + if pos >= 0: + line = buffer[:pos] + rest = buffer[pos+1:] + else: + line = buffer ; rest = '' + words = string.split(line) + if len(words) == 0: + return + command = words[0] + if (command == 'ignore' or + command == 'ignore-' + sys.platform): + "ignore/ignore-platform [functions..]" + for func in words[1:]: + self.ignores[func] = 1 + for func in string.split(rest): + self.ignores[func] = 1 + elif (command == 'ignore-glob' or + command == 'ignore-glob-' + sys.platform): + "ignore-glob/ignore-glob-platform [globs..]" + for func in words[1:]: + self.glob_ignores.append(func) + for func in string.split(rest): + self.glob_ignores.append(func) + elif (command == 'ignore-type' or + command == 'ignore-type-' + sys.platform): + "ignore-type/ignore-type-platform [typenames..]" + for typename in words[1:]: + self.type_ignores[typename] = 1 + for typename in string.split(rest): + self.type_ignores[typename] = 1 + elif command == 'override': + "override function/method [kwargs|noargs|onearg] [staticmethod|classmethod]" + func = words[1] + if 'kwargs' in words[1:]: + self.kwargs[func] = 1 + elif 'noargs' in words[1:]: + self.noargs[func] = 1 + elif 'onearg' in words[1:]: + self.onearg[func] = True + + if 'staticmethod' in words[1:]: + self.staticmethod[func] = True + elif 'classmethod' in words[1:]: + self.classmethod[func] = True + if func in self.overrides: + raise RuntimeError("Function %s is being overridden more than once" % (func,)) + self.overrides[func] = rest + self.startlines[func] = (startline + 1, filename) + elif command == 'override-attr': + "override-slot Class.attr" + attr = words[1] + self.override_attrs[attr] = rest + self.startlines[attr] = (startline + 1, filename) + elif command == 'override-slot': + "override-slot Class.slot" + slot = words[1] + self.override_slots[slot] = rest + self.startlines[slot] = (startline + 1, filename) + elif command == 'headers': + "headers" + self.headers = '%s\n#line %d "%s"\n%s' % \ + (self.headers, startline + 1, filename, rest) + elif command == 'body': + "body" + self.body = '%s\n#line %d "%s"\n%s' % \ + (self.body, startline + 1, filename, rest) + elif command == 'init': + "init" + self.init = '%s\n#line %d "%s"\n%s' % \ + (self.init, startline + 1, filename, rest) + elif command == 'modulename': + "modulename name" + self.modulename = words[1] + elif command == 'include': + "include filename" + for filename in words[1:]: + self.handle_file(filename) + for filename in string.split(rest): + self.handle_file(filename) + elif command == 'import': + "import module1 [\n module2, \n module3 ...]" + for line in string.split(buffer, '\n'): + match = import_pat.match(line) + if match: + self.imports.append(match.groups()) + elif command == 'define': + "define funcname [kwargs|noargs|onearg] [classmethod|staticmethod]" + "define Class.method [kwargs|noargs|onearg] [classmethod|staticmethod]" + func = words[1] + klass = None + if func.find('.') != -1: + klass, func = func.split('.', 1) + + if not self.defines.has_key(klass): + self.defines[klass] = {} + self.defines[klass][func] = rest + else: + self.functions[func] = rest + + if 'kwargs' in words[1:]: + self.kwargs[func] = 1 + elif 'noargs' in words[1:]: + self.noargs[func] = 1 + elif 'onearg' in words[1:]: + self.onearg[func] = 1 + + if 'staticmethod' in words[1:]: + self.staticmethod[func] = True + elif 'classmethod' in words[1:]: + self.classmethod[func] = True + + self.startlines[func] = (startline + 1, filename) + + elif command == 'new-constructor': + "new-constructor GType" + gtype, = words[1:] + self.newstyle_constructors[gtype] = True + + def is_ignored(self, name): + if self.ignores.has_key(name): + return 1 + for glob in self.glob_ignores: + if fnmatch.fnmatchcase(name, glob): + return 1 + return 0 + + def is_type_ignored(self, name): + return name.rstrip('*') in self.type_ignores + + def is_overriden(self, name): + return self.overrides.has_key(name) + + def is_already_included(self, name): + return self.overridden.has_key(name) + + def override(self, name): + self.overridden[name] = 1 + return self.overrides[name] + + def define(self, klass, name): + self.overridden[class2cname(klass, name)] = 1 + return self.defines[klass][name] + + def function(self, name): + return self.functions[name] + + def getstartline(self, name): + return self.startlines[name] + + def wants_kwargs(self, name): + return self.kwargs.has_key(name) + + def wants_noargs(self, name): + return self.noargs.has_key(name) + + def wants_onearg(self, name): + return self.onearg.has_key(name) + + def is_staticmethod(self, name): + return self.staticmethod.has_key(name) + + def is_classmethod(self, name): + return self.classmethod.has_key(name) + + def attr_is_overriden(self, attr): + return self.override_attrs.has_key(attr) + + def attr_override(self, attr): + return self.override_attrs[attr] + + def slot_is_overriden(self, slot): + return self.override_slots.has_key(slot) + + def slot_override(self, slot): + return self.override_slots[slot] + + def get_headers(self): + return self.headers + + def get_body(self): + return self.body + + def get_init(self): + return self.init + + def get_imports(self): + return self.imports + + def get_defines_for(self, klass): + return self.defines.get(klass, {}) + + def get_functions(self): + return self.functions diff --git a/codegen/reversewrapper.py b/codegen/reversewrapper.py new file mode 100644 index 0000000..f528828 --- /dev/null +++ b/codegen/reversewrapper.py @@ -0,0 +1,771 @@ +### -*- python -*- +### Code to generate "Reverse Wrappers", i.e. C->Python wrappers +### (C) 2004 Gustavo Carneiro +import argtypes +import os + +DEBUG_MODE = ('PYGTK_CODEGEN_DEBUG' in os.environ) + +def join_ctype_name(ctype, name): + '''Joins a C type and a variable name into a single string''' + if ctype[-1] != '*': + return " ".join((ctype, name)) + else: + return "".join((ctype, name)) + + +class CodeSink(object): + def __init__(self): + self.indent_level = 0 # current indent level + self.indent_stack = [] # previous indent levels + + def _format_code(self, code): + assert isinstance(code, str) + l = [] + for line in code.split('\n'): + l.append(' '*self.indent_level + line) + if l[-1]: + l.append('') + return '\n'.join(l) + + def writeln(self, line=''): + raise NotImplementedError + + def indent(self, level=4): + '''Add a certain ammount of indentation to all lines written + from now on and until unindent() is called''' + self.indent_stack.append(self.indent_level) + self.indent_level += level + + def unindent(self): + '''Revert indentation level to the value before last indent() call''' + self.indent_level = self.indent_stack.pop() + + +class FileCodeSink(CodeSink): + def __init__(self, fp): + CodeSink.__init__(self) + assert isinstance(fp, file) + self.fp = fp + + def writeln(self, line=''): + self.fp.write(self._format_code(line)) + +class MemoryCodeSink(CodeSink): + def __init__(self): + CodeSink.__init__(self) + self.lines = [] + + def writeln(self, line=''): + self.lines.append(self._format_code(line)) + + def flush_to(self, sink): + assert isinstance(sink, CodeSink) + for line in self.lines: + sink.writeln(line.rstrip()) + self.lines = [] + + def flush(self): + l = [] + for line in self.lines: + l.append(self._format_code(line)) + self.lines = [] + return "".join(l) + +class ReverseWrapper(object): + '''Object that generates a C->Python wrapper''' + def __init__(self, cname, is_static=True): + assert isinstance(cname, str) + + self.cname = cname + ## function object we will call, or object whose method we will call + self.called_pyobj = None + ## name of method of self.called_pyobj we will call + self.method_name = None + self.is_static = is_static + + self.parameters = [] + self.declarations = MemoryCodeSink() + self.post_return_code = MemoryCodeSink() + self.body = MemoryCodeSink() + self.cleanup_actions = [] + self.pyargv_items = [] + self.pyargv_optional_items = [] + self.pyret_parse_items = [] # list of (format_spec, parameter) + + def set_call_target(self, called_pyobj, method_name=None): + assert called_pyobj is not None + assert self.called_pyobj is None + self.called_pyobj = called_pyobj + self.method_name = method_name + + def set_return_type(self, return_type): + assert isinstance(return_type, ReturnType) + self.return_type = return_type + + def add_parameter(self, param): + assert isinstance(param, Parameter) + self.parameters.append(param) + + def add_declaration(self, decl_code): + self.declarations.writeln(decl_code) + + def add_pyargv_item(self, variable, optional=False): + if optional: + self.pyargv_optional_items.append(variable) + else: + self.pyargv_items.append(variable) + + def add_pyret_parse_item(self, format_specifier, parameter, prepend=False): + if prepend: + self.pyret_parse_items.insert(0, (format_specifier, parameter)) + else: + self.pyret_parse_items.append((format_specifier, parameter)) + + def write_code(self, code, + cleanup=None, + failure_expression=None, + failure_cleanup=None, + failure_exception=None, + code_sink=None): + '''Add a chunk of code with cleanup and error handling + + This method is to be used by TypeHandlers when generating code + + Keywork arguments: + code -- code to add + cleanup -- code to cleanup any dynamic resources created by @code + (except in case of failure) (default None) + failure_expression -- C boolean expression to indicate + if anything failed (default None) + failure_cleanup -- code to cleanup any dynamic resources + created by @code in case of failure (default None) + failure_exception -- code to raise an exception in case of + failure (which will be immediately + printed and cleared), (default None) + code_sink -- "code sink" to use; by default, + ReverseWrapper.body is used, which writes the + main body of the wrapper, before calling the + python method. Alternatively, + ReverseWrapper.after_pyret_parse can be used, to + write code after the PyArg_ParseTuple that + parses the python method return value. + ''' + if code_sink is None: + code_sink = self.body + if code is not None: + code_sink.writeln(code) + if failure_expression is not None: + code_sink.writeln("if (%s) {" % (failure_expression,)) + code_sink.indent() + if failure_exception is None: + code_sink.writeln("if (PyErr_Occurred())") + code_sink.indent() + code_sink.writeln("PyErr_Print();") + code_sink.unindent() + else: + code_sink.writeln(failure_exception) + code_sink.writeln("PyErr_Print();") + if failure_cleanup is not None: + code_sink.writeln(failure_cleanup) + for cleanup_action in self.cleanup_actions: + code_sink.writeln(cleanup_action) + self.return_type.write_error_return() + code_sink.unindent() + code_sink.writeln("}") + if cleanup is not None: + self.cleanup_actions.insert(0, cleanup) + + def generate(self, sink): + '''Generate the code into a CodeSink object''' + assert isinstance(sink, CodeSink) + + if DEBUG_MODE: + self.declarations.writeln("/* begin declarations */") + self.body.writeln("/* begin main body */") + self.post_return_code.writeln("/* begin post-return code */") + + self.add_declaration("PyGILState_STATE __py_state;") + self.write_code(code="__py_state = pyg_gil_state_ensure();", + cleanup="pyg_gil_state_release(__py_state);") + + for param in self.parameters: + param.convert_c2py() + + assert self.called_pyobj is not None,\ + "Parameters failed to provide a target function or method." + + if self.is_static: + sink.writeln('static %s' % self.return_type.get_c_type()) + else: + sink.writeln(self.return_type.get_c_type()) + c_proto_params = map(Parameter.format_for_c_proto, self.parameters) + sink.writeln("%s(%s)\n{" % (self.cname, ", ".join(c_proto_params))) + + self.return_type.write_decl() + self.add_declaration("PyObject *py_retval;") + + ## Handle number of arguments + if self.pyargv_items: + self.add_declaration("PyObject *py_args;") + py_args = "py_args" + if self.pyargv_optional_items: + self.add_declaration("int argc = %i;" % len(self.pyargv_items)) + argc = "argc" + for arg in self.pyargv_optional_items: + self.body.writeln("if (%s)" % arg) + self.body.indent() + self.body.writeln("++argc;") + self.body.unindent() + else: + argc = str(len(self.pyargv_items)) + else: + if self.pyargv_optional_items: + self.add_declaration("PyObject *py_args;") + py_args = "py_args" + self.add_declaration("int argc = 0;") + argc = "argc" + for arg in self.pyargv_optional_items: + self.body.writeln("if (%s)" % arg) + self.body.indent() + self.body.writeln("++argc;") + self.body.unindent() + else: + py_args = "NULL" + argc = None + + self.body.writeln() + + if py_args != "NULL": + self.write_code("py_args = PyTuple_New(%s);" % argc, + cleanup="Py_DECREF(py_args);") + pos = 0 + for arg in self.pyargv_items: + try: # try to remove the Py_DECREF cleanup action, if we can + self.cleanup_actions.remove("Py_DECREF(%s);" % arg) + except ValueError: # otherwise we have to Py_INCREF.. + self.body.writeln("Py_INCREF(%s);" % arg) + self.body.writeln("PyTuple_SET_ITEM(%s, %i, %s);" % (py_args, pos, arg)) + pos += 1 + for arg in self.pyargv_optional_items: + self.body.writeln("if (%s) {" % arg) + self.body.indent() + try: # try to remove the Py_DECREF cleanup action, if we can + self.cleanup_actions.remove("Py_XDECREF(%s);" % arg) + except ValueError: # otherwise we have to Py_INCREF.. + self.body.writeln("Py_INCREF(%s);" % arg) + self.body.writeln("PyTuple_SET_ITEM(%s, %i, %s);" % (py_args, pos, arg)) + self.body.unindent() + self.body.writeln("}") + pos += 1 + + self.body.writeln() + + ## Call the python method + if self.method_name is None: + self.write_code("py_retval = PyObject_Call(%s, %s);" + % (self.called_pyobj, py_args), + cleanup="Py_DECREF(py_retval);", + failure_expression="!py_retval") + else: + self.add_declaration("PyObject *py_method;") + self.write_code("py_method = PyObject_GetAttrString(%s, \"%s\");" + % (self.called_pyobj, self.method_name), + cleanup="Py_DECREF(py_method);", + failure_expression="!py_method") + self.write_code("py_retval = PyObject_CallObject(py_method, %s);" + % (py_args,), + cleanup="Py_DECREF(py_retval);", + failure_expression="!py_retval") + + ## -- Handle the return value -- + + ## we need to check if the return_type object is prepared to cooperate with multiple return values + len_before = len(self.pyret_parse_items) + self.return_type.write_conversion() + len_after = len(self.pyret_parse_items) + assert (self.return_type.get_c_type() == 'void' + or not (len_before == len_after and len_after > 0)),\ + ("Bug in reverse wrappers: return type handler %s" + " is not prepared to cooperate multiple return values") % (type(self.return_type),) + + sink.indent() + + if len(self.pyret_parse_items) == 1: + ## if retval is one item only, pack it in a tuple so we + ## can use PyArg_ParseTuple as usual.. + self.write_code('py_retval = Py_BuildValue("(N)", py_retval);') + if len(self.pyret_parse_items) > 0: + ## Parse return values using PyArg_ParseTuple + self.write_code(code=None, failure_expression=( + '!PyArg_ParseTuple(py_retval, "%s", %s)' % ( + "".join([format for format, param in self.pyret_parse_items]), + ", ".join([param for format, param in self.pyret_parse_items])))) + + if DEBUG_MODE: + self.declarations.writeln("/* end declarations */") + self.declarations.flush_to(sink) + sink.writeln() + if DEBUG_MODE: + self.body.writeln("/* end main body */") + self.body.flush_to(sink) + sink.writeln() + if DEBUG_MODE: + self.post_return_code.writeln("/* end post-return code */") + self.post_return_code.flush_to(sink) + sink.writeln() + + for cleanup_action in self.cleanup_actions: + sink.writeln(cleanup_action) + if self.return_type.get_c_type() != 'void': + sink.writeln() + sink.writeln("return retval;") + sink.unindent() + sink.writeln("}") + +class TypeHandler(object): + def __init__(self, wrapper, **props): + assert isinstance(wrapper, ReverseWrapper) + self.wrapper = wrapper + self.props = props + +class ReturnType(TypeHandler): + + def get_c_type(self): + raise NotImplementedError + + def write_decl(self): + raise NotImplementedError + + def write_error_return(self): + '''Write "return " code in case of error''' + raise NotImplementedError + + def write_conversion(self): + '''Writes code to convert Python return value in 'py_retval' + into C 'retval'. Returns a string with C boolean expression + that determines if anything went wrong. ''' + raise NotImplementedError + +class Parameter(TypeHandler): + + def __init__(self, wrapper, name, **props): + TypeHandler.__init__(self, wrapper, **props) + self.name = name + + def get_c_type(self): + raise NotImplementedError + + def convert_c2py(self): + '''Write some code before calling the Python method.''' + pass + + def format_for_c_proto(self): + return join_ctype_name(self.get_c_type(), self.name) + + +###--- +class StringParam(Parameter): + + def get_c_type(self): + return self.props.get('c_type', 'char *').replace('const-', 'const ') + + def convert_c2py(self): + if self.props.get('optional', False): + self.wrapper.add_declaration("PyObject *py_%s = NULL;" % self.name) + self.wrapper.write_code(code=("if (%s)\n" + " py_%s = PyString_FromString(%s);\n" + % (self.name, self.name, self.name)), + cleanup=("Py_XDECREF(py_%s);" % self.name)) + self.wrapper.add_pyargv_item("py_%s" % self.name, optional=True) + else: + self.wrapper.add_declaration("PyObject *py_%s;" % self.name) + self.wrapper.write_code(code=("py_%s = PyString_FromString(%s);" % + (self.name, self.name)), + cleanup=("Py_DECREF(py_%s);" % self.name), + failure_expression=("!py_%s" % self.name)) + self.wrapper.add_pyargv_item("py_%s" % self.name) + +for ctype in ('char*', 'gchar*', 'const-char*', 'char-const*', 'const-gchar*', + 'gchar-const*', 'string', 'static_string'): + argtypes.matcher.register_reverse(ctype, StringParam) +del ctype + +class StringReturn(ReturnType): + + def get_c_type(self): + return "char *" + + def write_decl(self): + self.wrapper.add_declaration("char *retval;") + + def write_error_return(self): + self.wrapper.write_code("return NULL;") + + def write_conversion(self): + self.wrapper.add_pyret_parse_item("s", "&retval", prepend=True) + self.wrapper.write_code("retval = g_strdup(retval);", code_sink=self.wrapper.post_return_code) + +for ctype in ('char*', 'gchar*'): + argtypes.matcher.register_reverse_ret(ctype, StringReturn) +del ctype + + +class VoidReturn(ReturnType): + + def get_c_type(self): + return "void" + + def write_decl(self): + pass + + def write_error_return(self): + self.wrapper.write_code("return;") + + def write_conversion(self): + self.wrapper.write_code( + code=None, + failure_expression="py_retval != Py_None", + failure_cleanup='PyErr_SetString(PyExc_TypeError, "retval should be None");') + +argtypes.matcher.register_reverse_ret('void', VoidReturn) +argtypes.matcher.register_reverse_ret('none', VoidReturn) + +class GObjectParam(Parameter): + + def get_c_type(self): + return self.props.get('c_type', 'GObject *') + + def convert_c2py(self): + self.wrapper.add_declaration("PyObject *py_%s = NULL;" % self.name) + self.wrapper.write_code(code=("if (%s)\n" + " py_%s = pygobject_new((GObject *) %s);\n" + "else {\n" + " Py_INCREF(Py_None);\n" + " py_%s = Py_None;\n" + "}" + % (self.name, self.name, self.name, self.name)), + cleanup=("Py_DECREF(py_%s);" % self.name)) + self.wrapper.add_pyargv_item("py_%s" % self.name) + +argtypes.matcher.register_reverse('GObject*', GObjectParam) + +class GObjectReturn(ReturnType): + + def get_c_type(self): + return self.props.get('c_type', 'GObject *') + + def write_decl(self): + self.wrapper.add_declaration("%s retval;" % self.get_c_type()) + + def write_error_return(self): + self.wrapper.write_code("return NULL;") + + def write_conversion(self): + self.wrapper.write_code( + code=None, + failure_expression="!PyObject_TypeCheck(py_retval, &PyGObject_Type)", + failure_exception='PyErr_SetString(PyExc_TypeError, "retval should be a GObject");') + self.wrapper.write_code("retval = (%s) pygobject_get(py_retval);" + % self.get_c_type()) + self.wrapper.write_code("g_object_ref((GObject *) retval);") + +argtypes.matcher.register_reverse_ret('GObject*', GObjectReturn) + + + +class IntParam(Parameter): + + def get_c_type(self): + return self.props.get('c_type', 'int') + + def convert_c2py(self): + self.wrapper.add_declaration("PyObject *py_%s;" % self.name) + self.wrapper.write_code(code=("py_%s = PyInt_FromLong(%s);" % + (self.name, self.name)), + cleanup=("Py_DECREF(py_%s);" % self.name)) + self.wrapper.add_pyargv_item("py_%s" % self.name) + +class IntReturn(ReturnType): + def get_c_type(self): + return self.props.get('c_type', 'int') + def write_decl(self): + self.wrapper.add_declaration("%s retval;" % self.get_c_type()) + def write_error_return(self): + self.wrapper.write_code("return -G_MAXINT;") + def write_conversion(self): + self.wrapper.add_pyret_parse_item("i", "&retval", prepend=True) + +for argtype in ('int', 'gint', 'guint', 'short', 'gshort', 'gushort', 'long', + 'glong', 'gsize', 'gssize', 'guint8', 'gint8', 'guint16', + 'gint16', 'gint32', 'GTime'): + argtypes.matcher.register_reverse(argtype, IntParam) + argtypes.matcher.register_reverse_ret(argtype, IntReturn) +del argtype + +class IntPtrParam(Parameter): + def __init__(self, wrapper, name, **props): + if "direction" not in props: + raise ValueError("cannot use int* parameter without direction") + if props["direction"] not in ("out", "inout"): + raise ValueError("cannot use int* parameter with direction '%s'" % (props["direction"],)) + Parameter.__init__(self, wrapper, name, **props) + def get_c_type(self): + return self.props.get('c_type', 'int*') + def convert_c2py(self): + if self.props["direction"] == "inout": + self.wrapper.add_declaration("PyObject *py_%s;" % self.name) + self.wrapper.write_code(code=("py_%s = PyInt_FromLong(*%s);" % + (self.name, self.name)), + cleanup=("Py_DECREF(py_%s);" % self.name)) + self.wrapper.add_pyargv_item("py_%s" % self.name) + self.wrapper.add_pyret_parse_item("i", self.name) +for argtype in ('int*', 'gint*'): + argtypes.matcher.register_reverse(argtype, IntPtrParam) +del argtype + + +class GEnumReturn(IntReturn): + def write_conversion(self): + self.wrapper.write_code( + code=None, + failure_expression=("pyg_enum_get_value(%s, py_retval, (gint *)&retval)" % + self.props['typecode'])) + +argtypes.matcher.register_reverse_ret("GEnum", GEnumReturn) + +class GEnumParam(IntParam): + def convert_c2py(self): + self.wrapper.add_declaration("PyObject *py_%s;" % self.name) + self.wrapper.write_code(code=("py_%s = pyg_enum_from_gtype(%s, %s);" % + (self.name, self.props['typecode'], self.name)), + cleanup=("Py_DECREF(py_%s);" % self.name), + failure_expression=("!py_%s" % self.name)) + self.wrapper.add_pyargv_item("py_%s" % self.name) + +argtypes.matcher.register_reverse("GEnum", GEnumParam) + +class GFlagsReturn(IntReturn): + def write_conversion(self): + self.wrapper.write_code( + code=None, + failure_expression=("pyg_flags_get_value(%s, py_retval, (gint *)&retval)" % + self.props['typecode'])) + +argtypes.matcher.register_reverse_ret("GFlags", GFlagsReturn) + +class GFlagsParam(IntParam): + def convert_c2py(self): + self.wrapper.add_declaration("PyObject *py_%s;" % self.name) + self.wrapper.write_code(code=("py_%s = pyg_flags_from_gtype(%s, %s);" % + (self.name, self.props['typecode'], self.name)), + cleanup=("Py_DECREF(py_%s);" % self.name), + failure_expression=("!py_%s" % self.name)) + self.wrapper.add_pyargv_item("py_%s" % self.name) + +argtypes.matcher.register_reverse("GFlags", GFlagsParam) + + +class GtkTreePathParam(IntParam): + def convert_c2py(self): + self.wrapper.add_declaration("PyObject *py_%s;" % self.name) + self.wrapper.write_code(code=("py_%s = pygtk_tree_path_to_pyobject(%s);" % + (self.name, self.name)), + cleanup=("Py_DECREF(py_%s);" % self.name), + failure_expression=("!py_%s" % self.name)) + self.wrapper.add_pyargv_item("py_%s" % self.name) + +argtypes.matcher.register_reverse("GtkTreePath*", GtkTreePathParam) + + +class BooleanReturn(ReturnType): + def get_c_type(self): + return "gboolean" + def write_decl(self): + self.wrapper.add_declaration("gboolean retval;") + self.wrapper.add_declaration("PyObject *py_main_retval;") + def write_error_return(self): + self.wrapper.write_code("return FALSE;") + def write_conversion(self): + self.wrapper.add_pyret_parse_item("O", "&py_main_retval", prepend=True) + self.wrapper.write_code("retval = PyObject_IsTrue(py_main_retval)? TRUE : FALSE;", + code_sink=self.wrapper.post_return_code) +argtypes.matcher.register_reverse_ret("gboolean", BooleanReturn) + +class BooleanParam(Parameter): + def get_c_type(self): + return "gboolean" + def convert_c2py(self): + self.wrapper.add_declaration("PyObject *py_%s;" % self.name) + self.wrapper.write_code("py_%s = %s? Py_True : Py_False;" + % (self.name, self.name)) + self.wrapper.add_pyargv_item("py_%s" % self.name) + +argtypes.matcher.register_reverse("gboolean", BooleanParam) + + +class DoubleParam(Parameter): + def get_c_type(self): + return self.props.get('c_type', 'gdouble') + def convert_c2py(self): + self.wrapper.add_declaration("PyObject *py_%s;" % self.name) + self.wrapper.write_code(code=("py_%s = PyFloat_FromDouble(%s);" % + (self.name, self.name)), + cleanup=("Py_DECREF(py_%s);" % self.name)) + self.wrapper.add_pyargv_item("py_%s" % self.name) + +class DoublePtrParam(Parameter): + def __init__(self, wrapper, name, **props): + if "direction" not in props: + raise ValueError("cannot use double* parameter without direction") + if props["direction"] not in ("out", ): # inout not yet implemented + raise ValueError("cannot use double* parameter with direction '%s'" % (props["direction"],)) + Parameter.__init__(self, wrapper, name, **props) + def get_c_type(self): + return self.props.get('c_type', 'double*') + def convert_c2py(self): + self.wrapper.add_pyret_parse_item("d", self.name) +for argtype in ('double*', 'gdouble*'): + argtypes.matcher.register_reverse(argtype, DoublePtrParam) +del argtype + +class DoubleReturn(ReturnType): + def get_c_type(self): + return self.props.get('c_type', 'gdouble') + def write_decl(self): + self.wrapper.add_declaration("%s retval;" % self.get_c_type()) + def write_error_return(self): + self.wrapper.write_code("return -G_MAXFLOAT;") + def write_conversion(self): + self.wrapper.write_code( + code=None, + failure_expression="!PyFloat_AsDouble(py_retval)", + failure_cleanup='PyErr_SetString(PyExc_TypeError, "retval should be a float");') + self.wrapper.write_code("retval = PyFloat_AsDouble(py_retval);") + +for argtype in ('float', 'double', 'gfloat', 'gdouble'): + argtypes.matcher.register_reverse(argtype, DoubleParam) + argtypes.matcher.register_reverse_ret(argtype, DoubleReturn) + + +class GBoxedParam(Parameter): + def get_c_type(self): + return self.props.get('c_type').replace('const-', 'const ') + def convert_c2py(self): + self.wrapper.add_declaration("PyObject *py_%s;" % self.name) + ctype = self.get_c_type() + if ctype.startswith('const '): + ctype_no_const = ctype[len('const '):] + self.wrapper.write_code( + code=('py_%s = pyg_boxed_new(%s, (%s) %s, TRUE, TRUE);' % + (self.name, self.props['typecode'], + ctype_no_const, self.name)), + cleanup=("Py_DECREF(py_%s);" % self.name)) + else: + self.wrapper.write_code( + code=('py_%s = pyg_boxed_new(%s, %s, FALSE, FALSE);' % + (self.name, self.props['typecode'], self.name)), + cleanup=("Py_DECREF(py_%s);" % self.name)) + self.wrapper.add_pyargv_item("py_%s" % self.name) + +argtypes.matcher.register_reverse("GBoxed", GBoxedParam) + +class GBoxedReturn(ReturnType): + def get_c_type(self): + return self.props.get('c_type') + def write_decl(self): + self.wrapper.add_declaration("%s retval;" % self.get_c_type()) + def write_error_return(self): + self.wrapper.write_code("return retval;") + def write_conversion(self): + self.wrapper.write_code( + failure_expression=("!pyg_boxed_check(py_retval, %s)" % + (self.props['typecode'],)), + failure_cleanup=('PyErr_SetString(PyExc_TypeError, "retval should be a %s");' + % (self.props['typename'],))) + self.wrapper.write_code('retval = pyg_boxed_get(py_retval, %s);' % + self.props['typename']) + +argtypes.matcher.register_reverse_ret("GBoxed", GBoxedReturn) + + +class GdkRectanglePtrParam(Parameter): + def get_c_type(self): + return self.props.get('c_type').replace('const-', 'const ') + def convert_c2py(self): + self.wrapper.add_declaration("PyObject *py_%s;" % self.name) + self.wrapper.write_code( + code=('py_%s = pyg_boxed_new(GDK_TYPE_RECTANGLE, %s, TRUE, TRUE);' % + (self.name, self.name)), + cleanup=("Py_DECREF(py_%s);" % self.name)) + self.wrapper.add_pyargv_item("py_%s" % self.name) + +argtypes.matcher.register_reverse("GdkRectangle*", GdkRectanglePtrParam) +argtypes.matcher.register_reverse('GtkAllocation*', GdkRectanglePtrParam) + + +class PyGObjectMethodParam(Parameter): + def __init__(self, wrapper, name, method_name, **props): + Parameter.__init__(self, wrapper, name, **props) + self.method_name = method_name + + def get_c_type(self): + return self.props.get('c_type', 'GObject *') + + def convert_c2py(self): + self.wrapper.add_declaration("PyObject *py_%s;" % self.name) + self.wrapper.write_code(code=("py_%s = pygobject_new((GObject *) %s);" % + (self.name, self.name)), + cleanup=("Py_DECREF(py_%s);" % self.name), + failure_expression=("!py_%s" % self.name)) + self.wrapper.set_call_target("py_%s" % self.name, self.method_name) + +class CallbackInUserDataParam(Parameter): + def __init__(self, wrapper, name, free_it, **props): + Parameter.__init__(self, wrapper, name, **props) + self.free_it = free_it + + def get_c_type(self): + return "gpointer" + + def convert_c2py(self): + self.wrapper.add_declaration("PyObject **_user_data;") + cleanup = self.free_it and ("g_free(%s);" % self.name) or None + self.wrapper.write_code(code=("_real_user_data = (PyObject **) %s;" + % self.name), + cleanup=cleanup) + + self.wrapper.add_declaration("PyObject *py_func;") + cleanup = self.free_it and "Py_DECREF(py_func);" or None + self.wrapper.write_code(code="py_func = _user_data[0];", + cleanup=cleanup) + self.wrapper.set_call_target("py_func") + + self.wrapper.add_declaration("PyObject *py_user_data;") + cleanup = self.free_it and "Py_XDECREF(py_user_data);" or None + self.wrapper.write_code(code="py_user_data = _user_data[1];", + cleanup=cleanup) + self.wrapper.add_pyargv_item("py_user_data", optional=True) + +def _test(): + import sys + + if 1: + wrapper = ReverseWrapper("this_is_the_c_function_name", is_static=True) + wrapper.set_return_type(StringReturn(wrapper)) + wrapper.add_parameter(PyGObjectMethodParam(wrapper, "self", method_name="do_xxx")) + wrapper.add_parameter(StringParam(wrapper, "param2", optional=True)) + wrapper.add_parameter(GObjectParam(wrapper, "param3")) + #wrapper.add_parameter(InoutIntParam(wrapper, "param4")) + wrapper.generate(FileCodeSink(sys.stderr)) + + if 0: + wrapper = ReverseWrapper("this_a_callback_wrapper") + wrapper.set_return_type(VoidReturn(wrapper)) + wrapper.add_parameter(StringParam(wrapper, "param1", optional=False)) + wrapper.add_parameter(GObjectParam(wrapper, "param2")) + wrapper.add_parameter(CallbackInUserDataParam(wrapper, "data", free_it=True)) + wrapper.generate(FileCodeSink(sys.stderr)) + +if __name__ == '__main__': + _test() diff --git a/codegen/scmexpr.py b/codegen/scmexpr.py new file mode 100644 index 0000000..d08c517 --- /dev/null +++ b/codegen/scmexpr.py @@ -0,0 +1,144 @@ +#!/usr/bin/env python +# -*- Mode: Python; py-indent-offset: 4 -*- +from __future__ import generators + +import string +import types +from cStringIO import StringIO + +class error(Exception): + def __init__(self, filename, lineno, msg): + Exception.__init__(self, msg) + self.filename = filename + self.lineno = lineno + self.msg = msg + def __str__(self): + return '%s:%d: error: %s' % (self.filename, self.lineno, self.msg) + +trans = [' '] * 256 +for i in range(256): + if chr(i) in string.letters + string.digits + '_': + trans[i] = chr(i) + else: + trans[i] = '_' +trans = string.join(trans, '') + +def parse(filename): + if isinstance(filename, str): + fp = open(filename, 'r') + else: # if not string, assume it is some kind of iterator + fp = filename + filename = getattr(fp, 'name', '') + whitespace = ' \t\n\r\x0b\x0c' + nonsymbol = whitespace + '();\'"' + stack = [] + openlines = [] + lineno = 0 + for line in fp: + pos = 0 + lineno += 1 + while pos < len(line): + if line[pos] in whitespace: # ignore whitespace + pass + elif line[pos] == ';': # comment + break + elif line[pos:pos+2] == "'(": + pass # the open parenthesis will be handled next iteration + elif line[pos] == '(': + stack.append(()) + openlines.append(lineno) + elif line[pos] == ')': + if len(stack) == 0: + raise error(filename, lineno, 'close parenthesis found when none open') + closed = stack[-1] + del stack[-1] + del openlines[-1] + if stack: + stack[-1] += (closed,) + else: + yield closed + elif line[pos] == '"': # quoted string + if not stack: + raise error(filename, lineno, + 'string found outside of s-expression') + endpos = pos + 1 + chars = [] + while endpos < len(line): + if endpos+1 < len(line) and line[endpos] == '\\': + endpos += 1 + if line[endpos] == 'n': + chars.append('\n') + elif line[endpos] == 'r': + chars.append('\r') + elif line[endpos] == 't': + chars.append('\t') + else: + chars.append('\\') + chars.append(line[endpos]) + elif line[endpos] == '"': + break + else: + chars.append(line[endpos]) + endpos += 1 + if endpos >= len(line): + raise error(filename, lineno, "unclosed quoted string") + pos = endpos + stack[-1] += (''.join(chars),) + else: # symbol/number + if not stack: + raise error(filename, lineno, + 'identifier found outside of s-expression') + endpos = pos + while endpos < len(line) and line[endpos] not in nonsymbol: + endpos += 1 + symbol = line[pos:endpos] + pos = max(pos, endpos-1) + try: symbol = int(symbol) + except ValueError: + try: symbol = float(symbol) + except ValueError: pass + stack[-1] += (symbol,) + pos += 1 + if len(stack) != 0: + msg = '%d unclosed parentheses found at end of ' \ + 'file (opened on line(s) %s)' % (len(stack), + ', '.join(map(str, openlines))) + raise error(filename, lineno, msg) + +class Parser: + def __init__(self, filename): + """Argument is either a string, a parse tree, or file object""" + self.filename = filename + def startParsing(self, filename=None): + statements = parse(filename or self.filename) + for statement in statements: + self.handle(statement) + def handle(self, tup): + cmd = string.translate(tup[0], trans) + if hasattr(self, cmd): + getattr(self, cmd)(*tup[1:]) + else: + self.unknown(tup) + def unknown(self, tup): + pass + +_testString = """; a scheme file +(define-func gdk_font_load ; a comment at end of line + GdkFont + ((string name))) + +(define-boxed GdkEvent + gdk_event_copy + gdk_event_free + "sizeof(GdkEvent)") +""" + +if __name__ == '__main__': + import sys + if sys.argv[1:]: + fp = open(sys.argv[1]) + else: + fp = StringIO(_testString) + statements = parse(fp) + for s in statements: + print `s` diff --git a/common/ChangeLog b/common/ChangeLog new file mode 100644 index 0000000..92d0d25 --- /dev/null +++ b/common/ChangeLog @@ -0,0 +1,1712 @@ +2008-12-17 Edward Hervey + + * gst.supp: + And yet another variation of the GstAudioFilter leak. + +2008-12-15 Sebastian Dröge + + Patch by: Roland Illig + + * m4/gst-parser.m4: + Fix AG_GST_BISON_CHECK to handle version numbers with more than + two components (i.e. 2.4.1). Fixes bug #564507. + +2008-12-14 Edward Hervey + + * gst.supp: + And yet another variant of the GstAudioFilter leak. + +2008-12-13 Edward Hervey + + * gst.supp: + Added variants of leaks of dynamic pad templates created in + GstAudioFilter. + Add conditional jump triggered by getaddrinfo (maybe glibc-2.9). + +2008-12-12 Edward Hervey + + * gst.supp: + Fix leak in GIO called by gnomevfs. Nothing we can do about this. + +2008-12-12 Edward Hervey + + * gst.supp: + Added another suppression for dynamic pad templates, in this case + GstAudioFilter. + Added suppression for PangoLanguage which can never be freed + according to the Pango API. + +2008-12-12 Edward Hervey + + * gst.supp: + A whole bunch of suppressions detected on latest gentoo ~amd64. + Make some existing suppressions more generic (for subtle dependecy + code changes). + Added suppressions for glibc-2.9. + Added suppressions for new variants of ALSA leaks. + Added suppressions for a series of leaks in plugins registrations due + to some pad templates' caps calculated at runtime. + Added suppressions for variants of some leaks in pango/fontconfig. + Added suppressions for leak in gstffmpegcsp.c (nothing we can do + about it, but will only exist once). + +2008-12-04 Sebastian Dröge + + * m4/gst-plugin-docs.m4: + Remove the check if $have_gtk_doc equals yes as it's not defined + and $enable_gtk_doc should be good enough. + Also this restores the build of the plugin documentation. + +2008-12-01 Mark Nauwelaerts + + * gst.supp: + Add suppression variant for Ubuntu Hardy x86/64bit. + +2008-12-01 Stefan Kost + + * gtk-doc-plugins.mak: + * gtk-doc.mak: + Simplily uninstall rule. Its closer to upstream and fixes #150331. + +2008-11-29 Sebastian Dröge + + * m4/glib-gettext.m4: + Update glib-gettext.m4 from latest stable GLib release. + +2008-11-29 Sebastian Dröge + + Patch by: Cygwin Ports maintainer + + + * gettext.patch: + Update the gettext patch for use with gettext 0.17 which is + required to build with libtool 2.2 because of conflicts. + First part of bug #556091. + +2008-11-29 Sebastian Dröge + + * m4/gtk-doc.m4: + * m4/pkg.m4: + Update gtk-doc and pkg-config m4 macros from their latest releases. + +2008-11-20 Michael Smith + + * m4/as-objc.m4: + Fix objective C test macro when none of the compilers are found at all. + +2008-10-30 Stefan Kost + + * gtk-doc.mak: + Also cp the entities here to all xinlcude based docs (workaround for + not being able to set up a search path). + +2008-10-17 Jan Schmidt + + * gtk-doc.mak: + Don't clobber the real registry cache file when + building docs. + +2008-10-07 Jan Schmidt - Sun Microsystems + + * m4/gst-error.m4: + Also disable the bogus "loop not entered at top" warnings appearing on Sparc Forte builds. + +2008-10-06 Stefan Kost + + * gtk-doc.mak: + Apply the same fix as below to gtk-doc.mak. Somehow did not end up in + CVS. + +2008-09-05 David Schleef + + * gtk-doc-plugins.mak: Fix the check for gtkdoc-rebase: don't + pass the 'which' error back to make. This fix is more specific + than what is in upstream. + +2008-09-05 David Schleef + + * gtk-doc.mak: Fix the check for gtkdoc-rebase: don't pass the + 'which' error back to make. This fix is more specific than + what is in upstream. + +2008-09-04 Stefan Kost + + * gtk-doc-plugins.mak: + * gtk-doc.mak: + Get closer to upstream makefiles. Don't install index.sgml twice. Call + gtkdoc-rebase (if exists). + +2008-08-21 Stefan Kost + + * gtk-doc-plugins.mak: + Revert $(top_builddir) -> $(builddir) change of rev. 1.39 as there is + no variable called builddir. + +2008-07-31 Mark Nauwelaerts + + * gst.supp: + Add suppressions for Ubunty Hardy x86/64bit, similar to earlier + versions and 32bit variant. + +2008-07-31 Sebastian Dröge + + * m4/gst-feature.m4: + Remove GST_DISABLE_(ENUMTYPES|INDEX|URI). + +2008-07-21 Tim-Philipp Müller + + * m4/gst-error.m4:: + When checking for GST_ERROR_CXXFLAGS, check each compiler flag + individually, not all together. + +2008-07-20 Tim-Philipp Müller + + * m4/gst-parser.m4:: + Fix bison version number detection for older --version + output format (as bison 1.28 on OSX 10.4 outputs). + Fixes #543853. + +2008-07-12 Stefan Kost + + * plugins.xsl: + Split refsect2 also here to make "Element Pads" subtitle visible. + +2008-07-08 Sebastian Dröge + + * m4/gst-error.m4: + Add compiler flags to warn if declarations after statements or + variable length arrays are used. These are C99/GCC extensions and + are not supported by some compilers we want to support. + +2008-07-02 Mark Nauwelaerts + + * gtk-doc-plugins.mak: + Only clean doc maintainer stamps in maintainer-clean. Fixes #539977. + +2008-06-20 Sebastian Dröge + + * gstdoc-scangobj: + Always use format strings for printf-like functions, even if they just + print a string. Fixes bug #536981. + +2008-06-20 Sebastian Dröge + + * gtk-doc-plugins.mak: + * gtk-doc.mak: + Include CFLAGS and LDFLAGS in GTKDOC_CFLAGS and GTKDOC_LDFLAGS, + otherwise the values passed to configure are ignored. + Fixes bug #536978. + +2008-06-05 Tim-Philipp Müller + + * m4/gst-error.m4: + Add -fno-strict-aliasing when compiling with -Werror, to work around + warnings caused by G_LOCK with recent GLib versions (2.16.x) (#316221). + +2008-06-05 Jan Schmidt + + * gtk-doc.mak: + Don't copy html/*.png files unless they don't already exist + in the destdir. Fixes distcheck failure caused by permissions + problems trying to copy a file into the destdir when it already + exists. + +2008-05-28 Stefan Kost + + * plugins.xsl: + The class was not shown in plugin docs. Fix typo in changelog below. + +2008-05-22 Jan Schmidt + + * gstdoc-scangobj: + Emit warnings if one of the GTypes we're expecting is 0 + when scanning. + +2008-05-21 Felipe Contreras + + * gtk-doc-plugins.mak: + * gtk-doc.mak: + Fix installing png images when gtk-doc is disabled. + +2008-05-21 Felipe Contreras + + * gtk-doc-plugins.mak: + * gtk-doc.mak: + Fix make clean when gtk-doc is disabled and other cleanups. + +2008-05-17 Jan Schmidt + + * gtk-doc-plugins.mak: + Be more quiet when the files don't yet exist. + +2008-05-16 Jan Schmidt + + * gstdoc-scangobj: + Add a mechanism for adding 'implicitly created' GTypes into the + scan, allowing for documenting plugin-private base classes that + provide signals or properties for public elements. + + * gtk-doc-plugins.mak: + Use $(builddir) instead of $(top_builddir) in a few places - there's + no need to hard code 'docs/plugins' as the only useable path. + +2008-05-14 Peter Kjellerstedt + + * m4/gst-feature.m4: + Report plug-ins without external dependencies that will not be built + even when the name of the plug-in is a substring of another plug-in, + e.g., goom vs. goom2k1. + +2008-05-14 Tim-Philipp Müller + + * gst.supp: + Add suppression for glibc bug on gutsy/x86-64 + +2008-05-12 Stefan Kost + + * plugins.xsl: + Improve the layout of the caps, but splitting them on ";". + +2008-05-09 Sebastian Dröge + + Patch by: Brian Cameron + + * m4/gst-default.m4: + Don't set the default audio sink to the default visualizer. + Fixes bug #532295. + +2008-05-07 Tim-Philipp Müller + + * check.mak: (help): + Document GST_CHECKS environment variable in checks 'make help'. + +2008-05-06 Sebastian Dröge + + Patch by: Marc-Andre Lureau + + * scangobj-merge.py: + Don't depend on Twisted just for the OrderedDict but implement our + own ordered dictionary class. Fixes bug #531577. + +2008-04-23 Edward Hervey + + * gst.supp: + Re-arrange latest suppressions. + Add all known suppressions for ubuntu hardy. Same as for older + ubuntus, but with different codepaths. + +2008-04-22 Edward Hervey + + * gst.supp: Make tls leak suppression a bit more generic. + +2008-04-22 Edward Hervey + + * gst.supp: Fix ommission in latest commit. + Make tls leak suppression more generic in order to cover more + distributions (and hopefully also future distributions). + +2008-04-22 Edward Hervey + + * gst.supp: Add suppressions for Hardy. + They're just the newer versions of similar suppressions we had + for the previous versions of ubuntu. + +2008-04-15 Sebastian Dröge + + * Makefile.am: + * m4/Makefile.am: + Dist all files in common. Fixes bug #527984. + +2008-04-14 Tim-Philipp Müller + + * m4/gst-function.m4: + Rename AC_CACHE_VAL cache-ids to contain '_cv_' in order to make + autoconf-2.62 complain less. + +2008-04-13 Tim-Philipp Müller + + * m4/gst-args.m4: + * m4/gst-valgrind.m4: + Bump valgrind requirement to 3.0 (which was released in August 2005). + Fixes #489269. Also, check for version >=REQ and not >REQ. + +2008-04-09 Tim-Philipp Müller + + * m4/gst-default.m4: + Add --with-default-{audiosink|audiosrc|videosink|videosrc|visualizer} + configure switches (#519417). + +2008-04-03 Tim-Philipp Müller + + * m4/gst-args.m4: + Add --disable-foo switch for dependency-less plugins (#525586). + +2008-04-01 Sebastian Dröge + + * m4/gst-parser.m4: + Unconditionally require flex 2.5.31 and bison 1.875. + +2008-03-23 Sebastian Dröge + + * m4/gst-arch.m4: + amd64/x86_64 allows unaligned memory access too. + +2008-03-21 Sebastian Dröge + + * m4/gst-dowhile.m4: + Add macro that checks if the compiler supports do {} while (0) + macros and define HAVE_DOWHILE_MACROS if it does. This is + needed by glib/gmacros.h to use something else than + if (1) else for G_STMT_START/END when compling C++, which + causes compiler warnings because of ambigious else with g++ 4.3. + +2008-03-21 Sebastian Dröge + + * m4/gst-plugin-docs.m4: + * mangle-tmpl.py: + Don't depend on PyXML and use only XML modules that are shipped + with python. Fixes bug #519635. + +2008-03-07 Edward Hervey + + * m4/gtk-doc.m4: (GTK_DOC_CHECK): + The previous commit to this file by Stefan Kost mentionned checking for + SED, but NOT checking for gtkdoc-check (wth is that doing there ??). + Therefore, removing the check for gtkdoc-check + +2008-03-03 David Schleef + + * m4/ax_create_stdint_h.m4: Oops, checked in the wrong copy of + this file. (Update from upstream) + +2008-03-03 David Schleef + + * m4/ax_create_stdint_h.m4: Update from upstream. Fixes a bug + compiling with MSVC. + +2008-03-03 Edward Hervey + + * m4/pkg.m4: + Allow override of pkg-config results, as proposed by configure --help. + This is in fact just a backport from upstream pkg.m4. + Fixes #518892 + +2008-03-03 Peter Kjellerstedt + + * ChangeLog: + Changelog surgery of my previous commit to add bugzilla reference. + * m4/gst-args.m4: + Add AG_GST_CHECK_PLUGIN and AG_GST_DISABLE_PLUGIN to make it easier + to include and exclude plug-ins without external references, i.e., + plug-ins listed in GST_PLUGINS_SELECTED. (#498222) + +2008-03-03 Sebastian Dröge + + * gst.supp: + Add another glibc suppression. + +2008-02-29 Peter Kjellerstedt + + * m4/gst-feature.m4: + Make the comment before defines generated via AG_GST_CHECK_FEATURE + look nicer. (#498222) + +2008-02-26 Jan Schmidt + + * m4/Makefile.am: + * m4/as-gcc-inline-assembly.m4: + Add Dave Schleef's GCC inline assembly detection macro + for using in gst-plugins-good in the goom 2k4 plugin. + +2008-02-25 Andy Wingo + + * gst-autogen.sh: Instead of only passing certain arguments to + configure, pass anything that we didn't handle. Much friendlier. + Fixes #34412. + +2008-02-23 Jan Schmidt + + * m4/gst-error.m4: + Store the detected compiler flags into ERROR_CFLAGS rather than + ERROR_CXXFLAGS, and use the macro that checks the C compiler, not + the C++ one. + +2008-02-23 Tim-Philipp Müller + + * m4/gst-error.m4: + Reflow checks for additional warning flags so they're not + nested, which fixes the result reporting in the configure + output. + +2008-02-22 Tim-Philipp Müller + + * m4/as-compiler-flag.m4: + Add AS_CXX_COMPILER_FLAG + + * m4/gst-error.m4: + Add AG_GST_SET_ERROR_CXXFLAGS (Forte bits need testing) + +2008-02-22 Tim-Philipp Müller + + * gtk-doc-plugins.mak: + Add 'check-inspected-versions' target; this helps identify + files that should have been removed or where the version + number should (ideally) be updated before a release + (which doesn't happen automatically if the releaser doesn't + build that plugin locally). Not adding at a distcheck hook + yet though, because it's not really that important and would + probably also be a problem on buildbots. + +2008-02-22 Sebastian Dröge + + * gst.supp: + Add even more glibc 2.7 suppressions. + +2008-02-22 Sebastian Dröge + + * gst.supp: + Add another suppression for GLib caching some values after + the first call. + +2008-02-12 Sebastian Dröge + + Patch by: + Tim Mooney + + * m4/gst-error.m4: + Use no%E_MACRO_REDEFINED on Solaris to prevent compiler warnings. + Fixes bug #515905. + +2008-02-11 Sebastian Dröge + + * gst.supp: + Add a few more glibc 2.7 suppressions to make the avisubtitle unit + test valgrind clean. Fixes bug #515703. + +2008-02-08 Stefan Kost + + * ChangeLog: + Changelog surgery for last commit. + +2008-02-08 Stefan Kost + + * m4/gtk-doc.m4: + Conditionally check for SED. Also sync a bit with upstream macro. + +2008-02-08 Stefan Kost + + * gtk-doc-plugins.mak: + * gtk-doc.mak: + Use '$(SED)' instead of 'sed'. Don't use -i for in-place as its gnu + only, move to a temp file instead. + +2008-02-06 Stefan Kost + + * gtk-doc-plugins.mak: + * gtk-doc.mak: + As our docs are versioned, we need to patch the index.sgml file to have + correct paths there, unless we also want to fork gtk-doc's xsl (which + we don't). This hopefully fixes xrefs between modules. + +2008-02-02 Sebastian Dröge + + * m4/gst-feature.m4: + Use printf instead of echo as "echo -e" isn't POSIX and doesn't work + with strict POSIX shells like tcsh or dash and also not every platform + has a /bin/echo that supports it. + +2008-01-24 Stefan Kost + + * ChangeLog: + ChangeLog surgery. + + * gstdoc-scangobj: + Sync the object scanner with gtk-doc fixes. Update args and hierarchy + files. + +2008-01-20 Sebastian Dröge + + * check.mak: + * coverage/lcov.mak: + * gtk-doc-plugins.mak: + * release.mak: + Use $(MAKE) instead of make to fix the build if GNU make is called + something else on the system. + + * m4/as-docbook.m4: + Fix path for docbook.xsl if we have no /etc/xml/catalog and add a + docbook-xsl search path for FreeBSD. + +2008-01-18 Sebastian Dröge + + * gst.supp: + Add a suppression for a glibc bug: + http://valgrind.org/docs/manual/faq.html#faq.exit_errors> + +2008-01-18 Sebastian Dröge + + * gst.supp: + Add some more glibc 2.7 suppressions and make the GLib suppressions + for the home/tmp/etc directory caching a bit more generic. + +2008-01-18 Sebastian Dröge + + * gst.supp: + Add some glibc 2.7 supressions as found on Debian/unstable. + +2008-01-14 Jan Schmidt + + * download-translations: + Apparently I have problems with leaving things commented out when + I edit shell scripts. + +2008-01-12 Jan Schmidt + + * download-translations: + Remove bash-isms + +2008-01-12 Jan Schmidt + + * check-exports: + Restore the cleanup rm of our tmp file which I didn't mean to leave + commented out. + +2008-01-12 Jan Schmidt + + * check-exports: + Fixes to make check-export work on both Solaris and Linux + + * m4/gst-error.m4: + Disable extra warning category (argument mismatch) as an error + on Forte, as it prevents the libcheck fail_if macros from compiling. + + * win32.mak: + Substitute the GStreamer version so things will keep working in 0.11 + +2008-01-11 Tim-Philipp Müller + + Patch by: Peter Kjellerstedt + + * m4/gst-glib2.m4: + * m4/gst-libxml2.m4: + Improve/fix output from configure if either glib-2.0 or + libxml2 are not installed (#498222). + +2008-01-09 Stefan Kost + + * coverage/lcov.mak: + Update coverage make-rules: use them conditionaly, use libtool mode + and use lcov to cleanup. + +2007-12-18 Sebastian Dröge + + * glib-gen.mak: + Also use #include "header" instead of #include
for the + headers that were used to generate the source files for the same + reason as below. + + Remove whitespace before #include. + +2007-12-18 Sebastian Dröge + + * glib-gen.mak: + Use #include "header" instead of #include
for the generated + enum C files as the file will always be in the same directory and + some compilers seem to be a bit strict about that unless . is added + to the include path. + + Include all headers that were used to generate the source files in + the C file as they're used there. + +2007-12-17 Tim-Philipp Müller + + * win32.mak: (win32), (win32defs), (win32crlf): + Make check for CR LF in Visual C++ 6.0 project files + work, based on patch by David Schleef (#496722, #393626). + +2007-12-17 Tim-Philipp Müller + + * Makefile.am: + Don't forget to dist the new win32.mak. + +2007-12-17 Tim-Philipp Müller + + * win32.mak: (win32), (win32defs): + Move common win32 Makefile foo into this new file. + +2007-12-15 Stefan Kost + + * gtk-doc-plugins.mak: + * gtk-doc.mak: + We should have never forked this that much :/. + +2007-12-13 Tim-Philipp Müller + + * check-exports: + Fix build on the ppc64 build bot. + +2007-12-13 Tim-Philipp Müller + + * check-exports: + Suppress more unintentional exports (too much hassle to rename them, + since the win32 project files would need changing too). + +2007-12-12 Tim-Philipp Müller + + * Makefile.am: + check-exports should be disted. + +2007-12-12 Tim-Philipp Müller + + * check-exports: + Add quick'n'dirty script to check the exported symbols of a library + against the symbols in the corresponding .def file (#493983). Based + on script by Ole André Vadla Ravnås. + +2007-11-06 Jan Schmidt + + * gtk-doc-plugins.mak: + Fix distcheck by making sure the types files are treated like the + other gtkdoc-scangobj generated files. + +2007-09-21 Sebastian Dröge + + * m4/gst-args.m4: + Let the AG_GST_ARG_ENABLE_EXPERIMENTAL macro default to disable + building of experimental plugins. Nobody uses it yet and the + --enable--experimental stuff from gst-plugins-good defaults to + disable too. + +2007-09-06 Tim-Philipp Müller + + * gtk-doc-plugins.mak: + Just use the normal 'check' target and avoid a circular + dependency. + +2007-09-06 Tim-Philipp Müller + + * gtk-doc-plugins.mak: + Add rule to error out if .hierarchy file contains tabs. + +2007-08-20 Tim-Philipp Müller + + * download-translations: + * po.mak: + If there are new languages, they need to be added to po/LINGUAS. + +2007-08-20 Tim-Philipp Müller + + * download-translations: + * po.mak: + Fix up 'download-po' a bit, so that we find new translations + for languages that aren't in our po/LINGUAS file yet too. + +2007-07-16 Jan Schmidt + + * gst.supp: + Add a suppression for GLib caching the tmp dir seen on an + Ubuntu Feisty system. + +2007-07-13 Jan Schmidt + + * m4/gst-feature.m4: + If we want to use 'echo -e', call /bin/echo instead of the shell's + since -e is a bash extension, and our /bin/sh might not be being + provided by bash. + +2007-07-01 Thomas Vander Stichele + + * po.mak: + Translation project has moved. Also, no idea how this used to + work given that we weren't downloading a .po file. + +2007-06-25 Stefan Kost + + * gst-xmlinspect.py: + * plugins.xsl: + Also extract element caps for plugin-docs. Fixes parts of #117692. + +2007-06-21 Tim-Philipp Müller + + Patch by: Andreas Schwab + + * m4/gst-feature.m4: + Fix quoting (#449493). + +2007-06-10 Sebastian Dröge + + * m4/gst-parser.m4: + Only generate the parser if bison >= 1.875 _and_ flex >= 2.5.31 is + installed and use pre-generated sources otherwise. Fixes bug #444820. + +2007-05-11 Michael Smith + + * gst.supp: + Suppression variant for our good friend the TLS leak, this time for + Ubuntu Feisty/x86. + +2007-05-09 Tim-Philipp Müller + + * gtk-doc-plugins.mak: + Fix make distcheck again; change some spaces to tabs in makefile. + +2007-04-29 Thomas Vander Stichele + + * gtk-doc-plugins.mak (-module): + Error out when the html build step gives warnings, so they get + fixed properly. + +2007-04-23 Stefan Kost + + * m4/gst-feature.m4: + Add macro AG_GST_PARSE_SUBSYSTEM_DISABLES that checks the defines in + the configuration header and AC_DEFINES the setings. + +2007-04-19 Sebastian Dröge + + Patch by: Vincent Torri + + * m4/gst-parser.m4: + Put the AC_MSG_RESULT output in brackets to get it properly written to + the terminal. + +2007-04-18 Sebastian Dröge + + * m4/gst-parser.m4: + Check for flex >= 2.5.31 and set GENERATE_PARSER if we have at least + that version. Otherwise use pre-generated parser sources as we can't + raise the required flex version. HAVE_MT_SAVE_FLEX is obsolete now + as we use a new enough flex version anyway. First part of #349180 + +2007-04-10 Thomas Vander Stichele + + * m4/gst-check.m4: + Allow pre-setting the GST(PB)_TOOLS/PLUGINS_DIR variables to help + builds against older GStreamer. + +2007-03-25 Sebastian Dröge + + * m4/gst-parser.m4: + Fix the flex version check. It ignored the micro version before. + +2007-03-09 Jan Schmidt + + * check.mak: + Use the same timeout when generating valgrind suppressions as + running the valgrind test. + + * gst.supp: + Add some more suppressions and stuff. + +2007-03-08 Jan Schmidt + + * check.mak: + Make sure GSlice is disabled when building suppressions too. + + * gst.supp: + Add around *850* lines of suppressions for one-time initialisations + inside libasound and gconf/bonobo/ORBit. I feel so dirty. + +2007-03-07 Jan Schmidt + + * gst.supp: + add a suppression for this GConf flup on the FC5 buildbot. + +2007-03-06 Jan Schmidt + + * gst.supp: + Make the suppression a little more generic, to catch the FC5 + backtrace too. + +2007-03-06 Jan Schmidt + + * gst.supp: + Add a suppression for libcdio 0.76. It leaks an internal struct + when the CD-ROM device is not accessible. + +2007-02-28 Thomas Vander Stichele + + * m4/gst-arch.m4: + Move a line that was in the wrong macro + +2007-02-28 Thomas Vander Stichele + + * m4/gst.m4: + Add + * m4/gst-arch.m4: + * m4/gst-args.m4: + * m4/gst-check.m4: + * m4/gst-debuginfo.m4: + * m4/gst-default.m4: + * m4/gst-doc.m4: + * m4/gst-error.m4: + * m4/gst-feature.m4: + * m4/gst-function.m4: + * m4/gst-gettext.m4: + * m4/gst-glib2.m4: + * m4/gst-libxml2.m4: + * m4/gst-parser.m4: + * m4/gst-plugin-docs.m4: + * m4/gst-plugindir.m4: + * m4/gst-valgrind.m4: + * m4/gst-x11.m4: + Convert all macros to use AG_GST style so we can properly warn + when they're missing if configure.ac calls AG_GST_INIT + Will require update in all GStreamer modules. + +2007-02-11 Stefan Kost + + * m4/gst-args.m4: + Remove 'enable' from configure switch description as this leads to + confusing lines like "disable enable builing ...". + * m4/gst-feature.m4: + Fix comment to sound less horrible. + +2007-02-07 Tim-Philipp Müller + + Patch by: Will Newton + + * m4/gst-check.m4: + Use $PKG_CONFIG rather than pkg-config directly, the one in our path + might not be the one we want, like when cross-compiling. Also, other + macros such as PKG_CHECK_MODULES use $PKG_CONFIG, so we should + probably too just for consistency. Fixes #405288. + +2007-01-08 Tim-Philipp Müller + + * m4/gst-parser.m4: + Need to use double square brackets again so m4 doesn't remove them + (fixes #378931). + + * m4/gst-args.m4: + Use double square brackets here as well, for the same reason. + +2007-01-05 Tim-Philipp Müller + + * m4/gst-parser.m4: + Use 'sed' rather than 'tr' to strip trailing letters from version + numbers, since 'tr' might not be available and we know sed is + (#378931). + +2006-10-21 Tim-Philipp Müller + + * check.mak: + Increase default timeout under valgrind, 60 is just too short and + some tests take a bit longer these days and not everyone has a + beefy machine. + +2006-09-29 Michael Smith + + * gst.supp: + More suppressions for edgy. + +2006-09-28 Jan Schmidt + + * m4/gst-glib2.m4: + Use gmodule-no-export-2.0.pc instead of gmodule-2.0.pc - we neither + want nor need --export-dynamic (which ends up making us export a bunch + of unneeded symbols) + +2006-09-14 Tim-Philipp Müller + + * gst.supp: + Some suppressions for the more recent ld.so in ubuntu edgy. + +2006-08-23 Tim-Philipp Müller + + * gst.supp: + Shorten function trail so the suppression works on + my ubuntu dapper system with core cvs as well. + +2006-07-28 Jan Schmidt + + * gst.supp: + Extra suppressions from my Ubuntu x86_64 machine + +2006-07-24 Tim-Philipp Müller + + Patch by: Frederic Peters + + * m4/gst-parser.m4: + Need to double square brackets in .m4 files. Should fix bison + version detection with version numbers like 1.23a (#348354). + +2006-07-24 Jan Schmidt + + * check.mak: + Valgrind fails to find tests written in tests/check/ directly (rather + than a subdir) - because valgrind gets run with a filename that + doesn't contain a relative path, it goes searching /usr/bin instead. + Run with ./.... to make things work either way. + + * gtk-doc-plugins.mak: + Add $(top_builddir)/src as a place to look for plugins + when building too, since that's where gst-template keeps things + +2006-07-23 Stefan Kost + + Patch by: Frederic Peters + + * m4/gst-parser.m4: + Fix bison detection (#348354) + +2006-07-21 Stefan Kost + + * m4/gst-parser.m4: + check for bison and flex + +2006-07-13 Thomas Vander Stichele + + * m4/gst-plugin-docs.m4: + remove the configure argument for enabling plugin doc build; + having gtk-doc enabled and pyxml present is enough of a trigger + +2006-07-03 Thomas Vander Stichele + + * coverage/lcov.mak: + fix up rules to work with gst-python as well + run "make lcov" to test and generate the reports + run "make lcov-reset" to redo it after that + +2006-07-02 Thomas Vander Stichele + + * Makefile.am: + * check.mak: + add an inspect target that inspects every element feature, + so we can have that added for coverage + * coverage/lcov.mak: + add support for lcov + +2006-07-02 Thomas Vander Stichele + + * m4/gst-args.m4: + when building with gcov, reset CFLAGS and friends to O0 + +2006-07-02 Thomas Vander Stichele + + * m4/gst-args.m4: + Find the gcov that matches the gcc version + Only allow gcov if we use gcc + +2006-07-02 Thomas Vander Stichele + + * Makefile.am: + * coverage/coverage-report-entry.pl: + * coverage/coverage-report.pl: + * coverage/coverage-report.xsl: + copy coverage reporting files from dbus + +2006-07-01 Thomas Vander Stichele + + * m4/gst-args.m4: + libtool strips gcov's -f flags, so libgcov does not get + linked in. Setting GCOV_LIBS with -lgcov fixes libtool's + stripping + also show what pkg-config-path we set + +2006-06-22 Tim-Philipp Müller + + Patch by: Peter Kjellerstedt + + * m4/gst-feature.m4: + Show list of plugins without external dependencies that + will not be built as well (#344136). + +2006-06-15 Tim-Philipp Müller + + * m4/gst-plugin-docs.m4: + add GST_PLUGIN_DOCS, which checks for everything needed + to build the plugin docs (namely gtk-doc and pyxml); also + adds a new --enable-plugin-docs configure switch; will + set ENABLE_PLUGIN_DOCS conditional for use in Makefile.am + files (see #344039). + +2006-06-11 Thomas Vander Stichele + + * m4/gst-check.m4: + add GST_PKG_CHECK_MODULES, which in the normal case of checking + for a dependency lib for a plug-in only needs two arguments + to do the right thing. + * m4/gst-feature.m4: + clean up output a little of feature checking; also deal with + non-plug-in feature checks + * m4/Makefile.am: + * m4/gst-gstreamer.m4: + remove this file; it's a useless check + +2006-06-06 Thomas Vander Stichele + + * m4/gst-arch.m4: + add PPC64 so we can have separate structure sizes for it + +2006-06-05 Edward Hervey + + * gtk-doc.mak: + Check for the proper .devhelp2 file to remove. + +2006-05-31 Thomas Vander Stichele + + * gtk-doc.mak: + allow a magic variable to suppress errors from docbuilding + +2006-05-30 Thomas Vander Stichele + + * gtk-doc.mak: + error out if gtkdoc-mktmpl finds unused declarations + +2006-05-28 Edward Hervey + + * gst.supp: + Reverting previous commit. That's good to know, Edward, but why ? + +2006-05-28 Edward Hervey + + * gst.supp: + Added suppresion for memleak in g_option_context_parse on fc5-64 + +2006-05-19 Thomas Vander Stichele + + * m4/gst-check.m4: + set GSTPB_PLUGINS_DIR just like GST_PLUGINS_DIR + +2006-05-18 Tim-Philipp Müller + + * check.mak: + Fix 'make help' in check directories, it should be + 'valgrind.gen-suppressions' not 'valgrind-gen-suppressions' + (not changing target to match help string on purpose to keep + scripts etc. functional). + +2006-05-18 Thomas Vander Stichele + + Patch by: Peter Kjellerstedt + + * m4/gst-arch.m4: + add support for CRIS and CRISv32. + +2006-05-17 Jan Schmidt + + * m4/gst-args.m4: + Fix the macros for command-line supplied package and origin names + so they don't end up being configure as "" (Fixes #341479) + +2006-05-14 Jan Schmidt + + * gtk-doc.mak: + Add uninstall rule to remove .devhelp2 files. + +2006-05-09 Edward Hervey + + * gst.supp: + Add suppression for GSlice version of + g_type_init calloc leak + +2006-04-05 Michael Smith + + * gst.supp: + Delete a bogus suppression for the registry code. + Generalise a suppression for a glib bug (see #337404) + +2006-04-04 Michael Smith + + * gst.supp: + Add a leak suppression: the existing glibc-doesn't-free-TLS one + wasn't triggering here. + +2006-04-04 Michael Smith + + * gst.supp: + Add some minimally-neccesary suppressions for my x86/dapper system. + +2006-04-01 Thomas Vander Stichele + + * plugins.xsl: + Do not display an origin link if origin does not start with http + See #323798 + +2006-04-01 Thomas Vander Stichele + + * m4/gst-args.m4: + * m4/gst-feature.m4: + add more macros + * m4/gst-x11.m4: + X11-related checks + +2006-04-01 Thomas Vander Stichele + + * m4/as-version.m4: + newer version + * m4/gst-args.m4: + * m4/gst-doc.m4: + update and add other macros to be shared across projects + +2006-03-24 Thomas Vander Stichele + + * gst.supp: + add a suppression for g_parse_debug_string + +2006-03-23 Stefan Kost + + * gstdoc-scangobj: + sync fully with gtkdoc-0.15 + +2006-03-23 Stefan Kost + + * gstdoc-scangobj: + * gtk-doc.mak: + sync a little with gtk-doc mainline + +2006-03-17 Wim Taymans + + * gst.supp: + add another clone suppression + change all glibc suppressions to match 2.3.* + +2006-03-09 Thomas Vander Stichele + + * m4/check.m4: + fix test so it actually works when the normal check is used + over debian's/ubuntu's + +2006-03-08 Jan Schmidt + + * check.mak: + Set G_SLICE=always-malloc when valgrinding tests + (closes #333272) + +2006-02-21 Jan Schmidt + + * m4/gst-glib2.m4: + Fix debug output when the GLib version prerequisite is not found + +2006-02-13 Andy Wingo + + * m4/check.m4: Hack around Debian/Ubuntu's broken installation of + the PIC version of check as libcheck_pic.a. Should work with + cross-compilation too. Grr. + +2006-02-06 Thomas Vander Stichele + + * m4/gst-default.m4: + switch to auto* sinks for defaults + +2006-02-02 Wim Taymans + + * check.mak: + add a .valgrind.gen-suppressions target to aid in generating + suppressions + * gst.supp: + add more repressions from my debian glibc as of today + +2006-02-02 Thomas Vander Stichele + + * gtk-doc-plugins.mak: + only add srcdir/gst if it exists + +2006-01-30 Thomas Vander Stichele + + * release.mak: + don't complain about disted enums in win32 + +2006-01-20 Thomas Vander Stichele + + * m4/gst-check.m4: + AC_SUBST CFLAGS and LIBS + do a non-command because something is stripping out our AC_SUBST + +2006-01-20 Thomas Vander Stichele + + * m4/gst-args.m4: + * m4/gst-valgrind.m4: + properly give a "no" result manually when providing a + not-found action to fix configure output + +2006-01-20 Thomas Vander Stichele + + * m4/pkg.m4: + update with a more recent version + +2006-01-07 Thomas Vander Stichele + + * gettext.patch: + make Makefile depend on LINGUAS, so rebuilds work when adding + a language + +2006-01-03 Michael Smith + + * check.mak: + Clarify error message from valgrind test runs. + +2005-12-16 Thomas Vander Stichele + + * m4/gst-arch.m4: + define HOST_CPU + +2005-11-29 Thomas Vander Stichele + + * check.mak: + add a valgrind-forever target for tests + +2005-11-28 Thomas Vander Stichele + + * check.mak: + when a "make test.check" run fails, make it rerun the test with + at least debug level 2 + +2005-11-14 Thomas Vander Stichele + + * m4/Makefile.am: + * m4/gst-check.m4: + fix check for base plugins + * m4/gst-default.m4: + add m4 to set default elements + +2005-10-18 Thomas Vander Stichele + + * m4/gst-check.m4: + check for tools correctly + +2005-10-18 Thomas Vander Stichele + + * gtk-doc.mak: + only enable breaking on new API when make distcheck passes, + not before + +2005-10-18 Thomas Vander Stichele + + * m4/gst-check.m4: + Resurrect Julien's dead body and wipe his mind clean + +2005-10-18 Thomas Vander Stichele + + * m4/gst-check.m4: + Kill Julien + +2005-10-17 Julien MOUTTE + + * m4/gst-check.m4: I know Thomas will kill me but this + ifelse statement seems incorrect as it is always setting + required to "yes". With this one it seems to work. Fixes + build of gst-plugins-base on my setup where gstreamer-check + is definitely not present/required. + +2005-10-18 Stefan Kost + + * gtk-doc.mak: + make build break on new api that has not been added to the + sections file + +2005-10-17 Thomas Vander Stichele + + * m4/gst-glib2.m4: + * m4/Makefile.am: + * m4/gst-check.m4: + add macro for easy checks for GStreamer libs + +2005-10-16 Thomas Vander Stichele + + * m4/gst-glib2.m4: + update, warn in error cases + +2005-10-16 Thomas Vander Stichele + + * m4/gst-error.m4: + add GST_SET_DEFAULT_LEVEL + +2005-10-16 Thomas Vander Stichele + + * m4/Makefile.am: + * m4/gst-gettext.m4: + remove the AM_GNU_GETTEXT* calls, they need to be in configure.ac + * m4/gst-glib2.m4: + clean up and re-use in core soon + * m4/gst-plugindir.m4: + macro to set up PLUGINDIR and plugindir define/var + +2005-10-15 Thomas Vander Stichele + + * m4/Makefile.am: + * m4/gst-gettext.m4: + add macro for setting up gettext + +2005-10-15 Thomas Vander Stichele + + * m4/gst-args.m4: + add some .m4's for argument checking that can be shared among modules + +2005-10-15 Thomas Vander Stichele + + * m4/as-libtool.m4: + set _LT_LDFLAGS + * m4/gst-libxml2.m4: + document + +2005-10-15 Thomas Vander Stichele + + * m4/gst-arch.m4: + indent a little + add AC_REQUIRE + * m4/gst-error.m4: + clean up + +2005-10-12 Thomas Vander Stichele + + * gst-autogen.sh: + update version detection expression to catch stuff like + Libtool (libtool15) 1.5.0 + +2005-10-11 Thomas Vander Stichele + + * gst.supp: + commit 6 new suppressions related to g_module_open; can these + really not be folded into one ? + +2005-10-11 Edward Hervey + + * gst.supp: + made the suppression more generic + Added pthread memleak suppresions + Added nss_parse_* memleak suppresion (used by g_option_context_parse) + +2005-10-11 Thomas Vander Stichele + + * check.mak: + be more strict, more leak resolution + * gst.supp: + clean up the g_type_init suppressions + +2005-10-07 Thomas Vander Stichele + + * m4/Makefile.am: + * m4/gst-valgrind.m4: + put the valgrind detection in an .m4 + +2005-09-29 Thomas Vander Stichele + + * check.mak: + add some more targets, like "help", but also more intensive tests + +2005-09-23 Thomas Vander Stichele + + * gtk-doc.mak: + make certain doc warnings fatal so people maintain docs again + +2005-09-23 Thomas Vander Stichele + + * Makefile.am: + * gtk-doc-plugins.mak: + * scangobj-merge.py: + merge additions from the .signals.new and .args.new file in + the original ones, only updating if necessary + +2005-09-23 Thomas Vander Stichele + + * gst-xmlinspect.py: + * gstdoc-scangobj: + * gtk-doc-plugins.mak: + fix properly for new API; make update in plugins dir now works + +2005-09-20 Thomas Vander Stichele + + * gst-xmlinspect.py: + * gstdoc-scangobj: + some fixes for new API + * gtk-doc-plugins.mak: + set environment properly + +2005-09-17 David Schleef + + * gtk-doc-plugins.mak: Use new environment variables. + +2005-09-16 Michael Smith + + * gstdoc-scangobj: + Make the scanobj code reflect registry/plugin API changes + +2005-09-15 Thomas Vander Stichele + + * gtk-doc-plugins.mak: + split out scanobj step (which will be run by doc maintainer) + from scan step (which will be run on every build) + clean up some of the commands for make distcheck + +2005-09-15 Thomas Vander Stichele + + * gtk-doc-plugins.mak: + * mangle-tmpl.py: + first stab at reorganizing the plugins build so we can maintain + element docs + +2005-09-14 David Schleef + + * as-libtool.mak: Remove + * m4/as-libtool.m4: The libtool bug that this worked around has + been fixed. + * m4/as-version.m4: Don't define GST_RELEASE, since it causes + config.h to be regenerated needlessly, and we don't use it. + +2005-09-14 Thomas Vander Stichele + + * gtk-doc-plugins.mak: + error out on inspect failure + +2005-09-14 Michael Smith + + * glib-gen.mak: + Don't call glib-mkenums with arguments that confuse/break MinGW, + fixes 316155. + +2005-09-03 Thomas Vander Stichele + + * gtk-doc-plugins.mak: + * gtk-doc.mak: + * m4/gst-doc.m4: + separate out gtk-doc and docbook stuff + have two separate --enable configure flags + +2005-08-26 Thomas Vander Stichele + + * check.mak: + add a .gdb target; rebuild registry for each target, otherwise + a code rebuild always triggers a reg rebuild, and it's just too + annoying + * gstdoc-scangobj: + +2005-08-21 Thomas Vander Stichele + + * check.mak: + separate out REGISTRY_ENVIRONMENT; we want to use that from + our valgrind runs, but we also want TESTS_ENVIRONMENT to contain + everything that the first test, gst-register, needs + +2005-08-21 Thomas Vander Stichele + + * check.mak: + parse output of valgrind and check for definitely lost, and error + out; somehow I was led to believe valgrind returns non-zero for + leaks, but I can't make it do that, so let's parse + +2005-08-20 Thomas Vander Stichele + + * check.mak: + for some weird reason valgrind does not report actual memleaks + if GST_PLUGIN_PATH is set to anything but the core gstreamer dir + while valgrind is running. Since the registry is going to go + anyway, I don't want to waste any more time on this; I just run + valgrind without GST_PLUGIN_PATH set. Since the registry loading + doesn't check if GST_PLUGIN_PATH got changed as a reason to rebuild + the registry, that's actually fine. + +2005-08-15 Thomas Vander Stichele + + * mangle-tmpl.py: + keep original Long_Description; only insert an include if it's + not already the first line in there + * plugins.xsl: + output more information for plugins, including an origin hyperlink + +2005-08-15 Thomas Vander Stichele + + * gst-xmlinspect.py: + a first stab at inspecting plugins and outputting an xml description + * gtk-doc-plugins.mak: + a gtk-doc using snippet for plugins documentation + * plugins.xsl: + a stylesheet to convert gst-xmlinspect.py output to docbook output + for inclusion in the gtk-doc stuff + +2005-07-20 Ronald S. Bultje + + * m4/gst-doc.m4: + s/pdf/eps/ in test for whether we output EPS images (#309379). + +2005-07-18 Andy Wingo + + * m4/as-libtool-tags.m4: Ooh, backported from libtool 1.6. Much + better. Thanks, Paolo Bonzini! + + * m4/Makefile.am (EXTRA_DIST): + * m4/as-libtool-tags.m4: New file, tries to disable some CXX and + fortran checks. + +2005-07-08 Thomas Vander Stichele + + * m4/gst-error.m4: + add macro to set ERROR_CFLAGS + +2005-06-30 Jan Schmidt + + * gst-autogen.sh: + Remove the old autoregen.sh if it exists before recreating it, + to prevent confusing any shell process that might be reading it + currently. + +2005-06-29 Thomas Vander Stichele + + * m4/gtk-doc.m4: + added + +2005-06-03 Stefan Kost + + * gst-autogen.sh: create autoregen.sh *before* shifting the options + +2005-05-17 Thomas Vander Stichele + + * gst-autogen.sh: only update autoregen.sh on actual runs + +2005-03-11 Thomas Vander Stichele + + * m4/check.m4: m4 from the check unit test suite + +2004-12-14 David Schleef + + * m4/gst-arch.m4: remove MMX stuff, since it doesn't work and + isn't needed anywhere + +2004-12-08 Thomas Vander Stichele + + * gst-autogen.sh: + allow failure command to be run so we can clean upfrom autopoint + +2004-09-03 Zeeshan Ali Khattak + * m4/gst-feature.m4: Trying to correct the GST_CHECK_CONFIGPROG macro + +2004-07-21 Benjamin Otte + + * m4/.cvsignore: exciting updates for libtool m4 files + +2004-07-12 David Schleef + + * m4/as-objc.m4: Add a macro to test for objective C + +2004-06-12 Thomas Vander Stichele + + * m4/gst-feature.m4: + not all of them support --plugin-libs, so redirect stderr + +2004-06-12 Thomas Vander Stichele + + * m4/as-scrub-include.m4: + sync with upstream to 0.1.4. Fixes #132440 + +2004-06-07 Benjamin Otte + + * m4/gst-feature.m4: + write a big marker into configure output when checking next plugin + to allow easier parsing of why plugins are(n't) built. + +2004-06-01 Thomas Vander Stichele + + * m4/as-compiler-flag.m4: + * m4/as-compiler.m4: + * m4/as-libtool.m4: + * m4/as-version.m4: + sync with upstream, change sticky options to -ko + +2004-05-24 Thomas Vander Stichele + + * m4/as-scrub-include.m4: synced with upstream + +2004-05-03 Thomas Vander Stichele + + * po.mak: + snippet for updating .po files + +2004-03-18 Thomas Vander Stichele + + * Makefile.am: + * m4/Makefile.am: + integrate these with the dist + +2004-03-17 Thomas Vander Stichele + + * release.mak: add a release target + +2004-03-09 Thomas Vander Stichele + + patch by: Stephane Loeuillet + + * m4/ax_create_stdint_h.m4: + use head -n instead of head - (#136500) + +2004-03-05 Thomas Vander Stichele + + * m4/gst-doc.m4: don't build PS without dvips binary + +2004-02-22 Julio M. Merino Vidal + + reviewed by: Benjamin Otte + + * m4/as-docbook.m4: + don't use == operator with test(1) (fixes #135115) + +2004-02-16 Thomas Vander Stichele + + * common/m4/gst-arch.m4: x86_64 is x86 too (clue from Fedora 2 test) + +2004-02-13 Thomas Vander Stichele + + * m4/gst-feature.m4: + remove AM_CONDITIONAL for the subsystem since automake 1.6.x + requires that call be in configure.ac + +2004-02-13 Thomas Vander Stichele + + * m4/gst-libxml2.m4: + take required version as argument, and default to 2.4.9 if not + specified + +2004-02-12 Thomas Vander Stichele + + * m4/gst-feature.m4: + rename and fix up GST_CHECK_DISABLE_SUBSYSTEM + +2004-02-11 Thomas Vander Stichele + + * common/m4/as-ac-expand.m4: + * common/m4/as-auto-alt.m4: + * common/m4/as-compiler-flag.m4: + * common/m4/as-compiler.m4: + * common/m4/as-docbook.m4: + * common/m4/as-libtool.m4: + * common/m4/as-scrub-include.m4: + * common/m4/as-version.m4: + * common/m4/glib-gettext.m4: + * common/m4/gst-arch.m4: + * common/m4/gst-debuginfo.m4: + * common/m4/gst-doc.m4: + * common/m4/gst-feature.m4: + * common/m4/gst-function.m4: + * common/m4/gst-glib2.m4: + * common/m4/gst-gstreamer.m4: + * common/m4/gst-libxml2.m4: + * common/m4/gst-makecontext.m4: + * common/m4/gst-mcsc.m4: + * common/m4/pkg.m4: + fix underquoted macros as reported by automake 1.8.x (#133800) + +2004-02-11 Johan Dahlin + + * gst-autogen.sh: Use A-Z instead of A-z in sed expression to + avoid a warning + +2004-02-05 Thomas Vander Stichele + + * m4/gst-doc.m4: + we use --output-format=xml and --ingnore-files options to + gtkdoc-mkdb, which got added between 0.9 and 1.0 + +2004-02-04 Thomas Vander Stichele + + * m4/as-libtool.m4: remove AM_PROG_LIBTOOL so it can move back + to configure.ac to shut up libtoolize + +2004-02-03 Thomas Vander Stichele + + * glib-gen.mak: added; used to generate enums and marshal code + +2004-01-13 Thomas Vander Stichele + + * gettext.patch: added; used by autogen.sh to make sure + GETTEXT_PACKAGE is understood from po/Makefile.in.in -> po/Makefile.in + diff --git a/common/Makefile.am b/common/Makefile.am new file mode 100644 index 0000000..25966fc --- /dev/null +++ b/common/Makefile.am @@ -0,0 +1,22 @@ +SUBDIRS = m4 + +EXTRA_DIST = \ + ChangeLog \ + gettext.patch \ + glib-gen.mak gtk-doc.mak upload-doc.mak \ + cruft.mak release.mak win32.mak po.mak \ + parallel-subdirs.mak \ + gst-autogen.sh \ + check-exports \ + c-to-xml.py mangle-tmpl.py scangobj-merge.py \ + gtk-doc-plugins.mak \ + plugins.xsl gstdoc-scangobj \ + gst.supp check.mak \ + coverage/lcov.mak \ + coverage/coverage-report.pl \ + coverage/coverage-report.xsl \ + coverage/coverage-report-entry.pl \ + download-translations \ + extract-release-date-from-doap-file \ + gst-indent \ + orc.mak diff --git a/common/Makefile.in b/common/Makefile.in new file mode 100644 index 0000000..0b6542e --- /dev/null +++ b/common/Makefile.in @@ -0,0 +1,686 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = common +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ChangeLog +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ + $(top_srcdir)/common/m4/as-compiler-flag.m4 \ + $(top_srcdir)/common/m4/as-version.m4 \ + $(top_srcdir)/common/m4/gst-args.m4 \ + $(top_srcdir)/common/m4/gst-error.m4 \ + $(top_srcdir)/common/m4/gst-feature.m4 \ + $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ + $(top_srcdir)/common/m4/gst-plugindir.m4 \ + $(top_srcdir)/common/m4/gst-valgrind.m4 \ + $(top_srcdir)/common/m4/gst.m4 $(top_srcdir)/common/m4/pkg.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ERROR_CFLAGS = @ERROR_CFLAGS@ +EXEEXT = @EXEEXT@ +FFLAGS = @FFLAGS@ +FGREP = @FGREP@ +GCOV = @GCOV@ +GCOV_CFLAGS = @GCOV_CFLAGS@ +GCOV_LIBS = @GCOV_LIBS@ +GLIB_REQ = @GLIB_REQ@ +GREP = @GREP@ +GSTPB_REQ = @GSTPB_REQ@ +GST_BASE_CFLAGS = @GST_BASE_CFLAGS@ +GST_BASE_LIBS = @GST_BASE_LIBS@ +GST_CFLAGS = @GST_CFLAGS@ +GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@ +GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@ +GST_DISABLE_ALLOC_TRACE = @GST_DISABLE_ALLOC_TRACE@ +GST_DISABLE_GST_DEBUG = @GST_DISABLE_GST_DEBUG@ +GST_DISABLE_LOADSAVE = @GST_DISABLE_LOADSAVE@ +GST_DISABLE_PARSE = @GST_DISABLE_PARSE@ +GST_DISABLE_PLUGIN = @GST_DISABLE_PLUGIN@ +GST_DISABLE_REGISTRY = @GST_DISABLE_REGISTRY@ +GST_DISABLE_TRACE = @GST_DISABLE_TRACE@ +GST_DISABLE_XML = @GST_DISABLE_XML@ +GST_DP_CFLAGS = @GST_DP_CFLAGS@ +GST_DP_LIBS = @GST_DP_LIBS@ +GST_LIBS = @GST_LIBS@ +GST_MAJORMINOR = @GST_MAJORMINOR@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ +GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ +GST_OPTION_LIBS = @GST_OPTION_LIBS@ +GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@ +GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@ +GST_REQ = @GST_REQ@ +GTK_REQ = @GTK_REQ@ +IGNORE_GST_0_10_21 = @IGNORE_GST_0_10_21@ +IGNORE_GST_0_10_22 = @IGNORE_GST_0_10_22@ +IGNORE_GST_0_10_23 = @IGNORE_GST_0_10_23@ +IGNORE_GST_0_10_24 = @IGNORE_GST_0_10_24@ +IGNORE_GST_0_10_25 = @IGNORE_GST_0_10_25@ +IGNORE_GST_0_10_26 = @IGNORE_GST_0_10_26@ +IGNORE_GST_0_10_29 = @IGNORE_GST_0_10_29@ +IGNORE_GST_0_10_30 = @IGNORE_GST_0_10_30@ +IGNORE_GST_0_10_31 = @IGNORE_GST_0_10_31@ +IGNORE_GST_0_10_32 = @IGNORE_GST_0_10_32@ +IGNORE_GST_LOADSAVE = @IGNORE_GST_LOADSAVE@ +IGNORE_GST_PB_0_10_23 = @IGNORE_GST_PB_0_10_23@ +IGNORE_GST_PB_0_10_25 = @IGNORE_GST_PB_0_10_25@ +IGNORE_GST_PB_0_10_26 = @IGNORE_GST_PB_0_10_26@ +IGNORE_GST_PB_0_10_29 = @IGNORE_GST_PB_0_10_29@ +IGNORE_GST_PB_0_10_30 = @IGNORE_GST_PB_0_10_30@ +IGNORE_GST_PB_0_10_31 = @IGNORE_GST_PB_0_10_31@ +IGNORE_GST_PB_0_10_32 = @IGNORE_GST_PB_0_10_32@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@ +PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@ +PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@ +PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@ +PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PLUGINDIR = @PLUGINDIR@ +PYEXECDIR = @PYEXECDIR@ +PYGOBJECT_2_12_CFLAGS = @PYGOBJECT_2_12_CFLAGS@ +PYGOBJECT_2_12_LIBS = @PYGOBJECT_2_12_LIBS@ +PYGOBJECT_2_16_CFLAGS = @PYGOBJECT_2_16_CFLAGS@ +PYGOBJECT_2_16_LIBS = @PYGOBJECT_2_16_LIBS@ +PYGOBJECT_CFLAGS = @PYGOBJECT_CFLAGS@ +PYGOBJECT_LIBS = @PYGOBJECT_LIBS@ +PYGOBJECT_REQ = @PYGOBJECT_REQ@ +PYGST_CFLAGS = @PYGST_CFLAGS@ +PYGTK_CFLAGS = @PYGTK_CFLAGS@ +PYGTK_LIBS = @PYGTK_LIBS@ +PYGTK_REQ = @PYGTK_REQ@ +PYTHON = @PYTHON@ +PYTHONDIR = @PYTHONDIR@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_LIB_LOC = @PYTHON_LIB_LOC@ +PYTHON_LIB_SUFFIX = @PYTHON_LIB_SUFFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VALGRIND_PATH = @VALGRIND_PATH@ +VERSION = @VERSION@ +WARNING_CFLAGS = @WARNING_CFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +plugindir = @plugindir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = m4 +EXTRA_DIST = \ + ChangeLog \ + gettext.patch \ + glib-gen.mak gtk-doc.mak upload-doc.mak \ + cruft.mak release.mak win32.mak po.mak \ + parallel-subdirs.mak \ + gst-autogen.sh \ + check-exports \ + c-to-xml.py mangle-tmpl.py scangobj-merge.py \ + gtk-doc-plugins.mak \ + plugins.xsl gstdoc-scangobj \ + gst.supp check.mak \ + coverage/lcov.mak \ + coverage/coverage-report.pl \ + coverage/coverage-report.xsl \ + coverage/coverage-report-entry.pl \ + download-translations \ + extract-release-date-from-doap-file \ + gst-indent \ + orc.mak + +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu common/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu common/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/common/c-to-xml.py b/common/c-to-xml.py new file mode 100644 index 0000000..397c112 --- /dev/null +++ b/common/c-to-xml.py @@ -0,0 +1,34 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +""" +Convert a C program to valid XML to be included in docbook +""" + +import sys +import os +from xml.sax import saxutils + +def main(): + if len(sys.argv) == 1: + sys.stderr.write("Please specify a source file to convert") + sys.exit(1) + source = sys.argv[1] + + if not os.path.exists(source): + sys.stderr.write("%s does not exist.\n" % source) + sys.exit(1) + + content = open(source, "r").read() + + # print header + print '' + print '' + print + print '' + + # print content + print saxutils.escape(content).encode('UTF-8') + print '' + +main() diff --git a/common/check-exports b/common/check-exports new file mode 100755 index 0000000..c6d3eca --- /dev/null +++ b/common/check-exports @@ -0,0 +1,72 @@ +#!/bin/sh +# check-exports +# +# quick'n'dirty script that retrieves the list of exported symbols of a given +# library using 'nm', and compares that against the list of symbols-to-export +# of our win32/common/libfoo.def files. + +if [ $# -ne 2 ]; then + echo "Usage: $0 library.def library.so" + exit 1 +fi + +def_path="$1" +def_name="$(basename $def_path)" +lib_path="$2" + +lib_result="`mktemp /tmp/defname.XXXXXX`" + +LC_ALL=C +export LC_ALL + +# On Solaris, add -p to get the correct output format +NMARGS= +if nm -V 2>&1 |grep Solaris > /dev/null; then + NMARGS=-p +fi + +# FIXME 0.11: in 0.11, we should change the export filter to only export +# _gst_foo, but not __gst_foo (we can't change this now, since we added +# __gst_debug_min and __gst_debug_enabled at some point and need to keep +# ABI compatibility). So below we special-case some symbols that shouldn't +# really be exported, either because we're too lazy to rename them to something +# that's not exported (like the _gst_parse_* stuff) or because we had them in +# public headers at some point although they shouldn't be and so we need to +# keep them exported now (like _gst_debug_init, +# __gst_element_factory_add_interface or +# __gst_element_factory_add_static_pad_template). We suppress them here to +# make sure they're at least not exported in the windows msvc build (they +# were never in the .def file, so they never got exported). +# _end is special cased because for some reason it is reported as an exported +# BSS symbol, unlike on linux where it's a local absolute symbol. +nm $NMARGS $lib_path | awk \ + '{ + if ($3 !~ /^_gst_parse_yy/ && \ + $3 !~ /^_gst_[a-z]*_init/ && \ + $3 !~ /^_gst_parse_launch/ && \ + $3 !~ /^__gst_element_details_/ && \ + $3 !~ /^__gst_element_factory_add_/ && \ + $3 !~ /^gst_interfaces_marshal/ && \ + $3 ~ /^[_]*(gst_|Gst|GST_).*/) + { + if ($2 ~ /^[BSDG]$/) + print "\t" $3 " DATA" + else if ($2 == "T") + print "\t" $3 + } + }' | sort | awk '{ if (NR == 1) print "EXPORTS"; print $0; }' \ + > $lib_result + +diffoutput=`diff -u $def_path $lib_result` +diffresult=$? + +rm $lib_result + +if test "$diffresult" -eq 0; then + exit 0; +else + echo -n "$diffoutput" >&2 + echo >&2 + exit 1; +fi + diff --git a/common/check.mak b/common/check.mak new file mode 100644 index 0000000..30487f1 --- /dev/null +++ b/common/check.mak @@ -0,0 +1,181 @@ +# keep target around, since it's referenced in the modules' Makefiles +clean-local-check: + @echo + +if HAVE_VALGRIND +# hangs spectacularly on some machines, so let's not do this by default yet +check-valgrind: + $(MAKE) valgrind +else +check-valgrind: + @true +endif + +LOOPS = 10 + +# run any given test by running make test.check +# if the test fails, run it again at at least debug level 2 +%.check: % + @$(TESTS_ENVIRONMENT) \ + CK_DEFAULT_TIMEOUT=20 \ + $* || \ + $(TESTS_ENVIRONMENT) \ + GST_DEBUG=$$GST_DEBUG,*:2 \ + CK_DEFAULT_TIMEOUT=20 \ + $* + +# run any given test in a loop +%.torture: % + @for i in `seq 1 $(LOOPS)`; do \ + $(TESTS_ENVIRONMENT) \ + CK_DEFAULT_TIMEOUT=20 \ + $*; done + +# run any given test in an infinite loop +%.forever: % + @while true; do \ + $(TESTS_ENVIRONMENT) \ + CK_DEFAULT_TIMEOUT=20 \ + $* || break; done + +# valgrind any given test by running make test.valgrind +%.valgrind: % + @$(TESTS_ENVIRONMENT) \ + CK_DEFAULT_TIMEOUT=360 \ + G_SLICE=always-malloc \ + $(LIBTOOL) --mode=execute \ + $(VALGRIND_PATH) -q \ + $(foreach s,$(SUPPRESSIONS),--suppressions=$(s)) \ + --tool=memcheck --leak-check=full --trace-children=yes \ + --leak-resolution=high --num-callers=20 \ + ./$* 2>&1 | tee valgrind.log + @if grep "==" valgrind.log > /dev/null 2>&1; then \ + rm valgrind.log; \ + exit 1; \ + fi + @rm valgrind.log + +# valgrind any given test and generate suppressions for it +%.valgrind.gen-suppressions: % + @$(TESTS_ENVIRONMENT) \ + CK_DEFAULT_TIMEOUT=360 \ + G_SLICE=always-malloc \ + $(LIBTOOL) --mode=execute \ + $(VALGRIND_PATH) -q \ + $(foreach s,$(SUPPRESSIONS),--suppressions=$(s)) \ + --tool=memcheck --leak-check=full --trace-children=yes \ + --leak-resolution=high --num-callers=20 \ + --gen-suppressions=all \ + ./$* 2>&1 | tee suppressions.log + +# valgrind any given test until failure by running make test.valgrind-forever +%.valgrind-forever: % + @while $(MAKE) $*.valgrind; do \ + true; done + +# gdb any given test by running make test.gdb +%.gdb: % + @$(TESTS_ENVIRONMENT) \ + CK_FORK=no \ + $(LIBTOOL) --mode=execute \ + gdb $* + +# torture tests +torture: $(TESTS) + -rm test-registry.xml + @echo "Torturing tests ..." + @for i in `seq 1 $(LOOPS)`; do \ + $(MAKE) check || \ + (echo "Failure after $$i runs"; exit 1) || \ + exit 1; \ + done + @banner="All $(LOOPS) loops passed"; \ + dashes=`echo "$$banner" | sed s/./=/g`; \ + echo $$dashes; echo $$banner; echo $$dashes + +# forever tests +forever: $(TESTS) + -rm test-registry.xml + @echo "Forever tests ..." + @while true; do \ + $(MAKE) check || \ + (echo "Failure"; exit 1) || \ + exit 1; \ + done + +# valgrind all tests +valgrind: $(TESTS) + @echo "Valgrinding tests ..." + @failed=0; \ + for t in $(filter-out $(VALGRIND_TESTS_DISABLE),$(TESTS)); do \ + $(MAKE) $$t.valgrind; \ + if test "$$?" -ne 0; then \ + echo "Valgrind error for test $$t"; \ + failed=`expr $$failed + 1`; \ + whicht="$$whicht $$t"; \ + fi; \ + done; \ + if test "$$failed" -ne 0; then \ + echo "$$failed tests had leaks or errors under valgrind:"; \ + echo "$$whicht"; \ + false; \ + fi + +# valgrind all tests and generate suppressions +valgrind.gen-suppressions: $(TESTS) + @echo "Valgrinding tests ..." + @failed=0; \ + for t in $(filter-out $(VALGRIND_TESTS_DISABLE),$(TESTS)); do \ + $(MAKE) $$t.valgrind.gen-suppressions; \ + if test "$$?" -ne 0; then \ + echo "Valgrind error for test $$t"; \ + failed=`expr $$failed + 1`; \ + whicht="$$whicht $$t"; \ + fi; \ + done; \ + if test "$$failed" -ne 0; then \ + echo "$$failed tests had leaks or errors under valgrind:"; \ + echo "$$whicht"; \ + false; \ + fi + +# inspect every plugin feature +GST_INSPECT = $(GST_TOOLS_DIR)/gst-inspect-$(GST_MAJORMINOR) +inspect: + @echo "Inspecting features ..." + @for e in `$(TESTS_ENVIRONMENT) $(GST_INSPECT) | head -n -2 \ + | cut -d: -f2`; \ + do echo Inspecting $$e; \ + $(GST_INSPECT) $$e > /dev/null 2>&1; done + +help: + @echo + @echo "make check -- run all checks" + @echo "make torture -- run all checks $(LOOPS) times" + @echo "make (dir)/(test).check -- run the given check once" + @echo "make (dir)/(test).forever -- run the given check forever" + @echo "make (dir)/(test).torture -- run the given check $(LOOPS) times" + @echo + @echo "make (dir)/(test).gdb -- start up gdb for the given test" + @echo + @echo "make valgrind -- valgrind all tests" + @echo "make valgrind.gen-suppressions -- generate suppressions for all tests" + @echo " and save to suppressions.log" + @echo "make (dir)/(test).valgrind -- valgrind the given test" + @echo "make (dir)/(test).valgrind-forever -- valgrind the given test forever" + @echo "make (dir)/(test).valgrind.gen-suppressions -- generate suppressions" + @echo " and save to suppressions.log" + @echo "make inspect -- inspect all plugin features" + @echo + @echo + @echo "Additionally, you can use the GST_CHECKS environment variable to" + @echo "specify which test(s) should be run. This is useful if you are" + @echo "debugging a failure in one particular test, or want to reproduce" + @echo "a race condition in a single test." + @echo + @echo "Examples:" + @echo + @echo " GST_CHECKS=test_this,test_that make element/foobar.check" + @echo " GST_CHECKS=test_many_threads make element/foobar.forever" + @echo + diff --git a/common/coverage/coverage-report-entry.pl b/common/coverage/coverage-report-entry.pl new file mode 100644 index 0000000..51c506c --- /dev/null +++ b/common/coverage/coverage-report-entry.pl @@ -0,0 +1,69 @@ +#!/usr/bin/perl +# +# Copyright (C) 2006 Daniel Berrange +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +print < + +Coverage report for $ARGV[0] + + + +

Coverage report for $ARGV[0]

+ +
+EOF
+
+
+while (<>) {
+    s/&/&/g;
+    s//>/g;
+
+    if (/^\s*function (\S+) called (\d+) returned \d+% blocks executed \d+%/) {
+	my $class = $2 > 0 ? "perfect" : "terrible";
+	$_ = "$_";
+    } elsif (/^\s*branch\s+\d+\s+taken\s+(\d+)%\s+.*$/) {
+	my $class = $1 > 0 ? "perfect" : "terrible";
+	$_ = "$_";
+    } elsif (/^\s*branch\s+\d+\s+never executed.*$/) {
+	my $class = "terrible";
+	$_ = "$_";
+    } elsif (/^\s*call\s+\d+\s+never executed.*$/) {
+	my $class = "terrible";
+	$_ = "$_";
+    } elsif (/^\s*call\s+\d+\s+returned\s+(\d+)%.*$/) {
+	my $class = $1 > 0 ? "perfect" : "terrible";
+	$_ = "$_";
+    }
+
+    print;
+}
+
+print <
+
+
+EOF
diff --git a/common/coverage/coverage-report.pl b/common/coverage/coverage-report.pl
new file mode 100644
index 0000000..ed30f8d
--- /dev/null
+++ b/common/coverage/coverage-report.pl
@@ -0,0 +1,125 @@
+#!/usr/bin/perl
+#
+# Copyright (C) 2006 Daniel Berrange
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+use warnings;
+use strict;
+
+my %coverage = ( functions => {}, files => {} );
+
+my %filemap;
+
+my $type;
+my $name;
+
+my @functions;
+
+while (<>) {
+    if (/^Function '(.*)'\s*$/) {
+	$type = "function";
+	$name = $1;
+	$coverage{$type}->{$name} = {};
+	push @functions, $name;
+    } elsif (/^File '(.*?)'\s*$/) {
+	$type = "file";
+	$name = $1;
+	$coverage{$type}->{$name} = {};
+
+	foreach my $func (@functions) {
+	    $coverage{"function"}->{$func}->{file} = $name;
+	}
+	@functions = ();
+    } elsif (/^Lines executed:(.*)%\s*of\s*(\d+)\s*$/) {
+	$coverage{$type}->{$name}->{lines} = $2;
+	$coverage{$type}->{$name}->{linesCoverage} = $1;
+    } elsif (/^Branches executed:(.*)%\s*of\s*(\d+)\s*$/) {
+	$coverage{$type}->{$name}->{branches} = $2;
+	$coverage{$type}->{$name}->{branchesCoverage} = $1;
+    } elsif (/^Taken at least once:(.*)%\s*of\s*(\d+)\s*$/) {
+	$coverage{$type}->{$name}->{conds} = $2;
+	$coverage{$type}->{$name}->{condsCoverage} = $1;
+    } elsif (/^Calls executed:(.*)%\s*of\s*(\d+)\s*$/) {
+	$coverage{$type}->{$name}->{calls} = $2;
+	$coverage{$type}->{$name}->{callsCoverage} = $1;
+    } elsif (/^No branches$/) {
+	$coverage{$type}->{$name}->{branches} = 0;
+	$coverage{$type}->{$name}->{branchesCoverage} = "100.00";
+	$coverage{$type}->{$name}->{conds} = 0;
+	$coverage{$type}->{$name}->{condsCoverage} = "100.00";
+    } elsif (/^No calls$/) {
+	$coverage{$type}->{$name}->{calls} = 0;
+	$coverage{$type}->{$name}->{callsCoverage} = "100.00";
+    } elsif (/^\s*(.*):creating '(.*)'\s*$/) {
+	$filemap{$1} = $2;
+    } elsif (/^\s*$/) {
+	# nada
+    } else {
+	warn "Shit [$_]\n";
+    }
+}
+
+my %summary;
+foreach my $type ("function", "file") {
+    $summary{$type} = {};
+    foreach my $m ("lines", "branches", "conds", "calls") {
+	my $totalGot = 0;
+	my $totalMiss = 0;
+	my $count = 0;
+	foreach my $func (keys %{$coverage{function}}) {
+	    $count++;
+	    my $got = $coverage{function}->{$func}->{$m};
+	    $totalGot += $got;
+	    my $miss = $got * $coverage{function}->{$func}->{$m ."Coverage"} / 100;
+	    $totalMiss += $miss;
+	}
+	$summary{$type}->{$m} = sprintf("%d", $totalGot);
+	$summary{$type}->{$m . "Coverage"} = sprintf("%.2f", $totalMiss / $totalGot * 100);
+    }
+}
+
+
+
+print "\n";
+
+foreach my $type ("function", "file") {
+    printf "<%ss>\n", $type;
+    foreach my $name (sort { $a cmp $b } keys %{$coverage{$type}}) {
+	my $rec = $coverage{$type}->{$name};
+	printf "  \n", $name, ($type eq "file" ? $filemap{$name} : $filemap{$rec->{file}});
+	printf "    \n", $rec->{lines}, $rec->{linesCoverage};
+	if (exists $rec->{branches}) {
+	    printf "    \n", $rec->{branches}, $rec->{branchesCoverage};
+	}
+	if (exists $rec->{conds}) {
+	    printf "    \n", $rec->{conds}, $rec->{condsCoverage};
+	}
+	if (exists $rec->{calls}) {
+	    printf "    \n", $rec->{calls}, $rec->{callsCoverage};
+	}
+	print  "  \n";
+    }
+
+    printf "  \n";
+    printf "    \n", $summary{$type}->{lines}, $summary{$type}->{linesCoverage};
+    printf "    \n", $summary{$type}->{branches}, $summary{$type}->{branchesCoverage};
+    printf "    \n", $summary{$type}->{conds}, $summary{$type}->{condsCoverage};
+    printf "    \n", $summary{$type}->{calls}, $summary{$type}->{callsCoverage};
+    printf  "  \n";
+    printf "\n", $type;
+}
+
+print "\n";
diff --git a/common/coverage/coverage-report.xsl b/common/coverage/coverage-report.xsl
new file mode 100644
index 0000000..b19ebb6
--- /dev/null
+++ b/common/coverage/coverage-report.xsl
@@ -0,0 +1,235 @@
+
+
+
+
+  
+
+  
+    
+      
+        Coverage report
+        
+      
+      
+        

Coverage report

+ + + +
+ + +

Function coverage

+ + + +
+ + + +

File coverage

+ + + +
+ + + + + + + + + + + + + + + + + + + + + odd + + + even + + + + + + + + + + + + + + odd + + + even + + + + + + +
NameLinesBranchesConditionsCalls
+
+ + + + + + + + + + + + + + Summary + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + perfect + + + excellant + + + good + + + poor + + + bad + + + terrible + + + + + % of + + +
diff --git a/common/coverage/lcov.mak b/common/coverage/lcov.mak new file mode 100644 index 0000000..fc1f6b2 --- /dev/null +++ b/common/coverage/lcov.mak @@ -0,0 +1,43 @@ +## .PHONY so it always rebuilds it +.PHONY: lcov-reset lcov lcov-run lcov-report lcov-upload + +# run lcov from scratch, always +lcov-reset: + $(MAKE) lcov-run + $(MAKE) lcov-report + +# run lcov from scratch if the dir is not there +lcov: + $(MAKE) lcov-reset + +if GST_GCOV_ENABLED +# reset run coverage tests +lcov-run: + @-rm -rf lcov + lcov --directory . --zerocounters + -if test -d tests/check; then $(MAKE) -C tests/check inspect; fi + -$(MAKE) check + +# generate report based on current coverage data +lcov-report: + mkdir lcov + lcov --compat-libtool --directory . --capture --output-file lcov/lcov.info + lcov --list-full-path -l lcov/lcov.info | grep -v "`cd $(top_srcdir) && pwd`" | cut -d\| -f1 > lcov/remove + lcov --list-full-path -l lcov/lcov.info | grep "tests/check/" | cut -d\| -f1 >> lcov/remove + lcov --list-full-path -l lcov/lcov.info | grep "docs/plugins/" | cut -d\| -f1 >> lcov/remove + lcov -r lcov/lcov.info `cat lcov/remove` > lcov/lcov.cleaned.info + rm lcov/remove + mv lcov/lcov.cleaned.info lcov/lcov.info + genhtml -t "$(PACKAGE_STRING)" -o lcov --num-spaces 2 lcov/lcov.info + +lcov-upload: lcov + rsync -rvz -e ssh --delete lcov/* gstreamer.freedesktop.org:/srv/gstreamer.freedesktop.org/www/data/coverage/lcov/$(PACKAGE) + +else +lcov-run: + echo "Need to reconfigure with --enable-gcov" + +lcov-report: + echo "Need to reconfigure with --enable-gcov" +endif + diff --git a/common/cruft.mak b/common/cruft.mak new file mode 100644 index 0000000..53eec24 --- /dev/null +++ b/common/cruft.mak @@ -0,0 +1,56 @@ +# checks for left-over files in the (usually uninstalled) tree, ie. for +# stuff that best be deleted to avoid problems like having old plugin binaries +# lying around. +# +# set CRUFT_FILES and/or CRUFT_DIRS in your Makefile.am when you include this + +check-cruft: + @cruft_files=""; cruft_dirs=""; \ + for f in $(CRUFT_FILES); do \ + if test -e $$f; then \ + cruft_files="$$cruft_files $$f"; \ + fi \ + done; \ + for d in $(CRUFT_DIRS); do \ + if test -e $$d; then \ + cruft_dirs="$$cruft_dirs $$d"; \ + fi \ + done; \ + if test "x$$cruft_files$$cruft_dirs" != x; then \ + echo; \ + echo "**** CRUFT ALERT *****"; \ + echo; \ + echo "The following files and directories may not be needed any "; \ + echo "longer (usually because a plugin has been merged into "; \ + echo "another plugin, moved to a different module, or been "; \ + echo "renamed), and you probably want to clean them up if you "; \ + echo "don't have local changes: "; \ + echo; \ + for f in $$cruft_files; do echo "file $$f"; done; \ + echo; \ + for d in $$cruft_dirs; do echo "directory $$d"; done; \ + echo; \ + echo "'make clean-cruft' will remove these for you."; \ + echo; \ + fi + +clean-cruft-dirs: + @for d in $(CRUFT_DIRS); do \ + if test -e $$d; then \ + rm -r "$$d" && echo "Removed directory $$d"; \ + fi \ + done + +clean-cruft-files: + @for f in $(CRUFT_FILES); do \ + if test -e $$f; then \ + rm "$$f" && echo "Removed file $$f"; \ + fi \ + done + +clean-cruft: clean-cruft-dirs clean-cruft-files + +# also might want to add this to your Makefile.am: +# +# all-local: check-cruft + diff --git a/common/download-translations b/common/download-translations new file mode 100755 index 0000000..aef1d31 --- /dev/null +++ b/common/download-translations @@ -0,0 +1,152 @@ +#!/bin/sh +# Shell script to download the latest translations for a given GStreamer +# package from translationproject.org + + +# DOMAINS based on http://translationproject.org/extra/matrix.html +# We need to check all domains, not only po/LINGUAS, since there might be +# new translations +DOMAINS=\ +"af am ar az be bg pt_BR bs ca zh_CN cs cy da de el eo es et eu fa fi fr "\ +"ga en_GB gl gu he hi zh_HK hr hu id is it ja ko ku ky lg lt lv mk mn ms "\ +"mt nb ne nl nn or pa pl pt rm ro ru rw sk sl sq sr sv ta tq th tk "\ +"tr zh_TW uk ven vi wa xh zu" + +# for testing/debugging: +#DOMAINS="es fr hu sv pl xx" + +# check for 'diff' program +diff --version 2>/dev/null >/dev/null +if [ ! $? ]; then + echo "==== You must have the 'diff' program installed for this script ====" + exit 1 +fi + +# check for 'wget' program +wget --version 2>/dev/null >/dev/null +if [ ! $? ]; then + echo "==== You must have the 'wget' program installed for this script ====" + exit 1 +fi + +# make sure we're in the top-level directory +if [ ! -d ./po ]; then + echo "==== No ./po directory in the current working directory ====" + exit 1 +fi + +# make sure a package argument was passed to us +if [ -z "$1" ]; then + echo "Usage: $0 PACKAGE, e.g. $0 gst-plugins-good" + exit 1 +fi + +if test "$1" != "gstreamer" -a \ + "$1" != "gst-plugins-base" -a \ + "$1" != "gst-plugins-good" -a \ + "$1" != "gst-plugins-ugly" -a \ + "$1" != "gst-plugins-bad"; then + echo "Unexpected package '$1' ?!" + exit 1 +fi + +PACKAGE="$1" + +DOMAINS_TO_ADD="" +DOMAINS_UPDATED="" +DOMAINS_NOT_IN_LINGUAS="" + +echo "Downloading latest translation files for package $PACKAGE ..." +echo + +for d in $DOMAINS +do + PACKAGE_PO_URL_BASE="http://translationproject.org/latest/$PACKAGE" + PO_URL="$PACKAGE_PO_URL_BASE/$d.po" + PO_FILENAME="$PACKAGE.$d.po" + if wget -q -nc -O $PO_FILENAME $PO_URL; then + # we want all .po files in UTF-8 format really, so convert if needed.. + CHARSET=`grep Content-Type $PO_FILENAME | sed -e 's/.*charset=\(.*\)\\\\n.*/\1/'` + if test "x$CHARSET" != "xUTF-8" -a "x$CHARSET" != "xutf-8"; then + # note: things like the bugs address will be added back by make update-po + if msguniq $PO_FILENAME --no-location \ + --output-file=$PO_FILENAME.utf8 \ + --to-code=UTF-8; then + mv $PO_FILENAME.utf8 $PO_FILENAME + else + echo "**** $d: conversion from $CHARSET to UTF-8 failed ****" + fi + fi + if [ -f "po/$d.po" ]; then + # ./po/foo.po exists, so let's check if ours matches the latest from the + # translation project website + REVDATE_NEW=`grep PO-Revision-Date $PO_FILENAME`; + REVDATE_OLD=`grep PO-Revision-Date po/$d.po`; + CHARSET_OLD=`grep Content-Type po/$d.po | sed -e 's/.*charset=\(.*\)\\\\n.*/\1/'` + if test "x$REVDATE_NEW" = "x$REVDATE_OLD" -a "x$CHARSET_OLD" = "xUTF-8"; then + # note: source code line markers will be removed later by make upload-po + echo "$d.po: up-to-date" + rm -f $PO_FILENAME + else + mv $PO_FILENAME "po/$d.po" + if test "x$CHARSET_OLD" != "xUTF-8" -a "x$CHARSET_OLD" != "xutf-8"; then + echo "$d.po: update (and charset converted from $CHARSET_OLD to UTF-8)" + else + echo "$d.po: updated" + fi + DOMAINS_UPDATED="$DOMAINS_UPDATED $d" + fi + # make sure domain is listed in LINGUAS + if ! grep $d "po/LINGUAS" >/dev/null 2>/dev/null; then + DOMAINS_NOT_IN_LINGUAS="$DOMAINS_NOT_IN_LINGUAS $d" + fi + else + # ./po/foo.po doesn't exist, but foo.po exists on the translation project + # website, so it's probably a new translation + echo "$d.po: new language" + mv $PO_FILENAME "po/$d.po" + DOMAINS_UPDATED="$DOMAINS_UPDATED $d" + DOMAINS_TO_ADD="$DOMAINS_TO_ADD $d" + fi + else + rm -f $PO_FILENAME + echo "$d.po: failure (does probably not exist)" + fi +done + +if [ -n "$DOMAINS_UPDATED" ]; then + echo "====================================================================" + echo + echo "Language domains updated :$DOMAINS_UPDATED" + echo "Language domains to git add :$DOMAINS_TO_ADD" + echo + echo "Source: http://translationproject.org/latest/$PACKAGE/" + echo + if [ -n "$DOMAINS_TO_ADD" ]; then + CMD_STRING="git add" + for d in $DOMAINS_TO_ADD; do + CMD_STRING="$CMD_STRING po/$d.po" + done + echo "Please run" + echo + echo " $CMD_STRING" + echo + echo "now and add the following domains to the po/LINGUAS file:" + echo + echo " $DOMAINS_TO_ADD" + echo + echo + fi + echo "====================================================================" +fi + +if [ -n "$DOMAINS_NOT_IN_LINGUAS" ]; then + echo + echo "Existing domains missing from the po/LINGUAS file:" + echo + echo " $DOMAINS_NOT_IN_LINGUAS" + echo + echo +fi + + diff --git a/common/extract-release-date-from-doap-file b/common/extract-release-date-from-doap-file new file mode 100755 index 0000000..f2bc418 --- /dev/null +++ b/common/extract-release-date-from-doap-file @@ -0,0 +1,32 @@ +#!/bin/sh +# Shell script to extract the date given a release version and a .doap file + +if test "x$1" = "x" -o "x$2" = "x" -o ! -s "$2"; then + echo "Usage: $0 RELEASE-VERSION-NUMBER DOAP-FILE" >&2; + exit 1 +fi + +if ! grep '/dev/null ; then + echo "$2 does not look lika a .doap file" >&2; + exit 1 +fi + +if ! grep "$1" "$2" >/dev/null ; then + echo "$2 contains no reference to a version $1" >&2; + exit 1 +fi + +awk 'BEGIN {x=0} +{ +if ($0~"") {x=1; chunk=""} +if (x==1) { + if ($0~"") { chunk = chunk $0 } + if ($0~"") { chunk = chunk $0 } +} +if ($0~"") {x=0; print chunk} +}' < "$2" | \ +\ +grep ''"$1"'' | \ +\ +sed -e 's/^.*//' -e 's/<\/created>.*$//' + diff --git a/common/gettext.patch b/common/gettext.patch new file mode 100644 index 0000000..682b905 --- /dev/null +++ b/common/gettext.patch @@ -0,0 +1,12 @@ +--- po/Makefile.in.in.orig 2006-01-07 12:03:45.000000000 +0100 ++++ po/Makefile.in.in 2006-01-07 12:04:23.000000000 +0100 +@@ -11,6 +11,9 @@ + PACKAGE = @PACKAGE@ + VERSION = @VERSION@ + ++# thomas: add GETTEXT_PACKAGE substitution as used in Makevars ++GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ ++ + SHELL = /bin/sh + @SET_MAKE@ + diff --git a/common/glib-gen.mak b/common/glib-gen.mak new file mode 100644 index 0000000..ef93a5f --- /dev/null +++ b/common/glib-gen.mak @@ -0,0 +1,44 @@ +# these are the variables your Makefile.am should set +# the example is based on the colorbalance interface + +#glib_enum_headers=$(colorbalance_headers) +#glib_enum_define=GST_COLOR_BALANCE +#glib_enum_prefix=gst_color_balance + +enum_headers=$(foreach h,$(glib_enum_headers),\n\#include \"$(h)\") + +# these are all the rules generating the relevant files +%-marshal.h: %-marshal.list + $(AM_V_GEN)glib-genmarshal --header --prefix=$(glib_enum_prefix)_marshal $^ > $*-marshal.h.tmp && \ + mv $*-marshal.h.tmp $*-marshal.h + +%-marshal.c: %-marshal.list + $(AM_V_GEN)echo "#include \"$*-marshal.h\"" >> $*-marshal.c.tmp && \ + glib-genmarshal --body --prefix=$(glib_enum_prefix)_marshal $^ >> $*-marshal.c.tmp && \ + mv $*-marshal.c.tmp $*-marshal.c + +%-enumtypes.h: $(glib_enum_headers) + $(AM_V_GEN)glib-mkenums \ + --fhead "#ifndef __$(glib_enum_define)_ENUM_TYPES_H__\n#define __$(glib_enum_define)_ENUM_TYPES_H__\n\n#include \n\nG_BEGIN_DECLS\n" \ + --fprod "\n/* enumerations from \"@filename@\" */\n" \ + --vhead "GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n" \ + --ftail "G_END_DECLS\n\n#endif /* __$(glib_enum_define)_ENUM_TYPES_H__ */" \ + $^ > $@ + +%-enumtypes.c: $(glib_enum_headers) + @if test "x$(glib_enum_headers)" = "x"; then echo "ERROR: glib_enum_headers is empty, please fix Makefile"; exit 1; fi + $(AM_V_GEN)glib-mkenums \ + --fhead "#include \"$*-enumtypes.h\"\n$(enum_headers)" \ + --fprod "\n/* enumerations from \"@filename@\" */" \ + --vhead "GType\n@enum_name@_get_type (void)\n{\n static volatile gsize g_define_type_id__volatile = 0;\n if (g_once_init_enter (&g_define_type_id__volatile)) {\n static const G@Type@Value values[] = {" \ + --vprod " { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \ + --vtail " { 0, NULL, NULL }\n };\n GType g_define_type_id = g_@type@_register_static (\"@EnumName@\", values);\n g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);\n }\n return g_define_type_id__volatile;\n}\n" \ + $^ > $@ + +# a hack rule to make sure .Plo files exist because they get include'd +# from Makefile's +.deps/%-marshal.Plo: + @touch $@ + +.deps/%-enumtypes.Plo: + @touch $@ diff --git a/common/gst-autogen.sh b/common/gst-autogen.sh new file mode 100644 index 0000000..f05e021 --- /dev/null +++ b/common/gst-autogen.sh @@ -0,0 +1,376 @@ +# a silly hack that generates autoregen.sh but it's handy +# Remove the old autoregen.sh first to create a new file, +# as the current one may be being read by the shell executing +# this script. +if [ -f "autoregen.sh" ]; then + rm autoregen.sh +fi +echo "#!/bin/sh" > autoregen.sh +echo "./autogen.sh $@ \$@" >> autoregen.sh +chmod +x autoregen.sh + +# helper functions for autogen.sh + +debug () +# print out a debug message if DEBUG is a defined variable +{ + if test ! -z "$DEBUG" + then + echo "DEBUG: $1" + fi +} + +version_get () +# based on the command's version output, set variables +# _MAJOR, _MINOR, _MICRO, _VERSION, using the given prefix as variable prefix +# +# arg 1: command binary name +# arg 2: (uppercased) variable name prefix +{ + COMMAND=$1 + VARPREFIX=`echo $2 | tr .,- _` + + # strip everything that's not a digit, then use cut to get the first field + pkg_version=`$COMMAND --version|head -n 1|sed 's/^.*)[^0-9]*//'|cut -d' ' -f1` + debug "pkg_version $pkg_version" + # remove any non-digit characters from the version numbers to permit numeric + # comparison + pkg_major=`echo $pkg_version | cut -d. -f1 | sed s/[a-zA-Z\-].*//g` + pkg_minor=`echo $pkg_version | cut -d. -f2 | sed s/[a-zA-Z\-].*//g` + pkg_micro=`echo $pkg_version | cut -d. -f3 | sed s/[a-zA-Z\-].*//g` + test -z "$pkg_major" && pkg_major=0 + test -z "$pkg_minor" && pkg_minor=0 + test -z "$pkg_micro" && pkg_micro=0 + debug "found major $pkg_major minor $pkg_minor micro $pkg_micro" + eval ${VARPREFIX}_MAJOR=$pkg_major + eval ${VARPREFIX}_MINOR=$pkg_minor + eval ${VARPREFIX}_MICRO=$pkg_micro + eval ${VARPREFIX}_VERSION=$pkg_version +} + +version_compare () +# Checks whether the version of VARPREFIX is equal to or +# newer than the requested version +# arg1: VARPREFIX +# arg2: MAJOR +# arg3: MINOR +# arg4: MICRO +{ + VARPREFIX=`echo $1 | tr .,- _` + MAJOR=$2 + MINOR=$3 + MICRO=$4 + + eval pkg_major=\$${VARPREFIX}_MAJOR; + eval pkg_minor=\$${VARPREFIX}_MINOR; + eval pkg_micro=\$${VARPREFIX}_MICRO; + + #start checking the version + debug "version_compare: $VARPREFIX against $MAJOR.$MINOR.$MICRO" + + # reset check + WRONG= + + if [ ! "$pkg_major" -gt "$MAJOR" ]; then + debug "major: $pkg_major <= $MAJOR" + if [ "$pkg_major" -lt "$MAJOR" ]; then + debug "major: $pkg_major < $MAJOR" + WRONG=1 + elif [ ! "$pkg_minor" -gt "$MINOR" ]; then + debug "minor: $pkg_minor <= $MINOR" + if [ "$pkg_minor" -lt "$MINOR" ]; then + debug "minor: $pkg_minor < $MINOR" + WRONG=1 + elif [ "$pkg_micro" -lt "$MICRO" ]; then + debug "micro: $pkg_micro < $MICRO" + WRONG=1 + fi + fi + fi + if test ! -z "$WRONG"; then + debug "version_compare: $VARPREFIX older than $MAJOR.$MINOR.$MICRO" + return 1 + fi + debug "version_compare: $VARPREFIX equal to/newer than $MAJOR.$MINOR.$MICRO" + return 0 +} + + +version_check () +# check the version of a package +# first argument : package name (executable) +# second argument : optional path where to look for it instead +# third argument : source download url +# rest of arguments : major, minor, micro version +# all consecutive ones : suggestions for binaries to use +# (if not specified in second argument) +{ + PACKAGE=$1 + PKG_PATH=$2 + URL=$3 + MAJOR=$4 + MINOR=$5 + MICRO=$6 + + # for backwards compatibility, we let PKG_PATH=PACKAGE when PKG_PATH null + if test -z "$PKG_PATH"; then PKG_PATH=$PACKAGE; fi + debug "major $MAJOR minor $MINOR micro $MICRO" + VERSION=$MAJOR + if test ! -z "$MINOR"; then VERSION=$VERSION.$MINOR; else MINOR=0; fi + if test ! -z "$MICRO"; then VERSION=$VERSION.$MICRO; else MICRO=0; fi + + debug "major $MAJOR minor $MINOR micro $MICRO" + + for SUGGESTION in $PKG_PATH; do + COMMAND="$SUGGESTION" + + # don't check if asked not to + test -z "$NOCHECK" && { + printf " checking for $COMMAND >= $VERSION ... " + } || { + # we set a var with the same name as the package, but stripped of + # unwanted chars + VAR=`echo $PACKAGE | sed 's/-//g'` + debug "setting $VAR" + eval $VAR="$COMMAND" + return 0 + } + + which $COMMAND > /dev/null 2>&1 + if test $? -eq 1; + then + debug "$COMMAND not found" + continue + fi + + VARPREFIX=`echo $COMMAND | sed 's/-//g' | tr [:lower:] [:upper:]` + version_get $COMMAND $VARPREFIX + + version_compare $VARPREFIX $MAJOR $MINOR $MICRO + if test $? -ne 0; then + echo "found $pkg_version, not ok !" + continue + else + echo "found $pkg_version, ok." + # we set a var with the same name as the package, but stripped of + # unwanted chars + VAR=`echo $PACKAGE | sed 's/-//g'` + debug "setting $VAR" + eval $VAR="$COMMAND" + return 0 + fi + done + + echo "$PACKAGE not found !" + echo "You must have $PACKAGE installed to compile $package." + echo "Download the appropriate package for your distribution," + echo "or get the source tarball at $URL" + return 1; +} + +aclocal_check () +{ + # normally aclocal is part of automake + # so we expect it to be in the same place as automake + # so if a different automake is supplied, we need to adapt as well + # so how's about replacing automake with aclocal in the set var, + # and saving that in $aclocal ? + # note, this will fail if the actual automake isn't called automake* + # or if part of the path before it contains it + if [ -z "$automake" ]; then + echo "Error: no automake variable set !" + return 1 + else + aclocal=`echo $automake | sed s/automake/aclocal/` + debug "aclocal: $aclocal" + if [ "$aclocal" != "aclocal" ]; + then + CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-aclocal=$aclocal" + fi + if [ ! -x `which $aclocal` ]; then + echo "Error: cannot execute $aclocal !" + return 1 + fi + fi +} + +autoheader_check () +{ + # same here - autoheader is part of autoconf + # use the same voodoo + if [ -z "$autoconf" ]; then + echo "Error: no autoconf variable set !" + return 1 + else + autoheader=`echo $autoconf | sed s/autoconf/autoheader/` + debug "autoheader: $autoheader" + if [ "$autoheader" != "autoheader" ]; + then + CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-autoheader=$autoheader" + fi + if [ ! -x `which $autoheader` ]; then + echo "Error: cannot execute $autoheader !" + return 1 + fi + fi + +} + +autoconf_2_52d_check () +{ + # autoconf 2.52d has a weird issue involving a yes:no error + # so don't allow it's use + test -z "$NOCHECK" && { + ac_version=`$autoconf --version|head -n 1|sed 's/^[a-zA-Z\.\ ()]*//;s/ .*$//'` + if test "$ac_version" = "2.52d"; then + echo "autoconf 2.52d has an issue with our current build." + echo "We don't know who's to blame however. So until we do, get a" + echo "regular version. RPM's of a working version are on the gstreamer site." + exit 1 + fi + } + return 0 +} +libtool_2_2_gettext_check () +{ + # libtool 2.2 needs autopoint 0.17 or higher + version_compare LIBTOOLIZE 2 2 0 + if test $? -eq 0 + then + version_compare AUTOPOINT 0 17 0 + if test $? -ne 0 + then + echo "libtool 2.2 requires autopoint 0.17 or higher" + return 1 + fi + fi + return 0 +} + + +die_check () +{ + # call with $DIE + # if set to 1, we need to print something helpful then die + DIE=$1 + if test "x$DIE" = "x1"; + then + echo + echo "- Please get the right tools before proceeding." + echo "- Alternatively, if you're sure we're wrong, run with --nocheck." + exit 1 + fi +} + +autogen_options () +{ + if test "x$1" = "x"; then + return 0 + fi + + while test "x$1" != "x" ; do + optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` + case "$1" in + --noconfigure) + NOCONFIGURE=defined + AUTOGEN_EXT_OPT="$AUTOGEN_EXT_OPT --noconfigure" + echo "+ configure run disabled" + shift + ;; + --nocheck) + AUTOGEN_EXT_OPT="$AUTOGEN_EXT_OPT --nocheck" + NOCHECK=defined + echo "+ autotools version check disabled" + shift + ;; + -d|--debug) + DEBUG=defined + AUTOGEN_EXT_OPT="$AUTOGEN_EXT_OPT --debug" + echo "+ debug output enabled" + shift + ;; + -h|--help) + echo "autogen.sh (autogen options) -- (configure options)" + echo "autogen.sh help options: " + echo " --noconfigure don't run the configure script" + echo " --nocheck don't do version checks" + echo " --debug debug the autogen process" + echo + echo " --with-autoconf PATH use autoconf in PATH" + echo " --with-automake PATH use automake in PATH" + echo + echo "Any argument either not in the above list or after a '--' will be " + echo "passed to ./configure." + exit 1 + ;; + --with-automake=*) + AUTOMAKE=$optarg + echo "+ using alternate automake in $optarg" + CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-automake=$AUTOMAKE" + shift + ;; + --with-autoconf=*) + AUTOCONF=$optarg + echo "+ using alternate autoconf in $optarg" + CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-autoconf=$AUTOCONF" + shift + ;; + --) shift ; break ;; + *) + echo "+ passing argument $1 to configure" + CONFIGURE_EXT_OPT="$CONFIGURE_EXT_OPT $1" + shift + ;; + esac + done + + for arg do CONFIGURE_EXT_OPT="$CONFIGURE_EXT_OPT $arg"; done + if test ! -z "$CONFIGURE_EXT_OPT" + then + echo "+ options passed to configure: $CONFIGURE_EXT_OPT" + fi +} + +toplevel_check () +{ + srcfile=$1 + test -f $srcfile || { + echo "You must run this script in the top-level $package directory" + exit 1 + } +} + +tool_run () +{ + tool=$1 + options=$2 + run_if_fail=$3 + echo "+ running $tool $options..." + $tool $options || { + echo + echo $tool failed + eval $run_if_fail + exit 1 + } +} + +install_git_hooks () +{ + if test -d .git; then + # install pre-commit hook for doing clean commits + for hook in pre-commit; do + if test ! \( -x .git/hooks/$hook -a -L .git/hooks/$hook \); then + echo "+ Installing git $hook hook" + rm -f .git/hooks/$hook + ln -s ../../common/hooks/$hook.hook .git/hooks/$hook || { + # if we couldn't create a symbolic link, try doing a plain cp + if cp common/hooks/pre-commit.hook .git/hooks/pre-commit; then + chmod +x .git/hooks/pre-commit; + else + echo "********** Couldn't install git $hook hook **********"; + fi + } + fi + done + fi +} diff --git a/common/gst-indent b/common/gst-indent new file mode 100755 index 0000000..732b2ba --- /dev/null +++ b/common/gst-indent @@ -0,0 +1,49 @@ +#!/bin/sh +# +# Check that the code follows a consistant code style +# + +# Check for existence of indent, and error out if not present. +# On some *bsd systems the binary seems to be called gnunindent, +# so check for that first. + +version=`gnuindent --version 2>/dev/null` +if test "x$version" = "x"; then + version=`indent --version 2>/dev/null` + if test "x$version" = "x"; then + echo "GStreamer git pre-commit hook:" + echo "Did not find GNU indent, please install it before continuing." + exit 1 + fi + INDENT=indent +else + INDENT=gnuindent +fi + +case `$INDENT --version` in + GNU*) + ;; + default) + echo "GStreamer git pre-commit hook:" + echo "Did not find GNU indent, please install it before continuing." + echo "(Found $INDENT, but it doesn't seem to be GNU indent)" + exit 1 + ;; +esac + +INDENT_PARAMETERS="--braces-on-if-line \ + --case-brace-indentation0 \ + --case-indentation2 \ + --braces-after-struct-decl-line \ + --line-length80 \ + --no-tabs \ + --cuddle-else \ + --dont-line-up-parentheses \ + --continuation-indentation4 \ + --honour-newlines \ + --tab-size8 \ + --indent-level2 \ + --leave-preprocessor-space" + +$INDENT ${INDENT_PARAMETERS} $@ + diff --git a/common/gst.supp b/common/gst.supp new file mode 100644 index 0000000..c10005f --- /dev/null +++ b/common/gst.supp @@ -0,0 +1,3963 @@ +### this file contains suppressions for valgrind when running +### the gstreamer unit tests +### it might be useful for wider use as well + +### syscall suppressions + +{ + + Memcheck:Param + clone(parent_tidptr) + fun:clone + fun:clone +} + +{ + + Memcheck:Param + clone(child_tidptr) + fun:clone + fun:clone +} + +{ + + Memcheck:Param + clone(tlsinfo) + fun:clone + fun:clone +} + +### glibc suppressions + +{ + + Memcheck:Cond + obj:/lib/ld-2.*.so + fun:dl_open_worker + obj:/lib/ld-2.*.so + fun:_dl_open + fun:dlopen_doit + obj:/lib/ld-2.*.so + fun:_dlerror_run + fun:dlopen + fun:g_module_open + fun:gst_plugin_load_file +} + +{ + + Memcheck:Cond + fun:strlen + fun:fillin_rpath + fun:_dl_init_paths + fun:dl_main + fun:_dl_sysdep_start + fun:_dl_start + obj:/lib64/ld-2.*.so + obj:* + obj:* +} + +{ + + Memcheck:Cond + fun:_dl_relocate_object + fun:dl_main + fun:_dl_sysdep_start + fun:_dl_start +} + +{ + + Memcheck:Cond + fun:* + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen@@GLIBC_2.2.5 +} + +# glibc does not deallocate thread-local storage + +{ + + Memcheck:Leak + fun:calloc + fun:_dl_allocate_tls + fun:pthread_create@@* +} + +# I get an extra stack entry on x86/dapper +{ + + Memcheck:Leak + fun:calloc + obj:/lib/ld-2.3.*.so + fun:_dl_allocate_tls + fun:pthread_create@@* +} + + +{ + + Memcheck:Cond + fun:strstr + fun:__pthread_initialize_minimal + obj:/lib/libpthread-*.so + obj:/lib/libpthread-*.so + fun:call_init + fun:_dl_init + obj:/lib/ld-*.so +} + +# a thread-related free problem in glibc from Edgard +{ + __libc_freeres_rw_acess + Memcheck:Addr4 + obj:* + obj:* + obj:* + obj:* + obj:* + fun:__libc_freeres +} + +{ + + Memcheck:Cond + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so +} + +# g_module_open-related problems +{ + + Memcheck:Addr2 + fun:memcpy + fun:_dl_map_object_deps + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen@@GLIBC_2.1 + fun:g_module_open + fun:gst_plugin_load_file + fun:gst_registry_scan_path_level + fun:gst_registry_scan_path_level + fun:gst_registry_scan_path_level + fun:init_post + fun:g_option_context_parse + fun:gst_init_check + fun:gst_init + fun:gst_check_init + fun:main +} + +{ + + Memcheck:Addr4 + fun:memcpy + fun:_dl_map_object_deps + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen@@GLIBC_2.1 + fun:g_module_open + fun:gst_plugin_load_file + fun:gst_registry_scan_path_level + fun:gst_registry_scan_path_level + fun:gst_registry_scan_path_level + fun:init_post + fun:g_option_context_parse + fun:gst_init_check + fun:gst_init + fun:gst_check_init + fun:main +} + +{ + + Memcheck:Cond + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + fun:do_sym + fun:_dl_sym + fun:dlsym_doit + obj:/lib/ld-2.3.*.so + fun:_dlerror_run + fun:dlsym + fun:g_module_symbol + fun:g_module_open + fun:gst_plugin_load_file +} + +{ + + Memcheck:Cond + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + fun:dl_open_worker + obj:/lib/ld-2.3.*.so + fun:_dl_open + fun:dlopen_doit + obj:/lib/ld-2.3.*.so + fun:_dlerror_run + fun:dlopen@@GLIBC_2.1 + fun:g_module_open + fun:gst_plugin_load_file +} +{ + + Memcheck:Cond + obj:/lib/ld-2.3.*.so + fun:dl_open_worker + obj:/lib/ld-2.3.*.so + fun:_dl_open + fun:dlopen_doit + obj:/lib/ld-2.3.*.so + fun:_dlerror_run + fun:dlopen@@GLIBC_2.1 + fun:g_module_open + fun:gst_plugin_load_file + fun:gst_plugin_load_by_name + fun:gst_plugin_feature_load +} + +{ + + Memcheck:Leak + fun:malloc + obj:/lib/ld-2.3.*.so + fun:dl_open_worker + obj:/lib/ld-2.3.*.so + fun:_dl_open + fun:dlopen_doit + obj:/lib/ld-2.3.*.so + fun:_dlerror_run + fun:dlopen@@GLIBC_2.1 + fun:g_module_open + fun:gst_plugin_load_file + fun:gst_plugin_load_by_name +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + fun:dl_open_worker + obj:/lib/ld-2.3.*.so + fun:_dl_open + fun:dlopen_doit + obj:/lib/ld-2.3.*.so +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + fun:dl_open_worker + obj:/lib/ld-2.3.*.so + fun:_dl_open + fun:dlopen_doit + obj:/lib/ld-2.3.*.so + fun:_dlerror_run +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + fun:dl_open_worker + obj:/lib/ld-2.3.*.so + fun:_dl_open + fun:dlopen_doit + obj:/lib/ld-2.3.*.so + fun:_dlerror_run + fun:dlopen@@GLIBC_2.1 + fun:g_module_open +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + fun:dl_open_worker + obj:/lib/ld-2.3.*.so + fun:_dl_open + fun:dlopen_doit + obj:/lib/ld-2.3.*.so + fun:_dlerror_run + fun:dlopen@@GLIBC_2.1 + fun:g_module_open +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + fun:do_sym + fun:_dl_sym + fun:dlsym_doit + obj:/lib/ld-2.3.*.so + fun:_dlerror_run + fun:dlsym + fun:g_module_symbol + fun:g_module_open +} + +{ + + Memcheck:Param + futex(uaddr2) + fun:pthread_once + obj:/lib/libc-2.3.*.so + obj:/lib/libc-2.3.*.so + fun:mbsnrtowcs + fun:vfprintf + fun:vsprintf + fun:sprintf + obj:/lib/libc-2.3.*.so + fun:tmpfile + fun:setup_pipe + fun:setup_messaging_with_key + fun:setup_messaging +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen + fun:g_module_open +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libc-2.7.so + fun:_dl_sym + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlsym + fun:g_module_symbol + fun:g_module_open +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen + fun:g_module_open +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen + fun:g_module_open +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen + fun:g_module_open +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libc-2.7.so + obj:/lib/ld-2.7.so + fun:__libc_dlopen_mode +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libc-2.7.so + obj:/lib/ld-2.7.so + fun:__libc_dlopen_mode +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libc-2.7.so + obj:/lib/ld-2.7.so + fun:__libc_dlopen_mode + obj:/lib/i686/cmov/libc-2.7.so + obj:/lib/i686/cmov/libc-2.7.so + obj:/lib/i686/cmov/libc-2.7.so + obj:/lib/i686/cmov/libc-2.7.so + obj:/lib/i686/cmov/libc-2.7.so + fun:iconv_open +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libc-2.7.so + obj:/lib/ld-2.7.so + fun:__libc_dlopen_mode + obj:/lib/i686/cmov/libc-2.7.so + obj:/lib/i686/cmov/libc-2.7.so + obj:/lib/i686/cmov/libc-2.7.so + obj:/lib/i686/cmov/libc-2.7.so + obj:/lib/i686/cmov/libc-2.7.so + fun:iconv_open +} + +{ + + Memcheck:Addr8 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libc-2.7.so + obj:/lib/ld-2.7.so + fun:__libc_dlopen_mode + obj:/lib/libc-2.7.so + obj:/lib/libc-2.7.so + obj:/lib/libc-2.7.so + obj:/lib/libc-2.7.so + obj:/lib/libc-2.7.so + fun:iconv_open +} + +{ + + Memcheck:Addr8 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libc-2.7.so + obj:/lib/ld-2.7.so + fun:__libc_dlopen_mode + obj:/lib/libc-2.7.so + obj:/lib/libc-2.7.so + obj:/lib/libc-2.7.so + obj:/lib/libc-2.7.so + obj:/lib/libc-2.7.so + fun:iconv_open +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen +} + +{ + + Memcheck:Addr8 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libc-2.7.so + obj:/lib/ld-2.7.so + fun:__libc_dlopen_mode +} + +{ + + Memcheck:Cond + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen +} + +{ + + Memcheck:Cond + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen +} + +{ + + Memcheck:Cond + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen +} + +{ + + Memcheck:Cond + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen +} + +{ + + Memcheck:Cond + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen +} + +{ + + Memcheck:Cond + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen +} + +# suppression for a glibc bug: +# http://valgrind.org/docs/manual/faq.html#faq.exit_errors> +{ + + Memcheck:Free + fun:free + obj:*libc-*.so + fun:__libc_freeres + fun:* + fun:_Exit +} + +# same as above, just so it works for tpm on gutsy/x86-64 +{ + + Memcheck:Free + fun:free + fun:free_mem + fun:__libc_freeres +} + +# valgrind doesn't allow me to specify a suppression for Addr1, Addr2, Addr4 +# as Addr*, so 3 copies for that; and then 2 of each for that pesky memcpy +{ + + Memcheck:Addr1 + fun:_dl_signal_error + fun:_dl_map_object_deps + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen@@GLIBC_2.1 + fun:g_module_open +} + +{ + + Memcheck:Addr2 + fun:_dl_signal_error + fun:_dl_map_object_deps + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen@@GLIBC_2.1 + fun:g_module_open +} +{ + + Memcheck:Addr4 + fun:_dl_signal_error + fun:_dl_map_object_deps + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen@@GLIBC_2.1 + fun:g_module_open +} + +{ + + Memcheck:Addr1 + fun:memcpy + fun:_dl_signal_error + fun:_dl_map_object_deps + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen@@GLIBC_2.1 + fun:g_module_open +} + +{ + + Memcheck:Addr2 + fun:memcpy + fun:_dl_signal_error + fun:_dl_map_object_deps + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen@@GLIBC_2.1 + fun:g_module_open +} +{ + + Memcheck:Addr4 + fun:memcpy + fun:_dl_signal_error + fun:_dl_map_object_deps + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen@@GLIBC_2.1 + fun:g_module_open +} + +{ + + Memcheck:Addr8 + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/libc-2.3.*.so + obj:/lib/ld-2.3.*.so + fun:_dl_open + obj:/lib/libdl-2.3.*.so + obj:/lib/ld-2.3.*.so +} + +{ + + Memcheck:Cond + obj:/lib/ld-2.3.*.so + obj:/lib/libc-2.3.*.so + obj:/lib/ld-2.3.*.so + fun:_dl_open + obj:/lib/libdl-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/libdl-2.3.*.so + fun:dlopen + fun:g_module_open + fun:gst_plugin_load_file + fun:gst_plugin_load_by_name + fun:gst_plugin_feature_load +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.3.6.so + obj:/lib/ld-2.3.6.so + obj:/lib/tls/i686/cmov/libc-2.3.6.so + obj:/lib/ld-2.3.6.so + fun:_dl_open + obj:/lib/tls/i686/cmov/libdl-2.3.6.so + obj:/lib/ld-2.3.6.so + obj:/lib/tls/i686/cmov/libdl-2.3.6.so + fun:dlopen +} + +{ + + Memcheck:Cond + obj:/lib/ld-2.3.6.so + obj:/lib/tls/i686/cmov/libc-2.3.6.so + obj:/lib/ld-2.3.6.so + fun:_dl_open + obj:/lib/tls/i686/cmov/libdl-2.3.6.so + obj:/lib/ld-2.3.6.so + obj:/lib/tls/i686/cmov/libdl-2.3.6.so + fun:dlopen +} + +{ + + Memcheck:Cond + obj:/lib/ld-2.3.6.so + obj:/lib/ld-2.3.6.so + obj:/lib/ld-2.3.6.so + obj:/lib/tls/i686/cmov/libc-2.3.6.so + obj:/lib/ld-2.3.6.so + fun:_dl_open + obj:/lib/tls/i686/cmov/libdl-2.3.6.so + obj:/lib/ld-2.3.6.so + obj:/lib/tls/i686/cmov/libdl-2.3.6.so + fun:dlopen +} + +### glib suppressions +{ + + Memcheck:Cond + fun:g_parse_debug_string + obj:/usr/lib*/libglib-2.0.so.* + fun:g_slice_alloc + fun:g_slice_alloc0 +} + +{ + + Memcheck:Leak + fun:*alloc + ... + fun:g_type_init* + fun:init_pre +} + +{ + + Memcheck:Leak + fun:*alloc + ... + fun:g_type_register_fundamental +} + +{ + + Memcheck:Leak + fun:malloc + fun:realloc + fun:g_realloc + fun:type_node_any_new_W +} + +{ + + Memcheck:Leak + fun:realloc + fun:g_realloc + fun:type_node_any_new_W +} + +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:g_type_class_ref +} + +{ + + Memcheck:Leak + fun:malloc + fun:realloc + fun:g_realloc + fun:type_add_flags_W +} + +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:type_add_flags_W +} + +#pthread memleaks + +{ + Thread creation leak + Memcheck:Leak + fun:calloc + fun:allocate_dtv + fun:_dl_allocate* + fun:_dl_allocate* + fun:__pthread_initialize_minimal +} + +{ + Thread management leak + Memcheck:Leak + fun:calloc + fun:allocate_dtv + fun:_dl_allocate* + fun:_dl_allocate* + fun:__pthread_* +} + +{ + Thread management leak 2 + Memcheck:Leak + fun:memalign + fun:_dl_allocate* + fun:_dl_allocate* + fun:__pthread_* +} + +{ + pthread_create Syscall param write(buf) points to uninitialised byte(s) + Memcheck:Param + write(buf) + fun:pthread_create@@GLIBC_2.2.5 + fun:g_thread_create* + +} + +# nss_parse_* memleak (used by g_option_context_parse) +{ + nss_parse_* memleak + Memcheck:Leak + fun:malloc + fun:nss_parse_service_list + fun:__nss_database_lookup +} + +# liboil suppressions +{ + + Memcheck:Value8 + obj:/usr/lib/liboil-0.3.so.0.1.0 + obj:/usr/lib/liboil-0.3.so.0.1.0 + obj:/usr/lib/liboil-0.3.so.0.1.0 + fun:oil_cpu_fault_check_try + fun:oil_test_check_impl + fun:oil_class_optimize + fun:oil_optimize_all + fun:oil_init +} + +{ + + Memcheck:Addr8 + obj:/lib/ld-2.3.6.so +} + +{ + + Memcheck:Param + futex(uaddr2) + fun:pthread_once + obj:/lib/libc-2.3.6.so + obj:/lib/libc-2.3.6.so + fun:setlocale + fun:init_pre + fun:g_option_context_parse + fun:gst_init_check + fun:gst_init + fun:gst_check_init + fun:main +} + +{ + + Memcheck:Cond + obj:/lib/ld-2.3.6.so + obj:/lib/ld-2.3.6.so + fun:_dl_open + obj:/lib/libdl-2.3.6.so + obj:/lib/ld-2.3.6.so + obj:/lib/libdl-2.3.6.so + fun:dlopen + fun:g_module_open + fun:gst_plugin_load_file +} +# this exists in a bunch of different variations, hence the short tail/trace +{ + + Memcheck:Addr4 + obj:/lib/ld-2.4.so + obj:/lib/ld-2.4.so +} +{ + + Memcheck:Addr8 + obj:/lib/ld-2.4.so + obj:/lib/ld-2.4.so +} + +# More edgy suppressions (Mike) +{ + + Memcheck:Cond + obj:/lib/ld-2.4.so + obj:/lib/ld-2.4.so + obj:/lib/ld-2.4.so + obj:/lib/ld-2.4.so + fun:dlopen_doit + obj:/lib/ld-2.4.so + fun:_dlerror_run + fun:dlopen@@GLIBC_2.1 +} + +{ + + Memcheck:Cond + obj:/lib/ld-2.4.so + obj:/lib/ld-2.4.so + obj:/lib/ld-2.4.so + obj:/lib/ld-2.4.so + obj:/lib/ld-2.4.so + obj:/lib/ld-2.4.so + fun:dlopen_doit + obj:/lib/ld-2.4.so + fun:_dlerror_run + fun:dlopen@@GLIBC_2.1 +} + +{ + + Memcheck:Cond + obj:/lib/ld-2.4.so + obj:/lib/ld-2.4.so + obj:/lib/ld-2.4.so + fun:do_sym + fun:_dl_sym +} + +# This one's overly general, but there's zero other information in the stack +# trace - just these five lines! +{ + + Memcheck:Cond + obj:/lib/ld-2.4.so + obj:/lib/ld-2.4.so + obj:/lib/ld-2.4.so + obj:/lib/ld-2.4.so + obj:/lib/ld-2.4.so +} + +{ + + Memcheck:Leak + fun:calloc + obj:/lib/ld-2.4.so + fun:_dl_allocate_tls + fun:pthread_create@@GLIBC_2.1 +} + +# TLS leaks for feisty/x86 +{ + + Memcheck:Leak + fun:calloc + fun:allocate_dtv + fun:_dl_allocate_tls + fun:pthread_create@@GLIBC_2.1 +} + +{ + + Memcheck:Leak + fun:calloc + obj:/usr/lib/libcdio.so.6.0.1 + fun:cdio_open_am_linux + obj:/usr/lib/libcdio.so.6.0.1 + fun:cdio_open_am +} + +{ + + Memcheck:Addr8 + obj:/lib/ld-2.5.so +} + +{ + + Memcheck:Cond + fun:snd_pcm_direct_shm_create_or_connect + fun:snd_pcm_dsnoop_open + fun:_snd_pcm_dsnoop_open + obj:/*lib/libasound.so.2.0.0 + obj:/*lib/libasound.so.2.0.0 + fun:snd_pcm_open_slave + fun:_snd_pcm_plug_open + obj:/*lib/libasound.so.2.0.0 + fun:snd_pcm_open_slave + fun:_snd_pcm_asym_open + obj:/*lib/libasound.so.2.0.0 + obj:/*lib/libasound.so.2.0.0 +} + +{ + + Memcheck:Cond + fun:snd*_pcm_hw_param_set_near +} + +{ + + Memcheck:Cond + ... + fun:snd*_pcm_hw_param_set_near +} + +{ + + Memcheck:Cond + obj:/*lib/libasound.so.2.0.0 + obj:/*lib/libasound.so.2.0.0 + fun:snd_pcm_close + obj:/*lib/libasound.so.2.0.0 +} +{ + + Memcheck:Cond + fun:snd_pcm_direct_shm_create_or_connect + fun:snd_pcm_dmix_open + fun:_snd_pcm_dmix_open + obj:/*lib/libasound.so.2.0.0 + obj:/*lib/libasound.so.2.0.0 + fun:snd_pcm_open_slave + fun:_snd_pcm_softvol_open + obj:/*lib/libasound.so.2.0.0 + fun:snd_pcm_open_slave + fun:_snd_pcm_plug_open + obj:/*lib/libasound.so.2.0.0 + fun:snd_pcm_open_slave + fun:_snd_pcm_asym_open + obj:/*lib/libasound.so.2.0.0 + obj:/*lib/libasound.so.2.0.0 +} +{ + + Memcheck:Leak + fun:malloc + fun:strdup + fun:snd_dlobj_cache_add + obj:/*lib/libasound.so.2.0.0 + fun:snd_pcm_open_slave + fun:snd_pcm_dsnoop_open + fun:_snd_pcm_dsnoop_open + obj:/*lib/libasound.so.2.0.0 + obj:/*lib/libasound.so.2.0.0 + fun:snd_pcm_open_slave + fun:_snd_pcm_plug_open + obj:/*lib/libasound.so.2.0.0 + fun:snd_pcm_open_slave + fun:_snd_pcm_asym_open + obj:/*lib/libasound.so.2.0.0 + obj:/*lib/libasound.so.2.0.0 +} +# Catch about 15 variations on inserting info into an ALSA +# internal cache +{ + + Memcheck:Leak + fun:malloc + ... + fun:snd*_dlobj_cache_add + obj:/*lib*/libasound.so.2.0.0 +} + +{ + + Memcheck:Leak + fun:*alloc + ... + fun:snd_pcm_open_conf +} + +{ + + Memcheck:Leak + fun:*alloc + obj:/*lib*/libasound.so.2.0.0 + ... + fun:snd_config_hook_load +} + +{ + + Memcheck:Leak + fun:*alloc + obj:/*lib*/libasound.so.2.0.0 + ... + fun:snd_config_update_r + fun:snd_config_update +} +{ + + Memcheck:Leak + fun:*alloc + fun:strdup + ... + fun:snd_config_update_r + fun:snd_config_update +} +{ + + Memcheck:Leak + fun:malloc + obj:/lib/libc*.so + fun:__nss_database_lookup + obj:* + obj:* + fun:getgrnam_r + fun:getgrnam + fun:snd_pcm_direct_parse_open_conf +} + +{ + + Memcheck:Leak + fun:calloc + fun:_XCBInitDisplayLock + fun:XOpenDisplay +} + +# GConf internal initialisations related to getting the default client. +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc_tcval + obj:/usr/lib/libORBit-2.so.* + fun:ORBit_demarshal_IOR + fun:ORBit_demarshal_object + fun:CORBA_ORB_string_to_object + obj:/usr/lib/libgconf-2.so.* + fun:gconf_get_current_lock_holder + fun:gconf_activate_server + obj:/usr/lib/libgconf-2.so.* + obj:/usr/lib/libgconf-2.so.* + fun:gconf_engine_get_default +} +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc_tcval + obj:* + fun:PortableServer_POA_servant_to_reference + fun:* + fun:* + fun:* + fun:gconf_engine_get_default +} +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc_tcval + obj:/usr/lib/libORBit-2.so.* + fun:ORBit_demarshal_IOR + fun:ORBit_demarshal_object + fun:CORBA_ORB_string_to_object + obj:/usr/lib/libgconf-2.so.* + fun:gconf_get_current_lock_holder + fun:gconf_activate_server + obj:/usr/lib/libgconf-2.so.* + obj:/usr/lib/libgconf-2.so.* + fun:gconf_engine_get_default +} +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc* + fun:* + fun:ORBit_demarshal_IOR + fun:ORBit_demarshal_object + fun:ORBit_demarshal_value + fun:* + fun:ORBit_small_invoke_stub + fun:ConfigServer_get_default_database + fun:* + fun:gconf_engine_get_default +} +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc* + fun:* + fun:IOP_generate_profiles + fun:ORBit_marshal_object + fun:ORBit_marshal_value + fun:* + fun:ORBit_small_invoke_stub + fun:ConfigServer_add_client + fun:* + fun:* + fun:gconf_engine_get_default +} +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc_by_tc + fun:* + fun:PortableServer_POA_servant_to_reference + fun:* + fun:* + fun:* + fun:gconf_engine_get_default +} +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc_by_tc + obj:/usr/lib/libORBit-2.so.* + fun:ORBit_demarshal_IOR + fun:ORBit_demarshal_object + fun:CORBA_ORB_string_to_object + obj:/usr/lib/libgconf-2.so.* + fun:gconf_get_current_lock_holder + fun:gconf_activate_server + obj:/usr/lib/libgconf-2.so.* + obj:/usr/lib/libgconf-2.so.* + fun:gconf_engine_get_default +} + +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc* + fun:* + fun:ORBit_demarshal_IOR + fun:ORBit_demarshal_object + fun:* + fun:* + fun:gconf_activate_server +} + +# Some libORBit/bonobo initialisation stuff +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:ORBit_alloc_string + fun:CORBA_string_dup + fun:Bonobo_ActivationEnvValue_set + fun:bonobo_activation_init_activation_env + fun:bonobo_activation_orb_init + fun:bonobo_activation_init +} +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc* + fun:ORBit_small_alloc* + obj:/usr/lib/libORBit-2.so* + fun:PortableServer_POA_servant_to_reference + obj:/usr/lib/libbonobo-2.so* +} +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc_tcval + fun:ORBit_small_allocbuf + fun:ORBit_adaptor_setup + obj:/usr/lib/libORBit-2.so* + fun:ORBit_POA_setup_root + fun:ORBit_init_internals + fun:CORBA_ORB_init +} +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc_tcval + fun:ORBit_adaptor_setup + fun:* + fun:ORBit_POA_setup_root + fun:ORBit_init_internals + fun:CORBA_ORB_init +} +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc* + fun:ORBit_small_allocbuf + fun:bonobo_activation_init_activation_env + fun:bonobo_activation_orb_init + fun:bonobo_activation_init +} + +# More GConf stuff from the FC5 buildbot, mostly variations on the +# above stack traces +{ + + Memcheck:Param + writev(vector[...]) + fun:writev + obj:/usr/lib/libORBit-2.so* + fun:link_connection_writev + fun:giop_send_buffer_write + obj:/usr/lib/libORBit-2.so* + fun:ORBit_small_invoke_stub + fun:ORBit_small_invoke_stub_n + fun:ORBit_c_stub_invoke + fun:ConfigServer_ping + fun:gconf_activate_server + obj:/usr/lib/libgconf-2.so* + obj:/usr/lib/libgconf-2.so* + fun:gconf_engine_get_default +} +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc* + fun:ORBit_small_alloc* + obj:/usr/lib/libORBit-2.so* + fun:PortableServer_POA_servant_to_reference + obj:/usr/lib/libgconf-2.so* + obj:/usr/lib/libgconf-2.so* + obj:/usr/lib/libgconf-2.so* + fun:gconf_engine_get_default +} +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc* + fun:ORBit_small_alloc + obj:/usr/lib/libORBit-2.so* + fun:ORBit_demarshal_IOR + fun:ORBit_demarshal_object + fun:CORBA_ORB_string_to_object + obj:/usr/lib/libgconf-2.so* + fun:gconf_get_current_lock_holder + fun:gconf_activate_server + obj:/usr/lib/libgconf-2.so* + obj:/usr/lib/libgconf-2.so* + fun:gconf_engine_get_default +} +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc* + fun:ORBit_small_alloc* + obj:/usr/lib/libORBit-2.so* + fun:ORBit_demarshal_IOR + fun:ORBit_demarshal_object + fun:CORBA_ORB_string_to_object + obj:/usr/lib/libgconf-2.so* + fun:gconf_get_current_lock_holder + fun:gconf_activate_server + obj:/usr/lib/libgconf-2.so* + obj:/usr/lib/libgconf-2.so* + fun:gconf_engine_get_default +} +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc* + fun:ORBit_small_alloc* + obj:/usr/lib/libORBit-2.so* + fun:ORBit_demarshal_IOR + fun:ORBit_demarshal_object + fun:ORBit_demarshal_value + obj:/usr/lib/libORBit-2.so* + fun:ORBit_small_invoke_stub + fun:ORBit_small_invoke_stub_n + fun:ORBit_c_stub_invoke + fun:ConfigServer_get_default_database + obj:/usr/lib/libgconf-2.so* + fun:gconf_engine_get_default +} +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc* + fun:ORBit_small_alloc* + obj:/usr/lib/libORBit-2.so* + fun:ORBit_OAObject_object_to_objkey + fun:IOP_generate_profiles + fun:ORBit_marshal_object + fun:ORBit_marshal_value + obj:/usr/lib/libORBit-2.so* + fun:ORBit_small_invoke_stub + fun:ORBit_small_invoke_stub_n + fun:ORBit_c_stub_invoke + fun:ConfigServer_add_client + obj:/usr/lib/libgconf-2.so* + obj:/usr/lib/libgconf-2.so* + fun:gconf_engine_get_default +} +{ + + Memcheck:Leak + fun:malloc + obj:*libc-*.so + fun:__nss_database_lookup + obj:* + obj:* + fun:getpwnam_r + obj:/usr/lib*/libglib-2.0.so.* + fun:g_get_home_dir +} +{ + + Memcheck:Leak + fun:malloc + obj:*libc-*.so + fun:__nss_database_lookup + obj:* + obj:* + fun:getpwnam_r + obj:/usr/lib*/libglib-2.0.so.* + fun:g_get_user_name +} +{ + + Memcheck:Leak + fun:malloc + obj:*libc-*.so + fun:__nss_database_lookup + obj:* + obj:* + fun:getpwnam_r + obj:/usr/lib*/libglib-2.0.so.* + fun:g_get_tmp_dir +} + +{ + + Memcheck:Leak + fun:malloc + obj:*libc-*.so + fun:__nss_database_lookup + obj:* + obj:* + fun:getpwnam_r + obj:/usr/lib*/libglib-2.0.so.0.* + fun:g_get_host_name +} + + +## Some Fontconfig errors. +{ + + Memcheck:Leak + fun:malloc + fun:FcPatternObjectInsertElt + fun:FcPatternObjectAddWithBinding + fun:FcPatternAppend + fun:FcEndElement + obj:/usr/lib/libexpat.so.* + obj:/usr/lib/libexpat.so.* + obj:/usr/lib/libexpat.so.* + obj:/usr/lib/libexpat.so.* + fun:XML_ParseBuffer + fun:FcConfigParseAndLoad + fun:FcConfigParseAndLoad + fun:FcParseInclude + fun:FcEndElement + obj:/usr/lib/libexpat.so.* + obj:/usr/lib/libexpat.so.* + obj:/usr/lib/libexpat.so.* + obj:/usr/lib/libexpat.so.* + fun:XML_ParseBuffer + fun:FcConfigParseAndLoad +} +{ + + Memcheck:Leak + fun:*alloc + ... + fun:FcInitLoadConfig +} + +# Issues with ubuntu Hardy, same crack as for previous ubuntus +{ + + Memcheck:Leak + fun:calloc + obj:* + fun:_dl_allocate_tls + fun:pthread_create@@* + obj:/usr/lib/libgthread* + fun:g_thread_* +} + +# I've made this version generic, so that it covers future modifications +# of library names +{ + + Memcheck:Leak + fun:calloc + obj:* + fun:_dl_allocate_tls + fun:pthread_create@@* + fun:g_thread_* +} + +# series of invalid read of size 4 in g_module_open for ubuntu +# hardy x86/32bit +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/tls/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/tls/i686/cmov/libdl-2.7.so + fun:dlopen + fun:g_module_open + fun:gst_plugin_load_* +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/tls/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/tls/i686/cmov/libdl-2.7.so + fun:dlopen + fun:g_module_open + fun:gst_plugin_load_* +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/tls/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/tls/i686/cmov/libdl-2.7.so + fun:dlopen + fun:g_module_open + fun:gst_plugin_load_* +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/tls/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/tls/i686/cmov/libdl-2.7.so + fun:dlopen + fun:g_module_open + fun:gst_plugin_load_* +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/tls/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/tls/i686/cmov/libdl-2.7.so + fun:dlopen + fun:g_module_open + fun:gst_plugin_load* +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/tls/i686/cmov/libc-2.7.so + fun:_dl_sym + obj:/lib/tls/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/tls/i686/cmov/libdl-2.7.so + fun:dlsym + fun:g_module_symbol + fun:g_module_open + fun:gst_plugin_load_* +} + +# series of invalid read of size 8 in g_module_open for ubuntu +# hardy x86/64bit +{ + + Memcheck:Addr8 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libdl-2.7.so + fun:dlopen + fun:g_module_open +} + +{ + + Memcheck:Addr8 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libdl-2.7.so + fun:dlopen + fun:g_module_open +} + +{ + + Memcheck:Addr8 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libdl-2.7.so + fun:dlopen + fun:g_module_open +} + +{ + + Memcheck:Addr8 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libdl-2.7.so + fun:dlopen + fun:g_module_open +} + +{ + + Memcheck:Addr8 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libdl-2.7.so + fun:dlopen + fun:g_module_open +} + +{ + + Memcheck:Addr8 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libdl-2.7.so + fun:dlopen + fun:g_module_open +} + +{ + + Memcheck:Addr8 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libc-2.7.so + obj:/lib/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libdl-2.7.so + fun:dlsym + fun:g_module_symbol + fun:g_module_open +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/tls/i686/cmov/libc-2.7.so + obj:/lib/ld-2.7.so + fun:__libc_dlopen_mode + fun:__nss_lookup_function + obj:/lib/tls/i686/cmov/libc-2.7.so + fun:__nss_passwd_lookup + fun:getpwnam_r +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/tls/i686/cmov/libc-2.7.so + obj:/lib/ld-2.7.so + fun:__libc_dlopen_mode + fun:__nss_lookup_function + obj:/lib/tls/i686/cmov/libc-2.7.so + fun:__nss_passwd_lookup + fun:getpwnam_r +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/tls/i686/cmov/libc-2.7.so + obj:/lib/ld-2.7.so + fun:__libc_dlopen_mode + fun:__nss_lookup_function + obj:/lib/tls/i686/cmov/libnss_compat-2.7.so + fun:_nss_compat_getpwnam_r + fun:getpwnam_r +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/tls/i686/cmov/libc-2.7.so + obj:/lib/ld-2.7.so + fun:__libc_dlopen_mode + fun:__nss_lookup_function + obj:/lib/tls/i686/cmov/libnss_compat-2.7.so + fun:_nss_compat_getpwnam_r + fun:getpwnam_r +} + +{ + + Memcheck:Addr8 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libc-2.7.so + obj:/lib/ld-2.7.so + fun:__libc_dlopen_mode + fun:__nss_lookup_function + obj:/lib/libc-2.7.so + fun:getpwnam_r +} + +## Leaks in ALSA (variations of leak from snd_config_load1) + +{ + + Memcheck:Leak + fun:calloc + fun:_snd_config_make + fun:_snd_config_make_add + fun:* + fun:* + fun:* + fun:* + fun:snd_config_load1 +} + +{ + + Memcheck:Leak + fun:calloc + fun:_snd_config_make + fun:_snd_config_make_add + fun:* + fun:* + fun:snd_config_load1 +} +{ + + Memcheck:Leak + fun:calloc + fun:_snd_config_make + fun:_snd_config_make_add + fun:* + fun:* + fun:* + fun:snd_config_load1 +} +{ + + Memcheck:Leak + fun:calloc + fun:_snd_config_make + fun:_snd_config_make_add + fun:* + fun:* + fun:* + fun:* + fun:* + fun:snd_config_load1 +} + +{ + + Memcheck:Leak + fun:calloc + fun:_snd_config_make + fun:_snd_config_make_add + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:snd_config_load1 +} + +{ + + Memcheck:Leak + fun:calloc + fun:_snd_config_make + fun:_snd_config_make_add + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:snd_config_load1 +} +{ + + Memcheck:Leak + fun:calloc + fun:_snd_config_make + fun:_snd_config_make_add + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:snd_config_load1 +} + +{ + + Memcheck:Leak + fun:malloc + fun:snd1_dlobj_cache_add + fun:snd_ctl_open_noupdate +} + +{ + + Memcheck:Leak + fun:malloc + fun:* + fun:snd1_dlobj_cache_add + fun:snd_ctl_open_noupdate +} + +{ + + Memcheck:Leak + fun:*alloc + fun:* + fun:* + fun:* + fun:snd_config_load1 +} + +{ + + Memcheck:Leak + fun:*alloc + fun:* + fun:* + fun:* + fun:* + fun:snd_config_load1 +} + +{ + + Memcheck:Leak + fun:*alloc + fun:* + fun:* + fun:* + fun:* + fun:* + fun:snd_config_load1 +} + +{ + + Memcheck:Leak + fun:*alloc + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:snd_config_load1 +} + +{ + + Memcheck:Leak + fun:*alloc + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:snd_config_load1 +} + +{ + + Memcheck:Leak + fun:*alloc + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:snd_config_load1 +} + +{ + + Memcheck:Leak + fun:*alloc + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:snd_config_load1 +} + +{ + + Memcheck:Leak + fun:*alloc + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:snd_config_load1 +} + + +# The following are leaks of caps that need to be created dynamically +# in the type registration of the plugin (used for pad templates). + +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_slice_alloc + fun:gst_caps_new_empty + fun:gst_caps_new_simple + fun:* + fun:g_type_class_ref + fun:gst_element_register +} + +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_slice_alloc + fun:gst_caps_new_empty + fun:* + fun:* + fun:g_type_class_ref + fun:gst_element_register + fun:gst_ogm_parse_plugin_init + fun:plugin_init +} + +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_slice_alloc + fun:gst_caps_new_empty + fun:gst_caps_copy + fun:gst_video_test_src_base_init + fun:g_type_class_ref + fun:gst_element_register +} + +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_slice_alloc + fun:gst_caps_new_empty + fun:gst_caps_copy + fun:gst_video_test_src_getcaps + fun:gst_video_test_src_base_init + fun:g_type_class_ref + fun:gst_element_register +} + +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_slice_alloc + fun:gst_caps_new_empty + fun:gst_ffmpegcsp_codectype_to_caps + fun:gst_ffmpegcolorspace_register + fun:plugin_init +} + +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_slice_alloc + fun:gst_caps_new_empty + fun:gst_caps_copy + fun:gst_ffmpegcolorspace_register + fun:plugin_init +} + +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_slice_alloc + fun:gst_caps_new_empty + fun:gst_caps_new_any + fun:gst_ffmpegdemux_register + fun:plugin_init +} + +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_slice_alloc + fun:gst_caps_new_empty + fun:gst_caps_copy + fun:gst_audio_filter_class_add_pad_templates +} + +{ + + Memcheck:Leak + fun:realloc + fun:g_realloc + fun:g_ptr_array_maybe_expand + fun:g_ptr_array_add + fun:gst_caps_append + fun:gst_audio_filter_class_add_pad_templates +} + +{ + + Memcheck:Leak + fun:malloc + fun:realloc + fun:g_realloc + fun:g_ptr_array_maybe_expand + fun:g_ptr_array_add + fun:gst_caps_append + fun:gst_audio_filter_class_add_pad_templates +} + +{ + + Memcheck:Leak + fun:malloc + fun:realloc + fun:g_realloc + fun:g_ptr_array_maybe_expand + fun:g_ptr_array_add + fun:gst_caps_copy + fun:gst_audio_filter_class_add_pad_templates +} + +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_slice_alloc + fun:g_ptr_array_sized_new + fun:gst_caps_new_empty + fun:gst_caps_copy + fun:gst_audio_filter_class_add_pad_templates +} +{ + + Memcheck:Leak + fun:malloc + fun:realloc + fun:g_realloc + fun:g_array_maybe_expand + fun:g_array_sized_new + fun:* + fun:* + fun:* + fun:gst_value_init_and_copy + fun:gst_structure_copy + fun:gst_caps_copy + fun:gst_audio_filter_class_add_pad_templates +} +{ + + Memcheck:Leak + fun:malloc + fun:realloc + fun:g_realloc + fun:g_array_maybe_expand + fun:g_array_sized_new + fun:* + fun:gst_structure_copy + fun:gst_caps_copy + fun:gst_audio_filter_class_add_pad_templates +} +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_slice_alloc + fun:g_array_sized_new + fun:* + fun:gst_structure_copy + fun:gst_caps_copy + fun:gst_audio_filter_class_add_pad_templates +} + +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_slice_alloc + fun:gst_caps_new_empty + fun:gst_riff_create_*_template_caps +} +{ + + Memcheck:Leak + fun:malloc + fun:realloc + fun:g_realloc + fun:* + fun:* + fun:* + fun:gst_structure_copy + fun:gst_caps_copy + fun:gst_caps_append + fun:gst_riff_create_*_template_caps +} +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_slice_alloc + fun:g_array_sized_new + fun:* + fun:gst_structure_copy + fun:gst_caps_copy + fun:gst_caps_append + fun:gst_riff_create_*_template_caps +} + +## Leaks in pango (bilboed: gentoo unstable amd64) + +{ + + Memcheck:Leak + fun:*alloc + ... + fun:pango_layout_get_pixel_extents +} +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:pango_language_from_string + fun:pango_language_get_default + fun:pango_context_init + fun:g_type_create_instance + fun:g_object_constructor + fun:g_object_newv + fun:g_object_new_valist + fun:g_object_new + fun:pango_font_map_create_context +} + +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:pango_language_from_string +} + + +## Leak of property_list in gstffmpegcfg.c +## This list is created in gst_ffmpegcsp_init(), called from +## gst_ffmpegenc_register. +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_slice_alloc + fun:g_datalist_id_set_data_full + fun:gst_ffmpeg_cfg_init + fun:gst_ffmpegenc_register + fun:plugin_init +} +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_slice_alloc + fun:g_datalist_id_set_data_full + fun:g_param_spec_set_qdata_full + fun:gst_ffmpeg_cfg_init + fun:gst_ffmpegenc_register + fun:plugin_init +} + + +{ + + Memcheck:Leak + fun:*alloc + fun:* + fun:gst_ffmpeg_cfg_init + fun:gst_ffmpegenc_register +} + +## Leak of GIO module through gnomevfs + +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:* + fun:* + fun:g_type_create_instance + fun:* + fun:* + fun:* + fun:* + fun:g_io_module_new + fun:g_io_modules_load_all_in_directory + fun:* + fun:get_default_vfs +} + +## Conditional jump in getaddrinfo (bilboed, gentoo ~amd64, Dec 13 2008) +{ + + Memcheck:Cond + fun:gaih_inet + fun:getaddrinfo +} + +## Dynamic pad templates in mxfmux +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_slice_alloc + fun:gst_caps_new_empty + fun:gst_caps_from_string + fun:mxf_*_init + fun:plugin_init +} + +## We don't know if ffmpeg frees this or not and better pass a copy for safety +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_strdup + fun:gst_ffmpeg_cfg_fill_context + fun:gst_ffmpegenc_setcaps + fun:gst_pad_set_caps +} + +## Leak/overreads with glibc-2.10 + +{ + + Memcheck:Value8 + fun:do_sym + fun:dlsym_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlsym +} +{ + + Memcheck:Cond + fun:do_sym + fun:dlsym_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlsym +} + +{ + + Memcheck:Value8 + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen* +} + +{ + + Memcheck:Value8 + fun:_dl_relocate_object + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen* +} + +{ + + Memcheck:Value8 + fun:_dl_check_map_versions + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen* +} + +{ + + Memcheck:Cond + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen* +} + +{ + + Memcheck:Cond + fun:_dl_relocate_object + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen* +} + +{ + + Memcheck:Cond + fun:_dl_check_map_versions + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen* +} + +{ + + Memcheck:Cond + fun:_dl_map_object* + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen* +} + +{ + + Memcheck:Value8 + fun:_dl_map_object* + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen* +} + +{ + + Memcheck:Value8 + fun:_dl_check_caller + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen* +} + +{ + + Memcheck:Cond + fun:_dl_check_caller + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen* +} + +{ + + Memcheck:Value8 + obj:/lib*/libc-2.10.*.so + obj:/lib*/libc-2.10.*.so + fun:_vgnU_freeres +} +{ + + Memcheck:Cond + obj:/lib*/libc-2.10.*.so + obj:/lib*/libc-2.10.*.so + fun:_vgnU_freeres +} +{ + + Memcheck:Free + fun:free + obj:/lib*/libc-2.10.*.so + obj:/lib*/libc-2.10.*.so + fun:_vgnU_freeres +} + +{ + + Memcheck:Value8 + fun:_dl_fini + fun:__run_exit_handlers + fun:exit +} + +{ + + Memcheck:Cond + fun:_dl_fini + fun:__run_exit_handlers + fun:exit +} +{ + + Memcheck:Value8 + fun:_dl_sort_fini + fun:_dl_fini + fun:__run_exit_handlers + fun:exit +} + +{ + + Memcheck:Cond + fun:_dl_sort_fini + fun:_dl_fini + fun:__run_exit_handlers + fun:exit +} + +# glibc-2.10 dl overreads +{ + + Memcheck:Value8 + fun:_dl_fixup + fun:_dl_runtime_resolve +} +{ + + Memcheck:Cond + fun:_dl_fixup + fun:_dl_runtime_resolve +} + +{ + + Memcheck:Value8 + fun:_dl_lookup_symbol_x + fun:_dl_fixup + fun:_dl_runtime_resolve +} +{ + + Memcheck:Cond + fun:_dl_lookup_symbol_x + fun:_dl_fixup + fun:_dl_runtime_resolve +} +{ + + Memcheck:Value8 + fun:call_init + fun:_dl_init +} +{ + + Memcheck:Value8 + fun:_dl_init +} +{ + + Memcheck:Value8 + fun:do_lookup_x + fun:_dl_lookup_symbol_x + fun:_dl_relocate_object + fun:dl_main +} +{ + + Memcheck:Cond + fun:do_lookup_x + fun:_dl_lookup_symbol_x + fun:_dl_relocate_object + fun:dl_main +} +{ + + Memcheck:Value8 + fun:_dl_lookup_symbol_x + fun:_dl_relocate_object + fun:dl_main +} +{ + + Memcheck:Value8 + fun:_dl_relocate_object + fun:dl_main +} +{ + + Memcheck:Value8 + fun:dl_main + fun:_dl_sysdep_start + fun:_dl_start +} +{ + + Memcheck:Cond + fun:dl_main + fun:_dl_sysdep_start + fun:_dl_start +} + +{ + + Memcheck:Cond + fun:* + fun:do_lookup_x + fun:_dl_lookup_symbol_x + fun:_dl_relocate_object + fun:dl_main +} + +{ + + Memcheck:Value8 + fun:* + fun:do_lookup_x + fun:_dl_lookup_symbol_x + fun:_dl_relocate_object + fun:dl_main +} + +{ + + Memcheck:Value8 + fun:_dl_check_map_versions + fun:_dl_check_all_versions + fun:version_check_doit + fun:_dl_receive_error + fun:dl_main +} + +{ + + Memcheck:Cond + fun:_dl_check_map_versions + fun:_dl_check_all_versions + fun:version_check_doit + fun:_dl_receive_error + fun:dl_main +} + +{ + + Memcheck:Value8 + fun:_dl_check_all_versions + fun:version_check_doit + fun:_dl_receive_error + fun:dl_main +} + +{ + + Memcheck:Cond + fun:_dl_check_all_versions + fun:version_check_doit + fun:_dl_receive_error + fun:dl_main +} + +{ + + Memcheck:Value8 + fun:* + fun:_dl_check_map_versions + fun:_dl_check_all_versions + fun:version_check_doit + fun:_dl_receive_error + fun:dl_main +} +{ + + Memcheck:Cond + fun:* + fun:_dl_check_map_versions + fun:_dl_check_all_versions + fun:version_check_doit + fun:_dl_receive_error + fun:dl_main +} + +{ + + Memcheck:Value8 + fun:init_tls + fun:dl_main +} +{ + + Memcheck:Cond + fun:init_tls + fun:dl_main +} + +{ + + Memcheck:Cond + fun:_dl_map_object_deps + fun:dl_main +} +{ + + Memcheck:Value8 + fun:_dl_map_object_deps + fun:dl_main +} + +{ + + Memcheck:Value8 + fun:_dl_protect_relro + fun:_dl_relocate_object + fun:dl_main +} + +{ + + Memcheck:Value8 + fun:* + fun:do_lookup_x + fun:_dl_lookup_symbol_x + fun:_dl_relocate_object + fun:dl_main +} + +{ + + Memcheck:Value8 + fun:_dl_setup_hash + fun:_dl_map_object_from_fd + fun:_dl_map_object +} + +{ + + Memcheck:Value8 + fun:* + fun:_dl_new_object + fun:_dl_map_object_from_fd + fun:_dl_map_object +} + +{ + + Memcheck:Cond + fun:* + fun:_dl_new_object + fun:_dl_map_object_from_fd + fun:_dl_map_object +} + +{ + + Memcheck:Value8 + fun:openaux + fun:_dl_catch_error + fun:_dl_map_object_deps + fun:dl_main +} + +{ + + Memcheck:Value8 + fun:* + fun:_dl_map_object +} + +{ + + Memcheck:Cond + fun:* + fun:_dl_map_object +} + +{ + + Memcheck:Cond + fun:_dl_map_object + fun:openaux + fun:_dl_catch_error + fun:_dl_map_object_deps + fun:dl_main +} + +{ + + Memcheck:Value8 + fun:_dl_map_object + fun:openaux + fun:_dl_catch_error + fun:_dl_map_object_deps + fun:dl_main +} + +{ + + Memcheck:Cond + fun:* + fun:_dl_map_object + fun:openaux + fun:_dl_catch_error + fun:_dl_map_object_deps + fun:dl_main +} + +{ + + Memcheck:Value8 + fun:* + fun:open_path + fun:_dl_map_object + fun:openaux + fun:_dl_catch_error + fun:_dl_map_object_deps + fun:dl_main +} + +{ + + Memcheck:Cond + fun:* + fun:open_path + fun:_dl_map_object + fun:openaux + fun:_dl_catch_error + fun:_dl_map_object_deps + fun:dl_main +} + +{ + + Memcheck:Value8 + fun:_dl_map_object_from_fd + fun:_dl_map_object +} + +{ + + Memcheck:Cond + fun:_dl_map_object_from_fd + fun:_dl_map_object +} + +{ + + Memcheck:Value8 + fun:* + fun:_dl_new_object + fun:_dl_map_object_from_fd + fun:_dl_map_object +} + +{ + + Memcheck:Value8 + fun:_dl_new_object + fun:_dl_map_object_from_fd + fun:_dl_map_object +} + +{ + + Memcheck:Cond + fun:_dl_new_object + fun:_dl_map_object_from_fd + fun:_dl_map_object +} + +{ + + Memcheck:Value8 + fun:* + fun:_dl_name_match_p + fun:_dl_map_object +} + +{ + + Memcheck:Cond + fun:* + fun:* + fun:_dl_map_object +} + +{ + + Memcheck:Value8 + fun:* + fun:_dl_name_match_p + fun:_dl_check_map_versions + fun:_dl_check_all_versions +} + +{ + + Memcheck:Value8 + fun:* + fun:* + fun:do_lookup_x + fun:_dl_lookup_symbol_x +} + +{ + + Memcheck:Cond + fun:do_lookup_x + fun:_dl_lookup_symbol_x +} + +{ + + Memcheck:Value8 + fun:do_lookup_x + fun:_dl_lookup_symbol_x +} + +{ + + Memcheck:Value8 + fun:* + fun:do_lookup_x + fun:_dl_lookup_symbol_x +} +{ + + Memcheck:Cond + fun:* + fun:do_lookup_x + fun:_dl_lookup_symbol_x +} + +{ + + Memcheck:Value8 + fun:_dl_name_match_p + fun:_dl_map_object + fun:dl_open_worker +} +{ + + Memcheck:Cond + fun:_dl_name_match_p + fun:_dl_map_object + fun:dl_open_worker +} + +{ + + Memcheck:Value8 + fun:* + fun:_dl_name_match_p + fun:_dl_map_object + fun:dl_open_worker +} +{ + + Memcheck:Cond + fun:* + fun:_dl_name_match_p + fun:_dl_map_object + fun:dl_open_worker +} + +{ + + Memcheck:Value8 + fun:_dl_lookup_symbol_x + fun:_dl_relocate_object +} +{ + + Memcheck:Cond + fun:_dl_lookup_symbol_x + fun:_dl_relocate_object +} + +{ + + Memcheck:Value8 + fun:* + fun:* + fun:_dl_check_map_versions +} +{ + + Memcheck:Value8 + fun:* + fun:_dl_check_map_versions +} +{ + + Memcheck:Cond + fun:* + fun:* + fun:_dl_check_map_versions +} +{ + + Memcheck:Cond + fun:* + fun:_dl_check_map_versions +} +{ + + Memcheck:Value8 + fun:openaux +} +{ + + Memcheck:Value8 + fun:_dl_name_match_p + fun:_dl_map_object +} + +{ + + Memcheck:Cond + fun:_dl_close_worker + fun:_dl_close + fun:_dl_catch_error + fun:dlerror_run +} +{ + + Memcheck:Value8 + fun:_dl_close_worker + fun:_dl_close + fun:_dl_catch_error + fun:dlerror_run +} +{ + + Memcheck:Cond + fun:* + fun:_dl_close_worker + fun:_dl_close + fun:_dl_catch_error + fun:dlerror_run +} +{ + + Memcheck:Value8 + fun:* + fun:_dl_close_worker + fun:_dl_close + fun:_dl_catch_error + fun:dlerror_run +} + +{ + + Memcheck:Cond + fun:fillin_rpath + fun:_dl_init_paths + fun:dl_main +} +{ + + Memcheck:Value8 + fun:fillin_rpath + fun:_dl_init_paths + fun:dl_main +} +{ + + Memcheck:Cond + fun:* + fun:fillin_rpath + fun:_dl_init_paths + fun:dl_main +} +{ + + Memcheck:Value8 + fun:* + fun:fillin_rpath + fun:_dl_init_paths + fun:dl_main +} + +{ + + Memcheck:Cond + fun:_dl_map_object + fun:map_doit + fun:_dl_catch_error + fun:do_preload + fun:dl_main +} +{ + + Memcheck:Value8 + fun:_dl_map_object + fun:map_doit + fun:_dl_catch_error + fun:do_preload + fun:dl_main +} +{ + + Memcheck:Param + open(filename) + fun:open + fun:open_verify + fun:_dl_map_object + fun:map_doit + fun:_dl_catch_error + fun:do_preload + fun:dl_main +} + +{ + + Memcheck:Param + stat(file_name) + fun:_xstat + fun:open_path + fun:_dl_map_object + fun:openaux + fun:_dl_catch_error + fun:_dl_map_object_deps + fun:dl_main +} + +{ + + Memcheck:Value8 + fun:_dl_catch_error + fun:_dl_map_object_deps + fun:dl_open_worker +} + +{ + + Memcheck:Cond + fun:* + fun:_dl_map_object_deps + fun:dl_main +} +{ + + Memcheck:Value8 + fun:* + fun:_dl_map_object_deps + fun:dl_main +} + +{ + + Memcheck:Value8 + fun:* + fun:* + fun:_dl_map_object_deps + fun:dl_main +} + +# glibc-2.10 tls issues +{ + + Memcheck:Cond + fun:* + fun:init_tls + fun:dl_main +} +{ + + Memcheck:Value8 + fun:* + fun:init_tls + fun:dl_main +} +{ + + Memcheck:Cond + fun:* + fun:* + fun:init_tls + fun:dl_main +} +{ + + Memcheck:Value8 + fun:* + fun:* + fun:init_tls + fun:dl_main +} + +{ + + Memcheck:Cond + fun:_dl_allocate_tls_init + fun:dl_main +} +{ + + Memcheck:Value8 + fun:_dl_allocate_tls_init + fun:dl_main +} +{ + + Memcheck:Cond + fun:* + fun:_dl_allocate_tls_init + fun:dl_main +} +{ + + Memcheck:Value8 + fun:* + fun:_dl_allocate_tls_init + fun:dl_main +} + +{ + + Memcheck:Cond + fun:__tls* + obj:* + obj:* + fun:_vgnU_freeres +} + +{ + + Memcheck:Param + arch_prctl(arg2) + fun:init_tls +} +# GLib caching tmp/home directories (glibc-2.10 variants) +{ + + Memcheck:Cond + fun:* + fun:dl_open_worker + fun:* + fun:* + fun:* + fun:_dl_catch_error + fun:dlerror_run + fun:* + fun:__nss_lookup_function + fun:__nss_lookup + fun:getpwnam* +} +{ + + Memcheck:Value8 + fun:* + fun:dl_open_worker + fun:* + fun:* + fun:* + fun:_dl_catch_error + fun:dlerror_run + fun:* + fun:__nss_lookup_function + fun:__nss_lookup + fun:getpwnam* +} +{ + + Memcheck:Cond + fun:dl_open_worker + fun:* + fun:* + fun:do_dlopen + fun:* + fun:dlerror_run + fun:* + fun:__nss_lookup_function + fun:__nss_lookup + fun:getpwnam* +} +{ + + Memcheck:Value8 + fun:dl_open_worker + fun:* + fun:* + fun:do_dlopen + fun:* + fun:dlerror_run + fun:* + fun:__nss_lookup_function + fun:__nss_lookup + fun:getpwnam* +} + +{ + + Memcheck:Value8 + fun:_dl_add_to_slotinfo + fun:dl_main +} +{ + + Memcheck:Param + open(filename) + fun:open + fun:open_verify + fun:open_path + fun:_dl_map_object +} + + + +# GModule issues with glibc-2.10 +{ + + Memcheck:Value8 + fun:* + fun:* + fun:dlsym + fun:g_module_symbol +} +{ + + Memcheck:Value8 + fun:g_module_* + fun:gst_plugin* +} +{ + + Memcheck:Value8 + fun:* + fun:g_module_* + fun:gst_plugin* +} + +{ + + Memcheck:Value8 + fun:* + fun:* + fun:dlopen* + fun:g_module_open +} +{ + + Memcheck:Value8 + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:dlsym + fun:g_module_symbol +} + +{ + + Memcheck:Value8 + fun:* + fun:* + fun:* + fun:* + fun:* + fun:dlopen* + fun:g_module_open +} + +# Leak in GSlice +{ + + Memcheck:Value8 + fun:g_parse_debug_string + fun:slice_config_init + fun:g_slice_init_nomessage + fun:_g_slice_thread_init_nomessage + fun:g_thread_init_glib +} + +# 2.10 pthread issues +{ + + Memcheck:Value8 + fun:__pthread_initialize_minimal +} + +# glibc 2.11 conditional +{ + + Memcheck:Cond + fun:_dl_relocate_object + fun:dl_main + fun:_dl_sysdep_start + fun:_dl_start + obj:/lib64/ld-2.11.so +} + +# glibc 2.11 Leak + +{ + + Memcheck:Leak + fun:*alloc + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen@@GLIBC_2.2.5 +} + +{ + + Memcheck:Leak + fun:*alloc + fun:_dl_* + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen@@GLIBC_2.2.5 +} + +{ + + Memcheck:Leak + fun:*alloc + fun:_dl_* + fun:_dl_* + fun:_dl_* + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen@@GLIBC_2.2.5 +} + +{ + + Memcheck:Leak + fun:*alloc + fun:* + fun:_dl_* + fun:openaux + fun:_dl_catch_error + fun:_dl_map_object_deps + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen@@GLIBC_2.2.5 +} + +{ + + Memcheck:Leak + fun:*alloc + fun:* + fun:_dl_map_object + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen@@GLIBC_2.2.5 +} + +{ + + Memcheck:Leak + fun:*alloc + fun:_dl_new_object + fun:_dl_map_object_from_fd + fun:_dl_map_object + fun:openaux + fun:_dl_catch_error + fun:_dl_map_object_deps + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen@@GLIBC_2.2.5 +} + +{ + + Memcheck:Leak + fun:*alloc + fun:* + fun:_dl_* + fun:_dl_* + fun:_dl_* + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen@@GLIBC_2.2.5 +} + +# glib type leaks +{ + + Memcheck:Leak + fun:*alloc + ... + fun:g_type_register_static +} + +# new registry system +# all of this will only be created once when loading registry. + +{ + + Memcheck:Leak + fun:*alloc + ... + fun:_priv_gst_registry_chunks_load_plugin +} + +# system-wide tags +# these tags are registered once + +{ + + Memcheck:Leak + fun:*alloc + fun:* + fun:* + fun:gst_tag_register + fun:_gst_tag_initialize +} + +# system-wide type classes that we keep referenced + +{ + + Memcheck:Leak + fun:*alloc + ... + fun:g_type_class_ref +} + +# leaking cached queries which are only initialized once +{ + + Memcheck:Leak + fun:*alloc + ... + fun:_gst_query_initialize + fun:init_post +} + +# macosx (leopard) library loader leak +{ + + Memcheck:Leak + fun:_Znwm + fun:_ZNSs4_Rep9_S_createEmmRKSaIcE + fun:_ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcESt20forward_iterator_tag + fun:_ZNSsC2EPKcRKSaIcE + fun:_Z41__static_initialization_and_destruction_0ii + fun:_ZN16ImageLoaderMachO18doModInitFunctionsERKN11ImageLoader11LinkContextE +} + +# GObject type registration +{ + + Memcheck:Leak + fun:*alloc + ... + fun:_g_atomic_array_copy +} + +{ + + Memcheck:Leak + fun:*alloc + fun:getdelim + obj:*libselinux* +} + +{ + + Memcheck:Leak + fun:*alloc + ... + obj:*/sed +} + +{ + + Memcheck:Addr8 + ... + obj:*/sed +} + +# GLib 2.23 interface vtable +{ + + Memcheck:Leak + fun:*alloc + ... + fun:g_type_add_interface_static +} + +{ + + Memcheck:Leak + fun:*alloc + obj:*/dash +} + +# libtool/gentoo fake leak +# it actually runs bash and valgrind complains +{ + + Memcheck:Leak + fun:*alloc + obj:/bin/bash +} + +{ + + Memcheck:Leak + fun:*alloc + ... + fun:_gst_plugin_loader_client_run + fun:main +} + +{ + + Memcheck:Cond + fun:*strcasecmp* + ... + fun:__dcigettext +} + +{ + + Memcheck:Value8 + fun:*strcasecmp* + ... + fun:__dcigettext +} + +{ + + Memcheck:Leak + fun:malloc + ... + fun:gst_poll_new + fun:gst_poll_new_timer + fun:gst_system_clock_init +} + diff --git a/common/gstdoc-scangobj b/common/gstdoc-scangobj new file mode 100755 index 0000000..5b13352 --- /dev/null +++ b/common/gstdoc-scangobj @@ -0,0 +1,1598 @@ +#!/usr/bin/env perl +# -*- cperl -*- +# +# gtk-doc - GTK DocBook documentation generator. +# Copyright (C) 1998 Damon Chaplin +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# + +# +# This gets information about object hierarchies and signals +# by compiling a small C program. CFLAGS and LDFLAGS must be +# set appropriately before running this script. +# + +use Getopt::Long; + +my $GTK_DOC_PREFIX=`pkg-config --variable prefix gtk-doc`; +if ($GTK_DOC_PREFIX) { + chomp $GTK_DOC_PREFIX; + #print "Adding $GTK_DOC_PREFIX/share/gtk-doc/data to \@INC\n"; + unshift @INC, "$GTK_DOC_PREFIX/share/gtk-doc/data"; +} else { + unshift @INC, '/usr/share/gtk-doc/data'; +} +require "gtkdoc-common.pl"; + +# Options + +# name of documentation module +my $MODULE; +my $OUTPUT_DIR; +my $INSPECT_DIR; +my $VERBOSE; +my $PRINT_VERSION; +my $PRINT_HELP; +my $TYPE_INIT_FUNC="g_type_init ()"; + +# --nogtkinit is deprecated, as it is the default now anyway. +%optctl = (module => \$MODULE, + source => \$SOURCE, + types => \$TYPES_FILE, + nogtkinit => \$NO_GTK_INIT, + 'type-init-func' => \$TYPE_INIT_FUNC, + 'output-dir' => \$OUTPUT_DIR, + 'inspect-dir' => \$INSPECT_DIR, + 'verbose' => \$VERBOSE, + 'version' => \$PRINT_VERSION, + 'help' => \$PRINT_HELP); + +GetOptions(\%optctl, "module=s", "source=s", "types:s", "output-dir:s", "inspect-dir:s", "nogtkinit", "type-init-func:s", "verbose", "version", "help"); + +if ($NO_GTK_INIT) { + # Do nothing. This just avoids a warning. + # the option is not used anymore +} + +if ($PRINT_VERSION) { + print "1.5\n"; + exit 0; +} + +if (!$MODULE) { + $PRINT_HELP = 1; +} + +if ($PRINT_HELP) { + print <$MODULE-scan.c") || die "Cannot open $MODULE-scan.c: $!\n"; + +my $old_signals_filename = "$OUTPUT_DIR/$MODULE.signals"; +my $new_signals_filename = "$OUTPUT_DIR/$MODULE.signals.new"; +my $old_hierarchy_filename = "$OUTPUT_DIR/$MODULE.hierarchy"; +my $new_hierarchy_filename = "$OUTPUT_DIR/$MODULE.hierarchy.new"; +my $old_interfaces_filename = "$OUTPUT_DIR/$MODULE.interfaces"; +my $new_interfaces_filename = "$OUTPUT_DIR/$MODULE.interfaces.new"; +my $old_prerequisites_filename = "$OUTPUT_DIR/$MODULE.prerequisites"; +my $new_prerequisites_filename = "$OUTPUT_DIR/$MODULE.prerequisites.new"; +my $old_args_filename = "$OUTPUT_DIR/$MODULE.args"; +my $new_args_filename = "$OUTPUT_DIR/$MODULE.args.new"; + +my $debug_log="g_message"; +if (!defined($VERBOSE) or $VERBOSE eq "0") { + $debug_log="//$debug_log"; +} + +# write a C program to scan the types + +$includes = ""; +@types = (); +@impl_types = (); + +for () { + if (/^#include/) { + $includes .= $_; + } elsif (/^%/) { + next; + } elsif (/^\s*$/) { + next; + } elsif (/^type:(.*)$/) { + $t = $1; + chomp $t; + push @impl_types, $t; + } else { + chomp; + push @types, $_; + } +} + +$ntypes = @types + @impl_types + 1; + +print OUTPUT < +#include +#include +#include + +$includes + +#ifdef GTK_IS_WIDGET_CLASS +#include +#endif + +static GType *object_types = NULL; + +static GString *xmlstr = NULL; + +static const gchar* +xmlprint (gint indent, const gchar *tag, const gchar *data) +{ + const gchar indent_str[] = " "; + + /* reset */ + g_string_truncate (xmlstr, 0); + g_string_append_len (xmlstr, indent_str, MIN (indent, strlen (indent_str))); + g_string_append_printf (xmlstr, "<%s>", tag); + + if (data) { + gchar *s; + + s = g_markup_escape_text (data, -1); + g_string_append (xmlstr, s); + g_free (s); + } + + g_string_append_printf (xmlstr, "\\n", tag); + return xmlstr->str; +} + +static gint +gst_feature_sort_compare (gconstpointer a, gconstpointer b) +{ + return strcmp (((GstPluginFeature *)a)->name, ((GstPluginFeature *)b)->name); +} + +static gint +static_pad_template_compare (gconstpointer a, gconstpointer b) +{ + GstStaticPadTemplate *spt_a = (GstStaticPadTemplate *) a; + GstStaticPadTemplate *spt_b = (GstStaticPadTemplate *) b; + + /* we want SINK before SRC (enum is UNKNOWN, SRC, SINK) */ + if (spt_a->direction != spt_b->direction) + return spt_b->direction - spt_a->direction; + + /* we want ALWAYS first, SOMETIMES second, REQUEST last + * (enum is ALWAYS, SOMETIMES, REQUEST) */ + if (spt_a->presence != spt_b->presence) + return spt_a->presence - spt_b->presence; + + return strcmp (spt_a->name_template, spt_b->name_template); +} + +static GType * +get_object_types (void) +{ + gpointer g_object_class; + GList *plugins = NULL; + GList *factories = NULL; + GList *l; + GstElementFactory *factory = NULL; + GType type; + gint i = 0; + gboolean reinspect; + + /* get a list of features from plugins in our source module */ + plugins = gst_registry_get_plugin_list (gst_registry_get_default()); + + xmlstr = g_string_new (""); + + reinspect = !g_file_test ("scanobj-build.stamp", G_FILE_TEST_EXISTS); + + while (plugins) { + GList *features; + GstPlugin *plugin; + const gchar *source; + FILE *inspect = NULL; + gchar *inspect_name; + + plugin = (GstPlugin *) (plugins->data); + plugins = g_list_next (plugins); + source = gst_plugin_get_source (plugin); + if (!source || strcmp (source, "$SOURCE") != 0) { + continue; + } + + /* skip static coreelements plugin with pipeline and bin element factory */ + if (gst_plugin_get_filename (plugin) == NULL) + continue; + + $debug_log ("plugin: %s source: %s", plugin->desc.name, source); + + if (reinspect) { + inspect_name = g_strdup_printf ("$INSPECT_DIR" G_DIR_SEPARATOR_S "plugin-%s.xml", + plugin->desc.name); + inspect = fopen (inspect_name, "w"); + if (inspect == NULL) { + g_error ("Could not open %s for writing: %s\\n", inspect_name, + g_strerror (errno)); + } + g_free (inspect_name); + + /* output plugin data */ + fputs ("\\n",inspect); + fputs (xmlprint(2, "name", plugin->desc.name),inspect); + fputs (xmlprint(2, "description", plugin->desc.description),inspect); + fputs (xmlprint(2, "filename", plugin->filename),inspect); + fputs (xmlprint(2, "basename", plugin->basename),inspect); + fputs (xmlprint(2, "version", plugin->desc.version),inspect); + fputs (xmlprint(2, "license", plugin->desc.license),inspect); + fputs (xmlprint(2, "source", plugin->desc.source),inspect); + fputs (xmlprint(2, "package", plugin->desc.package),inspect); + fputs (xmlprint(2, "origin", plugin->desc.origin),inspect); + fputs (" \\n", inspect); + } + + features = + gst_registry_get_feature_list_by_plugin (gst_registry_get_default (), + plugin->desc.name); + + /* sort factories by feature->name */ + features = g_list_sort (features, gst_feature_sort_compare); + + while (features) { + GstPluginFeature *feature; + feature = GST_PLUGIN_FEATURE (features->data); + feature = gst_plugin_feature_load (feature); + if (!feature) { + g_warning ("Could not load plugin feature %s", + gst_plugin_feature_get_name (feature)); + } + + if (GST_IS_ELEMENT_FACTORY (feature)) { + const gchar *pad_dir[] = { "unknown","source","sink" }; + const gchar *pad_pres[] = { "always","sometimes","request" }; + GList *pads, *pad; + + $debug_log (" feature: %s", feature->name); + + factory = GST_ELEMENT_FACTORY (feature); + factories = g_list_prepend (factories, factory); + + if (reinspect) { + /* output element data */ + fputs (" \\n", inspect); + fputs (xmlprint(6, "name", feature->name),inspect); + fputs (xmlprint(6, "longname", gst_element_factory_get_longname (factory)),inspect); + fputs (xmlprint(6, "class", gst_element_factory_get_klass (factory)),inspect); + fputs (xmlprint(6, "description", gst_element_factory_get_description (factory)),inspect); + fputs (xmlprint(6, "author", gst_element_factory_get_author (factory)),inspect); + fputs (" \\n", inspect); + + /* output pad-template data */ + pads = g_list_copy ((GList *) gst_element_factory_get_static_pad_templates (factory)); + pads = g_list_sort (pads, static_pad_template_compare); + for (pad = pads; pad != NULL; pad = pad->next) { + GstStaticPadTemplate *pt = pad->data; + + fputs (" \\n", inspect); + fputs (xmlprint(10, "name", pt->name_template),inspect); + fputs (xmlprint(10, "direction", pad_dir[pt->direction]),inspect); + fputs (xmlprint(10, "presence", pad_pres[pt->presence]),inspect); + fputs (xmlprint(10, "details", pt->static_caps.string),inspect); + fputs (" \\n", inspect); + } + g_list_free (pads); + fputs (" \\n \\n", inspect); + } + } + features = g_list_next (features); + } + + if (reinspect) { + fputs (" \\n", inspect); + fclose (inspect); + } + } + + g_string_free (xmlstr, TRUE); + + $debug_log ("number of element factories: %d", g_list_length (factories)); + + /* allocate the object_types array to hold them */ + object_types = g_new0 (GType, g_list_length (factories)+$ntypes+1); + + l = factories; + i = 0; + + /* fill it */ + while (l) { + factory = GST_ELEMENT_FACTORY (l->data); + type = gst_element_factory_get_element_type (factory); + if (type != 0) { + $debug_log ("adding type for factory %s", gst_element_factory_get_longname (factory)); + object_types[i++] = type; + } else { + g_message ("type info for factory %s not found", + gst_element_factory_get_longname (factory)); + } + l = g_list_next (l); + } + +EOT + +# get_type functions: +for (@types) { +print OUTPUT < uppercase with '_' + * GFileMonitor -> file_monitor + * GIOExtensionPoint -> extension_point + * GtkTreeView -> tree_view + * if 2nd char is upper case too + * search for first lower case and go back one char + * else + * search for next upper case + */ + if (!strncmp (object_name, "Gtk", 3)) + object_arg = object_name + 3; + else if (!strncmp (object_name, "Gnome", 5)) + object_arg = object_name + 5; + else + object_arg = object_name; + + object_arg_lower = g_ascii_strdown (object_arg, -1); + sprintf (pos, "*%s\\n", object_arg_lower); + pos += strlen (pos); + if (!strncmp (object_arg_lower, "widget", 6)) + widget_num = 2; + g_free(object_arg_lower); + + /* Convert signal name to use underscores rather than dashes '-'. */ + strncpy (signal_name, query_info.signal_name, 127); + signal_name[127] = '\\0'; + for (i = 0; signal_name[i]; i++) + { + if (signal_name[i] == '-') + signal_name[i] = '_'; + } + + /* Output the signal parameters. */ + for (param = 0; param < query_info.n_params; param++) + { + type_name = get_type_name (query_info.param_types[param] & ~G_SIGNAL_TYPE_STATIC_SCOPE, &is_pointer); + + /* Most arguments to the callback are called "arg1", "arg2", etc. + GtkWidgets are called "widget", "widget2", ... + GtkCallbacks are called "callback", "callback2", ... */ + if (!strcmp (type_name, "GtkWidget")) + { + arg_name = "widget"; + arg_num = &widget_num; + } + else if (!strcmp (type_name, "GtkCallback") + || !strcmp (type_name, "GtkCCallback")) + { + arg_name = "callback"; + arg_num = &callback_num; + } + else + { + arg_name = "arg"; + arg_num = ¶m_num; + } + sprintf (pos, "%s ", type_name); + pos += strlen (pos); + + if (!arg_num || *arg_num == 0) + sprintf (pos, "%s%s\\n", is_pointer ? "*" : " ", arg_name); + else + sprintf (pos, "%s%s%i\\n", is_pointer ? "*" : " ", arg_name, + *arg_num); + pos += strlen (pos); + + if (arg_num) + { + if (*arg_num == 0) + *arg_num = 2; + else + *arg_num += 1; + } + } + + pos = flags; + /* We use one-character flags for simplicity. */ + if (query_info.signal_flags & G_SIGNAL_RUN_FIRST) + *pos++ = 'f'; + if (query_info.signal_flags & G_SIGNAL_RUN_LAST) + *pos++ = 'l'; + if (query_info.signal_flags & G_SIGNAL_RUN_CLEANUP) + *pos++ = 'c'; + if (query_info.signal_flags & G_SIGNAL_NO_RECURSE) + *pos++ = 'r'; + if (query_info.signal_flags & G_SIGNAL_DETAILED) + *pos++ = 'd'; + if (query_info.signal_flags & G_SIGNAL_ACTION) + *pos++ = 'a'; + if (query_info.signal_flags & G_SIGNAL_NO_HOOKS) + *pos++ = 'h'; + *pos = 0; + + /* Output the return type and function name. */ + ret_type = get_type_name (query_info.return_type & ~G_SIGNAL_TYPE_STATIC_SCOPE, &is_pointer); + + fprintf (fp, + "\\n%s::%s\\n%s%s\\n%s\\n%s\\n\\n", + object_name, query_info.signal_name, ret_type, is_pointer ? "*" : "", flags, buffer); +} + + +/* Returns the type name to use for a signal argument or return value, given + the GtkType from the signal info. It also sets is_pointer to TRUE if the + argument needs a '*' since it is a pointer. */ +static const gchar * +get_type_name (GType type, gboolean * is_pointer) +{ + const gchar *type_name; + + *is_pointer = FALSE; + type_name = g_type_name (type); + + switch (type) { + case G_TYPE_NONE: + case G_TYPE_CHAR: + case G_TYPE_UCHAR: + case G_TYPE_BOOLEAN: + case G_TYPE_INT: + case G_TYPE_UINT: + case G_TYPE_LONG: + case G_TYPE_ULONG: + case G_TYPE_FLOAT: + case G_TYPE_DOUBLE: + case G_TYPE_POINTER: + /* These all have normal C type names so they are OK. */ + return type_name; + + case G_TYPE_STRING: + /* A GtkString is really a gchar*. */ + *is_pointer = TRUE; + return "gchar"; + + case G_TYPE_ENUM: + case G_TYPE_FLAGS: + /* We use a gint for both of these. Hopefully a subtype with a decent + name will be registered and used instead, as GTK+ does itself. */ + return "gint"; + + case G_TYPE_BOXED: + /* The boxed type shouldn't be used itself, only subtypes. Though we + return 'gpointer' just in case. */ + return "gpointer"; + + case G_TYPE_PARAM: + /* A GParam is really a GParamSpec*. */ + *is_pointer = TRUE; + return "GParamSpec"; + +#if GLIB_CHECK_VERSION (2, 25, 9) + case G_TYPE_VARIANT: + *is_pointer = TRUE; + return "GVariant"; +#endif + +default: + break; + } + + /* For all GObject subclasses we can use the class name with a "*", + e.g. 'GtkWidget *'. */ + if (g_type_is_a (type, G_TYPE_OBJECT)) + *is_pointer = TRUE; + + /* Also catch non GObject root types */ + if (G_TYPE_IS_CLASSED (type)) + *is_pointer = TRUE; + + /* All boxed subtypes will be pointers as well. */ + /* Exception: GStrv */ + if (g_type_is_a (type, G_TYPE_BOXED) && + !g_type_is_a (type, G_TYPE_STRV)) + *is_pointer = TRUE; + + /* All pointer subtypes will be pointers as well. */ + if (g_type_is_a (type, G_TYPE_POINTER)) + *is_pointer = TRUE; + + /* But enums are not */ + if (g_type_is_a (type, G_TYPE_ENUM) || + g_type_is_a (type, G_TYPE_FLAGS)) + *is_pointer = FALSE; + + return type_name; +} + + +/* This outputs the hierarchy of all objects which have been initialized, + i.e. by calling their XXX_get_type() initialization function. */ +static void +output_object_hierarchy (void) +{ + FILE *fp; + gint i,j; + GType root, type; + GType root_types[$ntypes] = { G_TYPE_INVALID, }; + + fp = fopen (hierarchy_filename, "w"); + if (fp == NULL) + { + g_warning ("Couldn't open output file: %s : %s", hierarchy_filename, g_strerror(errno)); + return; + } + output_hierarchy (fp, G_TYPE_OBJECT, 0); + output_hierarchy (fp, G_TYPE_INTERFACE, 0); + + for (i=0; object_types[i]; i++) { + root = object_types[i]; + while ((type = g_type_parent (root))) { + root = type; + } + if ((root != G_TYPE_OBJECT) && (root != G_TYPE_INTERFACE)) { + for (j=0; root_types[j]; j++) { + if (root == root_types[j]) { + root = G_TYPE_INVALID; break; + } + } + if(root) { + root_types[j] = root; + output_hierarchy (fp, root, 0); + } + } + } + + fclose (fp); +} + +static int +compare_types (const void *a, const void *b) +{ + const char *na = g_type_name (*((GType *)a)); + const char *nb = g_type_name (*((GType *)b)); + + return g_strcmp0 (na, nb); +} + + +/* This is called recursively to output the hierarchy of a object. */ +static void +output_hierarchy (FILE *fp, + GType type, + guint level) +{ + guint i; + GType *children; + guint n_children; + + if (!type) + return; + + for (i = 0; i < level; i++) + fprintf (fp, " "); + fprintf (fp, "%s\\n", g_type_name (type)); + + children = g_type_children (type, &n_children); + qsort (children, n_children, sizeof (GType), compare_types); + + + for (i=0; i < n_children; i++) + output_hierarchy (fp, children[i], level + 1); + + g_free (children); +} + +static void output_object_interfaces (void) +{ + guint i; + FILE *fp; + + fp = fopen (interfaces_filename, "w"); + if (fp == NULL) + { + g_warning ("Couldn't open output file: %s : %s", interfaces_filename, g_strerror(errno)); + return; + } + output_interfaces (fp, G_TYPE_OBJECT); + + for (i = 0; object_types[i]; i++) + { + if (!g_type_parent (object_types[i]) && + (object_types[i] != G_TYPE_OBJECT) && + G_TYPE_IS_INSTANTIATABLE (object_types[i])) + { + output_interfaces (fp, object_types[i]); + } + } + fclose (fp); +} + +static void +output_interfaces (FILE *fp, + GType type) +{ + guint i; + GType *children, *interfaces; + guint n_children, n_interfaces; + + if (!type) + return; + + interfaces = g_type_interfaces (type, &n_interfaces); + + if (n_interfaces > 0) + { + fprintf (fp, "%s", g_type_name (type)); + for (i=0; i < n_interfaces; i++) + fprintf (fp, " %s", g_type_name (interfaces[i])); + fprintf (fp, "\\n"); + } + g_free (interfaces); + + children = g_type_children (type, &n_children); + + for (i=0; i < n_children; i++) + output_interfaces (fp, children[i]); + + g_free (children); +} + +static void output_interface_prerequisites (void) +{ + FILE *fp; + + fp = fopen (prerequisites_filename, "w"); + if (fp == NULL) + { + g_warning ("Couldn't open output file: %s : %s", prerequisites_filename, g_strerror(errno)); + return; + } + output_prerequisites (fp, G_TYPE_INTERFACE); + fclose (fp); +} + +static void +output_prerequisites (FILE *fp, + GType type) +{ +#if GLIB_CHECK_VERSION(2,1,0) + guint i; + GType *children, *prerequisites; + guint n_children, n_prerequisites; + + if (!type) + return; + + prerequisites = g_type_interface_prerequisites (type, &n_prerequisites); + + if (n_prerequisites > 0) + { + fprintf (fp, "%s", g_type_name (type)); + for (i=0; i < n_prerequisites; i++) + fprintf (fp, " %s", g_type_name (prerequisites[i])); + fprintf (fp, "\\n"); + } + g_free (prerequisites); + + children = g_type_children (type, &n_children); + + for (i=0; i < n_children; i++) + output_prerequisites (fp, children[i]); + + g_free (children); +#endif +} + +static void +output_args (void) +{ + FILE *fp; + gint i; + + fp = fopen (args_filename, "w"); + if (fp == NULL) + { + g_warning ("Couldn't open output file: %s : %s", args_filename, g_strerror(errno)); + return; + } + + for (i = 0; object_types[i]; i++) { + output_object_args (fp, object_types[i]); + } + + fclose (fp); +} + +static gint +compare_param_specs (const void *a, const void *b) +{ + GParamSpec *spec_a = *(GParamSpec **)a; + GParamSpec *spec_b = *(GParamSpec **)b; + + return strcmp (g_param_spec_get_name (spec_a), g_param_spec_get_name (spec_b)); +} + +/* Its common to have unsigned properties restricted + * to the signed range. Therefore we make this look + * a bit nicer by spelling out the max constants. + */ + +/* Don't use "==" with floats, it might trigger a gcc warning. */ +#define GTKDOC_COMPARE_FLOAT(x, y) (x <= y && x >= y) + +static gchar* +describe_double_constant (gdouble value) +{ + gchar *desc; + + if (GTKDOC_COMPARE_FLOAT (value, G_MAXDOUBLE)) + desc = g_strdup ("G_MAXDOUBLE"); + else if (GTKDOC_COMPARE_FLOAT (value, G_MINDOUBLE)) + desc = g_strdup ("G_MINDOUBLE"); + else if (GTKDOC_COMPARE_FLOAT (value, -G_MAXDOUBLE)) + desc = g_strdup ("-G_MAXDOUBLE"); + else if (GTKDOC_COMPARE_FLOAT (value, G_MAXFLOAT)) + desc = g_strdup ("G_MAXFLOAT"); + else if (GTKDOC_COMPARE_FLOAT (value, G_MINFLOAT)) + desc = g_strdup ("G_MINFLOAT"); + else if (GTKDOC_COMPARE_FLOAT (value, -G_MAXFLOAT)) + desc = g_strdup ("-G_MAXFLOAT"); + else{ + /* make sure floats are output with a decimal dot irrespective of + * current locale. Use formatd since we want human-readable numbers + * and do not need the exact same bit representation when deserialising */ + desc = g_malloc0 (G_ASCII_DTOSTR_BUF_SIZE); + g_ascii_formatd (desc, G_ASCII_DTOSTR_BUF_SIZE, "%g", value); + } + + return desc; +} + +static gchar* +describe_signed_constant (gsize size, gint64 value) +{ + gchar *desc = NULL; + + switch (size) { + case 8: + if (value == G_MAXINT64) + desc = g_strdup ("G_MAXINT64"); + else if (value == G_MININT64) + desc = g_strdup ("G_MININT64"); + /* fall through */ + case 4: + if (sizeof (int) == 4) { + if (value == G_MAXINT) + desc = g_strdup ("G_MAXINT"); + else if (value == G_MININT) + desc = g_strdup ("G_MININT"); + else if (value == (gint64)G_MAXUINT) + desc = g_strdup ("G_MAXUINT"); + } + if (value == G_MAXLONG) + desc = g_strdup ("G_MAXLONG"); + else if (value == G_MINLONG) + desc = g_strdup ("G_MINLONG"); + else if (value == (gint64)G_MAXULONG) + desc = g_strdup ("G_MAXULONG"); + /* fall through */ + case 2: + if (sizeof (int) == 2) { + if (value == G_MAXINT) + desc = g_strdup ("G_MAXINT"); + else if (value == G_MININT) + desc = g_strdup ("G_MININT"); + else if (value == (gint64)G_MAXUINT) + desc = g_strdup ("G_MAXUINT"); + } + break; + default: + break; + } + if (!desc) + desc = g_strdup_printf ("%" G_GINT64_FORMAT, value); + + return desc; +} + +static gchar* +describe_unsigned_constant (gsize size, guint64 value) +{ + gchar *desc = NULL; + + switch (size) { + case 8: + if (value == G_MAXINT64) + desc = g_strdup ("G_MAXINT64"); + else if (value == G_MAXUINT64) + desc = g_strdup ("G_MAXUINT64"); + /* fall through */ + case 4: + if (sizeof (int) == 4) { + if (value == (guint64)G_MAXINT) + desc = g_strdup ("G_MAXINT"); + else if (value == G_MAXUINT) + desc = g_strdup ("G_MAXUINT"); + } + if (value == (guint64)G_MAXLONG) + desc = g_strdup ("G_MAXLONG"); + else if (value == G_MAXULONG) + desc = g_strdup ("G_MAXULONG"); + /* fall through */ + case 2: + if (sizeof (int) == 2) { + if (value == (guint64)G_MAXINT) + desc = g_strdup ("G_MAXINT"); + else if (value == G_MAXUINT) + desc = g_strdup ("G_MAXUINT"); + } + break; + default: + break; + } + if (!desc) + desc = g_strdup_printf ("%" G_GUINT64_FORMAT, value); + + return desc; +} + +static gchar* +describe_type (GParamSpec *spec) +{ + gchar *desc; + gchar *lower; + gchar *upper; + + if (G_IS_PARAM_SPEC_CHAR (spec)) + { + GParamSpecChar *pspec = G_PARAM_SPEC_CHAR (spec); + + lower = describe_signed_constant (sizeof(gchar), pspec->minimum); + upper = describe_signed_constant (sizeof(gchar), pspec->maximum); + if (pspec->minimum == G_MININT8 && pspec->maximum == G_MAXINT8) + desc = g_strdup (""); + else if (pspec->minimum == G_MININT8) + desc = g_strdup_printf ("<= %s", upper); + else if (pspec->maximum == G_MAXINT8) + desc = g_strdup_printf (">= %s", lower); + else + desc = g_strdup_printf ("[%s,%s]", lower, upper); + g_free (lower); + g_free (upper); + } + else if (G_IS_PARAM_SPEC_UCHAR (spec)) + { + GParamSpecUChar *pspec = G_PARAM_SPEC_UCHAR (spec); + + lower = describe_unsigned_constant (sizeof(guchar), pspec->minimum); + upper = describe_unsigned_constant (sizeof(guchar), pspec->maximum); + if (pspec->minimum == 0 && pspec->maximum == G_MAXUINT8) + desc = g_strdup (""); + else if (pspec->minimum == 0) + desc = g_strdup_printf ("<= %s", upper); + else if (pspec->maximum == G_MAXUINT8) + desc = g_strdup_printf (">= %s", lower); + else + desc = g_strdup_printf ("[%s,%s]", lower, upper); + g_free (lower); + g_free (upper); + } + else if (G_IS_PARAM_SPEC_INT (spec)) + { + GParamSpecInt *pspec = G_PARAM_SPEC_INT (spec); + + lower = describe_signed_constant (sizeof(gint), pspec->minimum); + upper = describe_signed_constant (sizeof(gint), pspec->maximum); + if (pspec->minimum == G_MININT && pspec->maximum == G_MAXINT) + desc = g_strdup (""); + else if (pspec->minimum == G_MININT) + desc = g_strdup_printf ("<= %s", upper); + else if (pspec->maximum == G_MAXINT) + desc = g_strdup_printf (">= %s", lower); + else + desc = g_strdup_printf ("[%s,%s]", lower, upper); + g_free (lower); + g_free (upper); + } + else if (G_IS_PARAM_SPEC_UINT (spec)) + { + GParamSpecUInt *pspec = G_PARAM_SPEC_UINT (spec); + + lower = describe_unsigned_constant (sizeof(guint), pspec->minimum); + upper = describe_unsigned_constant (sizeof(guint), pspec->maximum); + if (pspec->minimum == 0 && pspec->maximum == G_MAXUINT) + desc = g_strdup (""); + else if (pspec->minimum == 0) + desc = g_strdup_printf ("<= %s", upper); + else if (pspec->maximum == G_MAXUINT) + desc = g_strdup_printf (">= %s", lower); + else + desc = g_strdup_printf ("[%s,%s]", lower, upper); + g_free (lower); + g_free (upper); + } + else if (G_IS_PARAM_SPEC_LONG (spec)) + { + GParamSpecLong *pspec = G_PARAM_SPEC_LONG (spec); + + lower = describe_signed_constant (sizeof(glong), pspec->minimum); + upper = describe_signed_constant (sizeof(glong), pspec->maximum); + if (pspec->minimum == G_MINLONG && pspec->maximum == G_MAXLONG) + desc = g_strdup (""); + else if (pspec->minimum == G_MINLONG) + desc = g_strdup_printf ("<= %s", upper); + else if (pspec->maximum == G_MAXLONG) + desc = g_strdup_printf (">= %s", lower); + else + desc = g_strdup_printf ("[%s,%s]", lower, upper); + g_free (lower); + g_free (upper); + } + else if (G_IS_PARAM_SPEC_ULONG (spec)) + { + GParamSpecULong *pspec = G_PARAM_SPEC_ULONG (spec); + + lower = describe_unsigned_constant (sizeof(gulong), pspec->minimum); + upper = describe_unsigned_constant (sizeof(gulong), pspec->maximum); + if (pspec->minimum == 0 && pspec->maximum == G_MAXULONG) + desc = g_strdup (""); + else if (pspec->minimum == 0) + desc = g_strdup_printf ("<= %s", upper); + else if (pspec->maximum == G_MAXULONG) + desc = g_strdup_printf (">= %s", lower); + else + desc = g_strdup_printf ("[%s,%s]", lower, upper); + g_free (lower); + g_free (upper); + } + else if (G_IS_PARAM_SPEC_INT64 (spec)) + { + GParamSpecInt64 *pspec = G_PARAM_SPEC_INT64 (spec); + + lower = describe_signed_constant (sizeof(gint64), pspec->minimum); + upper = describe_signed_constant (sizeof(gint64), pspec->maximum); + if (pspec->minimum == G_MININT64 && pspec->maximum == G_MAXINT64) + desc = g_strdup (""); + else if (pspec->minimum == G_MININT64) + desc = g_strdup_printf ("<= %s", upper); + else if (pspec->maximum == G_MAXINT64) + desc = g_strdup_printf (">= %s", lower); + else + desc = g_strdup_printf ("[%s,%s]", lower, upper); + g_free (lower); + g_free (upper); + } + else if (G_IS_PARAM_SPEC_UINT64 (spec)) + { + GParamSpecUInt64 *pspec = G_PARAM_SPEC_UINT64 (spec); + + lower = describe_unsigned_constant (sizeof(guint64), pspec->minimum); + upper = describe_unsigned_constant (sizeof(guint64), pspec->maximum); + if (pspec->minimum == 0 && pspec->maximum == G_MAXUINT64) + desc = g_strdup (""); + else if (pspec->minimum == 0) + desc = g_strdup_printf ("<= %s", upper); + else if (pspec->maximum == G_MAXUINT64) + desc = g_strdup_printf (">= %s", lower); + else + desc = g_strdup_printf ("[%s,%s]", lower, upper); + g_free (lower); + g_free (upper); + } + else if (G_IS_PARAM_SPEC_FLOAT (spec)) + { + GParamSpecFloat *pspec = G_PARAM_SPEC_FLOAT (spec); + + lower = describe_double_constant (pspec->minimum); + upper = describe_double_constant (pspec->maximum); + if (GTKDOC_COMPARE_FLOAT (pspec->minimum, -G_MAXFLOAT)) + { + if (GTKDOC_COMPARE_FLOAT (pspec->maximum, G_MAXFLOAT)) + desc = g_strdup (""); + else + desc = g_strdup_printf ("<= %s", upper); + } + else if (GTKDOC_COMPARE_FLOAT (pspec->maximum, G_MAXFLOAT)) + desc = g_strdup_printf (">= %s", lower); + else + desc = g_strdup_printf ("[%s,%s]", lower, upper); + g_free (lower); + g_free (upper); + } + else if (G_IS_PARAM_SPEC_DOUBLE (spec)) + { + GParamSpecDouble *pspec = G_PARAM_SPEC_DOUBLE (spec); + + lower = describe_double_constant (pspec->minimum); + upper = describe_double_constant (pspec->maximum); + if (GTKDOC_COMPARE_FLOAT (pspec->minimum, -G_MAXDOUBLE)) + { + if (GTKDOC_COMPARE_FLOAT (pspec->maximum, G_MAXDOUBLE)) + desc = g_strdup (""); + else + desc = g_strdup_printf ("<= %s", upper); + } + else if (GTKDOC_COMPARE_FLOAT (pspec->maximum, G_MAXDOUBLE)) + desc = g_strdup_printf (">= %s", lower); + else + desc = g_strdup_printf ("[%s,%s]", lower, upper); + g_free (lower); + g_free (upper); + } +#if GLIB_CHECK_VERSION (2, 12, 0) + else if (G_IS_PARAM_SPEC_GTYPE (spec)) + { + GParamSpecGType *pspec = G_PARAM_SPEC_GTYPE (spec); + gboolean is_pointer; + + desc = g_strdup (get_type_name (pspec->is_a_type, &is_pointer)); + } +#endif +#if GLIB_CHECK_VERSION (2, 25, 9) + else if (G_IS_PARAM_SPEC_VARIANT (spec)) + { + GParamSpecVariant *pspec = G_PARAM_SPEC_VARIANT (spec); + gchar *variant_type; + + variant_type = g_variant_type_dup_string (pspec->type); + desc = g_strdup_printf ("GVariant<%s>", variant_type); + g_free (variant_type); + } +#endif + else + { + desc = g_strdup (""); + } + + return desc; +} + +static gchar* +describe_default (GParamSpec *spec) +{ + gchar *desc; + + if (G_IS_PARAM_SPEC_CHAR (spec)) + { + GParamSpecChar *pspec = G_PARAM_SPEC_CHAR (spec); + + desc = g_strdup_printf ("%d", pspec->default_value); + } + else if (G_IS_PARAM_SPEC_UCHAR (spec)) + { + GParamSpecUChar *pspec = G_PARAM_SPEC_UCHAR (spec); + + desc = g_strdup_printf ("%u", pspec->default_value); + } + else if (G_IS_PARAM_SPEC_BOOLEAN (spec)) + { + GParamSpecBoolean *pspec = G_PARAM_SPEC_BOOLEAN (spec); + + desc = g_strdup_printf ("%s", pspec->default_value ? "TRUE" : "FALSE"); + } + else if (G_IS_PARAM_SPEC_INT (spec)) + { + GParamSpecInt *pspec = G_PARAM_SPEC_INT (spec); + + desc = g_strdup_printf ("%d", pspec->default_value); + } + else if (G_IS_PARAM_SPEC_UINT (spec)) + { + GParamSpecUInt *pspec = G_PARAM_SPEC_UINT (spec); + + desc = g_strdup_printf ("%u", pspec->default_value); + } + else if (G_IS_PARAM_SPEC_LONG (spec)) + { + GParamSpecLong *pspec = G_PARAM_SPEC_LONG (spec); + + desc = g_strdup_printf ("%ld", pspec->default_value); + } + else if (G_IS_PARAM_SPEC_LONG (spec)) + { + GParamSpecULong *pspec = G_PARAM_SPEC_ULONG (spec); + + desc = g_strdup_printf ("%lu", pspec->default_value); + } + else if (G_IS_PARAM_SPEC_INT64 (spec)) + { + GParamSpecInt64 *pspec = G_PARAM_SPEC_INT64 (spec); + + desc = g_strdup_printf ("%" G_GINT64_FORMAT, pspec->default_value); + } + else if (G_IS_PARAM_SPEC_UINT64 (spec)) + { + GParamSpecUInt64 *pspec = G_PARAM_SPEC_UINT64 (spec); + + desc = g_strdup_printf ("%" G_GUINT64_FORMAT, pspec->default_value); + } + else if (G_IS_PARAM_SPEC_UNICHAR (spec)) + { + GParamSpecUnichar *pspec = G_PARAM_SPEC_UNICHAR (spec); + + if (g_unichar_isprint (pspec->default_value)) + desc = g_strdup_printf ("'%c'", pspec->default_value); + else + desc = g_strdup_printf ("%u", pspec->default_value); + } + else if (G_IS_PARAM_SPEC_ENUM (spec)) + { + GParamSpecEnum *pspec = G_PARAM_SPEC_ENUM (spec); + + GEnumValue *value = g_enum_get_value (pspec->enum_class, pspec->default_value); + if (value) + desc = g_strdup_printf ("%s", value->value_name); + else + desc = g_strdup_printf ("%d", pspec->default_value); + } + else if (G_IS_PARAM_SPEC_FLAGS (spec)) + { + GParamSpecFlags *pspec = G_PARAM_SPEC_FLAGS (spec); + guint default_value; + GString *acc; + + default_value = pspec->default_value; + acc = g_string_new (""); + + while (default_value) + { + GFlagsValue *value = g_flags_get_first_value (pspec->flags_class, default_value); + + if (!value) + break; + + if (acc->len > 0) + g_string_append (acc, "|"); + g_string_append (acc, value->value_name); + + default_value &= ~value->value; + } + + if (default_value == 0) + desc = g_string_free (acc, FALSE); + else + { + desc = g_strdup_printf ("%d", pspec->default_value); + g_string_free (acc, TRUE); + } + } + else if (G_IS_PARAM_SPEC_FLOAT (spec)) + { + GParamSpecFloat *pspec = G_PARAM_SPEC_FLOAT (spec); + + /* make sure floats are output with a decimal dot irrespective of + * current locale. Use formatd since we want human-readable numbers + * and do not need the exact same bit representation when deserialising */ + desc = g_malloc0 (G_ASCII_DTOSTR_BUF_SIZE); + g_ascii_formatd (desc, G_ASCII_DTOSTR_BUF_SIZE, "%g", + pspec->default_value); + } + else if (G_IS_PARAM_SPEC_DOUBLE (spec)) + { + GParamSpecDouble *pspec = G_PARAM_SPEC_DOUBLE (spec); + + /* make sure floats are output with a decimal dot irrespective of + * current locale. Use formatd since we want human-readable numbers + * and do not need the exact same bit representation when deserialising */ + desc = g_malloc0 (G_ASCII_DTOSTR_BUF_SIZE); + g_ascii_formatd (desc, G_ASCII_DTOSTR_BUF_SIZE, "%g", + pspec->default_value); + } + else if (G_IS_PARAM_SPEC_STRING (spec)) + { + GParamSpecString *pspec = G_PARAM_SPEC_STRING (spec); + + if (pspec->default_value) + { + gchar *esc = g_strescape (pspec->default_value, NULL); + + desc = g_strdup_printf ("\\"%s\\"", esc); + + g_free (esc); + } + else + desc = g_strdup_printf ("NULL"); + } + else + { + desc = g_strdup (""); + } + + return desc; +} + + +static void +output_object_args (FILE *fp, GType object_type) +{ + gpointer class; + const gchar *object_class_name; + guint arg; + gchar flags[16], *pos; + GParamSpec **properties; + guint n_properties; + gboolean child_prop; + gboolean style_prop; + gboolean is_pointer; + const gchar *type_name; + gchar *type_desc; + gchar *default_value; + + if (G_TYPE_IS_OBJECT (object_type)) + { + class = g_type_class_peek (object_type); + if (!class) + return; + + properties = g_object_class_list_properties (class, &n_properties); + } +#if GLIB_MAJOR_VERSION > 2 || (GLIB_MAJOR_VERSION == 2 && GLIB_MINOR_VERSION >= 3) + else if (G_TYPE_IS_INTERFACE (object_type)) + { + class = g_type_default_interface_ref (object_type); + + if (!class) + return; + + properties = g_object_interface_list_properties (class, &n_properties); + } +#endif + else + return; + + object_class_name = g_type_name (object_type); + + child_prop = FALSE; + style_prop = FALSE; + + while (TRUE) { + qsort (properties, n_properties, sizeof (GParamSpec *), compare_param_specs); + for (arg = 0; arg < n_properties; arg++) + { + GParamSpec *spec = properties[arg]; + const gchar *nick, *blurb, *dot; + + if (spec->owner_type != object_type) + continue; + + pos = flags; + /* We use one-character flags for simplicity. */ + if (child_prop && !style_prop) + *pos++ = 'c'; + if (style_prop) + *pos++ = 's'; + if (spec->flags & G_PARAM_READABLE) + *pos++ = 'r'; + if (spec->flags & G_PARAM_WRITABLE) + *pos++ = 'w'; + if (spec->flags & G_PARAM_CONSTRUCT) + *pos++ = 'x'; + if (spec->flags & G_PARAM_CONSTRUCT_ONLY) + *pos++ = 'X'; + *pos = 0; + + nick = g_param_spec_get_nick (spec); + blurb = g_param_spec_get_blurb (spec); + + dot = ""; + if (blurb) { + int str_len = strlen (blurb); + if (str_len > 0 && blurb[str_len - 1] != '.') + dot = "."; + } + + type_desc = describe_type (spec); + default_value = describe_default (spec); + type_name = get_type_name (spec->value_type, &is_pointer); + fprintf (fp, "\\n%s::%s\\n%s%s\\n%s\\n%s\\n%s\\n%s%s\\n%s\\n\\n\\n", + object_class_name, g_param_spec_get_name (spec), type_name, is_pointer ? "*" : "", type_desc, flags, nick ? nick : "(null)", blurb ? blurb : "(null)", dot, default_value); + g_free (type_desc); + g_free (default_value); + } + + g_free (properties); + +#ifdef GTK_IS_CONTAINER_CLASS + if (!child_prop && GTK_IS_CONTAINER_CLASS (class)) { + properties = gtk_container_class_list_child_properties (class, &n_properties); + child_prop = TRUE; + continue; + } +#endif + +#ifdef GTK_IS_CELL_AREA_CLASS + if (!child_prop && GTK_IS_CELL_AREA_CLASS (class)) { + properties = gtk_cell_area_class_list_cell_properties (class, &n_properties); + child_prop = TRUE; + continue; + } +#endif + +#ifdef GTK_IS_WIDGET_CLASS +#if GTK_CHECK_VERSION(2,1,0) + if (!style_prop && GTK_IS_WIDGET_CLASS (class)) { + properties = gtk_widget_class_list_style_properties (GTK_WIDGET_CLASS (class), &n_properties); + style_prop = TRUE; + continue; + } +#endif +#endif + + break; + } +} +EOT + +close OUTPUT; + +# Compile and run our file + +$CC = $ENV{CC} ? $ENV{CC} : "gcc"; +$LD = $ENV{LD} ? $ENV{LD} : $CC; +$CFLAGS = $ENV{CFLAGS} ? "$ENV{CFLAGS}" : ""; +$LDFLAGS = $ENV{LDFLAGS} ? $ENV{LDFLAGS} : ""; + +my $o_file; +if ($CC =~ /libtool/) { + $o_file = "$MODULE-scan.lo" +} else { + $o_file = "$MODULE-scan.o" +} + +my $stdout=""; +if (!defined($VERBOSE) or $VERBOSE eq "0") { + $stdout=">/dev/null"; +} + +# Compiling scanner +$command = "$CC $stdout $CFLAGS -c -o $o_file $MODULE-scan.c"; +system("($command)") == 0 or die "Compilation of scanner failed: $!\n"; + +# Linking scanner +$command = "$LD $stdout -o $MODULE-scan $o_file $LDFLAGS"; +system($command) == 0 or die "Linking of scanner failed: $!\n"; + +# Running scanner $MODULE-scan "; +system("sh -c ./$MODULE-scan") == 0 or die "Scan failed: $!\n"; + +if (!defined($ENV{"GTK_DOC_KEEP_INTERMEDIATE"})) { + unlink "./$MODULE-scan.c", "./$MODULE-scan.o", "./$MODULE-scan.lo", "./$MODULE-scan"; +} + +&UpdateFileIfChanged ($old_hierarchy_filename, $new_hierarchy_filename, 0); +# we will merge these in scangobj-merge.py +#&UpdateFileIfChanged ($old_interfaces_filename, $new_interfaces_filename, 0); +#&UpdateFileIfChanged ($old_prerequisites_filename, $new_prerequisites_filename, 0); +#&UpdateFileIfChanged ($old_signals_filename, $new_signals_filename, 0); +#&UpdateFileIfChanged ($old_args_filename, $new_args_filename, 0); + diff --git a/common/gtk-doc-plugins.mak b/common/gtk-doc-plugins.mak new file mode 100644 index 0000000..8cc42e7 --- /dev/null +++ b/common/gtk-doc-plugins.mak @@ -0,0 +1,387 @@ +# This is an include file specifically tuned for building documentation +# for GStreamer plug-ins + +help: + @echo + @echo "If you are a doc maintainer, run 'make update' to update" + @echo "the documentation files maintained in git" + @echo + @echo Other useful make targets: + @echo + @echo check-inspected-versions: make sure the inspected plugin info + @echo is up to date before a release + @echo + +# update the stuff maintained by doc maintainers +update: + $(MAKE) scanobj-update + $(MAKE) check-outdated-docs + +# We set GPATH here; this gives us semantics for GNU make +# which are more like other make's VPATH, when it comes to +# whether a source that is a target of one rule is then +# searched for in VPATH/GPATH. +# +GPATH = $(srcdir) + +# thomas: make docs parallel installable +TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE)-@GST_MAJORMINOR@ + +MAINTAINER_DOC_STAMPS = \ + scanobj-build.stamp + +EXTRA_DIST = \ + $(MAINTAINER_DOC_STAMPS) \ + $(srcdir)/inspect/*.xml \ + $(SCANOBJ_FILES) \ + $(content_files) \ + $(extra_files) \ + $(HTML_IMAGES) \ + $(DOC_MAIN_SGML_FILE) \ + $(DOC_OVERRIDES) \ + $(DOC_MODULE)-sections.txt + +# we don't add scanobj-build.stamp here since they are built manually by docs +# maintainers and result is commited to git +DOC_STAMPS = \ + scan-build.stamp \ + tmpl-build.stamp \ + sgml-build.stamp \ + html-build.stamp \ + scan.stamp \ + tmpl.stamp \ + sgml.stamp \ + html.stamp + +# files generated/updated by gtkdoc-scangobj +SCANOBJ_FILES = \ + $(DOC_MODULE).args \ + $(DOC_MODULE).hierarchy \ + $(DOC_MODULE).interfaces \ + $(DOC_MODULE).prerequisites \ + $(DOC_MODULE).signals \ + $(DOC_MODULE).types + +SCANOBJ_FILES_O = \ + .libs/$(DOC_MODULE)-scan.o + +# files generated/updated by gtkdoc-scan +SCAN_FILES = \ + $(DOC_MODULE)-sections.txt \ + $(DOC_MODULE)-overrides.txt \ + $(DOC_MODULE)-decl.txt \ + $(DOC_MODULE)-decl-list.txt + + +REPORT_FILES = \ + $(DOC_MODULE)-undocumented.txt \ + $(DOC_MODULE)-undeclared.txt \ + $(DOC_MODULE)-unused.txt + +CLEANFILES = \ + $(SCANOBJ_FILES_O) \ + $(REPORT_FILES) \ + $(DOC_STAMPS) \ + inspect-registry.xml + +INSPECT_DIR = inspect + +if ENABLE_GTK_DOC +all-local: html-build.stamp + +### inspect GStreamer plug-ins; done by documentation maintainer ### + +# only look at the plugins in this module when building inspect .xml stuff +INSPECT_REGISTRY=$(top_builddir)/docs/plugins/inspect-registry.xml +INSPECT_ENVIRONMENT=\ + LC_ALL=C \ + GST_PLUGIN_SYSTEM_PATH= \ + GST_PLUGIN_PATH=$(top_builddir)/gst:$(top_builddir)/sys:$(top_builddir)/ext:$(top_builddir)/plugins:$(top_builddir)/src:$(top_builddir)/gnl \ + GST_REGISTRY=$(INSPECT_REGISTRY) \ + PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ + $(INSPECT_EXTRA_ENVIRONMENT) + +#### scan gobjects; done by documentation maintainer #### +scanobj-update: + -rm scanobj-build.stamp + $(MAKE) scanobj-build.stamp + +# gstdoc-scanobj produces 5 output files (.new) +# scangobj-merge.py merges them into the file which we commit later +# TODO: also merge the hierarchy +scanobj-build.stamp: $(SCANOBJ_DEPS) $(basefiles) + @echo " DOC Introspecting gobjects" + @if test x"$(srcdir)" != x. ; then \ + for f in $(SCANOBJ_FILES) $(SCAN_FILES); \ + do \ + if test -e $(srcdir)/$$f; then cp -u $(srcdir)/$$f . ; fi; \ + done; \ + fi; \ + mkdir -p $(INSPECT_DIR); \ + scanobj_options=""; \ + if test "x$(V)" = "x1"; then \ + scanobj_options="--verbose"; \ + fi; \ + $(INSPECT_ENVIRONMENT) \ + CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" \ + CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS) $(WARNING_CFLAGS)" \ + LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \ + $(GST_DOC_SCANOBJ) $$scanobj_options --type-init-func="gst_init(NULL,NULL)" \ + --module=$(DOC_MODULE) --source=$(PACKAGE) --inspect-dir=$(INSPECT_DIR) && \ + echo " DOC Merging introspection data" && \ + $(PYTHON) \ + $(top_srcdir)/common/scangobj-merge.py $(DOC_MODULE); \ + if test x"$(srcdir)" != x. ; then \ + for f in $(SCANOBJ_FILES); \ + do \ + cmp -s ./$$f $(srcdir)/$$f || cp ./$$f $(srcdir)/ ; \ + done; \ + fi; \ + touch scanobj-build.stamp + +$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(SCANOBJ_FILES_O): scan-build.stamp + @true + +### scan headers; done on every build ### +scan-build.stamp: $(HFILE_GLOB) $(EXTRA_HFILES) $(basefiles) scanobj-build.stamp + @echo ' DOC Scanning header files' + @if test x"$(srcdir)" != x. ; then \ + for f in $(SCANOBJ_FILES) $(SCAN_FILES); \ + do \ + if test -e $(srcdir)/$$f; then cp -u $(srcdir)/$$f . ; fi; \ + done; \ + fi + @_source_dir='' ; \ + for i in $(DOC_SOURCE_DIR) ; do \ + _source_dir="$${_source_dir} --source-dir=$$i" ; \ + done ; \ + gtkdoc-scan \ + $(SCAN_OPTIONS) $(EXTRA_HFILES) \ + --module=$(DOC_MODULE) \ + $${_source_dir} \ + --ignore-headers="$(IGNORE_HFILES)"; \ + touch scan-build.stamp + +#### update templates; done on every build #### + +# in a non-srcdir build, we need to copy files from the previous step +# and the files from previous runs of this step +tmpl-build.stamp: $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_OVERRIDES) + @echo ' DOC Rebuilding template files' + @if test x"$(srcdir)" != x. ; then \ + for f in $(SCANOBJ_FILES) $(SCAN_FILES); \ + do \ + if test -e $(srcdir)/$$f; then cp -u $(srcdir)/$$f . ; fi; \ + done; \ + fi + @gtkdoc-mktmpl --module=$(DOC_MODULE) + @$(PYTHON) \ + $(top_srcdir)/common/mangle-tmpl.py $(srcdir)/$(INSPECT_DIR) tmpl + @touch tmpl-build.stamp + +tmpl.stamp: tmpl-build.stamp + @true + +#### xml #### + +sgml-build.stamp: tmpl.stamp scan-build.stamp $(CFILE_GLOB) $(top_srcdir)/common/plugins.xsl $(expand_content_files) + @echo ' DOC Building XML' + @-mkdir -p xml + @for a in $(srcdir)/$(INSPECT_DIR)/*.xml; do \ + xsltproc --stringparam module $(MODULE) \ + $(top_srcdir)/common/plugins.xsl $$a > xml/`basename $$a`; done + @for f in $(EXAMPLE_CFILES); do \ + $(PYTHON) $(top_srcdir)/common/c-to-xml.py $$f > xml/element-`basename $$f .c`.xml; done + @gtkdoc-mkdb \ + --module=$(DOC_MODULE) \ + --source-dir=$(DOC_SOURCE_DIR) \ + --expand-content-files="$(expand_content_files)" \ + --main-sgml-file=$(srcdir)/$(DOC_MAIN_SGML_FILE) \ + --output-format=xml \ + --ignore-files="$(IGNORE_HFILES) $(IGNORE_CFILES)" \ + $(MKDB_OPTIONS) + @cp ../version.entities xml + @touch sgml-build.stamp + +sgml.stamp: sgml-build.stamp + @true + +#### html #### + +html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) + @echo ' DOC Building HTML' + @rm -rf html + @mkdir html + @cp $(srcdir)/$(DOC_MAIN_SGML_FILE) html + @for f in $(content_files); do cp $(srcdir)/$$f html; done + @cp -pr xml html + @cp ../version.entities html + @mkhtml_options=""; \ + gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \ + if test "$(?)" = "0"; then \ + if test "x$(V)" = "x1"; then \ + mkhtml_options="$$mkhtml_options --verbose"; \ + fi; \ + fi; \ + cd html && gtkdoc-mkhtml $$mkhtml_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) + @mv html/index.sgml html/index.sgml.bak + @$(SED) "s/ href=\"$(DOC_MODULE)\// href=\"$(DOC_MODULE)-@GST_MAJORMINOR@\//g" html/index.sgml.bak >html/index.sgml + @rm -f html/index.sgml.bak + @rm -f html/$(DOC_MAIN_SGML_FILE) + @rm -rf html/xml + @rm -f html/version.entities + @test "x$(HTML_IMAGES)" = "x" || for i in "" $(HTML_IMAGES) ; do \ + if test "$$i" != ""; then cp $(srcdir)/$$i html ; fi; done + @echo ' DOC Fixing cross-references' + @gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS) + @touch html-build.stamp + +clean-local-gtkdoc: + @rm -rf xml tmpl html +# clean files copied for nonsrcdir templates build + @if test x"$(srcdir)" != x. ; then \ + rm -rf $(SCANOBJ_FILES) $(SCAN_FILES) $(REPORT_FILES) \ + $(MAINTAINER_DOC_STAMPS); \ + fi +else +all-local: +clean-local-gtkdoc: +endif + +clean-local: clean-local-gtkdoc + @rm -f *~ *.bak + @rm -rf .libs + +distclean-local: + @rm -f $(REPORT_FILES) \ + $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt + @rm -rf tmpl/*.sgml.bak + @rm -f $(DOC_MODULE).hierarchy + @rm -f *.stamp || true + @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ + rm -f $(DOC_MODULE)-docs.sgml ; \ + rm -f $(DOC_MODULE).types ; \ + rm -f $(DOC_MODULE).interfaces ; \ + rm -f $(DOC_MODULE)-overrides.txt ; \ + rm -f $(DOC_MODULE).prerequisites ; \ + rm -f $(DOC_MODULE)-sections.txt ; \ + rm -rf tmpl/*.sgml ; \ + rm -rf $(INSPECT_DIR); \ + fi + @rm -rf *.o + +MAINTAINERCLEANFILES = $(MAINTAINER_DOC_STAMPS) + +# thomas: make docs parallel installable; devhelp requires majorminor too +install-data-local: + (installfiles=`echo $(builddir)/html/*.sgml $(builddir)/html/*.html $(builddir)/html/*.png $(builddir)/html/*.css`; \ + if test "$$installfiles" = '$(builddir)/html/*.sgml $(builddir)/html/*.html $(builddir)/html/*.png $(builddir)/html/*.css'; \ + then echo '-- Nothing to install' ; \ + else \ + $(mkinstalldirs) $(DESTDIR)$(TARGET_DIR); \ + for i in $$installfiles; do \ + echo '-- Installing '$$i ; \ + $(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR); \ + done; \ + pngfiles=`echo ./html/*.png`; \ + if test "$$pngfiles" != './html/*.png'; then \ + for i in $$pngfiles; do \ + echo '-- Installing '$$i ; \ + $(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR); \ + done; \ + fi; \ + echo '-- Installing $(builddir)/html/$(DOC_MODULE).devhelp2' ; \ + if test -e $(builddir)/html/$(DOC_MODULE).devhelp2; then \ + $(INSTALL_DATA) $(builddir)/html/$(DOC_MODULE).devhelp2 \ + $(DESTDIR)$(TARGET_DIR)/$(DOC_MODULE)-@GST_MAJORMINOR@.devhelp2; \ + fi; \ + (which gtkdoc-rebase >/dev/null && \ + gtkdoc-rebase --relative --dest-dir=$(DESTDIR) --html-dir=$(DESTDIR)$(TARGET_DIR)) || true ; \ + fi) +uninstall-local: + if test -d $(DESTDIR)$(TARGET_DIR); then \ + rm -rf $(DESTDIR)$(TARGET_DIR)/*; \ + rmdir -p $(DESTDIR)$(TARGET_DIR) 2>/dev/null || true; \ + else \ + echo '-- Nothing to uninstall' ; \ + fi; + +# +# Checks +# +if ENABLE_GTK_DOC +check-hierarchy: $(DOC_MODULE).hierarchy + @if grep ' ' $(DOC_MODULE).hierarchy; then \ + echo "$(DOC_MODULE).hierarchy contains tabs, please fix"; \ + /bin/false; \ + fi + +check: check-hierarchy +endif + +# wildcard is apparently not portable to other makes, hence the use of find +inspect_files = $(shell find $(srcdir)/$(INSPECT_DIR) -name '*.xml') + +check-inspected-versions: + @echo Checking plugin versions of inspected plugin data ...; \ + fail=0 ; \ + for each in $(inspect_files) ; do \ + if (grep -H '' $$each | grep -v '$(VERSION)'); then \ + echo $$each should be fixed to say version $(VERSION) or be removed ; \ + echo "sed -i -e 's//$(VERSION)<\/version>/'" $$each; \ + echo ; \ + fail=1; \ + fi ; \ + done ; \ + exit $$fail + +check-outdated-docs: + $(AM_V_GEN)echo Checking for outdated plugin inspect data ...; \ + fail=0 ; \ + if [ -d $(top_srcdir)/.git/ ]; then \ + files=`find $(srcdir)/inspect/ -name '*xml'`; \ + for f in $$files; do \ + ver=`grep '$(PACKAGE_VERSION)' $$f`; \ + if test "x$$ver" = "x"; then \ + plugin=`echo $$f | sed -e 's/^.*plugin-//' -e 's/.xml//'`; \ + # echo "Checking $$plugin $$f"; \ + pushd "$(top_srcdir)" >/dev/null; \ + pinit=`git grep -A3 GST_PLUGIN_DEFINE -- ext/ gst/ sys/ | grep "\"$$plugin\""`; \ + popd >/dev/null; \ + # echo "[$$pinit]"; \ + if test "x$$pinit" = "x"; then \ + printf " **** outdated docs for plugin %-15s: %s\n" $$plugin $$f; \ + fail=1; \ + fi; \ + fi; \ + done; \ + fi ; \ + exit $$fail + +# +# Require gtk-doc when making dist +# +if ENABLE_GTK_DOC +dist-check-gtkdoc: +else +dist-check-gtkdoc: + @echo "*** gtk-doc must be installed and enabled in order to make dist" + @false +endif + +# FIXME: decide whether we want to dist generated html or not +# also this only works, if the project has been build before +# we could dist html only if its there, but that might lead to missing html in +# tarballs +dist-hook: dist-check-gtkdoc dist-hook-local + mkdir $(distdir)/html + cp html/* $(distdir)/html + -cp $(srcdir)/$(DOC_MODULE).types $(distdir)/ + -cp $(srcdir)/$(DOC_MODULE)-sections.txt $(distdir)/ + cd $(distdir) && rm -f $(DISTCLEANFILES) + -gtkdoc-rebase --online --relative --html-dir=$(distdir)/html + +.PHONY : dist-hook-local docs check-outdated-docs inspect + +# avoid spurious build errors when distchecking with -jN +.NOTPARALLEL: diff --git a/common/gtk-doc.mak b/common/gtk-doc.mak new file mode 100644 index 0000000..dd2b5a5 --- /dev/null +++ b/common/gtk-doc.mak @@ -0,0 +1,231 @@ +########################################################################### +# Everything below here is generic and you shouldn't need to change it. +########################################################################### +# thomas: except of course that we did + +# thomas: copied from glib-2 +# We set GPATH here; this gives us semantics for GNU make +# which are more like other make's VPATH, when it comes to +# whether a source that is a target of one rule is then +# searched for in VPATH/GPATH. +# +GPATH = $(srcdir) + +# thomas: make docs parallel installable +TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE)-@GST_MAJORMINOR@ + +EXTRA_DIST = \ + $(content_files) \ + $(extra_files) \ + $(HTML_IMAGES) \ + $(DOC_MAIN_SGML_FILE) \ + $(DOC_MODULE).types \ + $(DOC_OVERRIDES) \ + $(DOC_MODULE)-sections.txt + +DOC_STAMPS = \ + setup-build.stamp \ + scan-build.stamp \ + sgml-build.stamp \ + html-build.stamp \ + sgml.stamp \ + html.stamp + +SCANOBJ_FILES = \ + $(DOC_MODULE).args \ + $(DOC_MODULE).hierarchy \ + $(DOC_MODULE).interfaces \ + $(DOC_MODULE).prerequisites \ + $(DOC_MODULE).signals \ + .libs/$(DOC_MODULE)-scan.o + +REPORT_FILES = \ + $(DOC_MODULE)-undocumented.txt \ + $(DOC_MODULE)-undeclared.txt \ + $(DOC_MODULE)-unused.txt + +CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) doc-registry.xml + +if ENABLE_GTK_DOC +all-local: html-build.stamp + +#### setup #### + +setup-build.stamp: $(content_files) + -@if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ + echo ' DOC Preparing build'; \ + files=`echo $(DOC_MAIN_SGML_FILE) $(DOC_OVERRIDES) $(DOC_MODULE)-sections.txt $(DOC_MODULE).types $(content_files)`; \ + if test "x$$files" != "x" ; then \ + for file in $$files ; do \ + test -f $(abs_srcdir)/$$file && \ + cp -pu $(abs_srcdir)/$$file $(abs_builddir)/ || true; \ + done; \ + fi; \ + fi + @touch setup-build.stamp + +#### scan #### + +# in the case of non-srcdir builds, the built gst directory gets added +# to gtk-doc scanning; but only then, to avoid duplicates +scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB) + @echo ' DOC Scanning header files' + @_source_dir='' ; \ + for i in $(DOC_SOURCE_DIR) ; do \ + _source_dir="$${_source_dir} --source-dir=$$i" ; \ + done ; \ + gtkdoc-scan \ + $(SCAN_OPTIONS) $(EXTRA_HFILES) \ + --module=$(DOC_MODULE) \ + $${_source_dir} \ + --ignore-headers="$(IGNORE_HFILES)" + @if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null; then \ + echo " DOC Introspecting gobjects"; \ + GST_PLUGIN_SYSTEM_PATH=`cd $(top_builddir) && pwd` \ + GST_PLUGIN_PATH= \ + GST_REGISTRY=doc-registry.xml \ + $(GTKDOC_EXTRA_ENVIRONMENT) \ + CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" \ + CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" \ + LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \ + gtkdoc-scangobj --type-init-func="gst_init(NULL,NULL)" \ + --module=$(DOC_MODULE) ; \ + else \ + for i in $(SCANOBJ_FILES) ; do \ + test -f $$i || touch $$i ; \ + done \ + fi + @touch scan-build.stamp + +$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp + @true + +#### xml #### + +sgml-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(expand_content_files) + @echo ' DOC Building XML' + @gtkdoc-mkdb --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) --output-format=xml $(MKDB_OPTIONS) + @cp ../version.entities xml + @touch sgml-build.stamp + +sgml.stamp: sgml-build.stamp + @true + +#### html #### + +html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) + @echo ' DOC Building HTML' + @rm -rf html + @mkdir html + @cp -pr xml html + @cp ../version.entities ./ + @mkhtml_options=""; \ + gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \ + if test "$(?)" = "0"; then \ + if test "x$(V)" = "x1"; then \ + mkhtml_options="$$mkhtml_options --verbose"; \ + fi; \ + fi; \ + @gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-path"; \ + if test "$(?)" = "0"; then \ + mkhtml_options=--path="$(abs_srcdir)"; \ + fi; \ + cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE) + @mv html/index.sgml html/index.sgml.bak + @$(SED) "s/ href=\"$(DOC_MODULE)\// href=\"$(DOC_MODULE)-@GST_MAJORMINOR@\//g" html/index.sgml.bak >html/index.sgml + @rm -f html/index.sgml.bak + @rm -rf html/xml + @rm -f version.entities + @test "x$(HTML_IMAGES)" = "x" || ( cd $(srcdir) && cp $(HTML_IMAGES) $(abs_builddir)/html ) + @echo ' DOC Fixing cross-references' + @gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS) + @touch html-build.stamp + +clean-local-gtkdoc: + @rm -rf xml tmpl html +# clean files copied for nonsrcdir templates build + @if test x"$(srcdir)" != x. ; then \ + rm -rf $(DOC_MODULE).types; \ + fi +else +all-local: +clean-local-gtkdoc: +endif + +clean-local: clean-local-gtkdoc + @rm -f *~ *.bak + @rm -rf .libs + +distclean-local: + @rm -f $(REPORT_FILES) \ + $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt + @rm -rf tmpl/*.sgml.bak + @rm -f $(DOC_MODULE).hierarchy + @rm -f *.stamp || true + @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ + rm -f $(DOC_MAIN_SGML_FILE) ; \ + rm -f $(DOC_OVERRIDES) ; \ + rm -f $(DOC_MODULE).types ; \ + rm -f $(DOC_MODULE).interfaces ; \ + rm -f $(DOC_MODULE).prerequisites ; \ + rm -f $(DOC_MODULE)-sections.txt ; \ + rm -f $(content_files) ; \ + rm -rf tmpl/*.sgml ; \ + fi + @rm -rf *.o + +maintainer-clean-local: clean + @cd $(srcdir) && rm -rf html \ + xml $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt + +# thomas: make docs parallel installable; devhelp requires majorminor too +install-data-local: + (installfiles=`echo $(builddir)/html/*.sgml $(builddir)/html/*.html $(builddir)/html/*.png $(builddir)/html/*.css`; \ + if test "$$installfiles" = '$(builddir)/html/*.sgml $(builddir)/html/*.html $(builddir)/html/*.png $(builddir)/html/*.css'; \ + then echo '-- Nothing to install' ; \ + else \ + $(mkinstalldirs) $(DESTDIR)$(TARGET_DIR); \ + for i in $$installfiles; do \ + echo '-- Installing '$$i ; \ + $(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR); \ + done; \ + echo '-- Installing $(builddir)/html/$(DOC_MODULE).devhelp2' ; \ + if test -e $(builddir)/html/$(DOC_MODULE).devhelp2; then \ + $(INSTALL_DATA) $(builddir)/html/$(DOC_MODULE).devhelp2 \ + $(DESTDIR)$(TARGET_DIR)/$(DOC_MODULE)-@GST_MAJORMINOR@.devhelp2; \ + fi; \ + (which gtkdoc-rebase >/dev/null && \ + gtkdoc-rebase --relative --dest-dir=$(DESTDIR) --html-dir=$(DESTDIR)$(TARGET_DIR)) || true ; \ + fi) +uninstall-local: + if test -d $(DESTDIR)$(TARGET_DIR); then \ + rm -rf $(DESTDIR)$(TARGET_DIR)/*; \ + rmdir -p $(DESTDIR)$(TARGET_DIR) 2>/dev/null || true; \ + else \ + echo '-- Nothing to uninstall' ; \ + fi; + + +# +# Require gtk-doc when making dist +# +if ENABLE_GTK_DOC +dist-check-gtkdoc: +else +dist-check-gtkdoc: + @echo "*** gtk-doc must be installed and enabled in order to make dist" + @false +endif + +dist-hook: dist-check-gtkdoc dist-hook-local + mkdir $(distdir)/html + cp html/* $(distdir)/html + -cp $(srcdir)/$(DOC_MODULE).types $(distdir)/ + -cp $(srcdir)/$(DOC_MODULE)-sections.txt $(distdir)/ + cd $(distdir) && rm -f $(DISTCLEANFILES) + -gtkdoc-rebase --online --relative --html-dir=$(distdir)/html + +.PHONY : dist-hook-local docs + +# avoid spurious build errors when distchecking with -jN +.NOTPARALLEL: diff --git a/common/m4/Makefile.am b/common/m4/Makefile.am new file mode 100644 index 0000000..2ddb8a7 --- /dev/null +++ b/common/m4/Makefile.am @@ -0,0 +1,42 @@ +EXTRA_DIST = \ + README \ + as-ac-expand.m4 \ + as-auto-alt.m4 \ + as-compiler-flag.m4 \ + as-compiler.m4 \ + as-docbook.m4 \ + as-gcc-inline-assembly.m4 \ + as-libtool.m4 \ + as-libtool-tags.m4 \ + as-objc.m4 \ + as-python.m4 \ + as-scrub-include.m4 \ + as-version.m4 \ + ax_create_stdint_h.m4 \ + glib-gettext.m4 \ + gst-arch.m4 \ + gst-args.m4 \ + gst-check.m4 \ + gst-debuginfo.m4 \ + gst-default.m4 \ + gst-doc.m4 \ + gst-dowhile.m4 \ + gst-error.m4 \ + gst-feature.m4 \ + gst-function.m4 \ + gst-gettext.m4 \ + gst-glib2.m4 \ + gst-libxml2.m4 \ + gst-parser.m4 \ + gst-package-release-datetime.m4 \ + gst-platform.m4 \ + gst-plugindir.m4 \ + gst-plugin-docs.m4 \ + gst-valgrind.m4 \ + gst-x11.m4 \ + gst.m4 \ + gtk-doc.m4 \ + introspection.m4 \ + pkg.m4 \ + check.m4 \ + orc.m4 diff --git a/common/m4/Makefile.in b/common/m4/Makefile.in new file mode 100644 index 0000000..e27962d --- /dev/null +++ b/common/m4/Makefile.in @@ -0,0 +1,505 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = common/m4 +DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ + $(top_srcdir)/common/m4/as-compiler-flag.m4 \ + $(top_srcdir)/common/m4/as-version.m4 \ + $(top_srcdir)/common/m4/gst-args.m4 \ + $(top_srcdir)/common/m4/gst-error.m4 \ + $(top_srcdir)/common/m4/gst-feature.m4 \ + $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ + $(top_srcdir)/common/m4/gst-plugindir.m4 \ + $(top_srcdir)/common/m4/gst-valgrind.m4 \ + $(top_srcdir)/common/m4/gst.m4 $(top_srcdir)/common/m4/pkg.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ERROR_CFLAGS = @ERROR_CFLAGS@ +EXEEXT = @EXEEXT@ +FFLAGS = @FFLAGS@ +FGREP = @FGREP@ +GCOV = @GCOV@ +GCOV_CFLAGS = @GCOV_CFLAGS@ +GCOV_LIBS = @GCOV_LIBS@ +GLIB_REQ = @GLIB_REQ@ +GREP = @GREP@ +GSTPB_REQ = @GSTPB_REQ@ +GST_BASE_CFLAGS = @GST_BASE_CFLAGS@ +GST_BASE_LIBS = @GST_BASE_LIBS@ +GST_CFLAGS = @GST_CFLAGS@ +GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@ +GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@ +GST_DISABLE_ALLOC_TRACE = @GST_DISABLE_ALLOC_TRACE@ +GST_DISABLE_GST_DEBUG = @GST_DISABLE_GST_DEBUG@ +GST_DISABLE_LOADSAVE = @GST_DISABLE_LOADSAVE@ +GST_DISABLE_PARSE = @GST_DISABLE_PARSE@ +GST_DISABLE_PLUGIN = @GST_DISABLE_PLUGIN@ +GST_DISABLE_REGISTRY = @GST_DISABLE_REGISTRY@ +GST_DISABLE_TRACE = @GST_DISABLE_TRACE@ +GST_DISABLE_XML = @GST_DISABLE_XML@ +GST_DP_CFLAGS = @GST_DP_CFLAGS@ +GST_DP_LIBS = @GST_DP_LIBS@ +GST_LIBS = @GST_LIBS@ +GST_MAJORMINOR = @GST_MAJORMINOR@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ +GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ +GST_OPTION_LIBS = @GST_OPTION_LIBS@ +GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@ +GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@ +GST_REQ = @GST_REQ@ +GTK_REQ = @GTK_REQ@ +IGNORE_GST_0_10_21 = @IGNORE_GST_0_10_21@ +IGNORE_GST_0_10_22 = @IGNORE_GST_0_10_22@ +IGNORE_GST_0_10_23 = @IGNORE_GST_0_10_23@ +IGNORE_GST_0_10_24 = @IGNORE_GST_0_10_24@ +IGNORE_GST_0_10_25 = @IGNORE_GST_0_10_25@ +IGNORE_GST_0_10_26 = @IGNORE_GST_0_10_26@ +IGNORE_GST_0_10_29 = @IGNORE_GST_0_10_29@ +IGNORE_GST_0_10_30 = @IGNORE_GST_0_10_30@ +IGNORE_GST_0_10_31 = @IGNORE_GST_0_10_31@ +IGNORE_GST_0_10_32 = @IGNORE_GST_0_10_32@ +IGNORE_GST_LOADSAVE = @IGNORE_GST_LOADSAVE@ +IGNORE_GST_PB_0_10_23 = @IGNORE_GST_PB_0_10_23@ +IGNORE_GST_PB_0_10_25 = @IGNORE_GST_PB_0_10_25@ +IGNORE_GST_PB_0_10_26 = @IGNORE_GST_PB_0_10_26@ +IGNORE_GST_PB_0_10_29 = @IGNORE_GST_PB_0_10_29@ +IGNORE_GST_PB_0_10_30 = @IGNORE_GST_PB_0_10_30@ +IGNORE_GST_PB_0_10_31 = @IGNORE_GST_PB_0_10_31@ +IGNORE_GST_PB_0_10_32 = @IGNORE_GST_PB_0_10_32@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@ +PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@ +PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@ +PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@ +PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PLUGINDIR = @PLUGINDIR@ +PYEXECDIR = @PYEXECDIR@ +PYGOBJECT_2_12_CFLAGS = @PYGOBJECT_2_12_CFLAGS@ +PYGOBJECT_2_12_LIBS = @PYGOBJECT_2_12_LIBS@ +PYGOBJECT_2_16_CFLAGS = @PYGOBJECT_2_16_CFLAGS@ +PYGOBJECT_2_16_LIBS = @PYGOBJECT_2_16_LIBS@ +PYGOBJECT_CFLAGS = @PYGOBJECT_CFLAGS@ +PYGOBJECT_LIBS = @PYGOBJECT_LIBS@ +PYGOBJECT_REQ = @PYGOBJECT_REQ@ +PYGST_CFLAGS = @PYGST_CFLAGS@ +PYGTK_CFLAGS = @PYGTK_CFLAGS@ +PYGTK_LIBS = @PYGTK_LIBS@ +PYGTK_REQ = @PYGTK_REQ@ +PYTHON = @PYTHON@ +PYTHONDIR = @PYTHONDIR@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_LIB_LOC = @PYTHON_LIB_LOC@ +PYTHON_LIB_SUFFIX = @PYTHON_LIB_SUFFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VALGRIND_PATH = @VALGRIND_PATH@ +VERSION = @VERSION@ +WARNING_CFLAGS = @WARNING_CFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +plugindir = @plugindir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = \ + README \ + as-ac-expand.m4 \ + as-auto-alt.m4 \ + as-compiler-flag.m4 \ + as-compiler.m4 \ + as-docbook.m4 \ + as-gcc-inline-assembly.m4 \ + as-libtool.m4 \ + as-libtool-tags.m4 \ + as-objc.m4 \ + as-python.m4 \ + as-scrub-include.m4 \ + as-version.m4 \ + ax_create_stdint_h.m4 \ + glib-gettext.m4 \ + gst-arch.m4 \ + gst-args.m4 \ + gst-check.m4 \ + gst-debuginfo.m4 \ + gst-default.m4 \ + gst-doc.m4 \ + gst-dowhile.m4 \ + gst-error.m4 \ + gst-feature.m4 \ + gst-function.m4 \ + gst-gettext.m4 \ + gst-glib2.m4 \ + gst-libxml2.m4 \ + gst-parser.m4 \ + gst-package-release-datetime.m4 \ + gst-platform.m4 \ + gst-plugindir.m4 \ + gst-plugin-docs.m4 \ + gst-valgrind.m4 \ + gst-x11.m4 \ + gst.m4 \ + gtk-doc.m4 \ + introspection.m4 \ + pkg.m4 \ + check.m4 \ + orc.m4 + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu common/m4/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu common/m4/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/common/m4/README b/common/m4/README new file mode 100644 index 0000000..867a344 --- /dev/null +++ b/common/m4/README @@ -0,0 +1,3 @@ +All aclocal .m4 files we need are put here and cat'd to acinclude.m4 in +the source root. Official ones (taken from the relevant devel packages) +are named as-is, unofficial ones (or changed ones) get a gst-prefix. diff --git a/common/m4/as-ac-expand.m4 b/common/m4/as-ac-expand.m4 new file mode 100644 index 0000000..d6c9e33 --- /dev/null +++ b/common/m4/as-ac-expand.m4 @@ -0,0 +1,43 @@ +dnl as-ac-expand.m4 0.2.0 +dnl autostars m4 macro for expanding directories using configure's prefix +dnl thomas@apestaart.org + +dnl AS_AC_EXPAND(VAR, CONFIGURE_VAR) +dnl example +dnl AS_AC_EXPAND(SYSCONFDIR, $sysconfdir) +dnl will set SYSCONFDIR to /usr/local/etc if prefix=/usr/local + +AC_DEFUN([AS_AC_EXPAND], +[ + EXP_VAR=[$1] + FROM_VAR=[$2] + + dnl first expand prefix and exec_prefix if necessary + prefix_save=$prefix + exec_prefix_save=$exec_prefix + + dnl if no prefix given, then use /usr/local, the default prefix + if test "x$prefix" = "xNONE"; then + prefix="$ac_default_prefix" + fi + dnl if no exec_prefix given, then use prefix + if test "x$exec_prefix" = "xNONE"; then + exec_prefix=$prefix + fi + + full_var="$FROM_VAR" + dnl loop until it doesn't change anymore + while true; do + new_full_var="`eval echo $full_var`" + if test "x$new_full_var" = "x$full_var"; then break; fi + full_var=$new_full_var + done + + dnl clean up + full_var=$new_full_var + AC_SUBST([$1], "$full_var") + + dnl restore prefix and exec_prefix + prefix=$prefix_save + exec_prefix=$exec_prefix_save +]) diff --git a/common/m4/as-auto-alt.m4 b/common/m4/as-auto-alt.m4 new file mode 100644 index 0000000..3f7920d --- /dev/null +++ b/common/m4/as-auto-alt.m4 @@ -0,0 +1,50 @@ +dnl as-auto-alt.m4 0.0.2 +dnl autostars m4 macro for supplying alternate autotools versions to configure +dnl thomas@apestaart.org +dnl +dnl AS_AUTOTOOLS_ALTERNATE() +dnl +dnl supplies --with arguments for autoconf, autoheader, automake, aclocal + +AC_DEFUN([AS_AUTOTOOLS_ALTERNATE], +[ + dnl allow for different autoconf version + AC_ARG_WITH(autoconf, + AC_HELP_STRING([--with-autoconf], + [use a different autoconf for regeneration of Makefiles]), + [ + unset AUTOCONF + AM_MISSING_PROG(AUTOCONF, ${withval}) + AC_MSG_NOTICE([Using $AUTOCONF as autoconf]) + ]) + + dnl allow for different autoheader version + AC_ARG_WITH(autoheader, + AC_HELP_STRING([--with-autoheader], + [use a different autoheader for regeneration of Makefiles]), + [ + unset AUTOHEADER + AM_MISSING_PROG(AUTOHEADER, ${withval}) + AC_MSG_NOTICE([Using $AUTOHEADER as autoheader]) + ]) + + dnl allow for different automake version + AC_ARG_WITH(automake, + AC_HELP_STRING([--with-automake], + [use a different automake for regeneration of Makefiles]), + [ + unset AUTOMAKE + AM_MISSING_PROG(AUTOMAKE, ${withval}) + AC_MSG_NOTICE([Using $AUTOMAKE as automake]) + ]) + + dnl allow for different aclocal version + AC_ARG_WITH(aclocal, + AC_HELP_STRING([--with-aclocal], + [use a different aclocal for regeneration of Makefiles]), + [ + unset ACLOCAL + AM_MISSING_PROG(ACLOCAL, ${withval}) + AC_MSG_NOTICE([Using $ACLOCAL as aclocal]) + ]) +]) diff --git a/common/m4/as-compiler-flag.m4 b/common/m4/as-compiler-flag.m4 new file mode 100644 index 0000000..882a4c7 --- /dev/null +++ b/common/m4/as-compiler-flag.m4 @@ -0,0 +1,64 @@ +dnl as-compiler-flag.m4 0.1.0 + +dnl autostars m4 macro for detection of compiler flags + +dnl David Schleef +dnl Tim-Philipp Müller + +dnl AS_COMPILER_FLAG(CFLAGS, ACTION-IF-ACCEPTED, [ACTION-IF-NOT-ACCEPTED]) +dnl Tries to compile with the given CFLAGS. +dnl Runs ACTION-IF-ACCEPTED if the compiler can compile with the flags, +dnl and ACTION-IF-NOT-ACCEPTED otherwise. + +AC_DEFUN([AS_COMPILER_FLAG], +[ + AC_MSG_CHECKING([to see if compiler understands $1]) + + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $1" + + AC_TRY_COMPILE([ ], [], [flag_ok=yes], [flag_ok=no]) + CFLAGS="$save_CFLAGS" + + if test "X$flag_ok" = Xyes ; then + $2 + true + else + $3 + true + fi + AC_MSG_RESULT([$flag_ok]) +]) + +dnl AS_CXX_COMPILER_FLAG(CPPFLAGS, ACTION-IF-ACCEPTED, [ACTION-IF-NOT-ACCEPTED]) +dnl Tries to compile with the given CPPFLAGS. +dnl Runs ACTION-IF-ACCEPTED if the compiler can compile with the flags, +dnl and ACTION-IF-NOT-ACCEPTED otherwise. + +AC_DEFUN([AS_CXX_COMPILER_FLAG], +[ + AC_REQUIRE([AC_PROG_CXX]) + + AC_MSG_CHECKING([to see if c++ compiler understands $1]) + + save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $1" + + AC_LANG_PUSH(C++) + + AC_TRY_COMPILE([ ], [], [flag_ok=yes], [flag_ok=no]) + CPPFLAGS="$save_CPPFLAGS" + + if test "X$flag_ok" = Xyes ; then + $2 + true + else + $3 + true + fi + + AC_LANG_POP(C++) + + AC_MSG_RESULT([$flag_ok]) +]) + diff --git a/common/m4/as-compiler.m4 b/common/m4/as-compiler.m4 new file mode 100644 index 0000000..309a060 --- /dev/null +++ b/common/m4/as-compiler.m4 @@ -0,0 +1,44 @@ +dnl as-compiler.m4 0.1.0 + +dnl autostars m4 macro for detection of compiler flavor + +dnl Thomas Vander Stichele + +dnl $Id: as-compiler.m4,v 1.4 2004/06/01 09:44:19 thomasvs Exp $ + +dnl AS_COMPILER(COMPILER) +dnl will set variable COMPILER to +dnl - gcc +dnl - forte +dnl - (empty) if no guess could be made + +AC_DEFUN([AS_COMPILER], +[ + as_compiler= + AC_MSG_CHECKING(for compiler flavour) + + dnl is it gcc ? + if test "x$GCC" = "xyes"; then + as_compiler="gcc" + fi + + dnl is it forte ? + AC_TRY_RUN([ +int main +(int argc, char *argv[]) +{ +#ifdef __sun + return 0; +#else + return 1; +#endif +} + ], as_compiler="forte", ,) + + if test "x$as_compiler" = "x"; then + AC_MSG_RESULT([unknown !]) + else + AC_MSG_RESULT($as_compiler) + fi + [$1]=$as_compiler +]) diff --git a/common/m4/as-docbook.m4 b/common/m4/as-docbook.m4 new file mode 100644 index 0000000..8a1b32a --- /dev/null +++ b/common/m4/as-docbook.m4 @@ -0,0 +1,66 @@ +dnl AS_DOCBOOK([, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) +dnl checks if xsltproc can build docbook documentation +dnl (which is possible if the catalog is set up properly +dnl I also tried checking for a specific version and type of docbook +dnl but xsltproc seemed to happily run anyway, so we can't check for that +dnl and version +dnl this macro takes inspiration from +dnl http://www.movement.uklinux.net/docs/docbook-autotools/configure.html +AC_DEFUN([AS_DOCBOOK], +[ + XSLTPROC_FLAGS=--nonet + DOCBOOK_ROOT= + TYPE_LC=xml + TYPE_UC=XML + DOCBOOK_VERSION=4.1.2 + + if test ! -f /etc/xml/catalog; then + for i in /usr/share/sgml/docbook/stylesheet/xsl/nwalsh /usr/share/sgml/docbook/xsl-stylesheets/ /usr/local/share/xsl/docbook ; + do + if test -d "$i"; then + DOCBOOK_ROOT=$i + fi + done + else + XML_CATALOG=/etc/xml/catalog + CAT_ENTRY_START='' + fi + + dnl We need xsltproc to process the test + AC_CHECK_PROG(XSLTPROC,xsltproc,xsltproc,) + XSLTPROC_WORKS=no + if test -n "$XSLTPROC"; then + AC_MSG_CHECKING([whether xsltproc docbook processing works]) + + if test -n "$XML_CATALOG"; then + DB_FILE="http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl" + else + DB_FILE="$DOCBOOK_ROOT/xhtml/docbook.xsl" + fi + $XSLTPROC $XSLTPROC_FLAGS $DB_FILE >/dev/null 2>&1 << END + + + + +END + if test "$?" = 0; then + XSLTPROC_WORKS=yes + fi + AC_MSG_RESULT($XSLTPROC_WORKS) + fi + + if test "x$XSLTPROC_WORKS" = "xyes"; then + dnl execute ACTION-IF-FOUND + ifelse([$1], , :, [$1]) + else + dnl execute ACTION-IF-NOT-FOUND + ifelse([$2], , :, [$2]) + fi + + AC_SUBST(XML_CATALOG) + AC_SUBST(XSLTPROC_FLAGS) + AC_SUBST(DOCBOOK_ROOT) + AC_SUBST(CAT_ENTRY_START) + AC_SUBST(CAT_ENTRY_END) +]) diff --git a/common/m4/as-gcc-inline-assembly.m4 b/common/m4/as-gcc-inline-assembly.m4 new file mode 100644 index 0000000..af32104 --- /dev/null +++ b/common/m4/as-gcc-inline-assembly.m4 @@ -0,0 +1,52 @@ +dnl as-gcc-inline-assembly.m4 0.1.0 + +dnl autostars m4 macro for detection of gcc inline assembly + +dnl David Schleef + +dnl $Id$ + +dnl AS_COMPILER_FLAG(ACTION-IF-ACCEPTED, [ACTION-IF-NOT-ACCEPTED]) +dnl Tries to compile with the given CFLAGS. +dnl Runs ACTION-IF-ACCEPTED if the compiler can compile with the flags, +dnl and ACTION-IF-NOT-ACCEPTED otherwise. + +AC_DEFUN([AS_GCC_INLINE_ASSEMBLY], +[ + AC_MSG_CHECKING([if compiler supports gcc-style inline assembly]) + + AC_TRY_COMPILE([], [ +#ifdef __GNUC_MINOR__ +#if (__GNUC__ * 1000 + __GNUC_MINOR__) < 3004 +#error GCC before 3.4 has critical bugs compiling inline assembly +#endif +#endif +__asm__ (""::) ], [flag_ok=yes], [flag_ok=no]) + + if test "X$flag_ok" = Xyes ; then + $1 + true + else + $2 + true + fi + AC_MSG_RESULT([$flag_ok]) +]) + + +AC_DEFUN([AS_GCC_ASM_POWERPC_FPU], +[ + AC_MSG_CHECKING([if compiler supports FPU instructions on PowerPC]) + + AC_TRY_COMPILE([], [__asm__ ("fadd 0,0,0"::) ], [flag_ok=yes], [flag_ok=no]) + + if test "X$flag_ok" = Xyes ; then + $1 + true + else + $2 + true + fi + AC_MSG_RESULT([$flag_ok]) +]) + diff --git a/common/m4/as-libtool-tags.m4 b/common/m4/as-libtool-tags.m4 new file mode 100644 index 0000000..06f0ae4 --- /dev/null +++ b/common/m4/as-libtool-tags.m4 @@ -0,0 +1,83 @@ +dnl as-libtool-tags.m4 0.1.4 + +dnl autostars m4 macro for selecting libtool "tags" (languages) + +dnl Andy Wingo does not claim credit for this macro +dnl backported from libtool 1.6 by Paolo Bonzini +dnl see http://lists.gnu.org/archive/html/libtool/2003-12/msg00007.html + +dnl $Id$ + +dnl AS_LIBTOOL_TAGS([tags...]) + +dnl example +dnl AS_LIBTOOL_TAGS([]) for only C (no fortran, etc) + +dnl When AC_LIBTOOL_TAGS is used, I redefine _LT_AC_TAGCONFIG +dnl to be more similar to the libtool 1.6 implementation, which +dnl uses an m4 loop and m4 case instead of a shell loop. This +dnl way the CXX/GCJ/F77/RC tests are not always expanded. + +dnl AS_LIBTOOL_TAGS +dnl --------------- +dnl tags to enable +AC_DEFUN([AS_LIBTOOL_TAGS], +[m4_define([_LT_TAGS],[$1]) +m4_define([_LT_AC_TAGCONFIG], [ + # redefined LT AC TAGCONFIG + if test -f "$ltmain"; then + if test ! -f "${ofile}"; then + AC_MSG_WARN([output file `$ofile' does not exist]) + fi + + if test -z "$LTCC"; then + eval "`$SHELL ${ofile} --config | grep '^LTCC='`" + if test -z "$LTCC"; then + AC_MSG_WARN([output file `$ofile' does not look like a libtool script]) + else + AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile']) + fi + fi + + AC_FOREACH([_LT_TAG], _LT_TAGS, + echo THOMAS: tag _LT_TAG + [m4_case(_LT_TAG, + [CXX], [ + if test -n "$CXX" && test "X$CXX" != "Xno"; then + echo "THOMAS: YAY CXX" + AC_LIBTOOL_LANG_CXX_CONFIG + available_tags="$available_tags _LT_TAG" + fi], + [F77], [ + if test -n "$F77" && test "X$F77" != "Xno"; then + AC_LIBTOOL_LANG_F77_CONFIG + available_tags="$available_tags _LT_TAG" + fi], + [GCJ], [ + if test -n "$GCJ" && test "X$GCJ" != "Xno"; then + AC_LIBTOOL_LANG_GCJ_CONFIG + available_tags="$available_tags _LT_TAG" + fi], + [RC], [ + if test -n "$RC" && test "X$RC" != "Xno"; then + AC_LIBTOOL_LANG_RC_CONFIG + available_tags="$available_tags _LT_TAG" + fi], + [m4_errprintn(m4_location[: error: invalid tag name: ]"_LT_TAG") + m4_exit(1)]) + ]) + echo THOMAS: available tags: $available_tags + fi + # Now substitute the updated list of available tags. + if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then + mv "${ofile}T" "$ofile" + chmod +x "$ofile" + AC_MSG_NOTICE([updated available libtool tags with $available_tags.]) + else + rm -f "${ofile}T" + AC_MSG_ERROR([unable to update list of available tagged configurations.]) + + fi + +])dnl _LT_AC_TAG_CONFIG +]) diff --git a/common/m4/as-libtool.m4 b/common/m4/as-libtool.m4 new file mode 100644 index 0000000..25de9d1 --- /dev/null +++ b/common/m4/as-libtool.m4 @@ -0,0 +1,45 @@ +dnl as-libtool.m4 0.1.4 + +dnl autostars m4 macro for libtool versioning + +dnl Thomas Vander Stichele + +dnl $Id: as-libtool.m4,v 1.10 2005/10/15 13:44:23 thomasvs Exp $ + +dnl AS_LIBTOOL(PREFIX, CURRENT, REVISION, AGE, [RELEASE]) + +dnl example +dnl AS_LIBTOOL(GST, 2, 0, 0) + +dnl this macro +dnl - defines [$PREFIX]_CURRENT, REVISION and AGE +dnl - defines [$PREFIX]_LIBVERSION +dnl - defines [$PREFIX]_LT_LDFLAGS to set versioning +dnl - AC_SUBST's them all + +dnl if RELEASE is given, then add a -release option to the LDFLAGS +dnl with the given release version +dnl then use [$PREFIX]_LT_LDFLAGS in the relevant Makefile.am's + +dnl call AM_PROG_LIBTOOL after this call + +AC_DEFUN([AS_LIBTOOL], +[ + [$1]_CURRENT=[$2] + [$1]_REVISION=[$3] + [$1]_AGE=[$4] + [$1]_LIBVERSION=[$2]:[$3]:[$4] + AC_SUBST([$1]_CURRENT) + AC_SUBST([$1]_REVISION) + AC_SUBST([$1]_AGE) + AC_SUBST([$1]_LIBVERSION) + + [$1]_LT_LDFLAGS="$[$1]_LT_LDFLAGS -version-info $[$1]_LIBVERSION" + if test ! -z "[$5]" + then + [$1]_LT_LDFLAGS="$[$1]_LT_LDFLAGS -release [$5]" + fi + AC_SUBST([$1]_LT_LDFLAGS) + + AC_LIBTOOL_DLOPEN +]) diff --git a/common/m4/as-objc.m4 b/common/m4/as-objc.m4 new file mode 100644 index 0000000..1e7066a --- /dev/null +++ b/common/m4/as-objc.m4 @@ -0,0 +1,56 @@ + + +# AC_PROG_OBJC([LIST-OF-COMPILERS]) +# +AC_DEFUN([AS_PROG_OBJC], +[ +AC_CHECK_TOOLS(OBJC, + [m4_default([$1], [objcc objc gcc cc CC])], + none) +AC_SUBST(OBJC) +OBJC_LDFLAGS="-lobjc" +AC_SUBST(OBJC_LDFLAGS) +if test "x$OBJC" != xnone ; then + _AM_DEPENDENCIES(OBJC) + AC_MSG_CHECKING([if Objective C compiler works]) + cat >>conftest.m < +@interface Moo:Object +{ +} +- moo; +int main(); +@end + +@implementation Moo +- moo +{ + exit(0); +} + +int main() +{ + id moo; + moo = [[Moo new]]; + [[moo moo]]; + return 1; +} +@end +EOF + ${OBJC} conftest.m ${OBJC_LDFLAGS} >&5 2>&5 + if test -f a.out -o -f a.exe ; then + result=yes + else + result=no + echo failed program is: >&5 + cat conftest.m >&5 + fi + rm -f conftest.m a.out a.exe + AC_MSG_RESULT([$result]) +else + _AM_DEPENDENCIES(OBJC) +fi + +]) + + diff --git a/common/m4/as-python.m4 b/common/m4/as-python.m4 new file mode 100644 index 0000000..eb9b175 --- /dev/null +++ b/common/m4/as-python.m4 @@ -0,0 +1,152 @@ +## ------------------------ +## Python file handling +## From Andrew Dalke +## Updated by James Henstridge +## Updated by Andy Wingo to loop through possible pythons +## ------------------------ + +# AS_PATH_PYTHON([MINIMUM-VERSION]) + +# Adds support for distributing Python modules and packages. To +# install modules, copy them to $(pythondir), using the python_PYTHON +# automake variable. To install a package with the same name as the +# automake package, install to $(pkgpythondir), or use the +# pkgpython_PYTHON automake variable. + +# The variables $(pyexecdir) and $(pkgpyexecdir) are provided as +# locations to install python extension modules (shared libraries). +# Another macro is required to find the appropriate flags to compile +# extension modules. + +# If your package is configured with a different prefix to python, +# users will have to add the install directory to the PYTHONPATH +# environment variable, or create a .pth file (see the python +# documentation for details). + +# If the MINIMUM-VERSION argument is passed, AS_PATH_PYTHON will +# cause an error if the version of python installed on the system +# doesn't meet the requirement. MINIMUM-VERSION should consist of +# numbers and dots only. + +# Updated to loop over all possible python binaries by Andy Wingo +# +# Updated to only warn and unset PYTHON if no good one is found + +AC_DEFUN([AS_PATH_PYTHON], + [ + dnl Find a version of Python. I could check for python versions 1.4 + dnl or earlier, but the default installation locations changed from + dnl $prefix/lib/site-python in 1.4 to $prefix/lib/python1.5/site-packages + dnl in 1.5, and I don't want to maintain that logic. + + dnl should we do the version check? + PYTHON_CANDIDATES="python python2.2 python2.1 python2.0 python2 \ + python1.6 python1.5" + ifelse([$1],[], + [AC_PATH_PROG(PYTHON, $PYTHON_CANDIDATES)], + [ + AC_MSG_NOTICE(Looking for Python version >= $1) + changequote(<<, >>)dnl + prog=" +import sys, string +minver = '$1' +# split string by '.' and convert to numeric +minver_info = map(string.atoi, string.split(minver, '.')) +# we can now do comparisons on the two lists: +if sys.version_info >= tuple(minver_info): + sys.exit(0) +else: + sys.exit(1)" + changequote([, ])dnl + + python_good=false + for python_candidate in $PYTHON_CANDIDATES; do + unset PYTHON + AC_PATH_PROG(PYTHON, $python_candidate) 1> /dev/null 2> /dev/null + + if test "x$PYTHON" = "x"; then continue; fi + + if $PYTHON -c "$prog" 1>&AC_FD_CC 2>&AC_FD_CC; then + AC_MSG_CHECKING(["$PYTHON":]) + AC_MSG_RESULT([okay]) + python_good=true + break; + else + dnl clear the cache val + unset ac_cv_path_PYTHON + fi + done + ]) + + if test "$python_good" != "true"; then + AC_MSG_WARN([No suitable version of python found]) + PYTHON= + else + + AC_MSG_CHECKING([local Python configuration]) + + dnl Query Python for its version number. Getting [:3] seems to be + dnl the best way to do this; it's what "site.py" does in the standard + dnl library. Need to change quote character because of [:3] + + AC_SUBST(PYTHON_VERSION) + changequote(<<, >>)dnl + PYTHON_VERSION=`$PYTHON -c "import sys; print sys.version[:3]"` + changequote([, ])dnl + + + dnl Use the values of $prefix and $exec_prefix for the corresponding + dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made + dnl distinct variables so they can be overridden if need be. However, + dnl general consensus is that you shouldn't need this ability. + + AC_SUBST(PYTHON_PREFIX) + PYTHON_PREFIX='${prefix}' + + AC_SUBST(PYTHON_EXEC_PREFIX) + PYTHON_EXEC_PREFIX='${exec_prefix}' + + dnl At times (like when building shared libraries) you may want + dnl to know which OS platform Python thinks this is. + + AC_SUBST(PYTHON_PLATFORM) + PYTHON_PLATFORM=`$PYTHON -c "import sys; print sys.platform"` + + + dnl Set up 4 directories: + + dnl pythondir -- where to install python scripts. This is the + dnl site-packages directory, not the python standard library + dnl directory like in previous automake betas. This behaviour + dnl is more consistent with lispdir.m4 for example. + dnl + dnl Also, if the package prefix isn't the same as python's prefix, + dnl then the old $(pythondir) was pretty useless. + + AC_SUBST(pythondir) + pythondir=$PYTHON_PREFIX"/lib/python"$PYTHON_VERSION/site-packages + + dnl pkgpythondir -- $PACKAGE directory under pythondir. Was + dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is + dnl more consistent with the rest of automake. + dnl Maybe this should be put in python.am? + + AC_SUBST(pkgpythondir) + pkgpythondir=\${pythondir}/$PACKAGE + + dnl pyexecdir -- directory for installing python extension modules + dnl (shared libraries) Was PYTHON_SITE_EXEC in previous betas. + + AC_SUBST(pyexecdir) + pyexecdir=$PYTHON_EXEC_PREFIX"/lib/python"$PYTHON_VERSION/site-packages + + dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE) + dnl Maybe this should be put in python.am? + + AC_SUBST(pkgpyexecdir) + pkgpyexecdir=\${pyexecdir}/$PACKAGE + + AC_MSG_RESULT([looks good]) + + fi +]) diff --git a/common/m4/as-scrub-include.m4 b/common/m4/as-scrub-include.m4 new file mode 100644 index 0000000..3ed49b0 --- /dev/null +++ b/common/m4/as-scrub-include.m4 @@ -0,0 +1,36 @@ +dnl as-scrub-include.m4 0.0.4 + +dnl autostars m4 macro for scrubbing CFLAGS of system include dirs +dnl because gcc 3.x complains about including system including dirs + +dnl Thomas Vander Stichele + +dnl $Id: as-scrub-include.m4,v 1.7 2004/06/12 08:30:20 thomasvs Exp $ + +dnl This macro uses output of cpp -v and expects it to contain text that +dnl looks a little bit like this: +dnl #include <...> search starts here: +dnl /usr/local/include +dnl /usr/lib/gcc-lib/i386-redhat-linux/3.2/include +dnl /usr/include +dnl End of search list. + +dnl AS_SCRUB_INCLUDE(VAR) +dnl example +dnl AS_SCRUB_INCLUDE(CFLAGS) +dnl will remove all system include dirs from the given CFLAGS + +AC_DEFUN([AS_SCRUB_INCLUDE], +[ + GIVEN_CFLAGS=$[$1] + INCLUDE_DIRS=`echo | cpp -v 2>&1` + + dnl remove everything from this output between the "starts here" and "End of" + dnl line + INCLUDE_DIRS=`echo $INCLUDE_DIRS | sed -e 's/.*<...> search starts here://' | sed -e 's/End of search list.*//'` + for dir in $INCLUDE_DIRS; do + dnl use "" as the sed script so $dir gets expanded + GIVEN_CFLAGS=`echo $GIVEN_CFLAGS | sed -e "s#-I$dir ##"` + done + [$1]=$GIVEN_CFLAGS +]) diff --git a/common/m4/as-version.m4 b/common/m4/as-version.m4 new file mode 100644 index 0000000..22ff774 --- /dev/null +++ b/common/m4/as-version.m4 @@ -0,0 +1,75 @@ +dnl as-version.m4 0.2.0 + +dnl autostars m4 macro for versioning + +dnl Thomas Vander Stichele + +dnl $Id: as-version.m4,v 1.15 2006/04/01 09:40:24 thomasvs Exp $ + +dnl AS_VERSION + +dnl example +dnl AS_VERSION + +dnl this macro +dnl - AC_SUBST's PACKAGE_VERSION_MAJOR, _MINOR, _MICRO +dnl - AC_SUBST's PACKAGE_VERSION_RELEASE, +dnl which can be used for rpm release fields +dnl - doesn't call AM_INIT_AUTOMAKE anymore because it prevents +dnl maintainer mode from running correctly +dnl +dnl don't forget to put #undef PACKAGE_VERSION_RELEASE in acconfig.h +dnl if you use acconfig.h + +AC_DEFUN([AS_VERSION], +[ + PACKAGE_VERSION_MAJOR=$(echo AC_PACKAGE_VERSION | cut -d'.' -f1) + PACKAGE_VERSION_MINOR=$(echo AC_PACKAGE_VERSION | cut -d'.' -f2) + PACKAGE_VERSION_MICRO=$(echo AC_PACKAGE_VERSION | cut -d'.' -f3) + + AC_SUBST(PACKAGE_VERSION_MAJOR) + AC_SUBST(PACKAGE_VERSION_MINOR) + AC_SUBST(PACKAGE_VERSION_MICRO) +]) + +dnl AS_NANO(ACTION-IF-NANO-NON-NULL, [ACTION-IF-NANO-NULL]) + +dnl requires AC_INIT to be called before +dnl For projects using a fourth or nano number in your versioning to indicate +dnl development or prerelease snapshots, this macro allows the build to be +dnl set up differently accordingly. + +dnl this macro: +dnl - parses AC_PACKAGE_VERSION, set by AC_INIT, and extracts the nano number +dnl - sets the variable PACKAGE_VERSION_NANO +dnl - sets the variable PACKAGE_VERSION_RELEASE, which can be used +dnl for rpm release fields +dnl - executes ACTION-IF-NANO-NON-NULL or ACTION-IF-NANO-NULL + +dnl example: +dnl AS_NANO(RELEASE="yes", RELEASE="no") + +AC_DEFUN([AS_NANO], +[ + AC_MSG_CHECKING(nano version) + + NANO=$(echo AC_PACKAGE_VERSION | cut -d'.' -f4) + + if test x"$NANO" = x || test "x$NANO" = "x0" ; then + AC_MSG_RESULT([0 (release)]) + NANO=0 + PACKAGE_VERSION_RELEASE=1 + ifelse([$1], , :, [$1]) + else + AC_MSG_RESULT($NANO) + PACKAGE_VERSION_RELEASE=0.`date +%Y%m%d.%H%M%S` + if test "x$NANO" != "x1" ; then + ifelse([$1], , :, [$1]) + else + ifelse([$2], , :, [$2]) + fi + fi + PACKAGE_VERSION_NANO=$NANO + AC_SUBST(PACKAGE_VERSION_NANO) + AC_SUBST(PACKAGE_VERSION_RELEASE) +]) diff --git a/common/m4/ax_create_stdint_h.m4 b/common/m4/ax_create_stdint_h.m4 new file mode 100644 index 0000000..13bf699 --- /dev/null +++ b/common/m4/ax_create_stdint_h.m4 @@ -0,0 +1,734 @@ +##### http://autoconf-archive.cryp.to/ax_create_stdint_h.html +# +# SYNOPSIS +# +# AX_CREATE_STDINT_H [( HEADER-TO-GENERATE [, HEDERS-TO-CHECK])] +# +# DESCRIPTION +# +# the "ISO C9X: 7.18 Integer types " section requires the +# existence of an include file that defines a set of +# typedefs, especially uint8_t,int32_t,uintptr_t. Many older +# installations will not provide this file, but some will have the +# very same definitions in . In other enviroments we can +# use the inet-types in which would define the typedefs +# int8_t and u_int8_t respectivly. +# +# This macros will create a local "_stdint.h" or the headerfile given +# as an argument. In many cases that file will just "#include +# " or "#include ", while in other environments +# it will provide the set of basic 'stdint's definitions/typedefs: +# +# int8_t,uint8_t,int16_t,uint16_t,int32_t,uint32_t,intptr_t,uintptr_t +# int_least32_t.. int_fast32_t.. intmax_t +# +# which may or may not rely on the definitions of other files, or +# using the AC_CHECK_SIZEOF macro to determine the actual sizeof each +# type. +# +# if your header files require the stdint-types you will want to +# create an installable file mylib-int.h that all your other +# installable header may include. So if you have a library package +# named "mylib", just use +# +# AX_CREATE_STDINT_H(mylib-int.h) +# +# in configure.ac and go to install that very header file in +# Makefile.am along with the other headers (mylib.h) - and the +# mylib-specific headers can simply use "#include " to +# obtain the stdint-types. +# +# Remember, if the system already had a valid , the +# generated file will include it directly. No need for fuzzy +# HAVE_STDINT_H things... (oops, GCC 4.2.x has deliberatly disabled +# its stdint.h for non-c99 compilation and the c99-mode is not the +# default. Therefore this macro will not use the compiler's stdint.h +# - please complain to the GCC developers). +# +# LAST MODIFICATION +# +# 2007-06-27 +# +# COPYLEFT +# +# Copyright (c) 2007 Guido U. Draheim +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program 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 +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. +# +# As a special exception, the respective Autoconf Macro's copyright +# owner gives unlimited permission to copy, distribute and modify the +# configure scripts that are the output of Autoconf when processing +# the Macro. You need not follow the terms of the GNU General Public +# License when using or distributing such scripts, even though +# portions of the text of the Macro appear in them. The GNU General +# Public License (GPL) does govern all other use of the material that +# constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the +# Autoconf Macro released by the Autoconf Macro Archive. When you +# make and distribute a modified version of the Autoconf Macro, you +# may extend this special exception to the GPL to apply to your +# modified version as well. + +AC_DEFUN([AX_CHECK_DATA_MODEL],[ + AC_CHECK_SIZEOF(char) + AC_CHECK_SIZEOF(short) + AC_CHECK_SIZEOF(int) + AC_CHECK_SIZEOF(long) + AC_CHECK_SIZEOF(void*) + ac_cv_char_data_model="" + ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_char" + ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_short" + ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_int" + ac_cv_long_data_model="" + ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_int" + ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_long" + ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_voidp" + AC_MSG_CHECKING([data model]) + case "$ac_cv_char_data_model/$ac_cv_long_data_model" in + 122/242) ac_cv_data_model="IP16" ; n="standard 16bit machine" ;; + 122/244) ac_cv_data_model="LP32" ; n="standard 32bit machine" ;; + 122/*) ac_cv_data_model="i16" ; n="unusual int16 model" ;; + 124/444) ac_cv_data_model="ILP32" ; n="standard 32bit unixish" ;; + 124/488) ac_cv_data_model="LP64" ; n="standard 64bit unixish" ;; + 124/448) ac_cv_data_model="LLP64" ; n="unusual 64bit unixish" ;; + 124/*) ac_cv_data_model="i32" ; n="unusual int32 model" ;; + 128/888) ac_cv_data_model="ILP64" ; n="unusual 64bit numeric" ;; + 128/*) ac_cv_data_model="i64" ; n="unusual int64 model" ;; + 222/*2) ac_cv_data_model="DSP16" ; n="strict 16bit dsptype" ;; + 333/*3) ac_cv_data_model="DSP24" ; n="strict 24bit dsptype" ;; + 444/*4) ac_cv_data_model="DSP32" ; n="strict 32bit dsptype" ;; + 666/*6) ac_cv_data_model="DSP48" ; n="strict 48bit dsptype" ;; + 888/*8) ac_cv_data_model="DSP64" ; n="strict 64bit dsptype" ;; + 222/*|333/*|444/*|666/*|888/*) : + ac_cv_data_model="iDSP" ; n="unusual dsptype" ;; + *) ac_cv_data_model="none" ; n="very unusual model" ;; + esac + AC_MSG_RESULT([$ac_cv_data_model ($ac_cv_long_data_model, $n)]) +]) + +dnl AX_CHECK_HEADER_STDINT_X([HEADERLIST][,ACTION-IF]) +AC_DEFUN([AX_CHECK_HEADER_STDINT_X],[ +AC_CACHE_CHECK([for stdint uintptr_t], [ac_cv_header_stdint_x],[ + ac_cv_header_stdint_x="" # the 1997 typedefs (inttypes.h) + AC_MSG_RESULT([(..)]) + for i in m4_ifval([$1],[$1],[stdint.h inttypes.h sys/inttypes.h sys/types.h]) + do + unset ac_cv_type_uintptr_t + unset ac_cv_type_uint64_t + AC_CHECK_TYPE(uintptr_t,[ac_cv_header_stdint_x=$i],continue,[#include <$i>]) + AC_CHECK_TYPE(uint64_t,[and64="/uint64_t"],[and64=""],[#include<$i>]) + m4_ifvaln([$2],[$2]) break + done + AC_MSG_CHECKING([for stdint uintptr_t]) + ]) +]) + +AC_DEFUN([AX_CHECK_HEADER_STDINT_O],[ +AC_CACHE_CHECK([for stdint uint32_t], [ac_cv_header_stdint_o],[ + ac_cv_header_stdint_o="" # the 1995 typedefs (sys/inttypes.h) + AC_MSG_RESULT([(..)]) + for i in m4_ifval([$1],[$1],[inttypes.h sys/inttypes.h sys/types.h stdint.h]) + do + unset ac_cv_type_uint32_t + unset ac_cv_type_uint64_t + AC_CHECK_TYPE(uint32_t,[ac_cv_header_stdint_o=$i],continue,[#include <$i>]) + AC_CHECK_TYPE(uint64_t,[and64="/uint64_t"],[and64=""],[#include<$i>]) + m4_ifvaln([$2],[$2]) break + break; + done + AC_MSG_CHECKING([for stdint uint32_t]) + ]) +]) + +AC_DEFUN([AX_CHECK_HEADER_STDINT_U],[ +AC_CACHE_CHECK([for stdint u_int32_t], [ac_cv_header_stdint_u],[ + ac_cv_header_stdint_u="" # the BSD typedefs (sys/types.h) + AC_MSG_RESULT([(..)]) + for i in m4_ifval([$1],[$1],[sys/types.h inttypes.h sys/inttypes.h]) ; do + unset ac_cv_type_u_int32_t + unset ac_cv_type_u_int64_t + AC_CHECK_TYPE(u_int32_t,[ac_cv_header_stdint_u=$i],continue,[#include <$i>]) + AC_CHECK_TYPE(u_int64_t,[and64="/u_int64_t"],[and64=""],[#include<$i>]) + m4_ifvaln([$2],[$2]) break + break; + done + AC_MSG_CHECKING([for stdint u_int32_t]) + ]) +]) + +AC_DEFUN([AX_CREATE_STDINT_H], +[# ------ AX CREATE STDINT H ------------------------------------- +AC_MSG_CHECKING([for stdint types]) +ac_stdint_h=`echo ifelse($1, , _stdint.h, $1)` +# try to shortcircuit - if the default include path of the compiler +# can find a "stdint.h" header then we assume that all compilers can. +AC_CACHE_VAL([ac_cv_header_stdint_t],[ +old_CXXFLAGS="$CXXFLAGS" ; CXXFLAGS="" +old_CPPFLAGS="$CPPFLAGS" ; CPPFLAGS="" +old_CFLAGS="$CFLAGS" ; CFLAGS="" +AC_TRY_COMPILE([#include ],[int_least32_t v = 0;], +[ac_cv_stdint_result="(assuming C99 compatible system)" + ac_cv_header_stdint_t="stdint.h"; ], +[ac_cv_header_stdint_t=""]) +if test "$GCC" = "yes" && test ".$ac_cv_header_stdint_t" = "."; then +CFLAGS="-std=c99" +AC_TRY_COMPILE([#include ],[int_least32_t v = 0;], +[AC_MSG_WARN(your GCC compiler has a defunct stdint.h for its default-mode)]) +fi +CXXFLAGS="$old_CXXFLAGS" +CPPFLAGS="$old_CPPFLAGS" +CFLAGS="$old_CFLAGS" ]) + +v="... $ac_cv_header_stdint_h" +if test "$ac_stdint_h" = "stdint.h" ; then + AC_MSG_RESULT([(are you sure you want them in ./stdint.h?)]) +elif test "$ac_stdint_h" = "inttypes.h" ; then + AC_MSG_RESULT([(are you sure you want them in ./inttypes.h?)]) +elif test "_$ac_cv_header_stdint_t" = "_" ; then + AC_MSG_RESULT([(putting them into $ac_stdint_h)$v]) +else + ac_cv_header_stdint="$ac_cv_header_stdint_t" + AC_MSG_RESULT([$ac_cv_header_stdint (shortcircuit)]) +fi + +if test "_$ac_cv_header_stdint_t" = "_" ; then # can not shortcircuit.. + +dnl .....intro message done, now do a few system checks..... +dnl btw, all old CHECK_TYPE macros do automatically "DEFINE" a type, +dnl therefore we use the autoconf implementation detail CHECK_TYPE_NEW +dnl instead that is triggered with 3 or more arguments (see types.m4) + +inttype_headers=`echo $2 | sed -e 's/,/ /g'` + +ac_cv_stdint_result="(no helpful system typedefs seen)" +AX_CHECK_HEADER_STDINT_X(dnl + stdint.h inttypes.h sys/inttypes.h $inttype_headers, + ac_cv_stdint_result="(seen uintptr_t$and64 in $i)") + +if test "_$ac_cv_header_stdint_x" = "_" ; then +AX_CHECK_HEADER_STDINT_O(dnl, + inttypes.h sys/inttypes.h stdint.h $inttype_headers, + ac_cv_stdint_result="(seen uint32_t$and64 in $i)") +fi + +if test "_$ac_cv_header_stdint_x" = "_" ; then +if test "_$ac_cv_header_stdint_o" = "_" ; then +AX_CHECK_HEADER_STDINT_U(dnl, + sys/types.h inttypes.h sys/inttypes.h $inttype_headers, + ac_cv_stdint_result="(seen u_int32_t$and64 in $i)") +fi fi + +dnl if there was no good C99 header file, do some typedef checks... +if test "_$ac_cv_header_stdint_x" = "_" ; then + AC_MSG_CHECKING([for stdint datatype model]) + AC_MSG_RESULT([(..)]) + AX_CHECK_DATA_MODEL +fi + +if test "_$ac_cv_header_stdint_x" != "_" ; then + ac_cv_header_stdint="$ac_cv_header_stdint_x" +elif test "_$ac_cv_header_stdint_o" != "_" ; then + ac_cv_header_stdint="$ac_cv_header_stdint_o" +elif test "_$ac_cv_header_stdint_u" != "_" ; then + ac_cv_header_stdint="$ac_cv_header_stdint_u" +else + ac_cv_header_stdint="stddef.h" +fi + +AC_MSG_CHECKING([for extra inttypes in chosen header]) +AC_MSG_RESULT([($ac_cv_header_stdint)]) +dnl see if int_least and int_fast types are present in _this_ header. +unset ac_cv_type_int_least32_t +unset ac_cv_type_int_fast32_t +AC_CHECK_TYPE(int_least32_t,,,[#include <$ac_cv_header_stdint>]) +AC_CHECK_TYPE(int_fast32_t,,,[#include<$ac_cv_header_stdint>]) +AC_CHECK_TYPE(intmax_t,,,[#include <$ac_cv_header_stdint>]) + +fi # shortcircut to system "stdint.h" +# ------------------ PREPARE VARIABLES ------------------------------ +if test "$GCC" = "yes" ; then +ac_cv_stdint_message="using gnu compiler "`$CC --version | head -1` +else +ac_cv_stdint_message="using $CC" +fi + +AC_MSG_RESULT([make use of $ac_cv_header_stdint in $ac_stdint_h dnl +$ac_cv_stdint_result]) + +dnl ----------------------------------------------------------------- +# ----------------- DONE inttypes.h checks START header ------------- +AC_CONFIG_COMMANDS([$ac_stdint_h],[ +AC_MSG_NOTICE(creating $ac_stdint_h : $_ac_stdint_h) +ac_stdint=$tmp/_stdint.h + +echo "#ifndef" $_ac_stdint_h >$ac_stdint +echo "#define" $_ac_stdint_h "1" >>$ac_stdint +echo "#ifndef" _GENERATED_STDINT_H >>$ac_stdint +echo "#define" _GENERATED_STDINT_H '"'$PACKAGE $VERSION'"' >>$ac_stdint +echo "/* generated $ac_cv_stdint_message */" >>$ac_stdint +if test "_$ac_cv_header_stdint_t" != "_" ; then +echo "#define _STDINT_HAVE_STDINT_H" "1" >>$ac_stdint +echo "#include " >>$ac_stdint +echo "#endif" >>$ac_stdint +echo "#endif" >>$ac_stdint +else + +cat >>$ac_stdint < +#else +#include + +/* .................... configured part ............................ */ + +STDINT_EOF + +echo "/* whether we have a C99 compatible stdint header file */" >>$ac_stdint +if test "_$ac_cv_header_stdint_x" != "_" ; then + ac_header="$ac_cv_header_stdint_x" + echo "#define _STDINT_HEADER_INTPTR" '"'"$ac_header"'"' >>$ac_stdint +else + echo "/* #undef _STDINT_HEADER_INTPTR */" >>$ac_stdint +fi + +echo "/* whether we have a C96 compatible inttypes header file */" >>$ac_stdint +if test "_$ac_cv_header_stdint_o" != "_" ; then + ac_header="$ac_cv_header_stdint_o" + echo "#define _STDINT_HEADER_UINT32" '"'"$ac_header"'"' >>$ac_stdint +else + echo "/* #undef _STDINT_HEADER_UINT32 */" >>$ac_stdint +fi + +echo "/* whether we have a BSD compatible inet types header */" >>$ac_stdint +if test "_$ac_cv_header_stdint_u" != "_" ; then + ac_header="$ac_cv_header_stdint_u" + echo "#define _STDINT_HEADER_U_INT32" '"'"$ac_header"'"' >>$ac_stdint +else + echo "/* #undef _STDINT_HEADER_U_INT32 */" >>$ac_stdint +fi + +echo "" >>$ac_stdint + +if test "_$ac_header" != "_" ; then if test "$ac_header" != "stddef.h" ; then + echo "#include <$ac_header>" >>$ac_stdint + echo "" >>$ac_stdint +fi fi + +echo "/* which 64bit typedef has been found */" >>$ac_stdint +if test "$ac_cv_type_uint64_t" = "yes" ; then +echo "#define _STDINT_HAVE_UINT64_T" "1" >>$ac_stdint +else +echo "/* #undef _STDINT_HAVE_UINT64_T */" >>$ac_stdint +fi +if test "$ac_cv_type_u_int64_t" = "yes" ; then +echo "#define _STDINT_HAVE_U_INT64_T" "1" >>$ac_stdint +else +echo "/* #undef _STDINT_HAVE_U_INT64_T */" >>$ac_stdint +fi +echo "" >>$ac_stdint + +echo "/* which type model has been detected */" >>$ac_stdint +if test "_$ac_cv_char_data_model" != "_" ; then +echo "#define _STDINT_CHAR_MODEL" "$ac_cv_char_data_model" >>$ac_stdint +echo "#define _STDINT_LONG_MODEL" "$ac_cv_long_data_model" >>$ac_stdint +else +echo "/* #undef _STDINT_CHAR_MODEL // skipped */" >>$ac_stdint +echo "/* #undef _STDINT_LONG_MODEL // skipped */" >>$ac_stdint +fi +echo "" >>$ac_stdint + +echo "/* whether int_least types were detected */" >>$ac_stdint +if test "$ac_cv_type_int_least32_t" = "yes"; then +echo "#define _STDINT_HAVE_INT_LEAST32_T" "1" >>$ac_stdint +else +echo "/* #undef _STDINT_HAVE_INT_LEAST32_T */" >>$ac_stdint +fi +echo "/* whether int_fast types were detected */" >>$ac_stdint +if test "$ac_cv_type_int_fast32_t" = "yes"; then +echo "#define _STDINT_HAVE_INT_FAST32_T" "1" >>$ac_stdint +else +echo "/* #undef _STDINT_HAVE_INT_FAST32_T */" >>$ac_stdint +fi +echo "/* whether intmax_t type was detected */" >>$ac_stdint +if test "$ac_cv_type_intmax_t" = "yes"; then +echo "#define _STDINT_HAVE_INTMAX_T" "1" >>$ac_stdint +else +echo "/* #undef _STDINT_HAVE_INTMAX_T */" >>$ac_stdint +fi +echo "" >>$ac_stdint + + cat >>$ac_stdint <= 199901L +#define _HAVE_UINT64_T +#define _HAVE_LONGLONG_UINT64_T +typedef long long int64_t; +typedef unsigned long long uint64_t; + +#elif !defined __STRICT_ANSI__ +#if defined _MSC_VER || defined __WATCOMC__ || defined __BORLANDC__ +#define _HAVE_UINT64_T +typedef __int64 int64_t; +typedef unsigned __int64 uint64_t; + +#elif defined __GNUC__ || defined __MWERKS__ || defined __ELF__ +/* note: all ELF-systems seem to have loff-support which needs 64-bit */ +#if !defined _NO_LONGLONG +#define _HAVE_UINT64_T +#define _HAVE_LONGLONG_UINT64_T +typedef long long int64_t; +typedef unsigned long long uint64_t; +#endif + +#elif defined __alpha || (defined __mips && defined _ABIN32) +#if !defined _NO_LONGLONG +typedef long int64_t; +typedef unsigned long uint64_t; +#endif + /* compiler/cpu type to define int64_t */ +#endif +#endif +#endif + +#if defined _STDINT_HAVE_U_INT_TYPES +/* int8_t int16_t int32_t defined by inet code, redeclare the u_intXX types */ +typedef u_int8_t uint8_t; +typedef u_int16_t uint16_t; +typedef u_int32_t uint32_t; + +/* glibc compatibility */ +#ifndef __int8_t_defined +#define __int8_t_defined +#endif +#endif + +#ifdef _STDINT_NEED_INT_MODEL_T +/* we must guess all the basic types. Apart from byte-adressable system, */ +/* there a few 32-bit-only dsp-systems that we guard with BYTE_MODEL 8-} */ +/* (btw, those nibble-addressable systems are way off, or so we assume) */ + +dnl /* have a look at "64bit and data size neutrality" at */ +dnl /* http://unix.org/version2/whatsnew/login_64bit.html */ +dnl /* (the shorthand "ILP" types always have a "P" part) */ + +#if defined _STDINT_BYTE_MODEL +#if _STDINT_LONG_MODEL+0 == 242 +/* 2:4:2 = IP16 = a normal 16-bit system */ +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned long uint32_t; +#ifndef __int8_t_defined +#define __int8_t_defined +typedef char int8_t; +typedef short int16_t; +typedef long int32_t; +#endif +#elif _STDINT_LONG_MODEL+0 == 244 || _STDINT_LONG_MODEL == 444 +/* 2:4:4 = LP32 = a 32-bit system derived from a 16-bit */ +/* 4:4:4 = ILP32 = a normal 32-bit system */ +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +#ifndef __int8_t_defined +#define __int8_t_defined +typedef char int8_t; +typedef short int16_t; +typedef int int32_t; +#endif +#elif _STDINT_LONG_MODEL+0 == 484 || _STDINT_LONG_MODEL+0 == 488 +/* 4:8:4 = IP32 = a 32-bit system prepared for 64-bit */ +/* 4:8:8 = LP64 = a normal 64-bit system */ +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +#ifndef __int8_t_defined +#define __int8_t_defined +typedef char int8_t; +typedef short int16_t; +typedef int int32_t; +#endif +/* this system has a "long" of 64bit */ +#ifndef _HAVE_UINT64_T +#define _HAVE_UINT64_T +typedef unsigned long uint64_t; +typedef long int64_t; +#endif +#elif _STDINT_LONG_MODEL+0 == 448 +/* LLP64 a 64-bit system derived from a 32-bit system */ +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +#ifndef __int8_t_defined +#define __int8_t_defined +typedef char int8_t; +typedef short int16_t; +typedef int int32_t; +#endif +/* assuming the system has a "long long" */ +#ifndef _HAVE_UINT64_T +#define _HAVE_UINT64_T +#define _HAVE_LONGLONG_UINT64_T +typedef unsigned long long uint64_t; +typedef long long int64_t; +#endif +#else +#define _STDINT_NO_INT32_T +#endif +#else +#define _STDINT_NO_INT8_T +#define _STDINT_NO_INT32_T +#endif +#endif + +/* + * quote from SunOS-5.8 sys/inttypes.h: + * Use at your own risk. As of February 1996, the committee is squarely + * behind the fixed sized types; the "least" and "fast" types are still being + * discussed. The probability that the "fast" types may be removed before + * the standard is finalized is high enough that they are not currently + * implemented. + */ + +#if defined _STDINT_NEED_INT_LEAST_T +typedef int8_t int_least8_t; +typedef int16_t int_least16_t; +typedef int32_t int_least32_t; +#ifdef _HAVE_UINT64_T +typedef int64_t int_least64_t; +#endif + +typedef uint8_t uint_least8_t; +typedef uint16_t uint_least16_t; +typedef uint32_t uint_least32_t; +#ifdef _HAVE_UINT64_T +typedef uint64_t uint_least64_t; +#endif + /* least types */ +#endif + +#if defined _STDINT_NEED_INT_FAST_T +typedef int8_t int_fast8_t; +typedef int int_fast16_t; +typedef int32_t int_fast32_t; +#ifdef _HAVE_UINT64_T +typedef int64_t int_fast64_t; +#endif + +typedef uint8_t uint_fast8_t; +typedef unsigned uint_fast16_t; +typedef uint32_t uint_fast32_t; +#ifdef _HAVE_UINT64_T +typedef uint64_t uint_fast64_t; +#endif + /* fast types */ +#endif + +#ifdef _STDINT_NEED_INTMAX_T +#ifdef _HAVE_UINT64_T +typedef int64_t intmax_t; +typedef uint64_t uintmax_t; +#else +typedef long intmax_t; +typedef unsigned long uintmax_t; +#endif +#endif + +#ifdef _STDINT_NEED_INTPTR_T +#ifndef __intptr_t_defined +#define __intptr_t_defined +/* we encourage using "long" to store pointer values, never use "int" ! */ +#if _STDINT_LONG_MODEL+0 == 242 || _STDINT_LONG_MODEL+0 == 484 +typedef unsigned int uintptr_t; +typedef int intptr_t; +#elif _STDINT_LONG_MODEL+0 == 244 || _STDINT_LONG_MODEL+0 == 444 +typedef unsigned long uintptr_t; +typedef long intptr_t; +#elif _STDINT_LONG_MODEL+0 == 448 && defined _HAVE_UINT64_T +typedef uint64_t uintptr_t; +typedef int64_t intptr_t; +#else /* matches typical system types ILP32 and LP64 - but not IP16 or LLP64 */ +typedef unsigned long uintptr_t; +typedef long intptr_t; +#endif +#endif +#endif + +/* The ISO C99 standard specifies that in C++ implementations these + should only be defined if explicitly requested. */ +#if !defined __cplusplus || defined __STDC_CONSTANT_MACROS +#ifndef UINT32_C + +/* Signed. */ +# define INT8_C(c) c +# define INT16_C(c) c +# define INT32_C(c) c +# ifdef _HAVE_LONGLONG_UINT64_T +# define INT64_C(c) c ## L +# else +# define INT64_C(c) c ## LL +# endif + +/* Unsigned. */ +# define UINT8_C(c) c ## U +# define UINT16_C(c) c ## U +# define UINT32_C(c) c ## U +# ifdef _HAVE_LONGLONG_UINT64_T +# define UINT64_C(c) c ## UL +# else +# define UINT64_C(c) c ## ULL +# endif + +/* Maximal type. */ +# ifdef _HAVE_LONGLONG_UINT64_T +# define INTMAX_C(c) c ## L +# define UINTMAX_C(c) c ## UL +# else +# define INTMAX_C(c) c ## LL +# define UINTMAX_C(c) c ## ULL +# endif + + /* literalnumbers */ +#endif +#endif + +/* These limits are merily those of a two complement byte-oriented system */ + +/* Minimum of signed integral types. */ +# define INT8_MIN (-128) +# define INT16_MIN (-32767-1) +# define INT32_MIN (-2147483647-1) +# define INT64_MIN (-__INT64_C(9223372036854775807)-1) +/* Maximum of signed integral types. */ +# define INT8_MAX (127) +# define INT16_MAX (32767) +# define INT32_MAX (2147483647) +# define INT64_MAX (__INT64_C(9223372036854775807)) + +/* Maximum of unsigned integral types. */ +# define UINT8_MAX (255) +# define UINT16_MAX (65535) +# define UINT32_MAX (4294967295U) +# define UINT64_MAX (__UINT64_C(18446744073709551615)) + +/* Minimum of signed integral types having a minimum size. */ +# define INT_LEAST8_MIN INT8_MIN +# define INT_LEAST16_MIN INT16_MIN +# define INT_LEAST32_MIN INT32_MIN +# define INT_LEAST64_MIN INT64_MIN +/* Maximum of signed integral types having a minimum size. */ +# define INT_LEAST8_MAX INT8_MAX +# define INT_LEAST16_MAX INT16_MAX +# define INT_LEAST32_MAX INT32_MAX +# define INT_LEAST64_MAX INT64_MAX + +/* Maximum of unsigned integral types having a minimum size. */ +# define UINT_LEAST8_MAX UINT8_MAX +# define UINT_LEAST16_MAX UINT16_MAX +# define UINT_LEAST32_MAX UINT32_MAX +# define UINT_LEAST64_MAX UINT64_MAX + + /* shortcircuit*/ +#endif + /* once */ +#endif +#endif +STDINT_EOF +fi + if cmp -s $ac_stdint_h $ac_stdint 2>/dev/null; then + AC_MSG_NOTICE([$ac_stdint_h is unchanged]) + else + ac_dir=`AS_DIRNAME(["$ac_stdint_h"])` + AS_MKDIR_P(["$ac_dir"]) + rm -f $ac_stdint_h + mv $ac_stdint $ac_stdint_h + fi +],[# variables for create stdint.h replacement +PACKAGE="$PACKAGE" +VERSION="$VERSION" +ac_stdint_h="$ac_stdint_h" +_ac_stdint_h=AS_TR_CPP(_$PACKAGE-$ac_stdint_h) +ac_cv_stdint_message="$ac_cv_stdint_message" +ac_cv_header_stdint_t="$ac_cv_header_stdint_t" +ac_cv_header_stdint_x="$ac_cv_header_stdint_x" +ac_cv_header_stdint_o="$ac_cv_header_stdint_o" +ac_cv_header_stdint_u="$ac_cv_header_stdint_u" +ac_cv_type_uint64_t="$ac_cv_type_uint64_t" +ac_cv_type_u_int64_t="$ac_cv_type_u_int64_t" +ac_cv_char_data_model="$ac_cv_char_data_model" +ac_cv_long_data_model="$ac_cv_long_data_model" +ac_cv_type_int_least32_t="$ac_cv_type_int_least32_t" +ac_cv_type_int_fast32_t="$ac_cv_type_int_fast32_t" +ac_cv_type_intmax_t="$ac_cv_type_intmax_t" +]) +]) diff --git a/common/m4/check.m4 b/common/m4/check.m4 new file mode 100644 index 0000000..afd26eb --- /dev/null +++ b/common/m4/check.m4 @@ -0,0 +1,181 @@ +dnl _AM_TRY_CHECK(MINIMUM-VERSION, EXTRA-CFLAGS, EXTRA-LIBS, CHECK-LIB-NAME +dnl [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) +dnl Test for check, and define CHECK_CFLAGS and CHECK_LIBS +dnl Done this way because of the brokenness that is +dnl https://launchpad.net/distros/ubuntu/+source/check/+bug/5840 +dnl + +AC_DEFUN([_AM_TRY_CHECK], +[ + min_check_version=$1 + extra_cflags=$2 + extra_libs=$3 + check_lib_name=$4 + + CHECK_CFLAGS="$extra_cflags" + CHECK_LIBS="$extra_libs -l$check_lib_name" + + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + + CFLAGS="$CFLAGS $CHECK_CFLAGS" + LIBS="$CHECK_LIBS $LIBS" + + AC_MSG_CHECKING(for check named $check_lib_name - version >= $min_check_version) + + rm -f conf.check-test + dnl unset no_check, since in our second run it would have been set to yes + dnl before + no_check= + AC_TRY_RUN([ +#include +#include + +#include + +int main () +{ + int major, minor, micro; + char *tmp_version; + + system ("touch conf.check-test"); + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = strdup("$min_check_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_check_version"); + return 1; + } + + if ((CHECK_MAJOR_VERSION != check_major_version) || + (CHECK_MINOR_VERSION != check_minor_version) || + (CHECK_MICRO_VERSION != check_micro_version)) + { + printf("\n*** The check header file (version %d.%d.%d) does not match\n", + CHECK_MAJOR_VERSION, CHECK_MINOR_VERSION, CHECK_MICRO_VERSION); + printf("*** the check library (version %d.%d.%d).\n", + check_major_version, check_minor_version, check_micro_version); + return 1; + } + + if ((check_major_version > major) || + ((check_major_version == major) && (check_minor_version > minor)) || + ((check_major_version == major) && (check_minor_version == minor) && (check_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** An old version of check (%d.%d.%d) was found.\n", + check_major_version, check_minor_version, check_micro_version); + printf("*** You need a version of check being at least %d.%d.%d.\n", major, minor, micro); + printf("***\n"); + printf("*** If you have already installed a sufficiently new version, this error\n"); + printf("*** probably means that the wrong copy of the check library and header\n"); + printf("*** file is being found. Rerun configure with the --with-check=PATH option\n"); + printf("*** to specify the prefix where the correct version was installed.\n"); + } + + return 1; +} +],, no_check=yes, [echo $ac_n "cross compiling; assumed OK... $ac_c"]) + + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + + if test "x$no_check" = x ; then + AC_MSG_RESULT(yes) + ifelse([$5], , :, [$5]) + else + AC_MSG_RESULT(no) + if test -f conf.check-test ; then + : + else + echo "*** Could not run check test program, checking why..." + CFLAGS="$CFLAGS $CHECK_CFLAGS" + LIBS="$CHECK_LIBS $LIBS" + AC_TRY_LINK([ +#include +#include + +#include +], , [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding check. You'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], + [ echo "*** The test program failed to compile or link. See the file config.log for" + echo "*** the exact error that occured." ]) + + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + + CHECK_CFLAGS="" + CHECK_LIBS="" + + rm -f conf.check-test + ifelse([$6], , AC_MSG_ERROR([check not found]), [$6]) + fi +]) + + +dnl AM_PATH_CHECK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) +dnl Test for check, and define CHECK_CFLAGS and CHECK_LIBS +dnl + +AC_DEFUN([AM_PATH_CHECK], +[ + AC_ARG_WITH(check, + [ --with-check=PATH prefix where check is installed [default=auto]]) + + AC_ARG_WITH(checklibname, + AC_HELP_STRING([--with-check-lib-name=NAME], + [name of the PIC check library (default=check)])) + + min_check_version=ifelse([$1], ,0.8.2,$1) + + if test x$with_check = xno; then + AC_MSG_RESULT(disabled) + ifelse([$3], , AC_MSG_ERROR([disabling check is not supported]), [$3]) + else + if test "x$with_check" != x; then + CHECK_EXTRA_CFLAGS="-I$with_check/include" + CHECK_EXTRA_LIBS="-L$with_check/lib" + else + CHECK_EXTRA_CFLAGS="" + CHECK_EXTRA_LIBS="" + fi + + if test x$with_checklibname = x; then + _AM_TRY_CHECK($min_check_version, $CHECK_EXTRA_CFLAGS, $CHECK_EXTRA_LIBS, + check_pic, [have_check=true], [have_check=false]) + if test x$have_check = xtrue; then + ifelse([$2], , :, [$2]) + else + _AM_TRY_CHECK($min_check_version, $CHECK_EXTRA_CFLAGS, $CHECK_EXTRA_LIBS, + check, [have_check=true], [have_check=false]) + if test x$have_check = xtrue; then + ifelse([$2], , :, [$2]) + else + ifelse([$3], , AC_MSG_ERROR([check not found]), [$3]) + fi + fi + else + _AM_TRY_CHECK($min_check_version, $CHECK_EXTRA_CFLAGS, $CHECK_EXTRA_LIBS, + $with_checklibname, [have_check=true], [have_check=false]) + if test x$have_check = xtrue; then + ifelse([$2], , :, [$2]) + else + ifelse([$3], , AC_MSG_ERROR([check not found]), [$3]) + fi + fi + + AC_SUBST(CHECK_CFLAGS) + AC_SUBST(CHECK_LIBS) + rm -f conf.check-test + fi +]) diff --git a/common/m4/glib-gettext.m4 b/common/m4/glib-gettext.m4 new file mode 100644 index 0000000..f8d442f --- /dev/null +++ b/common/m4/glib-gettext.m4 @@ -0,0 +1,432 @@ +# Copyright (C) 1995-2002 Free Software Foundation, Inc. +# Copyright (C) 2001-2003,2004 Red Hat, Inc. +# +# This file is free software, distributed under the terms of the GNU +# General Public License. As a special exception to the GNU General +# Public License, this file may be distributed as part of a program +# that contains a configuration script generated by Autoconf, under +# the same distribution terms as the rest of that program. +# +# This file can 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. +# +# Macro to add for using GNU gettext. +# Ulrich Drepper , 1995, 1996 +# +# Modified to never use included libintl. +# Owen Taylor , 12/15/1998 +# +# Major rework to remove unused code +# Owen Taylor , 12/11/2002 +# +# Added better handling of ALL_LINGUAS from GNU gettext version +# written by Bruno Haible, Owen Taylor 5/30/3002 +# +# Modified to require ngettext +# Matthias Clasen 08/06/2004 +# +# We need this here as well, since someone might use autoconf-2.5x +# to configure GLib then an older version to configure a package +# using AM_GLIB_GNU_GETTEXT +AC_PREREQ(2.53) + +dnl +dnl We go to great lengths to make sure that aclocal won't +dnl try to pull in the installed version of these macros +dnl when running aclocal in the glib directory. +dnl +m4_copy([AC_DEFUN],[glib_DEFUN]) +m4_copy([AC_REQUIRE],[glib_REQUIRE]) +dnl +dnl At the end, if we're not within glib, we'll define the public +dnl definitions in terms of our private definitions. +dnl + +# GLIB_LC_MESSAGES +#-------------------- +glib_DEFUN([GLIB_LC_MESSAGES], + [AC_CHECK_HEADERS([locale.h]) + if test $ac_cv_header_locale_h = yes; then + AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, + [AC_TRY_LINK([#include ], [return LC_MESSAGES], + am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) + if test $am_cv_val_LC_MESSAGES = yes; then + AC_DEFINE(HAVE_LC_MESSAGES, 1, + [Define if your file defines LC_MESSAGES.]) + fi + fi]) + +# GLIB_PATH_PROG_WITH_TEST +#---------------------------- +dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, +dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) +glib_DEFUN([GLIB_PATH_PROG_WITH_TEST], +[# Extract the first word of "$2", so it can be a program name with args. +set dummy $2; ac_word=[$]2 +AC_MSG_CHECKING([for $ac_word]) +AC_CACHE_VAL(ac_cv_path_$1, +[case "[$]$1" in + /*) + ac_cv_path_$1="[$]$1" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in ifelse([$5], , $PATH, [$5]); do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if [$3]; then + ac_cv_path_$1="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" +dnl If no 4th arg is given, leave the cache variable unset, +dnl so AC_PATH_PROGS will keep looking. +ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" +])dnl + ;; +esac])dnl +$1="$ac_cv_path_$1" +if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then + AC_MSG_RESULT([$]$1) +else + AC_MSG_RESULT(no) +fi +AC_SUBST($1)dnl +]) + +# GLIB_WITH_NLS +#----------------- +glib_DEFUN([GLIB_WITH_NLS], + dnl NLS is obligatory + [USE_NLS=yes + AC_SUBST(USE_NLS) + + gt_cv_have_gettext=no + + CATOBJEXT=NONE + XGETTEXT=: + INTLLIBS= + + AC_CHECK_HEADER(libintl.h, + [gt_cv_func_dgettext_libintl="no" + libintl_extra_libs="" + + # + # First check in libc + # + AC_CACHE_CHECK([for ngettext in libc], gt_cv_func_ngettext_libc, + [AC_TRY_LINK([ +#include +], + [return !ngettext ("","", 1)], + gt_cv_func_ngettext_libc=yes, + gt_cv_func_ngettext_libc=no) + ]) + + if test "$gt_cv_func_ngettext_libc" = "yes" ; then + AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc, + [AC_TRY_LINK([ +#include +], + [return !dgettext ("","")], + gt_cv_func_dgettext_libc=yes, + gt_cv_func_dgettext_libc=no) + ]) + fi + + if test "$gt_cv_func_ngettext_libc" = "yes" ; then + AC_CHECK_FUNCS(bind_textdomain_codeset) + fi + + # + # If we don't have everything we want, check in libintl + # + if test "$gt_cv_func_dgettext_libc" != "yes" \ + || test "$gt_cv_func_ngettext_libc" != "yes" \ + || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then + + AC_CHECK_LIB(intl, bindtextdomain, + [AC_CHECK_LIB(intl, ngettext, + [AC_CHECK_LIB(intl, dgettext, + gt_cv_func_dgettext_libintl=yes)])]) + + if test "$gt_cv_func_dgettext_libintl" != "yes" ; then + AC_MSG_CHECKING([if -liconv is needed to use gettext]) + AC_MSG_RESULT([]) + AC_CHECK_LIB(intl, ngettext, + [AC_CHECK_LIB(intl, dcgettext, + [gt_cv_func_dgettext_libintl=yes + libintl_extra_libs=-liconv], + :,-liconv)], + :,-liconv) + fi + + # + # If we found libintl, then check in it for bind_textdomain_codeset(); + # we'll prefer libc if neither have bind_textdomain_codeset(), + # and both have dgettext and ngettext + # + if test "$gt_cv_func_dgettext_libintl" = "yes" ; then + glib_save_LIBS="$LIBS" + LIBS="$LIBS -lintl $libintl_extra_libs" + unset ac_cv_func_bind_textdomain_codeset + AC_CHECK_FUNCS(bind_textdomain_codeset) + LIBS="$glib_save_LIBS" + + if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then + gt_cv_func_dgettext_libc=no + else + if test "$gt_cv_func_dgettext_libc" = "yes" \ + && test "$gt_cv_func_ngettext_libc" = "yes"; then + gt_cv_func_dgettext_libintl=no + fi + fi + fi + fi + + if test "$gt_cv_func_dgettext_libc" = "yes" \ + || test "$gt_cv_func_dgettext_libintl" = "yes"; then + gt_cv_have_gettext=yes + fi + + if test "$gt_cv_func_dgettext_libintl" = "yes"; then + INTLLIBS="-lintl $libintl_extra_libs" + fi + + if test "$gt_cv_have_gettext" = "yes"; then + AC_DEFINE(HAVE_GETTEXT,1, + [Define if the GNU gettext() function is already present or preinstalled.]) + GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl + if test "$MSGFMT" != "no"; then + glib_save_LIBS="$LIBS" + LIBS="$LIBS $INTLLIBS" + AC_CHECK_FUNCS(dcgettext) + MSGFMT_OPTS= + AC_MSG_CHECKING([if msgfmt accepts -c]) + GLIB_RUN_PROG([$MSGFMT -c -o /dev/null],[ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: test 1.0\n" +"PO-Revision-Date: 2007-02-15 12:01+0100\n" +"Last-Translator: test \n" +"Language-Team: C \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +], [MSGFMT_OPTS=-c; AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) + AC_SUBST(MSGFMT_OPTS) + AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) + GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) + AC_TRY_LINK(, [extern int _nl_msg_cat_cntr; + return _nl_msg_cat_cntr], + [CATOBJEXT=.gmo + DATADIRNAME=share], + [case $host in + *-*-solaris*) + dnl On Solaris, if bind_textdomain_codeset is in libc, + dnl GNU format message catalog is always supported, + dnl since both are added to the libc all together. + dnl Hence, we'd like to go with DATADIRNAME=share and + dnl and CATOBJEXT=.gmo in this case. + AC_CHECK_FUNC(bind_textdomain_codeset, + [CATOBJEXT=.gmo + DATADIRNAME=share], + [CATOBJEXT=.mo + DATADIRNAME=lib]) + ;; + *) + CATOBJEXT=.mo + DATADIRNAME=lib + ;; + esac]) + LIBS="$glib_save_LIBS" + INSTOBJEXT=.mo + else + gt_cv_have_gettext=no + fi + fi + ]) + + if test "$gt_cv_have_gettext" = "yes" ; then + AC_DEFINE(ENABLE_NLS, 1, + [always defined to indicate that i18n is enabled]) + fi + + dnl Test whether we really found GNU xgettext. + if test "$XGETTEXT" != ":"; then + dnl If it is not GNU xgettext we define it as : so that the + dnl Makefiles still can work. + if $XGETTEXT --omit-header /dev/null 2> /dev/null; then + : ; + else + AC_MSG_RESULT( + [found xgettext program is not GNU xgettext; ignore it]) + XGETTEXT=":" + fi + fi + + # We need to process the po/ directory. + POSUB=po + + AC_OUTPUT_COMMANDS( + [case "$CONFIG_FILES" in *po/Makefile.in*) + sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile + esac]) + + dnl These rules are solely for the distribution goal. While doing this + dnl we only have to keep exactly one list of the available catalogs + dnl in configure.in. + for lang in $ALL_LINGUAS; do + GMOFILES="$GMOFILES $lang.gmo" + POFILES="$POFILES $lang.po" + done + + dnl Make all variables we use known to autoconf. + AC_SUBST(CATALOGS) + AC_SUBST(CATOBJEXT) + AC_SUBST(DATADIRNAME) + AC_SUBST(GMOFILES) + AC_SUBST(INSTOBJEXT) + AC_SUBST(INTLLIBS) + AC_SUBST(PO_IN_DATADIR_TRUE) + AC_SUBST(PO_IN_DATADIR_FALSE) + AC_SUBST(POFILES) + AC_SUBST(POSUB) + ]) + +# AM_GLIB_GNU_GETTEXT +# ------------------- +# Do checks necessary for use of gettext. If a suitable implementation +# of gettext is found in either in libintl or in the C library, +# it will set INTLLIBS to the libraries needed for use of gettext +# and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable +# gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST() +# on various variables needed by the Makefile.in.in installed by +# glib-gettextize. +dnl +glib_DEFUN([GLIB_GNU_GETTEXT], + [AC_REQUIRE([AC_PROG_CC])dnl + AC_REQUIRE([AC_HEADER_STDC])dnl + + GLIB_LC_MESSAGES + GLIB_WITH_NLS + + if test "$gt_cv_have_gettext" = "yes"; then + if test "x$ALL_LINGUAS" = "x"; then + LINGUAS= + else + AC_MSG_CHECKING(for catalogs to be installed) + NEW_LINGUAS= + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + NEW_LINGUAS="$NEW_LINGUAS $presentlang" + fi + done + LINGUAS=$NEW_LINGUAS + AC_MSG_RESULT($LINGUAS) + fi + + dnl Construct list of names of catalog files to be constructed. + if test -n "$LINGUAS"; then + for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done + fi + fi + + dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly + dnl find the mkinstalldirs script in another subdir but ($top_srcdir). + dnl Try to locate is. + MKINSTALLDIRS= + if test -n "$ac_aux_dir"; then + MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" + fi + if test -z "$MKINSTALLDIRS"; then + MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" + fi + AC_SUBST(MKINSTALLDIRS) + + dnl Generate list of files to be processed by xgettext which will + dnl be included in po/Makefile. + test -d po || mkdir po + if test "x$srcdir" != "x."; then + if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then + posrcprefix="$srcdir/" + else + posrcprefix="../$srcdir/" + fi + else + posrcprefix="../" + fi + rm -f po/POTFILES + sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ + < $srcdir/po/POTFILES.in > po/POTFILES + ]) + +# AM_GLIB_DEFINE_LOCALEDIR(VARIABLE) +# ------------------------------- +# Define VARIABLE to the location where catalog files will +# be installed by po/Makefile. +glib_DEFUN([GLIB_DEFINE_LOCALEDIR], +[glib_REQUIRE([GLIB_GNU_GETTEXT])dnl +glib_save_prefix="$prefix" +glib_save_exec_prefix="$exec_prefix" +glib_save_datarootdir="$datarootdir" +test "x$prefix" = xNONE && prefix=$ac_default_prefix +test "x$exec_prefix" = xNONE && exec_prefix=$prefix +datarootdir=`eval echo "${datarootdir}"` +if test "x$CATOBJEXT" = "x.mo" ; then + localedir=`eval echo "${libdir}/locale"` +else + localedir=`eval echo "${datadir}/locale"` +fi +prefix="$glib_save_prefix" +exec_prefix="$glib_save_exec_prefix" +datarootdir="$glib_save_datarootdir" +AC_DEFINE_UNQUOTED($1, "$localedir", + [Define the location where the catalogs will be installed]) +]) + +dnl +dnl Now the definitions that aclocal will find +dnl +ifdef(glib_configure_in,[],[ +AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)]) +AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)]) +])dnl + +# GLIB_RUN_PROG(PROGRAM, TEST-FILE, [ACTION-IF-PASS], [ACTION-IF-FAIL]) +# +# Create a temporary file with TEST-FILE as its contents and pass the +# file name to PROGRAM. Perform ACTION-IF-PASS if PROGRAM exits with +# 0 and perform ACTION-IF-FAIL for any other exit status. +AC_DEFUN([GLIB_RUN_PROG], +[cat >conftest.foo <<_ACEOF +$2 +_ACEOF +if AC_RUN_LOG([$1 conftest.foo]); then + m4_ifval([$3], [$3], [:]) +m4_ifvaln([$4], [else $4])dnl +echo "$as_me: failed input was:" >&AS_MESSAGE_LOG_FD +sed 's/^/| /' conftest.foo >&AS_MESSAGE_LOG_FD +fi]) + diff --git a/common/m4/gst-arch.m4 b/common/m4/gst-arch.m4 new file mode 100644 index 0000000..2e935d2 --- /dev/null +++ b/common/m4/gst-arch.m4 @@ -0,0 +1,141 @@ +dnl AG_GST_ARCH +dnl sets up defines and automake conditionals for host architecture +dnl checks endianness +dnl defines HOST_CPU + +AC_DEFUN([AG_GST_ARCH], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use host_ variables + + dnl Determine CPU + case "x${host_cpu}" in + xi?86 | xk? | xi?86_64) + case $host_os in + solaris*) + AC_CHECK_DECL([__i386], [I386_ABI="yes"], [I386_ABI="no"]) + AC_CHECK_DECL([__amd64], [AMD64_ABI="yes"], [AMD64_ABI="no"]) + + if test "x$I386_ABI" = "xyes" ; then + HAVE_CPU_I386=yes + AC_DEFINE(HAVE_CPU_I386, 1, [Define if the host CPU is an x86]) + fi + if test "x$AMD64_ABI" = "xyes" ; then + HAVE_CPU_X86_64=yes + AC_DEFINE(HAVE_CPU_X86_64, 1, [Define if the host CPU is a x86_64]) + fi + ;; + *) + HAVE_CPU_I386=yes + AC_DEFINE(HAVE_CPU_I386, 1, [Define if the host CPU is an x86]) + + dnl FIXME could use some better detection + dnl (ie CPUID) + case "x${host_cpu}" in + xi386 | xi486) ;; + *) + AC_DEFINE(HAVE_RDTSC, 1, [Define if RDTSC is available]) ;; + esac + ;; + esac + ;; + xpowerpc) + HAVE_CPU_PPC=yes + AC_DEFINE(HAVE_CPU_PPC, 1, [Define if the host CPU is a PowerPC]) ;; + xpowerpc64) + HAVE_CPU_PPC64=yes + AC_DEFINE(HAVE_CPU_PPC64, 1, [Define if the host CPU is a 64 bit PowerPC]) ;; + xalpha*) + HAVE_CPU_ALPHA=yes + AC_DEFINE(HAVE_CPU_ALPHA, 1, [Define if the host CPU is an Alpha]) ;; + xarm*) + HAVE_CPU_ARM=yes + AC_DEFINE(HAVE_CPU_ARM, 1, [Define if the host CPU is an ARM]) ;; + xsparc*) + HAVE_CPU_SPARC=yes + AC_DEFINE(HAVE_CPU_SPARC, 1, [Define if the host CPU is a SPARC]) ;; + xmips*) + HAVE_CPU_MIPS=yes + AC_DEFINE(HAVE_CPU_MIPS, 1, [Define if the host CPU is a MIPS]) ;; + xhppa*) + HAVE_CPU_HPPA=yes + AC_DEFINE(HAVE_CPU_HPPA, 1, [Define if the host CPU is a HPPA]) ;; + xs390*) + HAVE_CPU_S390=yes + AC_DEFINE(HAVE_CPU_S390, 1, [Define if the host CPU is a S390]) ;; + xia64*) + HAVE_CPU_IA64=yes + AC_DEFINE(HAVE_CPU_IA64, 1, [Define if the host CPU is a IA64]) ;; + xm68k*) + HAVE_CPU_M68K=yes + AC_DEFINE(HAVE_CPU_M68K, 1, [Define if the host CPU is a M68K]) ;; + xx86_64) + HAVE_CPU_X86_64=yes + AC_DEFINE(HAVE_CPU_X86_64, 1, [Define if the host CPU is a x86_64]) ;; + xcris) + HAVE_CPU_CRIS=yes + AC_DEFINE(HAVE_CPU_CRIS, 1, [Define if the host CPU is a CRIS]) ;; + xcrisv32) + HAVE_CPU_CRISV32=yes + AC_DEFINE(HAVE_CPU_CRISV32, 1, [Define if the host CPU is a CRISv32]) ;; + esac + + dnl Determine endianness + AC_C_BIGENDIAN + + AM_CONDITIONAL(HAVE_CPU_I386, test "x$HAVE_CPU_I386" = "xyes") + AM_CONDITIONAL(HAVE_CPU_PPC, test "x$HAVE_CPU_PPC" = "xyes") + AM_CONDITIONAL(HAVE_CPU_PPC64, test "x$HAVE_CPU_PPC64" = "xyes") + AM_CONDITIONAL(HAVE_CPU_ALPHA, test "x$HAVE_CPU_ALPHA" = "xyes") + AM_CONDITIONAL(HAVE_CPU_ARM, test "x$HAVE_CPU_ARM" = "xyes") + AM_CONDITIONAL(HAVE_CPU_SPARC, test "x$HAVE_CPU_SPARC" = "xyes") + AM_CONDITIONAL(HAVE_CPU_HPPA, test "x$HAVE_CPU_HPPA" = "xyes") + AM_CONDITIONAL(HAVE_CPU_MIPS, test "x$HAVE_CPU_MIPS" = "xyes") + AM_CONDITIONAL(HAVE_CPU_S390, test "x$HAVE_CPU_S390" = "xyes") + AM_CONDITIONAL(HAVE_CPU_IA64, test "x$HAVE_CPU_IA64" = "xyes") + AM_CONDITIONAL(HAVE_CPU_M68K, test "x$HAVE_CPU_M68K" = "xyes") + AM_CONDITIONAL(HAVE_CPU_X86_64, test "x$HAVE_CPU_X86_64" = "xyes") + AM_CONDITIONAL(HAVE_CPU_CRIS, test "x$HAVE_CPU_CRIS" = "xyes") + AM_CONDITIONAL(HAVE_CPU_CRISV32, test "x$HAVE_CPU_CRISV32" = "xyes") + + AC_DEFINE_UNQUOTED(HOST_CPU, "$host_cpu", [the host CPU]) +]) + +dnl check if unaligned memory access works correctly +AC_DEFUN([AG_GST_UNALIGNED_ACCESS], [ + AC_MSG_CHECKING([if unaligned memory access works correctly]) + if test x"$as_cv_unaligned_access" = x ; then + case $host in + alpha*|arm*|hp*|mips*|sh*|sparc*|ia64*) + _AS_ECHO_N([(blacklisted) ]) + as_cv_unaligned_access=no + ;; + i?86*|x86_64*|amd64*|powerpc*|m68k*|cris*) + _AS_ECHO_N([(whitelisted) ]) + as_cv_unaligned_access=yes + ;; + esac + else + _AS_ECHO_N([(cached) ]) + fi + if test x"$as_cv_unaligned_access" = x ; then + AC_TRY_RUN([ +int main(int argc, char **argv) +{ + char array[] = "ABCDEFGH"; + unsigned int iarray[2]; + memcpy(iarray,array,8); +#define GET(x) (*(unsigned int *)((char *)iarray + (x))) + if(GET(0) != 0x41424344 && GET(0) != 0x44434241) return 1; + if(GET(1) != 0x42434445 && GET(1) != 0x45444342) return 1; + if(GET(2) != 0x43444546 && GET(2) != 0x46454443) return 1; + if(GET(3) != 0x44454647 && GET(3) != 0x47464544) return 1; + return 0; +} + ], as_cv_unaligned_access="yes", as_cv_unaligned_access="no") + fi + AC_MSG_RESULT($as_cv_unaligned_access) + if test "$as_cv_unaligned_access" = "yes"; then + AC_DEFINE_UNQUOTED(HAVE_UNALIGNED_ACCESS, 1, + [defined if unaligned memory access works correctly]) + fi +]) diff --git a/common/m4/gst-args.m4 b/common/m4/gst-args.m4 new file mode 100644 index 0000000..030e7ac --- /dev/null +++ b/common/m4/gst-args.m4 @@ -0,0 +1,327 @@ +dnl configure-time options shared among gstreamer modules + +dnl AG_GST_ARG_DEBUG +dnl AG_GST_ARG_PROFILING +dnl AG_GST_ARG_VALGRIND +dnl AG_GST_ARG_GCOV + +dnl AG_GST_ARG_EXAMPLES + +dnl AG_GST_ARG_WITH_PKG_CONFIG_PATH +dnl AG_GST_ARG_WITH_PACKAGE_NAME +dnl AG_GST_ARG_WITH_PACKAGE_ORIGIN + +dnl AG_GST_ARG_WITH_PLUGINS +dnl AG_GST_CHECK_PLUGIN +dnl AG_GST_DISABLE_PLUGIN + +dnl AG_GST_ARG_ENABLE_EXTERNAL +dnl AG_GST_ARG_ENABLE_EXPERIMENTAL +dnl AG_GST_ARG_ENABLE_BROKEN + +AC_DEFUN([AG_GST_ARG_DEBUG], +[ + dnl debugging stuff + AC_ARG_ENABLE(debug, + AC_HELP_STRING([--disable-debug],[disable addition of -g debugging info]), + [ + case "${enableval}" in + yes) USE_DEBUG=yes ;; + no) USE_DEBUG=no ;; + *) AC_MSG_ERROR(bad value ${enableval} for --enable-debug) ;; + esac + ], + [USE_DEBUG=yes]) dnl Default value +]) + +AC_DEFUN([AG_GST_ARG_PROFILING], +[ + AC_ARG_ENABLE(profiling, + AC_HELP_STRING([--enable-profiling], + [adds -pg to compiler commandline, for profiling]), + [ + case "${enableval}" in + yes) USE_PROFILING=yes ;; + no) USE_PROFILING=no ;; + *) AC_MSG_ERROR(bad value ${enableval} for --enable-profiling) ;; + esac + ], + [USE_PROFILING=no]) dnl Default value +]) + +AC_DEFUN([AG_GST_ARG_VALGRIND], +[ + dnl valgrind inclusion + AC_ARG_ENABLE(valgrind, + AC_HELP_STRING([--disable-valgrind],[disable run-time valgrind detection]), + [ + case "${enableval}" in + yes) USE_VALGRIND="$USE_DEBUG" ;; + no) USE_VALGRIND=no ;; + *) AC_MSG_ERROR(bad value ${enableval} for --enable-valgrind) ;; + esac + ], + [USE_VALGRIND="$USE_DEBUG"]) dnl Default value + VALGRIND_REQ="3.0" + if test "x$USE_VALGRIND" = xyes; then + PKG_CHECK_MODULES(VALGRIND, valgrind >= $VALGRIND_REQ, + USE_VALGRIND="yes", + USE_VALGRIND="no") + fi + if test "x$USE_VALGRIND" = xyes; then + AC_DEFINE(HAVE_VALGRIND, 1, [Define if valgrind should be used]) + AC_MSG_NOTICE(Using extra code paths for valgrind) + fi +]) + +AC_DEFUN([AG_GST_ARG_GCOV], +[ + AC_ARG_ENABLE(gcov, + AC_HELP_STRING([--enable-gcov], + [compile with coverage profiling instrumentation (gcc only)]), + enable_gcov=$enableval, + enable_gcov=no) + if test x$enable_gcov = xyes ; then + if test "x$GCC" != "xyes" + then + AC_MSG_ERROR([gcov only works if gcc is used]) + fi + + AS_COMPILER_FLAG(["-fprofile-arcs"], + [GCOV_CFLAGS="$GCOV_CFLAGS -fprofile-arcs"], + true) + AS_COMPILER_FLAG(["-ftest-coverage"], + [GCOV_CFLAGS="$GCOV_CFLAGS -ftest-coverage"], + true) + dnl remove any -O flags - FIXME: is this needed ? + GCOV_CFLAGS=`echo "$GCOV_CFLAGS" | sed -e 's/-O[[0-9]]*//g'` + dnl libtool 1.5.22 and lower strip -fprofile-arcs from the flags + dnl passed to the linker, which is a bug; -fprofile-arcs implicitly + dnl links in -lgcov, so we do it explicitly here for the same effect + GCOV_LIBS=-lgcov + AC_SUBST(GCOV_CFLAGS) + AC_SUBST(GCOV_LIBS) + GCOV=`echo $CC | sed s/gcc/gcov/g` + AC_SUBST(GCOV) + + GST_GCOV_ENABLED=yes + AC_DEFINE_UNQUOTED(GST_GCOV_ENABLED, 1, + [Defined if gcov is enabled to force a rebuild due to config.h changing]) + dnl if gcov is used, we do not want default -O2 CFLAGS + if test "x$GST_GCOV_ENABLED" = "xyes" + then + CFLAGS="-O0" + AC_SUBST(CFLAGS) + CXXFLAGS="-O0" + AC_SUBST(CXXFLAGS) + FFLAGS="-O0" + AC_SUBST(FFLAGS) + CCASFLAGS="-O0" + AC_SUBST(CCASFLAGS) + AC_MSG_NOTICE([gcov enabled, setting CFLAGS and friends to $CFLAGS]) + fi + fi + AM_CONDITIONAL(GST_GCOV_ENABLED, test x$enable_gcov = xyes) +]) + +AC_DEFUN([AG_GST_ARG_EXAMPLES], +[ + AC_ARG_ENABLE(examples, + AC_HELP_STRING([--disable-examples], [disable building examples]), + [ + case "${enableval}" in + yes) BUILD_EXAMPLES=yes ;; + no) BUILD_EXAMPLES=no ;; + *) AC_MSG_ERROR(bad value ${enableval} for --disable-examples) ;; + esac + ], + [BUILD_EXAMPLES=yes]) dnl Default value + AM_CONDITIONAL(BUILD_EXAMPLES, test "x$BUILD_EXAMPLES" = "xyes") +]) + +AC_DEFUN([AG_GST_ARG_WITH_PKG_CONFIG_PATH], +[ + dnl possibly modify pkg-config path + AC_ARG_WITH(pkg-config-path, + AC_HELP_STRING([--with-pkg-config-path], + [colon-separated list of pkg-config(1) dirs]), + [ + export PKG_CONFIG_PATH=${withval} + AC_MSG_NOTICE(Set PKG_CONFIG_PATH to $PKG_CONFIG_PATH) + ]) +]) + + +dnl This macro requires that GST_GIT or GST_CVS is set to yes or no (release) +AC_DEFUN([AG_GST_ARG_WITH_PACKAGE_NAME], +[ + dnl package name in plugins + AC_ARG_WITH(package-name, + AC_HELP_STRING([--with-package-name], + [specify package name to use in plugins]), + [ + case "${withval}" in + yes) AC_MSG_ERROR(bad value ${withval} for --with-package-name) ;; + no) AC_MSG_ERROR(bad value ${withval} for --with-package-name) ;; + *) GST_PACKAGE_NAME="${withval}" ;; + esac + ], + [ + P=$1 + if test "x$P" = "x" + then + P=$PACKAGE_NAME + fi + + if test "x$PACKAGE_VERSION_NANO" = "x0" + then + GST_PACKAGE_NAME="$P source release" + else + if test "x$PACKAGE_VERSION_NANO" = "x1" + then + GST_PACKAGE_NAME="$P git" + else + GST_PACKAGE_NAME="$P prerelease" + fi + fi + ] + ) + AC_MSG_NOTICE(Using $GST_PACKAGE_NAME as package name) + AC_DEFINE_UNQUOTED(GST_PACKAGE_NAME, "$GST_PACKAGE_NAME", + [package name in plugins]) + AC_SUBST(GST_PACKAGE_NAME) +]) + +AC_DEFUN([AG_GST_ARG_WITH_PACKAGE_ORIGIN], +[ + dnl package origin URL + AC_ARG_WITH(package-origin, + AC_HELP_STRING([--with-package-origin], + [specify package origin URL to use in plugins]), + [ + case "${withval}" in + yes) AC_MSG_ERROR(bad value ${withval} for --with-package-origin) ;; + no) AC_MSG_ERROR(bad value ${withval} for --with-package-origin) ;; + *) GST_PACKAGE_ORIGIN="${withval}" ;; + esac + ], + [GST_PACKAGE_ORIGIN="[Unknown package origin]"] dnl Default value + ) + AC_MSG_NOTICE(Using $GST_PACKAGE_ORIGIN as package origin) + AC_DEFINE_UNQUOTED(GST_PACKAGE_ORIGIN, "$GST_PACKAGE_ORIGIN", + [package origin]) + AC_SUBST(GST_PACKAGE_ORIGIN) +]) + +dnl sets WITH_PLUGINS to the list of plug-ins given as an argument +dnl also clears GST_PLUGINS_ALL and GST_PLUGINS_SELECTED +AC_DEFUN([AG_GST_ARG_WITH_PLUGINS], +[ + AC_ARG_WITH(plugins, + AC_HELP_STRING([--with-plugins], + [comma-separated list of dependencyless plug-ins to compile]), + [WITH_PLUGINS=$withval], + [WITH_PLUGINS=]) + + GST_PLUGINS_ALL="" + GST_PLUGINS_SELECTED="" + + AC_SUBST(GST_PLUGINS_ALL) + AC_SUBST(GST_PLUGINS_SELECTED) +]) + +dnl AG_GST_CHECK_PLUGIN(PLUGIN-NAME) +dnl +dnl This macro adds the plug-in to GST_PLUGINS_ALL. Then it +dnl checks if WITH_PLUGINS is empty or the plugin is present in WITH_PLUGINS, +dnl and if so adds it to GST_PLUGINS_SELECTED. Then it checks if the plugin +dnl is present in WITHOUT_PLUGINS (ie. was disabled specifically) and if so +dnl removes it from GST_PLUGINS_SELECTED. +dnl +dnl The macro will call AM_CONDITIONAL(USE_PLUGIN_, ...) to allow +dnl control of what is built in Makefile.ams. +AC_DEFUN([AG_GST_CHECK_PLUGIN], +[ + GST_PLUGINS_ALL="$GST_PLUGINS_ALL [$1]" + + define([pname_def],translit([$1], -a-z, _a-z)) + + AC_ARG_ENABLE([$1], + AC_HELP_STRING([--disable-[$1]], [disable dependency-less $1 plugin]), + [ + case "${enableval}" in + yes) [gst_use_]pname_def=yes ;; + no) [gst_use_]pname_def=no ;; + *) AC_MSG_ERROR([bad value ${enableval} for --enable-$1]) ;; + esac + ], + [[gst_use_]pname_def=yes]) dnl Default value + + if test x$[gst_use_]pname_def = xno; then + AC_MSG_NOTICE(disabling dependency-less plugin $1) + WITHOUT_PLUGINS="$WITHOUT_PLUGINS [$1]" + fi + undefine([pname_def]) + + if [[ -z "$WITH_PLUGINS" ]] || echo " [$WITH_PLUGINS] " | tr , ' ' | grep -i " [$1] " > /dev/null; then + GST_PLUGINS_SELECTED="$GST_PLUGINS_SELECTED [$1]" + fi + if echo " [$WITHOUT_PLUGINS] " | tr , ' ' | grep -i " [$1] " > /dev/null; then + GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ [$1] / /'` + fi + AM_CONDITIONAL([USE_PLUGIN_]translit([$1], a-z, A-Z), echo " $GST_PLUGINS_SELECTED " | grep -i " [$1] " > /dev/null) +]) + +dnl AG_GST_DISABLE_PLUGIN(PLUGIN-NAME) +dnl +dnl This macro disables the plug-in by removing it from +dnl GST_PLUGINS_SELECTED. +AC_DEFUN([AG_GST_DISABLE_PLUGIN], +[ + GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ [$1] / /'` + AM_CONDITIONAL([USE_PLUGIN_]translit([$1], a-z, A-Z), false) +]) + +AC_DEFUN([AG_GST_ARG_ENABLE_EXTERNAL], +[ + AG_GST_CHECK_FEATURE(EXTERNAL, [building of plug-ins with external deps],, + HAVE_EXTERNAL=yes, enabled, + [ + AC_MSG_NOTICE(building external plug-ins) + BUILD_EXTERNAL="yes" + ],[ + AC_MSG_WARN(all plug-ins with external dependencies will not be built) + BUILD_EXTERNAL="no" + ]) + # make BUILD_EXTERNAL available to Makefile.am + AM_CONDITIONAL(BUILD_EXTERNAL, test "x$BUILD_EXTERNAL" = "xyes") +]) + +dnl experimental plug-ins; stuff that hasn't had the dust settle yet +dnl read 'builds, but might not work' +AC_DEFUN([AG_GST_ARG_ENABLE_EXPERIMENTAL], +[ + AG_GST_CHECK_FEATURE(EXPERIMENTAL, [building of experimental plug-ins],, + HAVE_EXPERIMENTAL=yes, disabled, + [ + AC_MSG_WARN(building experimental plug-ins) + BUILD_EXPERIMENTAL="yes" + ],[ + AC_MSG_NOTICE(not building experimental plug-ins) + BUILD_EXPERIMENTAL="no" + ]) + # make BUILD_EXPERIMENTAL available to Makefile.am + AM_CONDITIONAL(BUILD_EXPERIMENTAL, test "x$BUILD_EXPERIMENTAL" = "xyes") +]) + +dnl broken plug-ins; stuff that doesn't seem to build at the moment +AC_DEFUN([AG_GST_ARG_ENABLE_BROKEN], +[ + AG_GST_CHECK_FEATURE(BROKEN, [building of broken plug-ins],, + HAVE_BROKEN=yes, disabled, + [ + AC_MSG_WARN([building broken plug-ins -- no bug reports on these, only patches ...]) + ],[ + AC_MSG_NOTICE([not building broken plug-ins]) + ]) +]) diff --git a/common/m4/gst-check.m4 b/common/m4/gst-check.m4 new file mode 100644 index 0000000..3fd3acf --- /dev/null +++ b/common/m4/gst-check.m4 @@ -0,0 +1,262 @@ +dnl pkg-config-based checks for GStreamer modules and dependency modules + +dnl generic: +dnl AG_GST_PKG_CHECK_MODULES([PREFIX], [WHICH], [REQUIRED]) +dnl sets HAVE_[$PREFIX], [$PREFIX]_* +dnl AG_GST_CHECK_MODULES([PREFIX], [MODULE], [MINVER], [NAME], [REQUIRED]) +dnl sets HAVE_[$PREFIX], [$PREFIX]_* + +dnl specific: +dnl AG_GST_CHECK_GST([MAJMIN], [MINVER], [REQUIRED]) +dnl also sets/ACSUBSTs GST_TOOLS_DIR and GST_PLUGINS_DIR +dnl AG_GST_CHECK_GST_BASE([MAJMIN], [MINVER], [REQUIRED]) +dnl AG_GST_CHECK_GST_GDP([MAJMIN], [MINVER], [REQUIRED]) +dnl AG_GST_CHECK_GST_CONTROLLER([MAJMIN], [MINVER], [REQUIRED]) +dnl AG_GST_CHECK_GST_CHECK([MAJMIN], [MINVER], [REQUIRED]) +dnl AG_GST_CHECK_GST_PLUGINS_BASE([MAJMIN], [MINVER], [REQUIRED]) +dnl also sets/ACSUBSTs GSTPB_PLUGINS_DIR + +AC_DEFUN([AG_GST_PKG_CHECK_MODULES], +[ + which="[$2]" + dnl not required by default, since we use this mostly for plugin deps + required=ifelse([$3], , "no", [$3]) + + PKG_CHECK_MODULES([$1], $which, + [ + HAVE_[$1]="yes" + ], + [ + HAVE_[$1]="no" + if test "x$required" = "xyes"; then + AC_MSG_ERROR($[$1]_PKG_ERRORS) + else + AC_MSG_NOTICE($[$1]_PKG_ERRORS) + fi + ]) + + dnl AC_SUBST of CFLAGS and LIBS was not done before automake 1.7 + dnl It gets done automatically in automake >= 1.7, which we now require +])) + +AC_DEFUN([AG_GST_CHECK_MODULES], +[ + module=[$2] + minver=[$3] + name="[$4]" + required=ifelse([$5], , "yes", [$5]) dnl required by default + + PKG_CHECK_MODULES([$1], $module >= $minver, + [ + HAVE_[$1]="yes" + ], + [ + HAVE_[$1]="no" + AC_MSG_NOTICE($[$1]_PKG_ERRORS) + if test "x$required" = "xyes"; then + AC_MSG_ERROR([no $module >= $minver ($name) found]) + else + AC_MSG_NOTICE([no $module >= $minver ($name) found]) + fi + ]) + + dnl AC_SUBST of CFLAGS and LIBS was not done before automake 1.7 + dnl It gets done automatically in automake >= 1.7, which we now require +])) + +AC_DEFUN([AG_GST_CHECK_GST], +[ + AG_GST_CHECK_MODULES(GST, gstreamer-[$1], [$2], [GStreamer], [$3]) + dnl allow setting before calling this macro to override + if test -z $GST_TOOLS_DIR; then + GST_TOOLS_DIR=`$PKG_CONFIG --variable=toolsdir gstreamer-[$1]` + if test -z $GST_TOOLS_DIR; then + AC_MSG_ERROR( + [no tools dir set in GStreamer pkg-config file, core upgrade needed.]) + fi + fi + AC_MSG_NOTICE([using GStreamer tools in $GST_TOOLS_DIR]) + AC_SUBST(GST_TOOLS_DIR) + + dnl check for where core plug-ins got installed + dnl this is used for unit tests + dnl allow setting before calling this macro to override + if test -z $GST_PLUGINS_DIR; then + GST_PLUGINS_DIR=`$PKG_CONFIG --variable=pluginsdir gstreamer-[$1]` + if test -z $GST_PLUGINS_DIR; then + AC_MSG_ERROR( + [no pluginsdir set in GStreamer pkg-config file, core upgrade needed.]) + fi + fi + AC_MSG_NOTICE([using GStreamer plug-ins in $GST_PLUGINS_DIR]) + AC_SUBST(GST_PLUGINS_DIR) +]) + +AC_DEFUN([AG_GST_CHECK_GST_BASE], +[ + AG_GST_CHECK_MODULES(GST_BASE, gstreamer-base-[$1], [$2], + [GStreamer Base Libraries], [$3]) +]) + +AC_DEFUN([AG_GST_CHECK_GST_GDP], +[ + AG_GST_CHECK_MODULES(GST_GDP, gstreamer-dataprotocol-[$1], [$2], + [GStreamer Data Protocol Library], [$3]) +]) + +AC_DEFUN([AG_GST_CHECK_GST_CONTROLLER], +[ + AG_GST_CHECK_MODULES(GST_CONTROLLER, gstreamer-controller-[$1], [$2], + [GStreamer Controller Library], [$3]) +]) + +AC_DEFUN([AG_GST_CHECK_GST_CHECK], +[ + AG_GST_CHECK_MODULES(GST_CHECK, gstreamer-check-[$1], [$2], + [GStreamer Check unittest Library], [$3]) +]) + +dnl =========================================================================== +dnl AG_GST_CHECK_GST_PLUGINS_BASE([GST-MAJORMINOR], [MIN-VERSION], [REQUIRED]) +dnl +dnl Sets GST_PLUGINS_BASE_CFLAGS and GST_PLUGINS_BASE_LIBS. +dnl +dnl Also sets GSTPB_PLUGINS_DIR (and for consistency also GST_PLUGINS_BASE_DIR) +dnl for use in Makefile.am. This is only really needed/useful in uninstalled +dnl setups, since in an installed setup all plugins will be found in +dnl GST_PLUGINS_DIR anyway. +dnl =========================================================================== +AC_DEFUN([AG_GST_CHECK_GST_PLUGINS_BASE], +[ + AG_GST_CHECK_MODULES(GST_PLUGINS_BASE, gstreamer-plugins-base-[$1], [$2], + [GStreamer Base Plugins], [$3]) + + if test "x$HAVE_GST_PLUGINS_BASE" = "xyes"; then + dnl check for where base plugins got installed + dnl this is used for unit tests + dnl allow setting before calling this macro to override + if test -z $GSTPB_PLUGINS_DIR; then + GSTPB_PLUGINS_DIR=`$PKG_CONFIG --variable=pluginsdir gstreamer-plugins-base-[$1]` + if test -z $GSTPB_PLUGINS_DIR; then + AC_MSG_ERROR( + [no pluginsdir set in GStreamer Base Plugins pkg-config file]) + fi + fi + AC_MSG_NOTICE([using GStreamer Base Plugins in $GSTPB_PLUGINS_DIR]) + GST_PLUGINS_BASE_DIR="$GSTPB_PLUGINS_DIR/gst:$GSTPB_PLUGINS_DIR/sys:$GSTPB_PLUGINS_DIR/ext" + AC_SUBST(GST_PLUGINS_BASE_DIR) + AC_SUBST(GSTPB_PLUGINS_DIR) + fi +]) + +dnl =========================================================================== +dnl AG_GST_CHECK_GST_PLUGINS_GOOD([GST-MAJORMINOR], [MIN-VERSION]) +dnl +dnl Will set GST_PLUGINS_GOOD_DIR for use in Makefile.am. Note that this will +dnl only be set in an uninstalled setup, since -good ships no .pc file and in +dnl an installed setup all plugins will be found in GST_PLUGINS_DIR anyway. +dnl =========================================================================== +AC_DEFUN([AG_GST_CHECK_GST_PLUGINS_GOOD], +[ + AG_GST_CHECK_MODULES(GST_PLUGINS_GOOD, gstreamer-plugins-good-[$1], [$2], + [GStreamer Good Plugins], [no]) + + if test "x$HAVE_GST_PLUGINS_GOOD" = "xyes"; then + dnl check for where good plugins got installed + dnl this is used for unit tests + dnl allow setting before calling this macro to override + if test -z $GST_PLUGINS_GOOD_DIR; then + GST_PLUGINS_GOOD_DIR=`$PKG_CONFIG --variable=pluginsdir gstreamer-plugins-good-[$1]` + if test -z $GST_PLUGINS_GOOD_DIR; then + AC_MSG_ERROR([no pluginsdir set in GStreamer Good Plugins pkg-config file]) + fi + fi + AC_MSG_NOTICE([using GStreamer Good Plugins in $GST_PLUGINS_GOOD_DIR]) + GST_PLUGINS_GOOD_DIR="$GST_PLUGINS_GOOD_DIR/gst:$GST_PLUGINS_GOOD_DIR/sys:$GST_PLUGINS_GOOD_DIR/ext" + AC_SUBST(GST_PLUGINS_GOOD_DIR) + fi +]) + +dnl =========================================================================== +dnl AG_GST_CHECK_GST_PLUGINS_UGLY([GST-MAJORMINOR], [MIN-VERSION]) +dnl +dnl Will set GST_PLUGINS_UGLY_DIR for use in Makefile.am. Note that this will +dnl only be set in an uninstalled setup, since -bad ships no .pc file and in +dnl an installed setup all plugins will be found in GST_PLUGINS_DIR anyway. +dnl =========================================================================== +AC_DEFUN([AG_GST_CHECK_GST_PLUGINS_UGLY], +[ + AG_GST_CHECK_MODULES(GST_PLUGINS_UGLY, gstreamer-plugins-ugly-[$1], [$2], + [GStreamer Ugly Plugins], [no]) + + if test "x$HAVE_GST_PLUGINS_UGLY" = "xyes"; then + dnl check for where ugly plugins got installed + dnl this is used for unit tests + dnl allow setting before calling this macro to override + if test -z $GST_PLUGINS_UGLY_DIR; then + GST_PLUGINS_UGLY_DIR=`$PKG_CONFIG --variable=pluginsdir gstreamer-plugins-ugly-[$1]` + if test -z $GST_PLUGINS_UGLY_DIR; then + AC_MSG_ERROR([no pluginsdir set in GStreamer Ugly Plugins pkg-config file]) + fi + fi + AC_MSG_NOTICE([using GStreamer Ugly Plugins in $GST_PLUGINS_UGLY_DIR]) + GST_PLUGINS_UGLY_DIR="$GST_PLUGINS_UGLY_DIR/gst:$GST_PLUGINS_UGLY_DIR/sys:$GST_PLUGINS_UGLY_DIR/ext" + AC_SUBST(GST_PLUGINS_UGLY_DIR) + fi +]) + +dnl =========================================================================== +dnl AG_GST_CHECK_GST_PLUGINS_BAD([GST-MAJORMINOR], [MIN-VERSION]) +dnl +dnl Will set GST_PLUGINS_BAD_DIR for use in Makefile.am. Note that this will +dnl only be set in an uninstalled setup, since -ugly ships no .pc file and in +dnl an installed setup all plugins will be found in GST_PLUGINS_DIR anyway. +dnl =========================================================================== +AC_DEFUN([AG_GST_CHECK_GST_PLUGINS_BAD], +[ + AG_GST_CHECK_MODULES(GST_PLUGINS_BAD, gstreamer-plugins-bad-[$1], [$2], + [GStreamer Bad Plugins], [no]) + + if test "x$HAVE_GST_PLUGINS_BAD" = "xyes"; then + dnl check for where bad plugins got installed + dnl this is used for unit tests + dnl allow setting before calling this macro to override + if test -z $GST_PLUGINS_BAD_DIR; then + GST_PLUGINS_BAD_DIR=`$PKG_CONFIG --variable=pluginsdir gstreamer-plugins-bad-[$1]` + if test -z $GST_PLUGINS_BAD_DIR; then + AC_MSG_ERROR([no pluginsdir set in GStreamer Bad Plugins pkg-config file]) + fi + fi + AC_MSG_NOTICE([using GStreamer Bad Plugins in $GST_PLUGINS_BAD_DIR]) + GST_PLUGINS_BAD_DIR="$GST_PLUGINS_BAD_DIR/gst:$GST_PLUGINS_BAD_DIR/sys:$GST_PLUGINS_BAD_DIR/ext" + AC_SUBST(GST_PLUGINS_BAD_DIR) + fi +]) + +dnl =========================================================================== +dnl AG_GST_CHECK_GST_PLUGINS_FFMPEG([GST-MAJORMINOR], [MIN-VERSION]) +dnl +dnl Will set GST_PLUGINS_FFMPEG_DIR for use in Makefile.am. Note that this will +dnl only be set in an uninstalled setup, since -ffmpeg ships no .pc file and in +dnl an installed setup all plugins will be found in GST_PLUGINS_DIR anyway. +dnl =========================================================================== +AC_DEFUN([AG_GST_CHECK_GST_PLUGINS_FFMPEG], +[ + AG_GST_CHECK_MODULES(GST_PLUGINS_FFMPEG, gstreamer-plugins-ffmpeg-[$1], [$2], + [GStreamer FFmpeg Plugins], [no]) + + if test "x$HAVE_GST_PLUGINS_FFMPEG" = "xyes"; then + dnl check for where ffmpeg plugins got installed + dnl this is used for unit tests + dnl allow setting before calling this macro to override + if test -z $GST_PLUGINS_FFMPEG_DIR; then + GST_PLUGINS_FFMPEG_DIR=`$PKG_CONFIG --variable=pluginsdir gstreamer-plugins-ffmpeg-[$1]` + if test -z $GST_PLUGINS_FFMPEG_DIR; then + AC_MSG_ERROR([no pluginsdir set in GStreamer FFmpeg Plugins pkg-config file]) + fi + fi + GST_PLUGINS_FFMPEG_DIR="$GST_PLUGINS_FFMPEG_DIR/ext/ffmpeg" + AC_MSG_NOTICE([using GStreamer FFmpeg Plugins in $GST_PLUGINS_FFMPEG_DIR]) + AC_SUBST(GST_PLUGINS_FFMPEG_DIR) + fi +]) diff --git a/common/m4/gst-debuginfo.m4 b/common/m4/gst-debuginfo.m4 new file mode 100644 index 0000000..b48854d --- /dev/null +++ b/common/m4/gst-debuginfo.m4 @@ -0,0 +1,46 @@ +AC_DEFUN([AG_GST_DEBUGINFO], [ +AC_ARG_ENABLE(debug, +AC_HELP_STRING([--disable-debug],[disable addition of -g debugging info]), +[case "${enableval}" in + yes) USE_DEBUG=yes ;; + no) USE_DEBUG=no ;; + *) AC_MSG_ERROR(bad value ${enableval} for --enable-debug) ;; +esac], +[USE_DEBUG=yes]) dnl Default value + +AC_ARG_ENABLE(DEBUG, +AC_HELP_STRING([--disable-DEBUG],[disables compilation of debugging messages]), +[case "${enableval}" in + yes) ENABLE_DEBUG=yes ;; + no) ENABLE_DEBUG=no ;; + *) AC_MSG_ERROR(bad value ${enableval} for --enable-DEBUG) ;; +esac], +[ENABLE_DEBUG=yes]) dnl Default value +if test x$ENABLE_DEBUG = xyes; then + AC_DEFINE(GST_DEBUG_ENABLED, 1, [Define if DEBUG statements should be compiled in]) +fi + +AC_ARG_ENABLE(INFO, +AC_HELP_STRING([--disable-INFO],[disables compilation of informational messages]), +[case "${enableval}" in + yes) ENABLE_INFO=yes ;; + no) ENABLE_INFO=no ;; + *) AC_MSG_ERROR(bad value ${enableval} for --enable-INFO) ;; +esac], +[ENABLE_INFO=yes]) dnl Default value +if test x$ENABLE_INFO = xyes; then + AC_DEFINE(GST_INFO_ENABLED, 1, [Define if INFO statements should be compiled in]) +fi + +AC_ARG_ENABLE(debug-color, +AC_HELP_STRING([--disable-debug-color],[disables color output of DEBUG and INFO output]), +[case "${enableval}" in + yes) ENABLE_DEBUG_COLOR=yes ;; + no) ENABLE_DEBUG_COLOR=no ;; + *) AC_MSG_ERROR(bad value ${enableval} for --enable-debug-color) ;; +esac], +[ENABLE_DEBUG_COLOR=yes]) dnl Default value +if test "x$ENABLE_DEBUG_COLOR" = xyes; then + AC_DEFINE(GST_DEBUG_COLOR, 1, [Define if debugging messages should be colorized]) +fi +]) diff --git a/common/m4/gst-default.m4 b/common/m4/gst-default.m4 new file mode 100644 index 0000000..8de9756 --- /dev/null +++ b/common/m4/gst-default.m4 @@ -0,0 +1,120 @@ +dnl default elements used for tests and such + +dnl AG_GST_DEFAULT_ELEMENTS + +AC_DEFUN([AG_GST_DEFAULT_ELEMENTS], +[ + dnl decide on default elements + dnl FIXME: describe where exactly this gets used + dnl FIXME: decide if it's a problem that this could point to sinks from + dnl depending plugin modules + dnl FIXME: when can we just use autoaudiosrc and autovideosrc? + DEFAULT_AUDIOSINK="autoaudiosink" + DEFAULT_VIDEOSINK="autovideosink" + DEFAULT_AUDIOSRC="alsasrc" + DEFAULT_VIDEOSRC="v4l2src" + DEFAULT_VISUALIZER="goom" + case "$host" in + *-sun-* | *pc-solaris* ) + DEFAULT_AUDIOSRC="sunaudiosrc" + ;; + *-darwin* ) + DEFAULT_AUDIOSRC="osxaudiosrc" + ;; + esac + + dnl Default audio sink + AC_ARG_WITH(default-audiosink, + AC_HELP_STRING([--with-default-audiosink], [specify default audio sink]), + [ + case "${withval}" in + yes) AC_MSG_ERROR(bad value ${withval} for --with-default-audiosink) ;; + no) AC_MSG_ERROR(bad value ${withval} for --with-default-audiosink) ;; + *) DEFAULT_AUDIOSINK="${withval}" ;; + esac + ], + [ + DEFAULT_AUDIOSINK="$DEFAULT_AUDIOSINK" + ] dnl Default value as determined above + ) + AC_MSG_NOTICE(Using $DEFAULT_AUDIOSINK as default audio sink) + AC_SUBST(DEFAULT_AUDIOSINK) + AC_DEFINE_UNQUOTED(DEFAULT_AUDIOSINK, "$DEFAULT_AUDIOSINK", + [Default audio sink]) + + dnl Default audio source + AC_ARG_WITH(default-audiosrc, + AC_HELP_STRING([--with-default-audiosrc], [specify default audio source]), + [ + case "${withval}" in + yes) AC_MSG_ERROR(bad value ${withval} for --with-default-audiosrc) ;; + no) AC_MSG_ERROR(bad value ${withval} for --with-default-audiosrc) ;; + *) DEFAULT_AUDIOSRC="${withval}" ;; + esac + ], + [ + DEFAULT_AUDIOSRC="$DEFAULT_AUDIOSRC" + ] dnl Default value as determined above + ) + AC_MSG_NOTICE(Using $DEFAULT_AUDIOSRC as default audio source) + AC_SUBST(DEFAULT_AUDIOSRC) + AC_DEFINE_UNQUOTED(DEFAULT_AUDIOSRC, "$DEFAULT_AUDIOSRC", + [Default audio source]) + + dnl Default video sink + AC_ARG_WITH(default-videosink, + AC_HELP_STRING([--with-default-videosink], [specify default video sink]), + [ + case "${withval}" in + yes) AC_MSG_ERROR(bad value ${withval} for --with-default-videosink) ;; + no) AC_MSG_ERROR(bad value ${withval} for --with-default-videosink) ;; + *) DEFAULT_VIDEOSINK="${withval}" ;; + esac + ], + [ + DEFAULT_VIDEOSINK="$DEFAULT_VIDEOSINK" + ] dnl Default value as determined above + ) + AC_MSG_NOTICE(Using $DEFAULT_VIDEOSINK as default video sink) + AC_SUBST(DEFAULT_VIDEOSINK) + AC_DEFINE_UNQUOTED(DEFAULT_VIDEOSINK, "$DEFAULT_VIDEOSINK", + [Default video sink]) + + dnl Default video source + AC_ARG_WITH(default-videosrc, + AC_HELP_STRING([--with-default-videosrc], [specify default video source]), + [ + case "${withval}" in + yes) AC_MSG_ERROR(bad value ${withval} for --with-default-videosrc) ;; + no) AC_MSG_ERROR(bad value ${withval} for --with-default-videosrc) ;; + *) DEFAULT_VIDEOSRC="${withval}" ;; + esac + ], + [ + DEFAULT_VIDEOSRC="$DEFAULT_VIDEOSRC" + ] dnl Default value as determined above + ) + AC_MSG_NOTICE(Using $DEFAULT_VIDEOSRC as default video source) + AC_SUBST(DEFAULT_VIDEOSRC) + AC_DEFINE_UNQUOTED(DEFAULT_VIDEOSRC, "$DEFAULT_VIDEOSRC", + [Default video source]) + + dnl Default visualizer + AC_ARG_WITH(default-visualizer, + AC_HELP_STRING([--with-default-visualizer], [specify default visualizer]), + [ + case "${withval}" in + yes) AC_MSG_ERROR(bad value ${withval} for --with-default-visualizer) ;; + no) AC_MSG_ERROR(bad value ${withval} for --with-default-visualizer) ;; + *) DEFAULT_VISUALIZER="${withval}" ;; + esac + ], + [ + DEFAULT_VISUALIZER="$DEFAULT_VISUALIZER" + ] dnl Default value as determined above + ) + AC_MSG_NOTICE(Using $DEFAULT_VISUALIZER as default visualizer) + AC_SUBST(DEFAULT_VISUALIZER) + AC_DEFINE_UNQUOTED(DEFAULT_VISUALIZER, "$DEFAULT_VISUALIZER", + [Default visualizer]) +]) diff --git a/common/m4/gst-doc.m4 b/common/m4/gst-doc.m4 new file mode 100644 index 0000000..6521097 --- /dev/null +++ b/common/m4/gst-doc.m4 @@ -0,0 +1,148 @@ +AC_DEFUN([AG_GST_DOCBOOK_CHECK], +[ + dnl choose a location to install docbook docs in + if test "x$PACKAGE_TARNAME" = "x" + then + AC_MSG_ERROR([Internal error - PACKAGE_TARNAME not set]) + fi + docdir="\$(datadir)/doc/$PACKAGE_TARNAME-$GST_MAJORMINOR" + + dnl enable/disable docbook documentation building + AC_ARG_ENABLE(docbook, + AC_HELP_STRING([--enable-docbook], + [use docbook to build documentation [default=no]]),, + enable_docbook=no) + + have_docbook=no + + if test x$enable_docbook = xyes; then + dnl check if we actually have everything we need + + dnl check for docbook tools + AC_CHECK_PROG(HAVE_DOCBOOK2PS, docbook2ps, yes, no) + AC_CHECK_PROG(HAVE_DOCBOOK2HTML, docbook2html, yes, no) + AC_CHECK_PROG(HAVE_JADETEX, jadetex, yes, no) + AC_CHECK_PROG(HAVE_PS2PDF, ps2pdf, yes, no) + + # -V option appeared in 0.6.10 + docbook2html_min_version=0.6.10 + if test "x$HAVE_DOCBOOK2HTML" != "xno"; then + docbook2html_version=`docbook2html --version` + AC_MSG_CHECKING([docbook2html version ($docbook2html_version) >= $docbook2html_min_version]) + if perl -w < \$min_version_major) || + ((\$docbook2html_version_major == \$min_version_major) && + (\$docbook2html_version_minor >= \$min_version_minor)) || + ((\$docbook2html_version_major == \$min_version_major) && + (\$docbook2html_version_minor >= \$min_version_minor) && + (\$docbook2html_version_micro >= \$min_version_micro))) + ? 0 : 1); +EOF + then + AC_MSG_RESULT(yes) + else + AC_MSG_RESULT(no) + HAVE_DOCBOOK2HTML=no + fi + fi + + dnl check if we can process docbook stuff + AS_DOCBOOK(have_docbook=yes, have_docbook=no) + + dnl check for extra tools + AC_CHECK_PROG(HAVE_DVIPS, dvips, yes, no) + AC_CHECK_PROG(HAVE_XMLLINT, xmllint, yes, no) + + dnl check for image conversion tools + AC_CHECK_PROG(HAVE_FIG2DEV, fig2dev, yes, no) + if test "x$HAVE_FIG2DEV" = "xno" ; then + AC_MSG_WARN([Did not find fig2dev (from xfig), images will not be generated.]) + fi + + dnl The following is a hack: if fig2dev doesn't display an error message + dnl for the desired type, we assume it supports it. + HAVE_FIG2DEV_EPS=no + if test "x$HAVE_FIG2DEV" = "xyes" ; then + fig2dev_quiet=`fig2dev -L eps &1 >/dev/null` + if test "x$fig2dev_quiet" = "x" ; then + HAVE_FIG2DEV_EPS=yes + fi + fi + HAVE_FIG2DEV_PNG=no + if test "x$HAVE_FIG2DEV" = "xyes" ; then + fig2dev_quiet=`fig2dev -L png &1 >/dev/null` + if test "x$fig2dev_quiet" = "x" ; then + HAVE_FIG2DEV_PNG=yes + fi + fi + HAVE_FIG2DEV_PDF=no + if test "x$HAVE_FIG2DEV" = "xyes" ; then + fig2dev_quiet=`fig2dev -L pdf &1 >/dev/null` + if test "x$fig2dev_quiet" = "x" ; then + HAVE_FIG2DEV_PDF=yes + fi + fi + + AC_CHECK_PROG(HAVE_PNGTOPNM, pngtopnm, yes, no) + AC_CHECK_PROG(HAVE_PNMTOPS, pnmtops, yes, no) + AC_CHECK_PROG(HAVE_EPSTOPDF, epstopdf, yes, no) + + dnl check if we can generate HTML + if test "x$HAVE_DOCBOOK2HTML" = "xyes" && \ + test "x$enable_docbook" = "xyes" && \ + test "x$HAVE_XMLLINT" = "xyes" && \ + test "x$HAVE_FIG2DEV_PNG" = "xyes"; then + DOC_HTML=yes + AC_MSG_NOTICE(Will output HTML documentation) + else + DOC_HTML=no + AC_MSG_NOTICE(Will not output HTML documentation) + fi + + dnl check if we can generate PS + if test "x$HAVE_DOCBOOK2PS" = "xyes" && \ + test "x$enable_docbook" = "xyes" && \ + test "x$HAVE_XMLLINT" = "xyes" && \ + test "x$HAVE_JADETEX" = "xyes" && \ + test "x$HAVE_FIG2DEV_EPS" = "xyes" && \ + test "x$HAVE_DVIPS" = "xyes" && \ + test "x$HAVE_PNGTOPNM" = "xyes" && \ + test "x$HAVE_PNMTOPS" = "xyes"; then + DOC_PS=yes + AC_MSG_NOTICE(Will output PS documentation) + else + DOC_PS=no + AC_MSG_NOTICE(Will not output PS documentation) + fi + + dnl check if we can generate PDF - using only ps2pdf + if test "x$DOC_PS" = "xyes" && \ + test "x$enable_docbook" = "xyes" && \ + test "x$HAVE_XMLLINT" = "xyes" && \ + test "x$HAVE_PS2PDF" = "xyes"; then + DOC_PDF=yes + AC_MSG_NOTICE(Will output PDF documentation) + else + DOC_PDF=no + AC_MSG_NOTICE(Will not output PDF documentation) + fi + + dnl if we don't have everything, we should disable + if test "x$have_docbook" != "xyes"; then + enable_docbook=no + fi + fi + + dnl if we're going to install documentation, tell us where + if test "x$have_docbook" = "xyes"; then + AC_MSG_NOTICE(Installing documentation in $docdir) + AC_SUBST(docdir) + fi + + AM_CONDITIONAL(ENABLE_DOCBOOK, test x$enable_docbook = xyes) + AM_CONDITIONAL(DOC_HTML, test x$DOC_HTML = xyes) + AM_CONDITIONAL(DOC_PDF, test x$DOC_PDF = xyes) + AM_CONDITIONAL(DOC_PS, test x$DOC_PS = xyes) +]) diff --git a/common/m4/gst-dowhile.m4 b/common/m4/gst-dowhile.m4 new file mode 100644 index 0000000..069808d --- /dev/null +++ b/common/m4/gst-dowhile.m4 @@ -0,0 +1,24 @@ +dnl +dnl Check for working do while(0) macros. This is used by G_STMT_START +dnl and G_STMT_END in glib/gmacros.h. Without having this defined we +dnl get "ambigious if-else" compiler warnings when compling C++ code. +dnl +dnl Copied from GLib's configure.in +dnl +AC_DEFUN([AG_GST_CHECK_DOWHILE_MACROS],[ + +dnl *** check for working do while(0) macros *** +AC_CACHE_CHECK([for working do while(0) macros], _cv_g_support_dowhile_macros, [ + AC_TRY_COMPILE([],[ + #define STMT_START do + #define STMT_END while(0) + #define STMT_TEST STMT_START { i = 0; } STMT_END + int main(void) { int i = 1; STMT_TEST; return i; }], + [_cv_g_support_dowhile_macros=yes], + [_cv_g_support_dowhile_macros=no], + [_cv_g_support_dowhile_macros=yes]) +]) +if test x$_cv_g_support_dowhile_macros = xyes; then + AC_DEFINE(HAVE_DOWHILE_MACROS, 1, [define for working do while(0) macros]) +fi +]) diff --git a/common/m4/gst-error.m4 b/common/m4/gst-error.m4 new file mode 100644 index 0000000..f8f2364 --- /dev/null +++ b/common/m4/gst-error.m4 @@ -0,0 +1,213 @@ +dnl handle various error-related things + +dnl Thomas Vander Stichele +dnl Tim-Philipp Müller + +dnl Last modification: 2008-02-18 + +dnl AG_GST_SET_ERROR_CFLAGS([ADD-WERROR], [MORE_FLAGS]) +dnl AG_GST_SET_ERROR_CXXFLAGS([ADD-WERROR], [MORE_FLAGS]) +dnl AG_GST_SET_LEVEL_DEFAULT([IS-GIT-VERSION]) + + +dnl Sets WARNING_CFLAGS and ERROR_CFLAGS to something the compiler +dnl will accept and AC_SUBST them so they are available in Makefile +dnl +dnl WARNING_CFLAGS will contain flags to make the compiler emit more +dnl warnings. +dnl ERROR_CFLAGS will contain flags to make those warnings fatal, +dnl unless ADD-WERROR is set to "no" +dnl +dnl If MORE_FLAGS is set, tries to add each of the given flags +dnl to WARNING_CFLAGS if the compiler supports them. Each flag is +dnl tested separately. +dnl +dnl These flags can be overridden at make time: +dnl make ERROR_CFLAGS= +AC_DEFUN([AG_GST_SET_ERROR_CFLAGS], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AS_COMPILER_FLAG]) + + WARNING_CFLAGS="" + ERROR_CFLAGS="" + + dnl if we support -Wall, set it unconditionally + AS_COMPILER_FLAG(-Wall, + WARNING_CFLAGS="$WARNING_CFLAGS -Wall") + + dnl Warn if declarations after statements are used (C99 extension) + AS_COMPILER_FLAG(-Wdeclaration-after-statement, + WARNING_CFLAGS="$WARNING_CFLAGS -Wdeclaration-after-statement") + + dnl Warn if variable length arrays are used (C99 extension) + AS_COMPILER_FLAG(-Wvla, + WARNING_CFLAGS="$WARNING_CFLAGS -Wvla") + + dnl Warn for invalid pointer arithmetic + AS_COMPILER_FLAG(-Wpointer-arith, + WARNING_CFLAGS="$WARNING_CFLAGS -Wpointer-arith") + + dnl if asked for, add -Werror if supported + if test "x$1" != "xno" + then + AS_COMPILER_FLAG(-Werror, ERROR_CFLAGS="$ERROR_CFLAGS -Werror") + + dnl if -Werror isn't suported, try -errwarn=%all (Sun Forte case) + if test "x$ERROR_CFLAGS" = "x" + then + AS_COMPILER_FLAG([-errwarn=%all], [ + ERROR_CFLAGS="-errwarn=%all" + dnl try -errwarn=%all,no%E_EMPTY_DECLARATION, + dnl no%E_STATEMENT_NOT_REACHED,no%E_ARGUEMENT_MISMATCH, + dnl no%E_MACRO_REDEFINED (Sun Forte case) + dnl For Forte we need disable "empty declaration" warning produced by un-needed semicolon + dnl "statement not reached" disabled because there is g_assert_not_reached () in some places + dnl "macro redefined" because of gst/gettext.h + dnl FIXME: is it really supposed to be 'ARGUEMENT' and not 'ARGUMENT'? + for f in 'no%E_EMPTY_DECLARATION' \ + 'no%E_STATEMENT_NOT_REACHED' \ + 'no%E_ARGUEMENT_MISMATCH' \ + 'no%E_MACRO_REDEFINED' \ + 'no%E_LOOP_NOT_ENTERED_AT_TOP' + do + AS_COMPILER_FLAG([-errwarn=%all,$f], [ + ERROR_CFLAGS="$ERROR_CFLAGS,$f" + ]) + done + ]) + else + dnl Add -fno-strict-aliasing for GLib versions before 2.19.8 + dnl as before G_LOCK and friends caused strict aliasing compiler + dnl warnings. + PKG_CHECK_EXISTS([glib-2.0 < 2.19.8], [ + AS_COMPILER_FLAG(-fno-strict-aliasing, + ERROR_CFLAGS="$ERROR_CFLAGS -fno-strict-aliasing") + ]) + fi + fi + + if test "x$2" != "x" + then + UNSUPPORTED="" + list="$2" + for each in $list + do + AS_COMPILER_FLAG($each, + WARNING_CFLAGS="$WARNING_CFLAGS $each", + UNSUPPORTED="$UNSUPPORTED $each") + done + if test "X$UNSUPPORTED" != X ; then + AC_MSG_NOTICE([unsupported compiler flags: $UNSUPPORTED]) + fi + fi + + AC_SUBST(WARNING_CFLAGS) + AC_SUBST(ERROR_CFLAGS) + AC_MSG_NOTICE([set WARNING_CFLAGS to $WARNING_CFLAGS]) + AC_MSG_NOTICE([set ERROR_CFLAGS to $ERROR_CFLAGS]) +]) + +dnl Sets WARNING_CXXFLAGS and ERROR_CXXFLAGS to something the compiler +dnl will accept and AC_SUBST them so they are available in Makefile +dnl +dnl WARNING_CXXFLAGS will contain flags to make the compiler emit more +dnl warnings. +dnl ERROR_CXXFLAGS will contain flags to make those warnings fatal, +dnl unless ADD-WERROR is set to "no" +dnl +dnl If MORE_FLAGS is set, tries to add each of the given flags +dnl to WARNING_CFLAGS if the compiler supports them. Each flag is +dnl tested separately. +dnl +dnl These flags can be overridden at make time: +dnl make ERROR_CXXFLAGS= +AC_DEFUN([AG_GST_SET_ERROR_CXXFLAGS], +[ + AC_REQUIRE([AC_PROG_CXX]) + AC_REQUIRE([AS_CXX_COMPILER_FLAG]) + + ERROR_CXXFLAGS="" + WARNING_CXXFLAGS="" + + dnl if we support -Wall, set it unconditionally + AS_CXX_COMPILER_FLAG(-Wall, WARNING_CXXFLAGS="$WARNING_CXXFLAGS -Wall") + + dnl if asked for, add -Werror if supported + if test "x$1" != "xno" + then + AS_CXX_COMPILER_FLAG(-Werror, ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Werror") + + if test "x$ERROR_CXXFLAGS" != "x" + then + dnl add exceptions + AS_CXX_COMPILER_FLAG([-Wno-non-virtual-dtor], ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Wno-non-virtual-dtor") + + dnl Add -fno-strict-aliasing for GLib versions before 2.19.8 + dnl as before G_LOCK and friends caused strict aliasing compiler + dnl warnings. + PKG_CHECK_EXISTS([glib-2.0 < 2.19.8], [ + AS_CXX_COMPILER_FLAG([-fno-strict-aliasing], + ERROR_CXXFLAGS="$ERROR_CXXFLAGS -fno-strict-aliasing") + ]) + else + dnl if -Werror isn't suported, try -errwarn=%all + AS_CXX_COMPILER_FLAG([-errwarn=%all], ERROR_CXXFLAGS="$ERROR_CXXFLAGS -errwarn=%all") + if test "x$ERROR_CXXFLAGS" != "x"; then + dnl try -errwarn=%all,no%E_EMPTY_DECLARATION, + dnl no%E_STATEMENT_NOT_REACHED,no%E_ARGUEMENT_MISMATCH, + dnl no%E_MACRO_REDEFINED (Sun Forte case) + dnl For Forte we need disable "empty declaration" warning produced by un-needed semicolon + dnl "statement not reached" disabled because there is g_assert_not_reached () in some places + dnl "macro redefined" because of gst/gettext.h + dnl FIXME: is it really supposed to be 'ARGUEMENT' and not 'ARGUMENT'? + dnl FIXME: do any of these work with the c++ compiler? if not, why + dnl do we check at all? + for f in 'no%E_EMPTY_DECLARATION' \ + 'no%E_STATEMENT_NOT_REACHED' \ + 'no%E_ARGUEMENT_MISMATCH' \ + 'no%E_MACRO_REDEFINED' \ + 'no%E_LOOP_NOT_ENTERED_AT_TOP' + do + AS_CXX_COMPILER_FLAG([-errwarn=%all,$f], ERROR_CXXFLAGS="$ERROR_CXXFLAGS,$f") + done + fi + fi + fi + + if test "x$2" != "x" + then + UNSUPPORTED="" + list="$2" + for each in $list + do + AS_CXX_COMPILER_FLAG($each, + WARNING_CXXFLAGS="$WARNING_CXXFLAGS $each", + UNSUPPORTED="$UNSUPPORTED $each") + done + if test "X$UNSUPPORTED" != X ; then + AC_MSG_NOTICE([unsupported compiler flags: $UNSUPPORTED]) + fi + fi + + AC_SUBST(WARNING_CXXFLAGS) + AC_SUBST(ERROR_CXXFLAGS) + AC_MSG_NOTICE([set WARNING_CXXFLAGS to $WARNING_CXXFLAGS]) + AC_MSG_NOTICE([set ERROR_CXXFLAGS to $ERROR_CXXFLAGS]) +]) + +dnl Sets the default error level for debugging messages +AC_DEFUN([AG_GST_SET_LEVEL_DEFAULT], +[ + dnl define correct errorlevel for debugging messages. We want to have + dnl GST_ERROR messages printed when running cvs builds + if test "x[$1]" = "xyes"; then + GST_LEVEL_DEFAULT=GST_LEVEL_ERROR + else + GST_LEVEL_DEFAULT=GST_LEVEL_NONE + fi + AC_DEFINE_UNQUOTED(GST_LEVEL_DEFAULT, $GST_LEVEL_DEFAULT, + [Default errorlevel to use]) + dnl AC_SUBST so we can use it for win32/common/config.h + AC_SUBST(GST_LEVEL_DEFAULT) +]) diff --git a/common/m4/gst-feature.m4 b/common/m4/gst-feature.m4 new file mode 100644 index 0000000..c8e5343 --- /dev/null +++ b/common/m4/gst-feature.m4 @@ -0,0 +1,254 @@ +dnl Perform a check for a feature for GStreamer +dnl Richard Boulton +dnl Thomas Vander Stichele added useful stuff +dnl Last modification: 25/06/2001 +dnl +dnl AG_GST_CHECK_FEATURE(FEATURE-NAME, FEATURE-DESCRIPTION, +dnl DEPENDENT-PLUGINS, TEST-FOR-FEATURE, +dnl DISABLE-BY-DEFAULT, ACTION-IF-USE, ACTION-IF-NOTUSE) +dnl +dnl This macro adds a command line argument to allow the user to enable +dnl or disable a feature, and if the feature is enabled, performs a supplied +dnl test to check if the feature is available. +dnl +dnl The test should define HAVE_ to "yes" or "no" depending +dnl on whether the feature is available. +dnl +dnl The macro will set USE_ to "yes" or "no" depending on +dnl whether the feature is to be used. +dnl Thomas changed this, so that when USE_ was already set +dnl to no, then it stays that way. +dnl +dnl The macro will call AM_CONDITIONAL(USE_, ...) to allow +dnl the feature to control what is built in Makefile.ams. If you want +dnl additional actions resulting from the test, you can add them with the +dnl ACTION-IF-USE and ACTION-IF-NOTUSE parameters. +dnl +dnl FEATURE-NAME is the name of the feature, and should be in +dnl purely upper case characters. +dnl FEATURE-DESCRIPTION is used to describe the feature in help text for +dnl the command line argument. +dnl DEPENDENT-PLUGINS lists any plug-ins which depend on this feature. +dnl TEST-FOR-FEATURE is a test which sets HAVE_ to "yes" +dnl or "no" depending on whether the feature is +dnl available. +dnl DISABLE-BY-DEFAULT if "disabled", the feature is disabled by default, +dnl if any other value, the feature is enabled by default. +dnl ACTION-IF-USE any extra actions to perform if the feature is to be +dnl used. +dnl ACTION-IF-NOTUSE any extra actions to perform if the feature is not to +dnl be used. +dnl +dnl +dnl thomas : +dnl we also added a history. +dnl GST_PLUGINS_YES will contain all plugins to be built +dnl that were checked through AG_GST_CHECK_FEATURE +dnl GST_PLUGINS_NO will contain those that won't be built + +AC_DEFUN([AG_GST_CHECK_FEATURE], +[echo +AC_MSG_NOTICE(*** checking feature: [$2] ***) +if test "x[$3]" != "x" +then + AC_MSG_NOTICE(*** for plug-ins: [$3] ***) +fi +dnl +builtin(define, [gst_endisable], ifelse($5, [disabled], [enable], [disable]))dnl +dnl if it is set to NO, then don't even consider it for building +NOUSE= +if test "x$USE_[$1]" = "xno"; then + NOUSE="yes" +fi +AC_ARG_ENABLE(translit([$1], A-Z, a-z), + [ ]builtin(format, --%-26s gst_endisable %s, gst_endisable-translit([$1], A-Z, a-z), [$2]ifelse([$3],,,: [$3])), + [ case "${enableval}" in + yes) USE_[$1]=yes;; + no) USE_[$1]=no;; + *) AC_MSG_ERROR(bad value ${enableval} for --enable-translit([$1], A-Z, a-z)) ;; + esac], + [ USE_$1=]ifelse($5, [disabled], [no], [yes])) dnl DEFAULT + +dnl *** set it back to no if it was preset to no +if test "x$NOUSE" = "xyes"; then + USE_[$1]="no" + AC_MSG_WARN(*** $3 pre-configured not to be built) +fi +NOUSE= + +dnl *** If it's enabled + +if test x$USE_[$1] = xyes; then + dnl save compile variables before the test + + gst_check_save_LIBS=$LIBS + gst_check_save_LDFLAGS=$LDFLAGS + gst_check_save_CFLAGS=$CFLAGS + gst_check_save_CPPFLAGS=$CPPFLAGS + gst_check_save_CXXFLAGS=$CXXFLAGS + + HAVE_[$1]=no + dnl TEST_FOR_FEATURE + $4 + + LIBS=$gst_check_save_LIBS + LDFLAGS=$gst_check_save_LDFLAGS + CFLAGS=$gst_check_save_CFLAGS + CPPFLAGS=$gst_check_save_CPPFLAGS + CXXFLAGS=$gst_check_save_CXXFLAGS + + dnl If it isn't found, unset USE_[$1] + if test x$HAVE_[$1] = xno; then + USE_[$1]=no + else + ifelse([$3], , :, [AC_MSG_NOTICE(*** These plugins will be built: [$3])]) + fi +fi +dnl *** Warn if it's disabled or not found +if test x$USE_[$1] = xyes; then + ifelse([$6], , :, [$6]) + if test "x$3" != "x"; then + GST_PLUGINS_YES="\t[$3]\n$GST_PLUGINS_YES" + fi + AC_DEFINE(HAVE_[$1], , [Define to enable $2]ifelse($3,,, [ (used by $3)]).) +else + ifelse([$3], , :, [AC_MSG_NOTICE(*** These plugins will not be built: [$3])]) + if test "x$3" != "x"; then + GST_PLUGINS_NO="\t[$3]\n$GST_PLUGINS_NO" + fi + ifelse([$7], , :, [$7]) +fi +dnl *** Define the conditional as appropriate +AM_CONDITIONAL(USE_[$1], test x$USE_[$1] = xyes) +]) + +dnl Use AC_CHECK_LIB and AC_CHECK_HEADER to do both tests at once +dnl sets HAVE_module if we have it +dnl Richard Boulton +dnl Last modification: 26/06/2001 +dnl AG_GST_CHECK_LIBHEADER(FEATURE-NAME, LIB NAME, LIB FUNCTION, EXTRA LD FLAGS, +dnl HEADER NAME, ACTION-IF-FOUND, ACTION-IF-NOT-FOUND) +dnl +dnl This check was written for GStreamer: it should be renamed and checked +dnl for portability if you decide to use it elsewhere. +dnl +AC_DEFUN([AG_GST_CHECK_LIBHEADER], +[ + AC_CHECK_LIB([$2], [$3], HAVE_[$1]=yes, HAVE_[$1]=no,[$4]) + if test "x$HAVE_[$1]" = "xyes"; then + AC_CHECK_HEADER([$5], :, HAVE_[$1]=no) + if test "x$HAVE_[$1]" = "xyes"; then + dnl execute what needs to be + ifelse([$6], , :, [$6]) + else + ifelse([$7], , :, [$7]) + fi + else + ifelse([$7], , :, [$7]) + fi + AC_SUBST(HAVE_[$1]) +] +) + +dnl 2004-02-14 Thomas - changed to get set properly and use proper output +dnl 2003-06-27 Benjamin Otte - changed to make this work with gstconfig.h +dnl +dnl Add a subsystem --disable flag and all the necessary symbols and substitions +dnl +dnl AG_GST_CHECK_SUBSYSTEM_DISABLE(SYSNAME, [subsystem name]) +dnl +AC_DEFUN([AG_GST_CHECK_SUBSYSTEM_DISABLE], +[ + dnl this define will replace each literal subsys_def occurrence with + dnl the lowercase hyphen-separated subsystem + dnl e.g. if $1 is GST_DEBUG then subsys_def will be a macro with gst-debug + define([subsys_def],translit([$1], _A-Z, -a-z)) + + AC_ARG_ENABLE(subsys_def, + AC_HELP_STRING(--disable-subsys_def, [disable $2]), + [ + case "${enableval}" in + yes) GST_DISABLE_[$1]=no ;; + no) GST_DISABLE_[$1]=yes ;; + *) AC_MSG_ERROR([bad value ${enableval} for --enable-subsys_def]) ;; + esac + ], + [GST_DISABLE_[$1]=no]) dnl Default value + + if test x$GST_DISABLE_[$1] = xyes; then + AC_MSG_NOTICE([disabled subsystem [$2]]) + GST_DISABLE_[$1]_DEFINE="#define GST_DISABLE_$1 1" + else + GST_DISABLE_[$1]_DEFINE="/* #undef GST_DISABLE_$1 */" + fi + AC_SUBST(GST_DISABLE_[$1]_DEFINE) + undefine([subsys_def]) +]) + + +dnl Parse gstconfig.h for feature and defines add the symbols and substitions +dnl +dnl AG_GST_PARSE_SUBSYSTEM_DISABLE(GST_CONFIGPATH, FEATURE) +dnl +AC_DEFUN([AG_GST_PARSE_SUBSYSTEM_DISABLE], +[ + grep >/dev/null "#undef GST_DISABLE_$2" $1 + if test $? = 0; then + GST_DISABLE_[$2]=0 + else + GST_DISABLE_[$2]=1 + fi + AC_SUBST(GST_DISABLE_[$2]) +]) + +dnl Parse gstconfig.h and defines add the symbols and substitions +dnl +dnl GST_CONFIGPATH=`$PKG_CONFIG --variable=includedir gstreamer-0.10`"/gst/gstconfig.h" +dnl AG_GST_PARSE_SUBSYSTEM_DISABLES(GST_CONFIGPATH) +dnl +AC_DEFUN([AG_GST_PARSE_SUBSYSTEM_DISABLES], +[ + AG_GST_PARSE_SUBSYSTEM_DISABLE($1,GST_DEBUG) + AG_GST_PARSE_SUBSYSTEM_DISABLE($1,LOADSAVE) + AG_GST_PARSE_SUBSYSTEM_DISABLE($1,PARSE) + AG_GST_PARSE_SUBSYSTEM_DISABLE($1,TRACE) + AG_GST_PARSE_SUBSYSTEM_DISABLE($1,ALLOC_TRACE) + AG_GST_PARSE_SUBSYSTEM_DISABLE($1,REGISTRY) + AG_GST_PARSE_SUBSYSTEM_DISABLE($1,PLUGIN) + AG_GST_PARSE_SUBSYSTEM_DISABLE($1,XML) +]) + + + +dnl relies on GST_PLUGINS_ALL, GST_PLUGINS_SELECTED, GST_PLUGINS_YES, +dnl GST_PLUGINS_NO, and BUILD_EXTERNAL +AC_DEFUN([AG_GST_OUTPUT_PLUGINS], [ + +printf "configure: *** Plug-ins without external dependencies that will be built:\n" +( for i in $GST_PLUGINS_SELECTED; do printf '\t'$i'\n'; done ) | sort +printf "\n" + +printf "configure: *** Plug-ins without external dependencies that will NOT be built:\n" +( for i in $GST_PLUGINS_ALL; do + case " $GST_PLUGINS_SELECTED " in + *\ $i\ *) + ;; + *) + printf '\t'$i'\n' + ;; + esac + done ) | sort +printf "\n" + +if test "x$BUILD_EXTERNAL" = "xno"; then + printf "configure: *** No plug-ins with external dependencies will be built\n" +else + printf "configure: *** Plug-ins with dependencies that will be built:" + printf "$GST_PLUGINS_YES\n" | sort + printf "\n" + printf "configure: *** Plug-ins with dependencies that will NOT be built:" + printf "$GST_PLUGINS_NO\n" | sort + printf "\n" +fi +]) + diff --git a/common/m4/gst-function.m4 b/common/m4/gst-function.m4 new file mode 100644 index 0000000..61adfd3 --- /dev/null +++ b/common/m4/gst-function.m4 @@ -0,0 +1,63 @@ +dnl +dnl Check for compiler mechanism to show functions in debugging +dnl copied from an Ali patch floating on the internet +dnl +AC_DEFUN([AG_GST_CHECK_FUNCTION],[ + dnl #1: __PRETTY_FUNCTION__ + AC_MSG_CHECKING(whether $CC implements __PRETTY_FUNCTION__) + AC_CACHE_VAL(gst_cv_have_pretty_function,[ + AC_TRY_LINK([#include ], + [printf("%s", __PRETTY_FUNCTION__);], + gst_cv_have_pretty_function=yes, + gst_cv_have_pretty_function=no) + ]) + AC_MSG_RESULT($gst_cv_have_pretty_function) + if test "$gst_cv_have_pretty_function" = yes; then + AC_DEFINE(HAVE_PRETTY_FUNCTION, 1, + [defined if the compiler implements __PRETTY_FUNCTION__]) + fi + +dnl #2: __FUNCTION__ + AC_MSG_CHECKING(whether $CC implements __FUNCTION__) + AC_CACHE_VAL(gst_cv_have_function,[ + AC_TRY_LINK([#include ], + [printf("%s", __FUNCTION__);], + gst_cv_have_function=yes, + gst_cv_have_function=no) + ]) + AC_MSG_RESULT($gst_cv_have_function) + if test "$gst_cv_have_function" = yes; then + AC_DEFINE(HAVE_FUNCTION, 1, + [defined if the compiler implements __FUNCTION__]) + fi + +dnl #3: __func__ + AC_MSG_CHECKING(whether $CC implements __func__) + AC_CACHE_VAL(gst_cv_have_func,[ + AC_TRY_LINK([#include ], + [printf("%s", __func__);], + gst_cv_have_func=yes, + gst_cv_have_func=no) + ]) + AC_MSG_RESULT($gst_cv_have_func) + if test "$gst_cv_have_func" = yes; then + AC_DEFINE(HAVE_FUNC, 1, + [defined if the compiler implements __func__]) + fi + +dnl now define FUNCTION to whatever works, and fallback to "" + if test "$gst_cv_have_pretty_function" = yes; then + function=__PRETTY_FUNCTION__ + else + if test "$gst_cv_have_function" = yes; then + function=__FUNCTION__ + else + if test "$gst_cv_have_func" = yes; then + function=__func__ + else + function=\"\" + fi + fi + fi + AC_DEFINE_UNQUOTED(GST_FUNCTION, $function, [macro to use to show function name]) +]) diff --git a/common/m4/gst-gettext.m4 b/common/m4/gst-gettext.m4 new file mode 100644 index 0000000..a63651b --- /dev/null +++ b/common/m4/gst-gettext.m4 @@ -0,0 +1,21 @@ +dnl gettext setup + +dnl AG_GST_GETTEXT([gettext-package]) +dnl defines GETTEXT_PACKAGE and LOCALEDIR + +AC_DEFUN([AG_GST_GETTEXT], +[ + if test "$USE_NLS" = "yes"; then + GETTEXT_PACKAGE=[$1] + else + GETTEXT_PACKAGE=[NULL] + fi + AC_SUBST(GETTEXT_PACKAGE) + AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], "$GETTEXT_PACKAGE", + [gettext package name]) + + dnl define LOCALEDIR in config.h + AS_AC_EXPAND(LOCALEDIR, $datadir/locale) + AC_DEFINE_UNQUOTED([LOCALEDIR], "$LOCALEDIR", + [gettext locale dir]) +]) diff --git a/common/m4/gst-glib2.m4 b/common/m4/gst-glib2.m4 new file mode 100644 index 0000000..bafba41 --- /dev/null +++ b/common/m4/gst-glib2.m4 @@ -0,0 +1,73 @@ +dnl check for a minimum version of GLib + +dnl AG_GST_GLIB_CHECK([minimum-version-required]) + +AC_DEFUN([AG_GST_GLIB_CHECK], +[ + AC_REQUIRE([AS_NANO]) + + dnl Minimum required version of GLib + GLIB_REQ=[$1] + if test "x$GLIB_REQ" = "x" + then + AC_MSG_ERROR([Please specify a required version for GLib 2.0]) + fi + AC_SUBST(GLIB_REQ) + + dnl Check for glib with everything + AG_GST_PKG_CHECK_MODULES(GLIB, + glib-2.0 >= $GLIB_REQ gobject-2.0 gthread-2.0 gmodule-no-export-2.0) + + if test "x$HAVE_GLIB" = "xno"; then + AC_MSG_ERROR([This package requires GLib >= $GLIB_REQ to compile.]) + fi + + dnl Add define to tell GLib that threading is always enabled within GStreamer + dnl code (optimisation, bypasses checks if the threading system is enabled + dnl when using threading primitives) + GLIB_EXTRA_CFLAGS="$GLIB_EXTRA_CFLAGS -DG_THREADS_MANDATORY" + + dnl Define G_DISABLE_DEPRECATED for GIT versions + if test "x$PACKAGE_VERSION_NANO" = "x1"; then + GLIB_EXTRA_CFLAGS="$GLIB_EXTRA_CFLAGS -DG_DISABLE_DEPRECATED" + fi + + AC_ARG_ENABLE(gobject-cast-checks, + AS_HELP_STRING([--enable-gobject-cast-checks[=@<:@no/auto/yes@:>@]], + [Enable GObject cast checks]),, + [enable_gobject_cast_checks=auto]) + + if test "x$enable_gobject_cast_checks" = "xauto"; then + dnl For releases, turn off the cast checks + if test "x$PACKAGE_VERSION_NANO" = "x1"; then + enable_gobject_cast_checks=yes + else + enable_gobject_cast_checks=no + fi + fi + + if test "x$enable_gobject_cast_checks" = "xno"; then + GLIB_EXTRA_CFLAGS="$GLIB_EXTRA_CFLAGS -DG_DISABLE_CAST_CHECKS" + fi + + AC_ARG_ENABLE(glib-asserts, + AS_HELP_STRING([--enable-glib-asserts[=@<:@no/auto/yes@:>@]], + [Enable GLib assertion]),, + [enable_glib_assertions=auto]) + + if test "x$enable_glib_assertions" = "xauto"; then + dnl For releases, turn off the assertions + if test "x$PACKAGE_VERSION_NANO" = "x1"; then + enable_glib_assertions=yes + else + enable_glib_assertions=no + fi + fi + + if test "x$enable_glib_assertions" = "xno"; then + GLIB_EXTRA_CFLAGS="$GLIB_EXTRA_CFLAGS -DG_DISABLE_ASSERT" + fi + + dnl for the poor souls who for example have glib in /usr/local + AS_SCRUB_INCLUDE(GLIB_CFLAGS) +]) diff --git a/common/m4/gst-libxml2.m4 b/common/m4/gst-libxml2.m4 new file mode 100644 index 0000000..4a843f0 --- /dev/null +++ b/common/m4/gst-libxml2.m4 @@ -0,0 +1,52 @@ +dnl call this macro with the minimum required version as an argument +dnl this macro sets and AC_SUBSTs XML_CFLAGS and XML_LIBS +dnl it also sets LIBXML_PKG, used for the pkg-config file + +AC_DEFUN([AG_GST_LIBXML2_CHECK], +[ + dnl Minimum required version of libxml2 + dnl default to 2.4.9 if not specified + LIBXML2_REQ=ifelse([$1],,2.4.9,[$1]) + AC_SUBST(LIBXML2_REQ) + + dnl check for libxml2 + PKG_CHECK_MODULES(XML, libxml-2.0 >= $LIBXML2_REQ, + HAVE_LIBXML2=yes, [ + AC_MSG_RESULT(no) + HAVE_LIBXML2=no + ]) + if test "x$HAVE_LIBXML2" = "xyes"; then + AC_DEFINE(HAVE_LIBXML2, 1, [Define if libxml2 is available]) + else + AC_MSG_ERROR([ + Need libxml2 and development headers/files to build GStreamer. + + You can do without libxml2 if you pass --disable-loadsave to + configure, but that breaks ABI, so don't do that unless you + are building for an embedded setup and know what you are doing. + ]) + fi + dnl this is for the .pc file + LIBXML_PKG=', libxml-2.0' + AC_SUBST(LIBXML_PKG) + AC_SUBST(XML_LIBS) + AC_SUBST(XML_CFLAGS) + + dnl XML_LIBS might pull in -lz without zlib actually being on the system, so + dnl try linking with these LIBS and CFLAGS + ac_save_CFLAGS=$CFLAGS + ac_save_LIBS=$LIBS + CFLAGS="$CFLAGS $XML_CFLAGS" + LIBS="$LIBS $XML_LIBS" + AC_TRY_LINK([ +#include +#include +],[ +/* function body */ +], + AC_MSG_NOTICE([Test xml2 program linked]), + AC_MSG_ERROR([Could not link libxml2 test program. Check if you have the necessary dependencies.]) + ) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" +]) diff --git a/common/m4/gst-package-release-datetime.m4 b/common/m4/gst-package-release-datetime.m4 new file mode 100644 index 0000000..126919b --- /dev/null +++ b/common/m4/gst-package-release-datetime.m4 @@ -0,0 +1,89 @@ +dnl macros to set GST_PACKAGE_RELEASE_DATETIME + +dnl =========================================================================== +dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME +dnl +dnl Usage: +dnl +dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME() +dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([no]...) +dnl sets the release datetime to the current date +dnl (no = this is not a release, but git or prerelease) +dnl +dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([YYYY-MM-DD]) +dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([yes], [YYYY-MM-DD]) +dnl sets the release datetime to the specified date (and time, if given) +dnl (yes = this is a release, not git or prerelease) +dnl +dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([yes], [DOAP-FILE], [RELEASE-VERSION]) +dnl sets the release date to the release date associated with version +dnl RELEASE-VERSION in the .doap file DOAP-FILE +dnl (yes = this is a release, not git or prerelease) +dnl +dnl We need to treat pre-releases like git because there won't be an entry +dnl in the .doap file for pre-releases yet, and we don't want to use the +dnl date of the last release either. +dnl =========================================================================== +AC_DEFUN([AG_GST_SET_PACKAGE_RELEASE_DATETIME], +[ + dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME() + dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([yes]...) + if test "x$1" = "xno" -o "x$1" = "x"; then + GST_PACKAGE_RELEASE_DATETIME=`date -u "+%Y-%m-%dT%H:%MZ"` + elif test "x$1" = "xyes"; then + dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([no], ["YYYY-MM-DD"]) + dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([no], [DOAP-FILE], [RELEASE-VERSION]) + if ( echo $1 | grep -e '^20[1-9][0-9]-[0-1][0-9]-[0-3][0-9]' >/dev/null ) ; then + GST_PACKAGE_RELEASE_DATETIME=$1 + else + dnl we assume the .doap file contains the date as YYYY-MM-DD + YYYY_MM_DD=`sh "${srcdir}/common/extract-release-date-from-doap-file" $3 $2`; + if test "x$YYYY_MM_DD" != "x"; then + GST_PACKAGE_RELEASE_DATETIME=$YYYY_MM_DD + else + AC_MSG_ERROR([SET_PACKAGE_RELEASE_DATETIME: could not extract + release date for release version $3 from $2]) + GST_PACKAGE_RELEASE_DATETIME="" + fi + fi + dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([YYYY-MM-DD]) + elif ( echo $1 | grep -e '^20[1-9][0-9]-[0-1][0-9]-[0-3][0-9]' >/dev/null ) ; then + GST_PACKAGE_RELEASE_DATETIME=$1 + else + AC_MSG_WARN([SET_PACKAGE_RELEASE_DATETIME: invalid first argument]) + GST_PACKAGE_RELEASE_DATETIME="" + fi + + if test "x$GST_PACKAGE_RELEASE_DATETIME" = "x"; then + AC_MSG_WARN([Invalid package release date time: $GST_PACKAGE_RELEASE_DATETIME]) + else + AC_MSG_NOTICE([Setting GST_PACKAGE_RELEASE_DATETIME to $GST_PACKAGE_RELEASE_DATETIME]) + + AC_DEFINE_UNQUOTED([GST_PACKAGE_RELEASE_DATETIME], + ["$GST_PACKAGE_RELEASE_DATETIME"], + [GStreamer package release date/time for plugins as YYYY-MM-DD]) + fi +]) + +dnl =========================================================================== +dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME_WITH_NANO +dnl +dnl Usage: +dnl +dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([NANO-VERSION], [DOAP-FILE], [RELEASE-VERSION]) +dnl if NANO-VERSION is 0, sets the release date to the release date associated +dnl with version RELEASE-VERSION in the .doap file DOAP-FILE, otherwise sets +dnl the release date and time to the current date/time. +dnl +dnl We need to treat pre-releases like git because there won't be an entry +dnl in the .doap file for pre-releases yet, and we don't want to use the +dnl date of the last release either. +dnl =========================================================================== +AC_DEFUN([AG_GST_SET_PACKAGE_RELEASE_DATETIME_WITH_NANO], +[ + if test "x$1" = "x0"; then + AG_GST_SET_PACKAGE_RELEASE_DATETIME([yes], [ $2 ], [ $3 ]) + else + AG_GST_SET_PACKAGE_RELEASE_DATETIME([no]) + fi +]) diff --git a/common/m4/gst-parser.m4 b/common/m4/gst-parser.m4 new file mode 100644 index 0000000..2cae45d --- /dev/null +++ b/common/m4/gst-parser.m4 @@ -0,0 +1,55 @@ +AC_DEFUN([AG_GST_BISON_CHECK], +[ + dnl FIXME: check if AC_PROG_YACC is suitable here + dnl FIXME: make precious + AC_PATH_PROG(BISON_PATH, bison, no) + if test x$BISON_PATH = xno; then + AC_MSG_ERROR(Could not find bison) + fi + + dnl check bison version + dnl we need version >= 1.875 for the reentrancy support + dnl in the parser. + dnl First lines observed: 'bison (GNU Bison) 2.3' or 'GNU Bison version 1.28' + bison_min_version=1.875 + bison_version=`$BISON_PATH --version | head -n 1 | sed 's/^[[^0-9]]*//' | sed 's/[[^0-9]]*$//' | cut -d' ' -f1` + AC_MSG_CHECKING([bison version $bison_version >= $bison_min_version]) + + if perl -we "exit ((v$bison_version ge v$bison_min_version) ? 0 : 1)"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_ERROR([no]) + fi +]) + +AC_DEFUN([AG_GST_FLEX_CHECK], +[ + dnl we require flex for building the parser + AC_PATH_PROG(FLEX_PATH, flex, no) + if test x$FLEX_PATH = xno; then + AC_MSG_ERROR(Could not find flex) + fi + + dnl check flex version + dnl we need version >= 2.5.31 for the reentrancy support + dnl in the parser. + flex_min_version=2.5.31 + flex_version=`$FLEX_PATH --version | head -n 1 | sed 's/^.* //' | sed 's/[[a-zA-Z]]*$//' | cut -d' ' -f1` + AC_MSG_CHECKING([flex version $flex_version >= $flex_min_version]) + if perl -w < \$min_version_major) || + ((\$flex_version_major == \$min_version_major) && + (\$flex_version_minor > \$min_version_minor)) || + ((\$flex_version_major == \$min_version_major) && + (\$flex_version_minor == \$min_version_minor) && + (\$flex_version_micro >= \$min_version_micro))) + ? 0 : 1); +EOF + then + AC_MSG_RESULT(yes) + else + AC_MSG_ERROR([no]) + fi +]) diff --git a/common/m4/gst-platform.m4 b/common/m4/gst-platform.m4 new file mode 100644 index 0000000..40d6faf --- /dev/null +++ b/common/m4/gst-platform.m4 @@ -0,0 +1,67 @@ +dnl AG_GST_PLATFORM +dnl Check for platform specific features and define some variables +dnl +dnl GST_EXTRA_MODULE_SUFFIX: contains a platform specific +dnl extra module suffix additional to G_MODULE_SUFFIX +dnl +dnl HAVE_OSX: Defined if compiling for OS X +dnl +dnl GST_HAVE_UNSAFE_FORK: Defined if fork is unsafe (Windows) +dnl +dnl HAVE_WIN32: Defined if compiling on Win32 +dnl + +AC_DEFUN([AG_GST_PLATFORM], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + + case $host_os in + rhapsody*) + AC_DEFINE_UNQUOTED(GST_EXTRA_MODULE_SUFFIX, [".dylib"], [Extra platform specific plugin suffix]) + ;; + darwin*) + AC_DEFINE_UNQUOTED(GST_EXTRA_MODULE_SUFFIX, [".dylib"], [Extra platform specific plugin suffix]) + AC_DEFINE_UNQUOTED(HAVE_OSX, 1, [Defined if compiling for OSX]) + ;; + cygwin*) + AC_DEFINE_UNQUOTED(GST_HAVE_UNSAFE_FORK, 1, [Defined when registry scanning through fork is unsafe]) + ;; + mingw* | msvc* | mks*) + dnl HAVE_WIN32 currently means "disable POSIXisms". + AC_DEFINE_UNQUOTED(HAVE_WIN32, 1, [Defined if compiling for Windows]) + + dnl define __MSVCRT_VERSION__ version if not set already by the + dnl compiler (ie. mostly for mingw). This is needed for things like + dnl __stat64 to be available. If set by the compiler, ensure it's + dnl new enough - we need at least WinXP SP2. + AC_TRY_COMPILE([ ], [ return __MSVCRT_VERSION__; ], [ + AC_TRY_COMPILE([ ], [ + #if __MSVCRT_VERSION__ < 0x0601 + #error "MSVCRT too old" + #endif + ], [ + AC_MSG_NOTICE([MSVCRT version looks ok]) + ], [ + AC_MSG_ERROR([MSVCRT version too old, need at least WinXP SP2]) + ]) + ], [ + AC_MSG_NOTICE([Setting MSVCRT version to 0x0601]) + AC_DEFINE_UNQUOTED(__MSVCRT_VERSION__, 0x0601, [We need at least WinXP SP2 for __stat64]) + ]) + ;; + *) + ;; + esac +]) + +AC_DEFUN([AG_GST_LIBTOOL_PREPARE], +[ + dnl Persuade libtool to also link (-l) a 'pure' (DirectX) static lib, + dnl i.e. as opposed to only import lib with dll counterpart. + dnl Needs to be tweaked before libtool's checks. + case $host_os in + cygwin* | mingw*) + lt_cv_deplibs_check_method=pass_all + ;; + esac +]) \ No newline at end of file diff --git a/common/m4/gst-plugin-docs.m4 b/common/m4/gst-plugin-docs.m4 new file mode 100644 index 0000000..dcfd61d --- /dev/null +++ b/common/m4/gst-plugin-docs.m4 @@ -0,0 +1,21 @@ +dnl AG_GST_PLUGIN_DOCS([MINIMUM-GTK-DOC-VERSION],[MINIMUM-PYTHON-VERSION]) +dnl +dnl checks for prerequisites for the common/mangle-tmpl.py script +dnl used when building the plugin documentation + +AC_DEFUN([AG_GST_PLUGIN_DOCS], +[ + AC_BEFORE([GTK_DOC_CHECK],[$0])dnl check for gtk-doc first + AC_BEFORE([AS_PATH_PYTHON],[$1])dnl find python first + + build_plugin_docs=no + AC_MSG_CHECKING([whether to build plugin documentation]) + if test x$enable_gtk_doc = xyes; then + build_plugin_docs=yes + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no (gtk-doc disabled or not available)]) + fi + + AM_CONDITIONAL(ENABLE_PLUGIN_DOCS, test x$build_plugin_docs = xyes) +]) diff --git a/common/m4/gst-plugindir.m4 b/common/m4/gst-plugindir.m4 new file mode 100644 index 0000000..09989d0 --- /dev/null +++ b/common/m4/gst-plugindir.m4 @@ -0,0 +1,17 @@ +dnl AG_GST_SET_PLUGINDIR + +dnl AC_DEFINE PLUGINDIR to the full location where plug-ins will be installed +dnl AC_SUBST plugindir, to be used in Makefile.am's + +AC_DEFUN([AG_GST_SET_PLUGINDIR], +[ + dnl define location of plugin directory + AS_AC_EXPAND(PLUGINDIR, ${libdir}/gstreamer-$GST_MAJORMINOR) + AC_DEFINE_UNQUOTED(PLUGINDIR, "$PLUGINDIR", + [directory where plugins are located]) + AC_MSG_NOTICE([Using $PLUGINDIR as the plugin install location]) + + dnl plugin directory configure-time variable for use in Makefile.am + plugindir="\$(libdir)/gstreamer-$GST_MAJORMINOR" + AC_SUBST(plugindir) +]) diff --git a/common/m4/gst-valgrind.m4 b/common/m4/gst-valgrind.m4 new file mode 100644 index 0000000..5c0d608 --- /dev/null +++ b/common/m4/gst-valgrind.m4 @@ -0,0 +1,35 @@ +AC_DEFUN([AG_GST_VALGRIND_CHECK], +[ + dnl valgrind inclusion + AC_ARG_ENABLE(valgrind, + AC_HELP_STRING([--disable-valgrind], [disable run-time valgrind detection]), + [ + case "${enableval}" in + yes) USE_VALGRIND="$USE_DEBUG" ;; + no) USE_VALGRIND=no ;; + *) AC_MSG_ERROR(bad value ${enableval} for --enable-valgrind) ;; + esac], + [ + USE_VALGRIND="$USE_DEBUG" + ]) dnl Default value + + VALGRIND_REQ="3.0" + if test "x$USE_VALGRIND" = xyes; then + PKG_CHECK_MODULES(VALGRIND, valgrind >= $VALGRIND_REQ, + USE_VALGRIND="yes", + [ + USE_VALGRIND="no" + AC_MSG_RESULT([no]) + ]) + fi + + if test "x$USE_VALGRIND" = xyes; then + AC_DEFINE(HAVE_VALGRIND, 1, [Define if valgrind should be used]) + AC_MSG_NOTICE(Using extra code paths for valgrind) + fi + AC_SUBST(VALGRIND_CFLAGS) + AC_SUBST(VALGRIND_LIBS) + + AC_PATH_PROG(VALGRIND_PATH, valgrind, no) + AM_CONDITIONAL(HAVE_VALGRIND, test ! "x$VALGRIND_PATH" = "xno") +]) diff --git a/common/m4/gst-x11.m4 b/common/m4/gst-x11.m4 new file mode 100644 index 0000000..d3baf2d --- /dev/null +++ b/common/m4/gst-x11.m4 @@ -0,0 +1,70 @@ +dnl macros for X-related detections +dnl AC_SUBST's HAVE_X, X_CFLAGS, X_LIBS +AC_DEFUN([AG_GST_CHECK_X], +[ + AC_PATH_XTRA + ac_cflags_save="$CFLAGS" + ac_cppflags_save="$CPPFLAGS" + CFLAGS="$CFLAGS $X_CFLAGS" + CPPFLAGS="$CPPFLAGS $X_CFLAGS" + + dnl now try to find the HEADER + AC_CHECK_HEADER(X11/Xlib.h, HAVE_X="yes", HAVE_X="no") + + if test "x$HAVE_X" = "xno" + then + AC_MSG_NOTICE([cannot find X11 development files]) + else + dnl this is much more than we want + X_LIBS="$X_LIBS $X_PRE_LIBS $X_EXTRA_LIBS" + dnl AC_PATH_XTRA only defines the path needed to find the X libs, + dnl it does not add the libs; therefore we add them here + X_LIBS="$X_LIBS -lX11" + AC_SUBST(X_CFLAGS) + AC_SUBST(X_LIBS) + fi + AC_SUBST(HAVE_X) + + CFLAGS="$ac_cflags_save" + CPPFLAGS="$ac_cppflags_save" +]) + +dnl *** XVideo *** +dnl Look for the PIC library first, Debian requires it. +dnl Check debian-devel archives for gory details. +dnl 20020110: +dnl At the moment XFree86 doesn't distribute shared libXv due +dnl to unstable API. On many platforms you CAN NOT link a shared +dnl lib to a static non-PIC lib. This is what the xvideo GStreamer +dnl plug-in wants to do. So Debian distributes a PIC compiled +dnl version of the static lib for plug-ins to link to when it is +dnl inappropriate to link the main application to libXv directly. +dnl FIXME: add check if this platform can support linking to a +dnl non-PIC libXv, if not then don not use Xv. +dnl FIXME: perhaps warn user if they have a shared libXv since +dnl this is an error until XFree86 starts shipping one +AC_DEFUN([AG_GST_CHECK_XV], +[ + if test x$HAVE_X = xyes; then + AC_CHECK_LIB(Xv_pic, XvQueryExtension, + HAVE_XVIDEO="yes", HAVE_XVIDEO="no", + $X_LIBS -lXext) + + if test x$HAVE_XVIDEO = xyes; then + XVIDEO_LIBS="-lXv_pic -lXext" + AC_SUBST(XVIDEO_LIBS) + else + dnl try again using something else if we didn't find it first + if test x$HAVE_XVIDEO = xno; then + AC_CHECK_LIB(Xv, XvQueryExtension, + HAVE_XVIDEO="yes", HAVE_XVIDEO="no", + $X_LIBS -lXext) + + if test x$HAVE_XVIDEO = xyes; then + XVIDEO_LIBS="-lXv -lXext" + AC_SUBST(XVIDEO_LIBS) + fi + fi + fi + fi +]) diff --git a/common/m4/gst.m4 b/common/m4/gst.m4 new file mode 100644 index 0000000..ddfde51 --- /dev/null +++ b/common/m4/gst.m4 @@ -0,0 +1,31 @@ +dnl AG_GST_INIT +dnl sets up use of GStreamer configure.ac macros +dnl all GStreamer autoconf macros are prefixed +dnl with AG_GST_ for public macros +dnl with _AG_GST_ for private macros + +AC_DEFUN([AG_GST_INIT], +[ + m4_pattern_forbid(^_?AG_GST_) +]) + +dnl AG_GST_PKG_CONFIG_PATH +dnl +dnl sets up a GST_PKG_CONFIG_PATH variable for use in Makefile.am +dnl which contains the path of the in-tree pkgconfig directory first +dnl and then any paths specified in PKG_CONFIG_PATH. +dnl +dnl We do this mostly so we don't have to use unportable shell constructs +dnl such as ${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH} in Makefile.am to handle +dnl the case where the environment variable is not set, but also in order +dnl to avoid a trailing ':' in the PKG_CONFIG_PATH which apparently causes +dnl problems with pkg-config on windows with msys/mingw. +AC_DEFUN([AG_GST_PKG_CONFIG_PATH], +[ + GST_PKG_CONFIG_PATH="\$(top_builddir)/pkgconfig" + if test "x$PKG_CONFIG_PATH" != "x"; then + GST_PKG_CONFIG_PATH="$GST_PKG_CONFIG_PATH:$PKG_CONFIG_PATH" + fi + AC_SUBST([GST_PKG_CONFIG_PATH]) + AC_MSG_NOTICE([Using GST_PKG_CONFIG_PATH = $GST_PKG_CONFIG_PATH]) +]) diff --git a/common/m4/gtk-doc.m4 b/common/m4/gtk-doc.m4 new file mode 100644 index 0000000..39a4e7d --- /dev/null +++ b/common/m4/gtk-doc.m4 @@ -0,0 +1,42 @@ +dnl -*- mode: autoconf -*- + +# serial 1 + +dnl Usage: +dnl GTK_DOC_CHECK([minimum-gtk-doc-version]) +AC_DEFUN([GTK_DOC_CHECK], +[ + AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first + AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first + dnl for overriding the documentation installation directory + AC_ARG_WITH([html-dir], + AS_HELP_STRING([--with-html-dir=PATH], [path to installed docs]),, + [with_html_dir='${datadir}/gtk-doc/html']) + HTML_DIR="$with_html_dir" + AC_SUBST([HTML_DIR]) + + dnl enable/disable documentation building + AC_ARG_ENABLE([gtk-doc], + AS_HELP_STRING([--enable-gtk-doc], + [use gtk-doc to build documentation [[default=no]]]),, + [enable_gtk_doc=no]) + + if test x$enable_gtk_doc = xyes; then + ifelse([$1],[], + [PKG_CHECK_EXISTS([gtk-doc],, + AC_MSG_ERROR([gtk-doc not installed and --enable-gtk-doc requested]))], + [PKG_CHECK_EXISTS([gtk-doc >= $1],, + AC_MSG_ERROR([You need to have gtk-doc >= $1 installed to build gtk-doc]))]) + if test -z "$SED"; then + AC_PROG_SED + fi + fi + + AC_MSG_CHECKING([whether to build gtk-doc documentation]) + AC_MSG_RESULT($enable_gtk_doc) + + AC_PATH_PROGS(GTKDOC_CHECK,gtkdoc-check,) + + AM_CONDITIONAL([ENABLE_GTK_DOC], [test x$enable_gtk_doc = xyes]) + AM_CONDITIONAL([GTK_DOC_USE_LIBTOOL], [test -n "$LIBTOOL"]) +]) diff --git a/common/m4/introspection.m4 b/common/m4/introspection.m4 new file mode 100644 index 0000000..f9ce49c --- /dev/null +++ b/common/m4/introspection.m4 @@ -0,0 +1,88 @@ +dnl -*- mode: autoconf -*- +dnl Copyright 2009 Johan Dahlin +dnl +dnl This file is free software; the author(s) gives unlimited +dnl permission to copy and/or distribute it, with or without +dnl modifications, as long as this notice is preserved. +dnl + +# serial 1 + +m4_define([_GOBJECT_INTROSPECTION_CHECK_INTERNAL], +[ + AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first + AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first + AC_BEFORE([LT_INIT],[$0])dnl setup libtool first + + dnl enable/disable introspection + m4_if([$2], [require], + [dnl + enable_introspection=yes + ],[dnl + AC_ARG_ENABLE(introspection, + AS_HELP_STRING([--enable-introspection[=@<:@no/auto/yes@:>@]], + [Enable introspection for this build]),, + [enable_introspection=auto]) + ])dnl + + AC_MSG_CHECKING([for gobject-introspection]) + + dnl presence/version checking + AS_CASE([$enable_introspection], + [no], [dnl + found_introspection="no (disabled, use --enable-introspection to enable)" + ],dnl + [yes],[dnl + PKG_CHECK_EXISTS([gobject-introspection-1.0],, + AC_MSG_ERROR([gobject-introspection-1.0 is not installed])) + PKG_CHECK_EXISTS([gobject-introspection-1.0 >= $1], + found_introspection=yes, + AC_MSG_ERROR([You need to have gobject-introspection >= $1 installed to build AC_PACKAGE_NAME])) + ],dnl + [auto],[dnl + PKG_CHECK_EXISTS([gobject-introspection-1.0 >= $1], found_introspection=yes, found_introspection=no) + ],dnl + [dnl + AC_MSG_ERROR([invalid argument passed to --enable-introspection, should be one of @<:@no/auto/yes@:>@]) + ])dnl + + AC_MSG_RESULT([$found_introspection]) + + INTROSPECTION_SCANNER= + INTROSPECTION_COMPILER= + INTROSPECTION_GENERATE= + INTROSPECTION_GIRDIR= + INTROSPECTION_TYPELIBDIR= + if test "x$found_introspection" = "xyes"; then + INTROSPECTION_SCANNER=`$PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0` + INTROSPECTION_COMPILER=`$PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0` + INTROSPECTION_GENERATE=`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0` + INTROSPECTION_GIRDIR=`$PKG_CONFIG --variable=girdir gobject-introspection-1.0` + INTROSPECTION_TYPELIBDIR="$($PKG_CONFIG --variable=typelibdir gobject-introspection-1.0)" + fi + AC_SUBST(INTROSPECTION_SCANNER) + AC_SUBST(INTROSPECTION_COMPILER) + AC_SUBST(INTROSPECTION_GENERATE) + AC_SUBST(INTROSPECTION_GIRDIR) + AC_SUBST(INTROSPECTION_TYPELIBDIR) + + AM_CONDITIONAL(HAVE_INTROSPECTION, test "x$found_introspection" = "xyes") +]) + + +dnl Usage: +dnl GOBJECT_INTROSPECTION_CHECK([minimum-g-i-version]) + +AC_DEFUN([GOBJECT_INTROSPECTION_CHECK], +[ + _GOBJECT_INTROSPECTION_CHECK_INTERNAL([$1]) +]) + +dnl Usage: +dnl GOBJECT_INTROSPECTION_REQUIRE([minimum-g-i-version]) + + +AC_DEFUN([GOBJECT_INTROSPECTION_REQUIRE], +[ + _GOBJECT_INTROSPECTION_CHECK_INTERNAL([$1], [require]) +]) diff --git a/common/m4/orc.m4 b/common/m4/orc.m4 new file mode 100644 index 0000000..26b2459 --- /dev/null +++ b/common/m4/orc.m4 @@ -0,0 +1,70 @@ +dnl pkg-config-based checks for Orc + +dnl specific: +dnl ORC_CHECK([REQUIRED_VERSION]) + +AC_DEFUN([ORC_CHECK], +[ + ORC_REQ=ifelse([$1], , "0.4.6", [$1]) + + AC_ARG_ENABLE(orc, + AC_HELP_STRING([--enable-orc],[use Orc if installed]), + [case "${enableval}" in + auto) enable_orc=auto ;; + yes) enable_orc=yes ;; + no) enable_orc=no ;; + *) AC_MSG_ERROR(bad value ${enableval} for --enable-orc) ;; + esac + ], + [enable_orc=auto]) dnl Default value + + if test "x$enable_orc" != "xno" ; then + PKG_CHECK_MODULES(ORC, orc-0.4 >= $ORC_REQ, [ + AC_DEFINE(HAVE_ORC, 1, [Use Orc]) + HAVE_ORC=yes + if test "x$ORCC" = "x" ; then + AC_MSG_CHECKING(for usable orcc) + ORCC=`$PKG_CONFIG --variable=orcc orc-0.4` + dnl check whether the orcc found by pkg-config can be run from the build environment + dnl if this is not the case (e.g. when cross-compiling) fall back to orcc from PATH + AS_IF([$ORCC --version 1> /dev/null 2> /dev/null], [], [ORCC=`which orcc`]) + AC_MSG_RESULT($ORCC) + fi + AC_SUBST(ORCC) + ORCC_FLAGS="--compat $ORC_REQ" + AC_SUBST(ORCC_FLAGS) + AS_IF([test "x$ORCC" = "x"], [HAVE_ORCC=no], [HAVE_ORCC=yes]) + ], [ + if test "x$enable_orc" = "xyes" ; then + AC_MSG_ERROR([--enable-orc specified, but Orc >= $ORC_REQ not found]) + fi + AC_DEFINE(DISABLE_ORC, 1, [Disable Orc]) + HAVE_ORC=no + HAVE_ORCC=no + ]) + else + AC_DEFINE(DISABLE_ORC, 1, [Disable Orc]) + HAVE_ORC=no + HAVE_ORCC=no + fi + AM_CONDITIONAL(HAVE_ORC, [test "x$HAVE_ORC" = "xyes"]) + AM_CONDITIONAL(HAVE_ORCC, [test "x$HAVE_ORCC" = "xyes"]) + +])) + +AC_DEFUN([ORC_OUTPUT], +[ + if test "$HAVE_ORC" = yes ; then + printf "configure: *** Orc acceleration enabled.\n" + else + if test "x$enable_orc" = "xno" ; then + printf "configure: *** Orc acceleration disabled by --disable-orc. Slower code paths\n" + printf " will be used.\n" + else + printf "configure: *** Orc acceleration disabled. Requires Orc >= $ORC_REQ, which was\n" + printf " not found. Slower code paths will be used.\n" + fi + fi + printf "\n" +]) + diff --git a/common/m4/pkg.m4 b/common/m4/pkg.m4 new file mode 100644 index 0000000..996e294 --- /dev/null +++ b/common/m4/pkg.m4 @@ -0,0 +1,157 @@ +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# +# Copyright © 2004 Scott James Remnant . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# PKG_PROG_PKG_CONFIG([MIN-VERSION]) +# ---------------------------------- +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi + +fi[]dnl +])# PKG_PROG_PKG_CONFIG + +# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# Check to see whether a particular set of modules exists. Similar +# to PKG_CHECK_MODULES(), but does not set variables or print errors. +# +# +# Similar to PKG_CHECK_MODULES, make sure that the first instance of +# this or PKG_CHECK_MODULES is called, or make sure to call +# PKG_CHECK_EXISTS manually +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_ifval([$2], [$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + + +# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +# --------------------------------------------- +m4_define([_PKG_CONFIG], +[if test -n "$PKG_CONFIG"; then + if test -n "$$1"; then + pkg_cv_[]$1="$$1" + else + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], + [pkg_failed=yes]) + fi +else + pkg_failed=untried +fi[]dnl +])# _PKG_CONFIG + +# _PKG_SHORT_ERRORS_SUPPORTED +# ----------------------------- +AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +])# _PKG_SHORT_ERRORS_SUPPORTED + + +# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +# [ACTION-IF-NOT-FOUND]) +# +# +# Note that if there is a possibility the first call to +# PKG_CHECK_MODULES might not happen, you should be sure to include an +# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +# +# +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_MODULES], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $1]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + ifelse([$4], , [AC_MSG_ERROR(dnl +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +_PKG_TEXT +])], + [AC_MSG_RESULT([no]) + $4]) +elif test $pkg_failed = untried; then + ifelse([$4], , [AC_MSG_FAILURE(dnl +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +_PKG_TEXT + +To get pkg-config, see .])], + [$4]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + ifelse([$3], , :, [$3]) +fi[]dnl +])# PKG_CHECK_MODULES diff --git a/common/mangle-tmpl.py b/common/mangle-tmpl.py new file mode 100644 index 0000000..bd4f948 --- /dev/null +++ b/common/mangle-tmpl.py @@ -0,0 +1,163 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +""" +use the output from gst-xmlinspect.py to mangle tmpl/*.sgml and +insert/overwrite Short Description and Long Description +""" + +# FIXME: right now it uses pygst and scans on its own; +# we really should use inspect/*.xml instead since the result of +# gst-xmlinspect.py is committed by the docs maintainer, who can be +# expected to have pygst, but this step should be done for every docs build, +# so no pygst allowed + +# read in inspect/*.xml +# for every tmpl/element-(name).xml: mangle with details from element + +import glob +import re +import sys +import os + +class Tmpl: + def __init__(self, filename): + self.filename = filename + self._sectionids = [] + self._sections = {} + + def read(self): + """ + Read and parse the sections from the given file. + """ + lines = open(self.filename).readlines() + matcher = re.compile("\n") + id = None + + for line in lines: + match = matcher.search(line) + if match: + id = match.expand("\\1") + self._sectionids.append(id) + self._sections[id] = [] + else: + if not id: + sys.stderr.write( + "WARNING: line before a SECTION header: %s" % line) + else: + self._sections[id].append(line) + + def get_section(self, id): + """ + Get the content from the given section. + """ + return self._sections[id] + + def set_section(self, id, content): + """ + Replace the given section id with the given content. + """ + self._sections[id] = content + + def output(self): + """ + Return the output of the current template in the tmpl/*.sgml format. + """ + lines = [] + for id in self._sectionids: + lines.append("\n" % id) + for line in self._sections[id]: + lines.append(line) + + return "".join(lines) + + def write(self, backup=False): + """ + Write out the template file again, backing up the previous one. + """ + if backup: + target = self.filename + ".mangle.bak" + os.rename(self.filename, target) + + handle = open(self.filename, "w") + handle.write(self.output()) + handle.close() + +import xml.dom.minidom + +def get_elements(file): + elements = {} + doc = xml.dom.minidom.parse(file) + + elem = None + for e in doc.childNodes: + if e.nodeType == e.ELEMENT_NODE and e.localName == 'plugin': + elem = e + break + if elem == None: + return None + + elem2 = None + for e in elem.childNodes: + if e.nodeType == e.ELEMENT_NODE and e.localName == 'elements': + elem2 = e + break + if elem2 == None: + return None + + elem = elem2 + + for e in elem.childNodes: + if e.nodeType == e.ELEMENT_NODE and e.localName == 'element': + name = None + description = None + + for e2 in e.childNodes: + if e2.nodeType == e2.ELEMENT_NODE and e2.localName == 'name': + name = e2.childNodes[0].nodeValue.encode("UTF-8") + elif e2.nodeType == e2.ELEMENT_NODE and e2.localName == 'description': + if e2.childNodes: + description = e2.childNodes[0].nodeValue.encode("UTF-8") + else: + description = 'No description' + + if name != None and description != None: + elements[name] = {'description': description} + + return elements + +def main(): + if not len(sys.argv) == 3: + sys.stderr.write('Please specify the inspect/ dir and the tmpl/ dir') + sys.exit(1) + + inspectdir = sys.argv[1] + tmpldir = sys.argv[2] + + # parse all .xml files; build map of element name -> short desc + #for file in glob.glob("inspect/plugin-*.xml"): + elements = {} + for file in glob.glob("%s/plugin-*.xml" % inspectdir): + elements.update(get_elements(file)) + + for file in glob.glob("%s/element-*.sgml" % tmpldir): + base = os.path.basename(file) + element = base[len("element-"):-len(".sgml")] + tmpl = Tmpl(file) + tmpl.read() + if element in elements.keys(): + description = elements[element]['description'] + tmpl.set_section("Short_Description", "%s\n\n" % description) + + # put in an include if not yet there + line = '' + \ + '' + \ + '\n' + section = tmpl.get_section("Long_Description") + if not section[0] == line: + section.insert(0, line) + tmpl.set_section("Long_Description", section) + tmpl.write() + +main() diff --git a/common/orc.mak b/common/orc.mak new file mode 100644 index 0000000..a232b5d --- /dev/null +++ b/common/orc.mak @@ -0,0 +1,76 @@ +# +# This is a makefile.am fragment to build Orc code. +# +# Define ORC_SOURCE and then include this file, such as: +# +# ORC_SOURCE=gstadderorc +# include $(top_srcdir)/common/orc.mak +# +# This fragment will create tmp-orc.c and gstadderorc.h from +# gstadderorc.orc. +# +# When 'make dist' is run at the top level, or 'make orc-update' +# in a directory including this fragment, the generated source +# files will be copied to $(ORC_SOURCE)-dist.[ch]. These files +# should be checked in to git, since they are used if Orc is +# disabled. +# +# Note that this file defines BUILT_SOURCES, so any later usage +# of BUILT_SOURCES in the Makefile.am that includes this file +# must use '+='. +# + + +EXTRA_DIST = $(ORC_SOURCE).orc + +ORC_NODIST_SOURCES = tmp-orc.c $(ORC_SOURCE).h +BUILT_SOURCES = tmp-orc.c $(ORC_SOURCE).h + + +orc-update: tmp-orc.c $(ORC_SOURCE).h + $(top_srcdir)/common/gst-indent tmp-orc.c + cp tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c + cp $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h + +orcc_v_gen = $(orcc_v_gen_$(V)) +orcc_v_gen_ = $(orcc_v_gen_$(AM_DEFAULT_VERBOSITY)) +orcc_v_gen_0 = @echo " ORCC $@"; + +cp_v_gen = $(cp_v_gen_$(V)) +cp_v_gen_ = $(cp_v_gen_$(AM_DEFAULT_VERBOSITY)) +cp_v_gen_0 = @echo " CP $@"; + +if HAVE_ORCC +tmp-orc.c: $(srcdir)/$(ORC_SOURCE).orc + $(orcc_v_gen)$(ORCC) $(ORCC_FLAGS) --implementation --include glib.h -o tmp-orc.c $(srcdir)/$(ORC_SOURCE).orc + +$(ORC_SOURCE).h: $(srcdir)/$(ORC_SOURCE).orc + $(orcc_v_gen)$(ORCC) $(ORCC_FLAGS) --header --include glib.h -o $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE).orc +else +tmp-orc.c: $(srcdir)/$(ORC_SOURCE).orc $(srcdir)/$(ORC_SOURCE)-dist.c + $(cp_v_gen)cp $(srcdir)/$(ORC_SOURCE)-dist.c tmp-orc.c + +$(ORC_SOURCE).h: $(srcdir)/$(ORC_SOURCE).orc $(srcdir)/$(ORC_SOURCE)-dist.c + $(cp_v_gen)cp $(srcdir)/$(ORC_SOURCE)-dist.h $(ORC_SOURCE).h +endif + +clean-local: clean-orc +.PHONY: clean-orc +clean-orc: + rm -f tmp-orc.c $(ORC_SOURCE).h + +dist-hook: dist-hook-orc +.PHONY: dist-hook-orc + +# we try and copy updated orc -dist files below, but don't fail if it +# doesn't work as the srcdir might not be writable +dist-hook-orc: tmp-orc.c $(ORC_SOURCE).h + $(top_srcdir)/common/gst-indent tmp-orc.c + rm -f tmp-orc.c~ + cmp -s tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c || \ + cp tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c || true + cmp -s $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h || \ + cp $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h || true + cp -p tmp-orc.c $(distdir)/$(ORC_SOURCE)-dist.c + cp -p $(ORC_SOURCE).h $(distdir)/$(ORC_SOURCE)-dist.h + diff --git a/common/parallel-subdirs.mak b/common/parallel-subdirs.mak new file mode 100644 index 0000000..36885df --- /dev/null +++ b/common/parallel-subdirs.mak @@ -0,0 +1,13 @@ +# include this at the end of $MODULE/ext/Makefile.am to force make to +# build subdirectories in parallel when make -jN is used. We will end up +# descending into all subdirectories a second time, but only after the first +# (parallel) run has finished, so it should go right through the second time. + +.PHONY: independent-subdirs $(SUBDIRS) + +independent-subdirs: $(SUBDIRS) + +$(SUBDIRS): + $(MAKE) -C $@ + +all-recursive: independent-subdirs diff --git a/common/plugins.xsl b/common/plugins.xsl new file mode 100644 index 0000000..60515b6 --- /dev/null +++ b/common/plugins.xsl @@ -0,0 +1,209 @@ + + + + + + + + + + + + -plugins- + + + + + + + + + + + + + + Element Information + + + + + plugin + + + + plugin- + + + + + + + + author + + + + + + + class + + + + + + + + + + Element Pads + + + + + name + + + + + + + direction + + + + + + + presence + + + + + + + + + details + + + + + + + + + + + + + + + + + + + + + -plugins-plugin- + + + + + + 3 + FIXME Library + + + + + + + + + + plugin- + + + + + + + Plugin Information + + + + filename + + + + + + + version + + + + + + + run-time license + + + + + + + package + + + + + + + origin + + + + + + + + + + + + + + + + + + + + + + + Elements + + + + + + + + + + + + + + diff --git a/common/po.mak b/common/po.mak new file mode 100644 index 0000000..e019fac --- /dev/null +++ b/common/po.mak @@ -0,0 +1,4 @@ +# rule to download the latest .po files +download-po: $(top_srcdir)/common/download-translations + $(top_srcdir)/common/download-translations $(PACKAGE) + diff --git a/common/release.mak b/common/release.mak new file mode 100644 index 0000000..4a9b7d5 --- /dev/null +++ b/common/release.mak @@ -0,0 +1,25 @@ +# include this snippet to add a common release: target by using +# include $(top_srcdir)/common/release.mak + +# make bz2 as well +AUTOMAKE_OPTIONS = dist-bzip2 + +release: dist + $(MAKE) $(PACKAGE)-$(VERSION).tar.gz.md5 + $(MAKE) $(PACKAGE)-$(VERSION).tar.bz2.md5 + +# generate md5 sum files +%.md5: % + md5sum $< > $@ + +# check that no marshal or enumtypes files are included +# this in turn ensures that distcheck fails for missing .list files which is currently +# shadowed when the corresponding .c and .h files are included. +distcheck-hook: + @test "x" = "x`find $(distdir) -name \*-enumtypes.[ch] | grep -v win32`" && \ + test "x" = "x`find $(distdir) -name \*-marshal.[ch]`" || \ + ( $(ECHO) "*** Leftover enumtypes or marshal files in the tarball." && \ + $(ECHO) "*** Make sure the following files are not disted:" && \ + find $(distdir) -name \*-enumtypes.[ch] | grep -v win32 && \ + find $(distdir) -name \*-marshal.[ch] && \ + false ) diff --git a/common/scangobj-merge.py b/common/scangobj-merge.py new file mode 100755 index 0000000..9a1cac9 --- /dev/null +++ b/common/scangobj-merge.py @@ -0,0 +1,309 @@ +#!/usr/bin/python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +""" +parse, merge and write gstdoc-scanobj files +""" + +import sys +import os + +def debug(*args): + pass + +# OrderedDict class based on +# http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/107747 +# Licensed under the Python License +class OrderedDict(dict): + def __init__(self): + self._keys = [] + dict.__init__(self) + + def __delitem__(self, key): + dict.__delitem__(self, key) + self._keys.remove(key) + + def __setitem__(self, key, item): + dict.__setitem__(self, key, item) + if key not in self._keys: self._keys.append(key) + + def clear(self): + dict.clear(self) + self._keys = [] + + def copy(self): + dict = dict.copy(self) + dict._keys = self._keys[:] + return dict + + def items(self): + return zip(self._keys, self.values()) + + def keys(self): + return self._keys + + def popitem(self): + try: + key = self._keys[-1] + except IndexError: + raise KeyError('dictionary is empty') + + val = self[key] + del self[key] + + return (key, val) + + def setdefault(self, key, failobj = None): + dict.setdefault(self, key, failobj) + if key not in self._keys: self._keys.append(key) + + def update(self, dict): + dict.update(self, dict) + for key in dict.keys(): + if key not in self._keys: self._keys.append(key) + + def values(self): + return map(self.get, self._keys) + +class Object: + def __init__(self, name): + self._signals = OrderedDict() + self._args = OrderedDict() + self.name = name + + def __repr__(self): + return "" % self.name + + def add_signal(self, signal, overwrite=True): + if not overwrite and self._signals.has_key(signal.name): + raise IndexError, "signal %s already in %r" % (signal.name, self) + self._signals[signal.name] = signal + + def add_arg(self, arg, overwrite=True): + if not overwrite and self._args.has_key(arg.name): + raise IndexError, "arg %s already in %r" % (arg.name, self) + self._args[arg.name] = arg + +class Docable: + def __init__(self, **kwargs): + for key in self.attrs: + setattr(self, key, kwargs[key]) + self.dict = kwargs + + def __repr__(self): + return "<%r %s>" % (str(self.__class__), self.name) + +class Signal(Docable): + attrs = ['name', 'returns', 'args'] + +class Arg(Docable): + attrs = ['name', 'type', 'range', 'flags', 'nick', 'blurb', 'default'] + +class GDoc: + def load_file(self, filename): + try: + lines = open(filename).readlines() + self.load_data("".join(lines)) + except IOError: + print "WARNING - could not read from %s" % filename + + def save_file(self, filename, backup=False): + """ + Save the information to the given file if the file content changed. + """ + olddata = None + try: + lines = open(filename).readlines() + olddata = "".join(lines) + except IOError: + print "WARNING - could not read from %s" % filename + newdata = self.get_data() + if olddata and olddata == newdata: + return + + if olddata: + if backup: + os.rename(filename, filename + '.bak') + + handle = open(filename, "w") + handle.write(newdata) + handle.close() + +class Signals(GDoc): + def __init__(self): + self._objects = OrderedDict() + + def load_data(self, data): + """ + Load the .signals lines, creating our list of objects and signals. + """ + import re + smatcher = re.compile( + '(?s)' # make . match \n + '\n(.*?)\n' + ) + nmatcher = re.compile( + '' + '(?P\S*)' # store object + '::' + '(?P\S*)' # store signal + '' + ) + rmatcher = re.compile( + '(?s)' # make . match \n + '(?P\S*)\n' # store returns + '(?P.*)' # store args + ) + for block in smatcher.findall(data): + nmatch = nmatcher.search(block) + if nmatch: + o = nmatch.group('object') + debug("Found object", o) + debug("Found signal", nmatch.group('signal')) + if not self._objects.has_key(o): + object = Object(o) + self._objects[o] = object + + rmatch = rmatcher.search(block) + if rmatch: + dict = rmatch.groupdict().copy() + dict['name'] = nmatch.group('signal') + signal = Signal(**dict) + self._objects[o].add_signal(signal) + + def get_data(self): + lines = [] + for o in self._objects.values(): + for s in o._signals.values(): + block = """ +%(object)s::%(name)s +%(returns)s +%(args)s +""" + d = s.dict.copy() + d['object'] = o.name + lines.append(block % d) + + return "\n".join(lines) + '\n' + +class Args(GDoc): + def __init__(self): + self._objects = OrderedDict() + + def load_data(self, data): + """ + Load the .args lines, creating our list of objects and args. + """ + import re + amatcher = re.compile( + '(?s)' # make . match \n + '\n(.*?)\n' + ) + nmatcher = re.compile( + '' + '(?P\S*)' # store object + '::' + '(?P\S*)' # store arg + '' + ) + rmatcher = re.compile( + '(?s)' # make . match \n + '(?P\S*)\n' # store type + '(?P.*?)\n' # store range + '(?P\S*)\n' # store flags + '(?P.*?)\n' # store nick + '(?P.*?)\n' # store blurb + '(?P.*?)\n' # store default + ) + for block in amatcher.findall(data): + nmatch = nmatcher.search(block) + if nmatch: + o = nmatch.group('object') + debug("Found object", o) + debug("Found arg", nmatch.group('arg')) + if not self._objects.has_key(o): + object = Object(o) + self._objects[o] = object + + rmatch = rmatcher.search(block) + if rmatch: + dict = rmatch.groupdict().copy() + dict['name'] = nmatch.group('arg') + arg = Arg(**dict) + self._objects[o].add_arg(arg) + else: + print "ERROR: could not match arg from block %s" % block + + def get_data(self): + lines = [] + for o in self._objects.values(): + for a in o._args.values(): + block = """ +%(object)s::%(name)s +%(type)s +%(range)s +%(flags)s +%(nick)s +%(blurb)s +%(default)s + +""" + d = a.dict.copy() + d['object'] = o.name + lines.append(block % d) + + return "\n".join(lines) + '\n' + +class SingleLine(GDoc): + def __init__(self): + self._objects = [] + + def load_data(self, data): + """ + Load the .interfaces/.prerequisites lines, merge duplicates + """ + # split data on '\n' + lines = data.splitlines(); + # merge them into self._objects + for line in lines: + if line not in self._objects: + self._objects.append(line) + + def get_data(self): + lines = sorted(self._objects) + return "\n".join(lines) + '\n' + +def main(argv): + modulename = None + try: + modulename = argv[1] + except IndexError: + sys.stderr.write('Please provide a documentation module name\n') + sys.exit(1) + + signals = Signals() + signals.load_file(modulename + '.signals') + signals.load_file(modulename + '.signals.new') + signals.save_file(modulename + '.signals', backup=True) + os.unlink(modulename + '.signals.new') + + args = Args() + args.load_file(modulename + '.args') + args.load_file(modulename + '.args.new') + args.save_file(modulename + '.args', backup=True) + os.unlink(modulename + '.args.new') + + ifaces = SingleLine() + ifaces.load_file(modulename + '.interfaces') + ifaces.load_file(modulename + '.interfaces.new') + ifaces.save_file(modulename + '.interfaces', backup=True) + os.unlink(modulename + '.interfaces.new') + + prereq = SingleLine() + prereq.load_file(modulename + '.prerequisites') + prereq.load_file(modulename + '.prerequisites.new') + prereq.save_file(modulename + '.prerequisites', backup=True) + os.unlink(modulename + '.prerequisites.new') + +main(sys.argv) diff --git a/common/upload-doc.mak b/common/upload-doc.mak new file mode 100644 index 0000000..3bf9496 --- /dev/null +++ b/common/upload-doc.mak @@ -0,0 +1,66 @@ +# this snippet is to be included by both our docbook manuals +# and gtk-doc API references + +# it adds an upload target to each of these dir's Makefiles + +# each Makefile.am should define the following variables: +# - DOC: the base name of the documentation +# (faq, manual, pwg, gstreamer, gstreamer-libs) +# - FORMATS: the formats in which DOC is output +# (html ps pdf) + +# if you want to use it, make sure your $HOME/.ssh/config file contains the +# correct User entry for the Host entry for the DOC_SERVER + +# these variables define the location of the online docs +DOC_SERVER = gstreamer.freedesktop.org +DOC_BASE = /srv/gstreamer.freedesktop.org/www/data/doc +DOC_URL = $(DOC_SERVER):$(DOC_BASE) + +upload: $(FORMATS) + @if echo $(FORMATS) | grep html > /dev/null; then \ + echo "Preparing docs for upload (rebasing cross-references) ..." ; \ + if test x$(builddir) != x$(srcdir); then \ + echo "make upload can only be used if srcdir == builddir"; \ + exit 1; \ + fi; \ + # gtkdoc-rebase sometimes gets confused, so reset everything to \ + # local links before rebasing to online links \ + gtkdoc-rebase --html-dir=$(builddir)/html 2>/dev/null 2>/dev/null ; \ + rebase=`gtkdoc-rebase --verbose --online --html-dir=$(builddir)/html` ; \ + echo "$$rebase" | grep -e "On-*line"; \ + for req in glib gobject gstreamer gstreamer-libs gst-plugins-base-libs; do \ + if ! ( echo "$$rebase" | grep -i -e "On-*line.*/$$req/" ); then \ + echo "===============================================================================" ; \ + echo " Could not determine online location for $$req docs. Cross-referencing will be " ; \ + echo " broken, so not uploading. Make sure the library's gtk-doc documentation is " ; \ + echo " installed somewhere in /usr/share/gtk-doc. " ; \ + echo "===============================================================================" ; \ + exit 1; \ + fi; \ + done; \ + export SRC="$$SRC html"; \ + fi; \ + if echo $(FORMATS) | grep ps > /dev/null; then export SRC="$$SRC $(DOC).ps"; fi; \ + if echo $(FORMATS) | grep pdf > /dev/null; then export SRC="$$SRC $(DOC).pdf"; fi; \ + \ + # upload releases to both 0.10.X/ and head/ subdirectories \ + if test "x$(PACKAGE_VERSION_NANO)" = x0; then \ + export DIR=$(DOC_BASE)/gstreamer/$(VERSION)/$(DOC); \ + echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \ + ssh $(DOC_SERVER) mkdir -p $$DIR; \ + rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \ + ssh $(DOC_SERVER) chmod -R g+w $$DIR; \ + fi; \ + \ + export DIR=$(DOC_BASE)/gstreamer/head/$(DOC); \ + echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \ + ssh $(DOC_SERVER) mkdir -p $$DIR; \ + rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \ + ssh $(DOC_SERVER) chmod -R g+w $$DIR; \ + \ + if echo $(FORMATS) | grep html > /dev/null; then \ + echo "Un-preparing docs for upload (rebasing cross-references) ..." ; \ + gtkdoc-rebase --html-dir=$(builddir)/html ; \ + fi; \ + echo Done diff --git a/common/win32.mak b/common/win32.mak new file mode 100644 index 0000000..94afaec --- /dev/null +++ b/common/win32.mak @@ -0,0 +1,72 @@ +# various tests to make sure we dist the win32 stuff (for MSVC builds) right + +# the MANIFEST contains all win32 related files that should be disted +win32 = $(shell cat $(top_srcdir)/win32/MANIFEST) + +# wildcard is apparently not portable to other makes, hence the use of find +# these are library .def files with the symbols to export +win32defs = $(shell find $(top_srcdir)/win32/common -name '*.def') + +# wildcard is apparently not portable to other makes, hence the use of find +# these are files that need to be disted with CRLF line endings: +win32crlf = $(shell find $(top_srcdir)/win32 -name '*.dsw' -o -name '*.dsp') + +win32-debug: + @echo; \ + echo win32 = $(win32); \ + echo; \ + echo win32defs = $(win32defs); \ + echo; \ + echo win32crlf = $(win32crlf); \ + echo + +win32-check-crlf: + @echo Checking win32 files for CR LF line endings ...; \ + fail=0 ; \ + for each in $(win32crlf) ; do \ + result=`perl -e 'print grep(/\r\n/,<>)' "$$each" | wc -l`; \ + if test "$$result" = 0 ; then \ + echo $$each must be fixed to have CRLF line endings ; \ + fail=1; \ + fi ; \ + done ; \ + exit $$fail + +# make sure all symbols we export on linux are defined in the win32 .def too +# (don't care about other unixes for now, it's enough if it works on one of +# the linux build bots; we assume .so ) +check-exports: + @fail=0 ; \ + for l in $(win32defs); do \ + libbase=`basename "$$l" ".def"`; \ + libso=`find "$(top_builddir)" -name "$$libbase-@GST_MAJORMINOR@.so" | grep -v /_build/ | head -n1`; \ + libdef="$(top_srcdir)/win32/common/$$libbase.def"; \ + if test "x$$libso" != "x"; then \ + echo Checking symbols in $$libso; \ + if ! ($(top_srcdir)/common/check-exports $$libdef $$libso) ; then \ + fail=1; \ + fi; \ + fi; \ + done ; \ + if test $$fail != 0; then \ + echo '-----------------------------------------------------------'; \ + echo 'Run this to update the .def files:'; \ + echo 'make check-exports 2>&1 | patch -p1'; \ + echo '-----------------------------------------------------------'; \ + fi; \ + exit $$fail + +# complain about nonportable printf format strings (%lld, %llu, %zu etc.) +check-nonportable-print-format: + @fail=0 ; \ + loc=`find "$(top_srcdir)" -name '*.c' | xargs grep -n -e '%[0-9]*ll[udx]' -e '%[0-9]*z[udx]'`; \ + if test "x$$loc" != "x"; then \ + echo "Please fix the following print format strings:" ; \ + find "$(top_srcdir)" -name '*.c' | xargs grep -n -e '%[0-9]*ll[udx]' -e '%[0-9]*z[udx]'; \ + fail=1; \ + fi; \ + exit $$fail + +dist-hook: check-exports win32-check-crlf + + diff --git a/compile b/compile new file mode 100755 index 0000000..c0096a7 --- /dev/null +++ b/compile @@ -0,0 +1,143 @@ +#! /bin/sh +# Wrapper for compilers which do not understand `-c -o'. + +scriptversion=2009-10-06.20; # UTC + +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009 Free Software +# Foundation, Inc. +# Written by Tom Tromey . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand `-c -o'. +Remove `-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file `INSTALL'. + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; +esac + +ofile= +cfile= +eat= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as `compile cc -o foo foo.c'. + # So we strip `-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no `-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # `.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` + +# Create the lock directory. +# Note: use `[/\\:.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + test "$cofile" = "$ofile" || mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/config.guess b/config.guess new file mode 100755 index 0000000..40eaed4 --- /dev/null +++ b/config.guess @@ -0,0 +1,1517 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +# 2011 Free Software Foundation, Inc. + +timestamp='2011-05-11' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner. Please send patches (context +# diff format) to and include a ChangeLog +# entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free +Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabihf + fi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + LIBC=gnu + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-gnu + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + tile*:Linux:*:*) + echo ${UNAME_MACHINE}-tilera-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + i386) + eval $set_cc_for_build + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + UNAME_PROCESSOR="x86_64" + fi + fi ;; + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NEO-?:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk${UNAME_RELEASE} + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config.h.in b/config.h.in new file mode 100644 index 0000000..7062267 --- /dev/null +++ b/config.h.in @@ -0,0 +1,110 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Defined if gcov is enabled to force a rebuild due to config.h changing */ +#undef GST_GCOV_ENABLED + +/* Gst MajorMinor version */ +#undef GST_MAJORMINOR + +/* GStreamer package release date/time for plugins as YYYY-MM-DD */ +#undef GST_PACKAGE_RELEASE_DATETIME + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* We can use the gst-audio library */ +#undef HAVE_GST_AUDIO + +/* We can use the gst-tag library */ +#undef HAVE_GST_TAG + +/* We can use the gst-video library */ +#undef HAVE_GST_VIDEO + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Defined if we have a 2.12 series pygobject */ +#undef HAVE_PYGOBJECT_2_12 + +/* Defined if we have a 2.16 series pygobject */ +#undef HAVE_PYGOBJECT_2_16 + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* We can use the streamvolume interface */ +#undef HAVE_STREAM_VOLUME_INTERFACE + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define if valgrind should be used */ +#undef HAVE_VALGRIND + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +#undef NO_MINUS_C_MINUS_O + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* directory where plugins are located */ +#undef PLUGINDIR + +/* PyGst major version */ +#undef PYGST_MAJOR_VERSION + +/* PyGst micro version */ +#undef PYGST_MICRO_VERSION + +/* PyGst minor version */ +#undef PYGST_MINOR_VERSION + +/* PyGst nano version */ +#undef PYGST_NANO_VERSION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#undef VERSION diff --git a/config.sub b/config.sub new file mode 100755 index 0000000..30fdca8 --- /dev/null +++ b/config.sub @@ -0,0 +1,1760 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +# 2011 Free Software Foundation, Inc. + +timestamp='2011-03-23' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Please send patches to . Submit a context +# diff and a properly formatted GNU ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free +Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ + linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nios | nios2 \ + | ns16k | ns32k \ + | open8 \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pyramid \ + | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu \ + | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + c54x) + basic_machine=tic54x-unknown + ;; + c55x) + basic_machine=tic55x-unknown + ;; + c6x) + basic_machine=tic6x-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12 | picochip) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + strongarm | thumb | xscale) + basic_machine=arm-unknown + ;; + + xscaleeb) + basic_machine=armeb-unknown + ;; + + xscaleel) + basic_machine=armel-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nds32-* | nds32le-* | nds32be-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | open8-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pyramid-* \ + | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ + | tahoe-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile-* | tilegx-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c54x-*) + basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c55x-*) + basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c6x-*) + basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16 | cr16-*) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze) + basic_machine=microblaze-xilinx + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + neo-tandem) + basic_machine=neo-tandem + ;; + nse-tandem) + basic_machine=nse-tandem + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc | ppcbe) basic_machine=powerpc-unknown + ;; + ppc-* | ppcbe-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + strongarm-* | thumb-*) + basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + # This must be matched before tile*. + tilegx*) + basic_machine=tilegx-unknown + os=-linux-gnu + ;; + tile*) + basic_machine=tile-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + xscale-* | xscalee[bl]-*) + basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -nacl*) + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + tic54x-*) + os=-coff + ;; + tic55x-*) + os=-coff + ;; + tic6x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/configure b/configure new file mode 100755 index 0000000..e8eed81 --- /dev/null +++ b/configure @@ -0,0 +1,17674 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.68 for GStreamer Python Bindings 0.10.22. +# +# Report bugs to . +# +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software +# Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 + + test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ + || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + # Preserve -v and -x to the replacement shell. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; + esac + exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and +$0: http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer +$0: about your system, including any error possibly output +$0: before this message. Then install a modern shell, or +$0: manually run the script under such a shell if you do +$0: have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + +SHELL=${CONFIG_SHELL-/bin/sh} + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='GStreamer Python Bindings' +PACKAGE_TARNAME='gst-python' +PACKAGE_VERSION='0.10.22' +PACKAGE_STRING='GStreamer Python Bindings 0.10.22' +PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer' +PACKAGE_URL='' + +ac_unique_file="gst/gstmodule.c" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +plugindir +PLUGINDIR +PYTHON_LIB_SUFFIX +PYTHON_LIB_LOC +PYTHON_LIBS +HAVE_VALGRIND_FALSE +HAVE_VALGRIND_TRUE +VALGRIND_PATH +VALGRIND_LIBS +VALGRIND_CFLAGS +PYGST_CFLAGS +PYEXECDIR +PYTHONDIR +GST_OPTION_LIBS +GST_OPTION_CFLAGS +ERROR_CFLAGS +WARNING_CFLAGS +HAVE_PYGOBJECT_2_16_FALSE +HAVE_PYGOBJECT_2_16_TRUE +PYGOBJECT_2_16_LIBS +PYGOBJECT_2_16_CFLAGS +PYGOBJECT_2_12_LIBS +PYGOBJECT_2_12_CFLAGS +PYGTK_LIBS +PYGTK_CFLAGS +PYGOBJECT_LIBS +PYGOBJECT_CFLAGS +GST_PLUGINS_BASE_LIBS +GST_PLUGINS_BASE_CFLAGS +GST_DP_LIBS +GST_DP_CFLAGS +GST_NET_LIBS +GST_NET_CFLAGS +GST_CONTROLLER_LIBS +GST_CONTROLLER_CFLAGS +IGNORE_GST_LOADSAVE +GST_DISABLE_XML +GST_DISABLE_PLUGIN +GST_DISABLE_REGISTRY +GST_DISABLE_ALLOC_TRACE +GST_DISABLE_TRACE +GST_DISABLE_PARSE +GST_DISABLE_LOADSAVE +GST_DISABLE_GST_DEBUG +GST_BASE_LIBS +GST_BASE_CFLAGS +HAVE_GST_TAG_FALSE +HAVE_GST_TAG_TRUE +HAVE_GST_VIDEO_FALSE +HAVE_GST_VIDEO_TRUE +HAVE_GST_AUDIO_FALSE +HAVE_GST_AUDIO_TRUE +IGNORE_GST_PB_0_10_32 +IGNORE_GST_PB_0_10_31 +IGNORE_GST_PB_0_10_30 +IGNORE_GST_PB_0_10_29 +IGNORE_GST_PB_0_10_26 +IGNORE_GST_PB_0_10_25 +IGNORE_GST_PB_0_10_23 +IGNORE_GST_0_10_32 +IGNORE_GST_0_10_31 +IGNORE_GST_0_10_30 +IGNORE_GST_0_10_29 +IGNORE_GST_0_10_26 +IGNORE_GST_0_10_25 +IGNORE_GST_0_10_24 +IGNORE_GST_0_10_23 +IGNORE_GST_0_10_22 +IGNORE_GST_0_10_21 +GST_LIBS +GST_CFLAGS +PKG_CONFIG +GST_MAJORMINOR +PYTHON_INCLUDES +pkgpyexecdir +pyexecdir +pkgpythondir +pythondir +PYTHON_PLATFORM +PYTHON_EXEC_PREFIX +PYTHON_PREFIX +PYTHON_VERSION +PYTHON +GST_GCOV_ENABLED_FALSE +GST_GCOV_ENABLED_TRUE +CCASFLAGS +FFLAGS +CXXFLAGS +GCOV +GCOV_LIBS +GCOV_CFLAGS +CPP +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +MANIFEST_TOOL +RANLIB +ac_ct_AR +AR +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +EGREP +GREP +SED +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +LIBTOOL +OBJDUMP +DLLTOOL +AS +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +GSTPB_REQ +GST_REQ +GTK_REQ +GLIB_REQ +PYGOBJECT_REQ +PYGTK_REQ +ACLOCAL_AMFLAGS +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +MAINT +MAINTAINER_MODE_FALSE +MAINTAINER_MODE_TRUE +PACKAGE_VERSION_RELEASE +PACKAGE_VERSION_NANO +PACKAGE_VERSION_MICRO +PACKAGE_VERSION_MINOR +PACKAGE_VERSION_MAJOR +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_maintainer_mode +enable_silent_rules +enable_static +enable_shared +with_pic +enable_fast_install +enable_dependency_tracking +with_gnu_ld +with_sysroot +enable_libtool_lock +enable_gcov +enable_valgrind +with_libpython_dir +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP +PKG_CONFIG +GST_CFLAGS +GST_LIBS +GST_BASE_CFLAGS +GST_BASE_LIBS +GST_CONTROLLER_CFLAGS +GST_CONTROLLER_LIBS +GST_NET_CFLAGS +GST_NET_LIBS +GST_DP_CFLAGS +GST_DP_LIBS +GST_PLUGINS_BASE_CFLAGS +GST_PLUGINS_BASE_LIBS +PYGOBJECT_CFLAGS +PYGOBJECT_LIBS +PYGTK_CFLAGS +PYGTK_LIBS +PYGOBJECT_2_12_CFLAGS +PYGOBJECT_2_12_LIBS +PYGOBJECT_2_16_CFLAGS +PYGOBJECT_2_16_LIBS +VALGRIND_CFLAGS +VALGRIND_LIBS' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used" >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures GStreamer Python Bindings 0.10.22 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/gst-python] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of GStreamer Python Bindings 0.10.22:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer + --enable-silent-rules less verbose build output (undo: `make V=1') + --disable-silent-rules verbose build output (undo: `make V=0') + --enable-static[=PKGS] build static libraries [default=no] + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --disable-libtool-lock avoid locking (might break parallel builds) + --enable-gcov compile with coverage profiling instrumentation (gcc + only) + --disable-valgrind disable run-time valgrind detection + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic try to use only PIC/non-PIC objects [default=use + both] + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-sysroot=DIR Search for dependent libraries within DIR + (or the compiler's sysroot if not specified). + --with-libpython-dir the directory containing libpython${PYTHON_VERSION} + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CPP C preprocessor + PKG_CONFIG path to pkg-config utility + GST_CFLAGS C compiler flags for GST, overriding pkg-config + GST_LIBS linker flags for GST, overriding pkg-config + GST_BASE_CFLAGS + C compiler flags for GST_BASE, overriding pkg-config + GST_BASE_LIBS + linker flags for GST_BASE, overriding pkg-config + GST_CONTROLLER_CFLAGS + C compiler flags for GST_CONTROLLER, overriding pkg-config + GST_CONTROLLER_LIBS + linker flags for GST_CONTROLLER, overriding pkg-config + GST_NET_CFLAGS + C compiler flags for GST_NET, overriding pkg-config + GST_NET_LIBS + linker flags for GST_NET, overriding pkg-config + GST_DP_CFLAGS + C compiler flags for GST_DP, overriding pkg-config + GST_DP_LIBS linker flags for GST_DP, overriding pkg-config + GST_PLUGINS_BASE_CFLAGS + C compiler flags for GST_PLUGINS_BASE, overriding pkg-config + GST_PLUGINS_BASE_LIBS + linker flags for GST_PLUGINS_BASE, overriding pkg-config + PYGOBJECT_CFLAGS + C compiler flags for PYGOBJECT, overriding pkg-config + PYGOBJECT_LIBS + linker flags for PYGOBJECT, overriding pkg-config + PYGTK_CFLAGS + C compiler flags for PYGTK, overriding pkg-config + PYGTK_LIBS linker flags for PYGTK, overriding pkg-config + PYGOBJECT_2_12_CFLAGS + C compiler flags for PYGOBJECT_2_12, overriding pkg-config + PYGOBJECT_2_12_LIBS + linker flags for PYGOBJECT_2_12, overriding pkg-config + PYGOBJECT_2_16_CFLAGS + C compiler flags for PYGOBJECT_2_16, overriding pkg-config + PYGOBJECT_2_16_LIBS + linker flags for PYGOBJECT_2_16, overriding pkg-config + VALGRIND_CFLAGS + C compiler flags for VALGRIND, overriding pkg-config + VALGRIND_LIBS + linker flags for VALGRIND, overriding pkg-config + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +GStreamer Python Bindings configure 0.10.22 +generated by GNU Autoconf 2.68 + +Copyright (C) 2010 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by GStreamer Python Bindings $as_me 0.10.22, which was +generated by GNU Autoconf 2.68. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + +am__api_version='1.11' + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='gst-python' + VERSION='0.10.22' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' + + + + + + + + PACKAGE_VERSION_MAJOR=$(echo 0.10.22 | cut -d'.' -f1) + PACKAGE_VERSION_MINOR=$(echo 0.10.22 | cut -d'.' -f2) + PACKAGE_VERSION_MICRO=$(echo 0.10.22 | cut -d'.' -f3) + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5 +$as_echo_n "checking nano version... " >&6; } + + NANO=$(echo 0.10.22 | cut -d'.' -f4) + + if test x"$NANO" = x || test "x$NANO" = "x0" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: 0 (release)" >&5 +$as_echo "0 (release)" >&6; } + NANO=0 + PACKAGE_VERSION_RELEASE=1 + GST_CVS="no" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NANO" >&5 +$as_echo "$NANO" >&6; } + PACKAGE_VERSION_RELEASE=0.`date +%Y%m%d.%H%M%S` + if test "x$NANO" != "x1" ; then + GST_CVS="no" + else + GST_CVS="yes" + fi + fi + PACKAGE_VERSION_NANO=$NANO + + + + + + +ac_config_headers="$ac_config_headers config.h" + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + # Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + + + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in +yes) AM_DEFAULT_VERBOSITY=0;; +no) AM_DEFAULT_VERBOSITY=1;; +*) AM_DEFAULT_VERBOSITY=0;; +esac +AM_BACKSLASH='\' + + + +cat >>confdefs.h <<_ACEOF +#define PYGST_MAJOR_VERSION $PACKAGE_VERSION_MAJOR +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PYGST_MINOR_VERSION $PACKAGE_VERSION_MINOR +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PYGST_MICRO_VERSION $PACKAGE_VERSION_MICRO +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PYGST_NANO_VERSION $PACKAGE_VERSION_NANO +_ACEOF + + + + + + +ACLOCAL_AMFLAGS="-I m4 -I common/m4" + + +PYGTK_REQ=2.6.3 + +PYGOBJECT_REQ=2.11.2 + +GLIB_REQ=2.8.0 + +GTK_REQ=2.6.0 + +GST_REQ=0.10.20 + +GSTPB_REQ=0.10.20 + + +# Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=no +fi + + + + + + + + + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. +set dummy ${ac_tool_prefix}as; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AS+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AS"; then + ac_cv_prog_AS="$AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AS="${ac_tool_prefix}as" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AS=$ac_cv_prog_AS +if test -n "$AS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 +$as_echo "$AS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AS"; then + ac_ct_AS=$AS + # Extract the first word of "as", so it can be a program name with args. +set dummy as; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AS+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AS"; then + ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AS="as" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AS=$ac_cv_prog_ac_ct_AS +if test -n "$ac_ct_AS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 +$as_echo "$ac_ct_AS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AS" = x; then + AS="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AS=$ac_ct_AS + fi +else + AS="$ac_cv_prog_AS" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + + ;; +esac + +test -z "$AS" && AS=as + + + + + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.4' +macro_revision='1.3293' + + + + + + + + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +$as_echo_n "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "" +} + +case "$ECHO" in + printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +$as_echo "printf" >&6; } ;; + print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +$as_echo "print -r" >&6; } ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +$as_echo "cat" >&6; } ;; +esac + + + + + + + + + + + + + + +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if ${lt_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if ${lt_cv_nm_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,b/c, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } + + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +$as_echo_n "checking how to convert $build file names to $host format... " >&6; } +if ${lt_cv_to_host_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac + +fi + +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +$as_echo "$lt_cv_to_host_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } +if ${lt_cv_to_tool_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + #assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac + +fi + +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +$as_echo "$lt_cv_to_tool_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if ${lt_cv_ld_reload_flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test "$GCC" != yes; then + reload_cmds=false + fi + ;; + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if ${lt_cv_deplibs_check_method+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. + if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +$as_echo_n "checking how to associate runtime and link libraries... " >&6; } +if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh + # decide which to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd="$ECHO" + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + + + + + + + + +if test -n "$ac_tool_prefix"; then + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AR="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + +: ${AR=ar} +: ${AR_FLAGS=cru} + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +$as_echo_n "checking for archiver @FILE support... " >&6; } +if ${lt_cv_ar_at_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ar_at_file=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -eq 0; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -ne 0; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +$as_echo "$lt_cv_ar_at_file" >&6; } + +if test "x$lt_cv_ar_at_file" = xno; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if ${lt_cv_sys_global_symbol_pipe+:} false; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +$as_echo_n "checking for sysroot... " >&6; } + +# Check whether --with-sysroot was given. +if test "${with_sysroot+set}" = set; then : + withval=$with_sysroot; +else + with_sysroot=no +fi + + +lt_sysroot= +case ${with_sysroot} in #( + yes) + if test "$GCC" = yes; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 +$as_echo "${with_sysroot}" >&6; } + as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 + ;; +esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +$as_echo "${lt_sysroot:-no}" >&6; } + + + + + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if ${lt_cv_cc_needs_belf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. +set dummy ${ac_tool_prefix}mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MANIFEST_TOOL"; then + ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL +if test -n "$MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +$as_echo "$MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_MANIFEST_TOOL"; then + ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL + # Extract the first word of "mt", so it can be a program name with args. +set dummy mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_MANIFEST_TOOL"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL +if test -n "$ac_ct_MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_MANIFEST_TOOL" = x; then + MANIFEST_TOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL + fi +else + MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" +fi + +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if ${lt_cv_path_mainfest_tool+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&5 + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +$as_echo "$lt_cv_path_mainfest_tool" >&6; } +if test "x$lt_cv_path_mainfest_tool" != xyes; then + MANIFEST_TOOL=: +fi + + + + + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if ${lt_cv_apple_cc_single_mod+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if ${lt_cv_ld_exported_symbols_list+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +$as_echo_n "checking for -force_load linker flag... " >&6; } +if ${lt_cv_ld_force_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 + echo "$AR cru libconftest.a conftest.o" >&5 + $AR cru libconftest.a conftest.o 2>&5 + echo "$RANLIB libconftest.a" >&5 + $RANLIB libconftest.a 2>&5 + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&5 + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +$as_echo "$lt_cv_ld_force_load" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + + + +# Set options + + + + enable_dlopen=no + + + + # Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; pic_mode="$withval" +else + pic_mode=default +fi + + +test -z "$pic_mode" && pic_mode=default + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if ${lt_cv_objdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + case $cc_basename in + nvcc*) + lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; + *) + lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl='-Xlinker ' + lt_prog_compiler_pic='-Xcompiler -fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ F* | *Sun*Fortran*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +$as_echo "$lt_cv_prog_compiler_pic" >&6; } +lt_prog_compiler_pic=$lt_cv_prog_compiler_pic + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if ${lt_cv_prog_compiler_pic_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu | gnu*) + link_all_deplibs=no + ;; + esac + + ld_shlibs=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test "$with_gnu_ld" = yes; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; + *\ \(GNU\ Binutils\)\ [3-9]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test "$lt_use_gnu_ld_interface" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + export_dynamic_flag_spec='${wl}--export-all-symbols' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + haiku*) + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + link_all_deplibs=yes + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld='-rpath $libdir' + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global + # defined symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + link_all_deplibs=no + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + fi + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + always_export_symbols=yes + file_list_spec='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, )='true' + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + old_postinstall_cmds='chmod 644 $oldlib' + postlink_cmds='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + enable_shared_with_static_runtimes=yes + ;; + esac + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + else + whole_archive_flag_spec='' + fi + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld='+b $libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +$as_echo_n "checking if $CC understands -b... " >&6; } +if ${lt_cv_prog_compiler__b+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler__b=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -b" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler__b=yes + fi + else + lt_cv_prog_compiler__b=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +$as_echo "$lt_cv_prog_compiler__b" >&6; } + +if test x"$lt_cv_prog_compiler__b" = xyes; then + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' +fi + + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if ${lt_cv_irix_exported_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo (void) { return 0; } +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_irix_exported_symbol=yes +else + lt_cv_irix_exported_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +$as_echo "$lt_cv_irix_exported_symbol" >&6; } + if test "$lt_cv_irix_exported_symbol" = yes; then + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + fi + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; + *) lt_sed_strip_eq="s,=/,/,g" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's,/\([A-Za-z]:\),\1,g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if ${ac_cv_lib_svld_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if ${ac_cv_lib_dld_dld_link+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self_static+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + + case $ac_cv_prog_cc_stdc in #( + no) : + ac_cv_prog_cc_c99=no; ac_cv_prog_cc_c89=no ;; #( + *) : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 +$as_echo_n "checking for $CC option to accept ISO C99... " >&6; } +if ${ac_cv_prog_cc_c99+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +#include + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +#define debug(...) fprintf (stderr, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + your preprocessor is broken; +#endif +#if BIG_OK +#else + your preprocessor is broken; +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\0'; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static void +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str; + int number; + float fnumber; + + while (*format) + { + switch (*format++) + { + case 's': // string + str = va_arg (args_copy, const char *); + break; + case 'd': // int + number = va_arg (args_copy, int); + break; + case 'f': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); +} + +int +main () +{ + + // Check bool. + _Bool success = false; + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + test_varargs ("s, d' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' + || dynamic_array[ni.number - 1] != 543); + + ; + return 0; +} +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -xc99=all -qlanglvl=extc99 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c99" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c99" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +$as_echo "$ac_cv_prog_cc_c99" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c99" != xno; then : + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 +else + ac_cv_prog_cc_stdc=no +fi + +fi + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO Standard C" >&5 +$as_echo_n "checking for $CC option to accept ISO Standard C... " >&6; } + if ${ac_cv_prog_cc_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +fi + + case $ac_cv_prog_cc_stdc in #( + no) : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; #( + '') : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; #( + *) : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_stdc" >&5 +$as_echo "$ac_cv_prog_cc_stdc" >&6; } ;; +esac + + +if test "x$CC" != xcc; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5 +$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5 +$as_echo_n "checking whether cc understands -c and -o together... " >&6; } +fi +set dummy $CC; ac_cc=`$as_echo "$2" | + sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` +if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +# Make sure it works both with $CC and with simple cc. +# We do the test twice because some compilers refuse to overwrite an +# existing .o file with -o, though they will create one. +ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' +rm -f conftest2.* +if { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && + test -f conftest2.$ac_objext && { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; +then + eval ac_cv_prog_cc_${ac_cc}_c_o=yes + if test "x$CC" != xcc; then + # Test first that cc exists at all. + if { ac_try='cc -c conftest.$ac_ext >&5' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' + rm -f conftest2.* + if { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && + test -f conftest2.$ac_objext && { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; + then + # cc works too. + : + else + # cc exists but doesn't like -o. + eval ac_cv_prog_cc_${ac_cc}_c_o=no + fi + fi + fi +else + eval ac_cv_prog_cc_${ac_cc}_c_o=no +fi +rm -f core conftest* + +fi +if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h + +fi + +# FIXME: we rely on the cache variable name because +# there is no other way. +set dummy $CC +am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` +eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o +if test "$am_t" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi + + + + + # Check whether --enable-gcov was given. +if test "${enable_gcov+set}" = set; then : + enableval=$enable_gcov; enable_gcov=$enableval +else + enable_gcov=no +fi + + if test x$enable_gcov = xyes ; then + if test "x$GCC" != "xyes" + then + as_fn_error $? "gcov only works if gcc is used" "$LINENO" 5 + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands \"-fprofile-arcs\"" >&5 +$as_echo_n "checking to see if compiler understands \"-fprofile-arcs\"... " >&6; } + + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS "-fprofile-arcs"" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + flag_ok=yes +else + flag_ok=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$save_CFLAGS" + + if test "X$flag_ok" = Xyes ; then + GCOV_CFLAGS="$GCOV_CFLAGS -fprofile-arcs" + true + else + true + true + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 +$as_echo "$flag_ok" >&6; } + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands \"-ftest-coverage\"" >&5 +$as_echo_n "checking to see if compiler understands \"-ftest-coverage\"... " >&6; } + + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS "-ftest-coverage"" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + flag_ok=yes +else + flag_ok=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$save_CFLAGS" + + if test "X$flag_ok" = Xyes ; then + GCOV_CFLAGS="$GCOV_CFLAGS -ftest-coverage" + true + else + true + true + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 +$as_echo "$flag_ok" >&6; } + + GCOV_CFLAGS=`echo "$GCOV_CFLAGS" | sed -e 's/-O[0-9]*//g'` + GCOV_LIBS=-lgcov + + + GCOV=`echo $CC | sed s/gcc/gcov/g` + + + GST_GCOV_ENABLED=yes + +cat >>confdefs.h <<_ACEOF +#define GST_GCOV_ENABLED 1 +_ACEOF + + if test "x$GST_GCOV_ENABLED" = "xyes" + then + CFLAGS="-O0" + + CXXFLAGS="-O0" + + FFLAGS="-O0" + + CCASFLAGS="-O0" + + { $as_echo "$as_me:${as_lineno-$LINENO}: gcov enabled, setting CFLAGS and friends to $CFLAGS" >&5 +$as_echo "$as_me: gcov enabled, setting CFLAGS and friends to $CFLAGS" >&6;} + fi + fi + if test x$enable_gcov = xyes; then + GST_GCOV_ENABLED_TRUE= + GST_GCOV_ENABLED_FALSE='#' +else + GST_GCOV_ENABLED_TRUE='#' + GST_GCOV_ENABLED_FALSE= +fi + + + + + + + + # Find any Python interpreter. + if test -z "$PYTHON"; then + for ac_prog in python python2 python3 python3.0 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PYTHON+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PYTHON in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PYTHON=$ac_cv_path_PYTHON +if test -n "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PYTHON" && break +done +test -n "$PYTHON" || PYTHON=":" + + fi + am_display_PYTHON=python + + + if test "$PYTHON" = :; then + as_fn_error $? "no suitable Python interpreter found" "$LINENO" 5 + else + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5 +$as_echo_n "checking for $am_display_PYTHON version... " >&6; } +if ${am_cv_python_version+:} false; then : + $as_echo_n "(cached) " >&6 +else + am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 +$as_echo "$am_cv_python_version" >&6; } + PYTHON_VERSION=$am_cv_python_version + + + + PYTHON_PREFIX='${prefix}' + + PYTHON_EXEC_PREFIX='${exec_prefix}' + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5 +$as_echo_n "checking for $am_display_PYTHON platform... " >&6; } +if ${am_cv_python_platform+:} false; then : + $as_echo_n "(cached) " >&6 +else + am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_platform" >&5 +$as_echo "$am_cv_python_platform" >&6; } + PYTHON_PLATFORM=$am_cv_python_platform + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5 +$as_echo_n "checking for $am_display_PYTHON script directory... " >&6; } +if ${am_cv_python_pythondir+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$prefix" = xNONE + then + am_py_prefix=$ac_default_prefix + else + am_py_prefix=$prefix + fi + am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null || + echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pythondir in + $am_py_prefix*) + am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` + am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` + ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) + am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pythondir" >&5 +$as_echo "$am_cv_python_pythondir" >&6; } + pythondir=$am_cv_python_pythondir + + + + pkgpythondir=\${pythondir}/$PACKAGE + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory" >&5 +$as_echo_n "checking for $am_display_PYTHON extension module directory... " >&6; } +if ${am_cv_python_pyexecdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$exec_prefix" = xNONE + then + am_py_exec_prefix=$am_py_prefix + else + am_py_exec_prefix=$exec_prefix + fi + am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null || + echo "$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pyexecdir in + $am_py_exec_prefix*) + am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` + am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` + ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) + am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pyexecdir" >&5 +$as_echo "$am_cv_python_pyexecdir" >&6; } + pyexecdir=$am_cv_python_pyexecdir + + + + pkgpyexecdir=\${pyexecdir}/$PACKAGE + + + + fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for python >= 2.3" >&5 +$as_echo_n "checking for python >= 2.3... " >&6; } +prog=" +import sys, string +minver = (2,3,0,'final',0) +if sys.version_info < minver: + sys.exit(1) +sys.exit(0)" + +if $PYTHON -c "$prog" 1>&5 2>&5 +then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: okay" >&5 +$as_echo "okay" >&6; } +else + as_fn_error $? "too old" "$LINENO" 5 +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for headers required to compile python extensions" >&5 +$as_echo_n "checking for headers required to compile python extensions... " >&6; } +py_prefix=`$PYTHON -c "import sys; print sys.prefix"` +py_exec_prefix=`$PYTHON -c "import sys; print sys.exec_prefix"` +if $PYTHON-config --help 2>/dev/null; then + PYTHON_INCLUDES=`$PYTHON-config --includes 2>/dev/null` +else + PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}" + if test "$py_prefix" != "$py_exec_prefix"; then + PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}" + fi +fi + +save_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="$CPPFLAGS $PYTHON_INCLUDES" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 +$as_echo "found" >&6; } + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } +as_fn_error $? "could not find Python headers" "$LINENO" 5 +fi +rm -f conftest.err conftest.i conftest.$ac_ext +CPPFLAGS="$save_CPPFLAGS" + + +GST_MAJORMINOR=0.10 + + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi + +fi + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GST" >&5 +$as_echo_n "checking for GST... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$GST_CFLAGS"; then + pkg_cv_GST_CFLAGS="$GST_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-\$GST_MAJORMINOR >= \$GST_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gstreamer-$GST_MAJORMINOR >= $GST_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GST_CFLAGS=`$PKG_CONFIG --cflags "gstreamer-$GST_MAJORMINOR >= $GST_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$GST_LIBS"; then + pkg_cv_GST_LIBS="$GST_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-\$GST_MAJORMINOR >= \$GST_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gstreamer-$GST_MAJORMINOR >= $GST_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GST_LIBS=`$PKG_CONFIG --libs "gstreamer-$GST_MAJORMINOR >= $GST_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + GST_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gstreamer-$GST_MAJORMINOR >= $GST_REQ"` + else + GST_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gstreamer-$GST_MAJORMINOR >= $GST_REQ"` + fi + # Put the nasty error message in config.log where it belongs + echo "$GST_PKG_ERRORS" >&5 + + as_fn_error $? "Package requirements (gstreamer-$GST_MAJORMINOR >= $GST_REQ) were not met: + +$GST_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables GST_CFLAGS +and GST_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. +" "$LINENO" 5 +elif test $pkg_failed = untried; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables GST_CFLAGS +and GST_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details" "$LINENO" 5; } +else + GST_CFLAGS=$pkg_cv_GST_CFLAGS + GST_LIBS=$pkg_cv_GST_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + : +fi + +cat >>confdefs.h <<_ACEOF +#define GST_MAJORMINOR "$GST_MAJORMINOR" +_ACEOF + +GST_CFLAGS="$GST_CFLAGS $GLIB_EXTRA_CFLAGS" + + + +GST_MINOR_VERSION=`$PKG_CONFIG --modversion gstreamer-$GST_MAJORMINOR | cut -f 3 -d.` +GST_PB_MINOR_VERSION=`$PKG_CONFIG --modversion gstreamer-plugins-base-$GST_MAJORMINOR | cut -f 3 -d.` +GST_CVS_VERSION=`$PKG_CONFIG --modversion gstreamer-$GST_MAJORMINOR | cut -f 4 -d.` + +echo "Building against GStreamer core 0.10.$GST_MINOR_VERSION , ignoring API additions if needed" + + +if test "x$GST_CVS_VERSION" = "x" +then + if test $GST_MINOR_VERSION -lt "21" + then + IGNORE_GST_0_10_21="gst-0.10.21.ignore" + else + IGNORE_GST_0_10_21="" + fi + + if test $GST_MINOR_VERSION -lt "22" + then + IGNORE_GST_0_10_22="gst-0.10.22.ignore" + else + IGNORE_GST_0_10_22="" + fi + + if test $GST_MINOR_VERSION -lt "23" + then + IGNORE_GST_0_10_23="gst-0.10.23.ignore" + else + IGNORE_GST_0_10_23="" + fi + + if test $GST_MINOR_VERSION -lt "24" + then + IGNORE_GST_0_10_24="gst-0.10.24.ignore" + else + IGNORE_GST_0_10_24="" + fi + + if test $GST_MINOR_VERSION -lt "25" + then + IGNORE_GST_0_10_25="gst-0.10.25.ignore" + else + IGNORE_GST_0_10_25="" + fi + + if test $GST_MINOR_VERSION -lt "26" + then + IGNORE_GST_0_10_26="gst-0.10.26.ignore" + else + IGNORE_GST_0_10_26="" + fi + + if test $GST_MINOR_VERSION -lt "29" + then + IGNORE_GST_0_10_29="gst-0.10.29.ignore" + else + IGNORE_GST_0_10_29="" + fi + + if test $GST_MINOR_VERSION -lt "30" + then + IGNORE_GST_0_10_30="gst-0.10.30.ignore" + else + IGNORE_GST_0_10_30="" + fi + + if test $GST_MINOR_VERSION -lt "31" + then + IGNORE_GST_0_10_31="gst-0.10.31.ignore" + else + IGNORE_GST_0_10_31="" + fi + + if test $GST_MINOR_VERSION -lt "32" + then + IGNORE_GST_0_10_32="gst-0.10.32.ignore" + else + IGNORE_GST_0_10_32="" + fi + + if test $GST_PB_MINOR_VERSION -ge "22" + then + +cat >>confdefs.h <<_ACEOF +#define HAVE_GST_AUDIO 1 +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define HAVE_GST_VIDEO 1 +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define HAVE_GST_TAG 1 +_ACEOF + + fi + + if test $GST_PB_MINOR_VERSION -lt "23" + then + IGNORE_GST_PB_0_10_23="gst-pb-0.10.23.ignore" + else + IGNORE_GST_PB_0_10_23="" + fi + + if test $GST_PB_MINOR_VERSION -lt "25" + then + IGNORE_GST_PB_0_10_25="gst-pb-0.10.25.ignore" + else + IGNORE_GST_PB_0_10_25="" + +cat >>confdefs.h <<_ACEOF +#define HAVE_STREAM_VOLUME_INTERFACE 1 +_ACEOF + + fi + + if test $GST_PB_MINOR_VERSION -lt "26" + then + IGNORE_GST_PB_0_10_26="gst-pb-0.10.26.ignore" + else + IGNORE_GST_PB_0_10_26="" + fi + + if test $GST_PB_MINOR_VERSION -lt "29" + then + IGNORE_GST_PB_0_10_29="gst-pb-0.10.29.ignore" + else + IGNORE_GST_PB_0_10_29="" + fi + + if test $GST_PB_MINOR_VERSION -lt "30" + then + IGNORE_GST_PB_0_10_30="gst-pb-0.10.30.ignore" + else + IGNORE_GST_PB_0_10_30="" + fi + + if test $GST_PB_MINOR_VERSION -lt "31" + then + IGNORE_GST_PB_0_10_31="gst-pb-0.10.31.ignore" + else + IGNORE_GST_PB_0_10_31="" + fi + + if test $GST_PB_MINOR_VERSION -lt "32" + then + IGNORE_GST_PB_0_10_32="gst-pb-0.10.32.ignore" + else + IGNORE_GST_PB_0_10_32="" + fi + +else + IGNORE_GST_0_10_18="" + IGNORE_GST_0_10_21="" + IGNORE_GST_0_10_22="" + IGNORE_GST_0_10_23="" + IGNORE_GST_0_10_24="" + IGNORE_GST_0_10_25="" + IGNORE_GST_0_10_26="" + IGNORE_GST_0_10_29="" + IGNORE_GST_0_10_30="" + IGNORE_GST_0_10_31="" + IGNORE_GST_0_10_32="" + IGNORE_GST_PB_0_10_23="" + IGNORE_GST_PB_0_10_25="" + IGNORE_GST_PB_0_10_26="" + IGNORE_GST_PB_0_10_29="" + IGNORE_GST_PB_0_10_30="" + IGNORE_GST_PB_0_10_31="" + IGNORE_GST_PB_0_10_32="" + +cat >>confdefs.h <<_ACEOF +#define HAVE_GST_AUDIO 1 +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define HAVE_GST_VIDEO 1 +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define HAVE_GST_TAG 1 +_ACEOF + +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_STREAM_VOLUME_INTERFACE 1 +_ACEOF + + + + + + + + + + + + + + + + + + + if $HAVE_GST_AUDIO; then + HAVE_GST_AUDIO_TRUE= + HAVE_GST_AUDIO_FALSE='#' +else + HAVE_GST_AUDIO_TRUE='#' + HAVE_GST_AUDIO_FALSE= +fi + + if $HAVE_GST_VIDEO; then + HAVE_GST_VIDEO_TRUE= + HAVE_GST_VIDEO_FALSE='#' +else + HAVE_GST_VIDEO_TRUE='#' + HAVE_GST_VIDEO_FALSE= +fi + + if $HAVE_GST_TAG; then + HAVE_GST_TAG_TRUE= + HAVE_GST_TAG_FALSE='#' +else + HAVE_GST_TAG_TRUE='#' + HAVE_GST_TAG_FALSE= +fi + + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GST_BASE" >&5 +$as_echo_n "checking for GST_BASE... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$GST_BASE_CFLAGS"; then + pkg_cv_GST_BASE_CFLAGS="$GST_BASE_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-base-\$GST_MAJORMINOR >= \$GST_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gstreamer-base-$GST_MAJORMINOR >= $GST_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GST_BASE_CFLAGS=`$PKG_CONFIG --cflags "gstreamer-base-$GST_MAJORMINOR >= $GST_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$GST_BASE_LIBS"; then + pkg_cv_GST_BASE_LIBS="$GST_BASE_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-base-\$GST_MAJORMINOR >= \$GST_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gstreamer-base-$GST_MAJORMINOR >= $GST_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GST_BASE_LIBS=`$PKG_CONFIG --libs "gstreamer-base-$GST_MAJORMINOR >= $GST_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + GST_BASE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gstreamer-base-$GST_MAJORMINOR >= $GST_REQ"` + else + GST_BASE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gstreamer-base-$GST_MAJORMINOR >= $GST_REQ"` + fi + # Put the nasty error message in config.log where it belongs + echo "$GST_BASE_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + HAVE_GST_BASE="no" +elif test $pkg_failed = untried; then + HAVE_GST_BASE="no" +else + GST_BASE_CFLAGS=$pkg_cv_GST_BASE_CFLAGS + GST_BASE_LIBS=$pkg_cv_GST_BASE_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + HAVE_GST_BASE="yes" +fi + +if test "x$HAVE_GST_BASE" = "xno"; then + as_fn_error $? "no GStreamer Base Libs found" "$LINENO" 5 +fi + + + + + +GST_CONFIGPATH=`$PKG_CONFIG --variable=includedir gstreamer-0.10`"/gst/gstconfig.h" + + + grep >/dev/null "#undef GST_DISABLE_GST_DEBUG" $GST_CONFIGPATH + if test $? = 0; then + GST_DISABLE_GST_DEBUG=0 + else + GST_DISABLE_GST_DEBUG=1 + fi + + + + grep >/dev/null "#undef GST_DISABLE_LOADSAVE" $GST_CONFIGPATH + if test $? = 0; then + GST_DISABLE_LOADSAVE=0 + else + GST_DISABLE_LOADSAVE=1 + fi + + + + grep >/dev/null "#undef GST_DISABLE_PARSE" $GST_CONFIGPATH + if test $? = 0; then + GST_DISABLE_PARSE=0 + else + GST_DISABLE_PARSE=1 + fi + + + + grep >/dev/null "#undef GST_DISABLE_TRACE" $GST_CONFIGPATH + if test $? = 0; then + GST_DISABLE_TRACE=0 + else + GST_DISABLE_TRACE=1 + fi + + + + grep >/dev/null "#undef GST_DISABLE_ALLOC_TRACE" $GST_CONFIGPATH + if test $? = 0; then + GST_DISABLE_ALLOC_TRACE=0 + else + GST_DISABLE_ALLOC_TRACE=1 + fi + + + + grep >/dev/null "#undef GST_DISABLE_REGISTRY" $GST_CONFIGPATH + if test $? = 0; then + GST_DISABLE_REGISTRY=0 + else + GST_DISABLE_REGISTRY=1 + fi + + + + grep >/dev/null "#undef GST_DISABLE_PLUGIN" $GST_CONFIGPATH + if test $? = 0; then + GST_DISABLE_PLUGIN=0 + else + GST_DISABLE_PLUGIN=1 + fi + + + + grep >/dev/null "#undef GST_DISABLE_XML" $GST_CONFIGPATH + if test $? = 0; then + GST_DISABLE_XML=0 + else + GST_DISABLE_XML=1 + fi + + + +if test $GST_DISABLE_LOADSAVE = "1"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Load/Save XML persistence disabled\"" >&5 +$as_echo "$as_me: WARNING: \"Load/Save XML persistence disabled\"" >&2;} + IGNORE_GST_LOADSAVE="gst-disable-loadsave.ignore" +else + IGNORE_GST_LOADSAVE="" +fi + + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GST_CONTROLLER" >&5 +$as_echo_n "checking for GST_CONTROLLER... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$GST_CONTROLLER_CFLAGS"; then + pkg_cv_GST_CONTROLLER_CFLAGS="$GST_CONTROLLER_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-controller-\$GST_MAJORMINOR >= \$GST_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gstreamer-controller-$GST_MAJORMINOR >= $GST_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GST_CONTROLLER_CFLAGS=`$PKG_CONFIG --cflags "gstreamer-controller-$GST_MAJORMINOR >= $GST_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$GST_CONTROLLER_LIBS"; then + pkg_cv_GST_CONTROLLER_LIBS="$GST_CONTROLLER_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-controller-\$GST_MAJORMINOR >= \$GST_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gstreamer-controller-$GST_MAJORMINOR >= $GST_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GST_CONTROLLER_LIBS=`$PKG_CONFIG --libs "gstreamer-controller-$GST_MAJORMINOR >= $GST_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + GST_CONTROLLER_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gstreamer-controller-$GST_MAJORMINOR >= $GST_REQ"` + else + GST_CONTROLLER_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gstreamer-controller-$GST_MAJORMINOR >= $GST_REQ"` + fi + # Put the nasty error message in config.log where it belongs + echo "$GST_CONTROLLER_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + HAVE_GST_CONTROLLER="no" +elif test $pkg_failed = untried; then + HAVE_GST_CONTROLLER="no" +else + GST_CONTROLLER_CFLAGS=$pkg_cv_GST_CONTROLLER_CFLAGS + GST_CONTROLLER_LIBS=$pkg_cv_GST_CONTROLLER_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + HAVE_GST_CONTROLLER="yes" +fi + +if test "x$HAVE_GST_CONTROLLER" = "xno"; then + as_fn_error $? "no GStreamer Controller Libs found" "$LINENO" 5 +fi + + + + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GST_NET" >&5 +$as_echo_n "checking for GST_NET... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$GST_NET_CFLAGS"; then + pkg_cv_GST_NET_CFLAGS="$GST_NET_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-net-\$GST_MAJORMINOR >= \$GST_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gstreamer-net-$GST_MAJORMINOR >= $GST_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GST_NET_CFLAGS=`$PKG_CONFIG --cflags "gstreamer-net-$GST_MAJORMINOR >= $GST_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$GST_NET_LIBS"; then + pkg_cv_GST_NET_LIBS="$GST_NET_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-net-\$GST_MAJORMINOR >= \$GST_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gstreamer-net-$GST_MAJORMINOR >= $GST_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GST_NET_LIBS=`$PKG_CONFIG --libs "gstreamer-net-$GST_MAJORMINOR >= $GST_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + GST_NET_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gstreamer-net-$GST_MAJORMINOR >= $GST_REQ"` + else + GST_NET_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gstreamer-net-$GST_MAJORMINOR >= $GST_REQ"` + fi + # Put the nasty error message in config.log where it belongs + echo "$GST_NET_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + HAVE_GST_NET="no" +elif test $pkg_failed = untried; then + HAVE_GST_NET="no" +else + GST_NET_CFLAGS=$pkg_cv_GST_NET_CFLAGS + GST_NET_LIBS=$pkg_cv_GST_NET_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + HAVE_GST_NET="yes" +fi + +if test "x$HAVE_GST_NET" = "xno"; then + as_fn_error $? "no GStreamer Networking Libs found" "$LINENO" 5 +fi + + + + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GST_DP" >&5 +$as_echo_n "checking for GST_DP... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$GST_DP_CFLAGS"; then + pkg_cv_GST_DP_CFLAGS="$GST_DP_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-dataprotocol-\$GST_MAJORMINOR >= \$GST_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gstreamer-dataprotocol-$GST_MAJORMINOR >= $GST_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GST_DP_CFLAGS=`$PKG_CONFIG --cflags "gstreamer-dataprotocol-$GST_MAJORMINOR >= $GST_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$GST_DP_LIBS"; then + pkg_cv_GST_DP_LIBS="$GST_DP_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-dataprotocol-\$GST_MAJORMINOR >= \$GST_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gstreamer-dataprotocol-$GST_MAJORMINOR >= $GST_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GST_DP_LIBS=`$PKG_CONFIG --libs "gstreamer-dataprotocol-$GST_MAJORMINOR >= $GST_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + GST_DP_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gstreamer-dataprotocol-$GST_MAJORMINOR >= $GST_REQ"` + else + GST_DP_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gstreamer-dataprotocol-$GST_MAJORMINOR >= $GST_REQ"` + fi + # Put the nasty error message in config.log where it belongs + echo "$GST_DP_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + HAVE_GST_DP="no" +elif test $pkg_failed = untried; then + HAVE_GST_DP="no" +else + GST_DP_CFLAGS=$pkg_cv_GST_DP_CFLAGS + GST_DP_LIBS=$pkg_cv_GST_DP_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + HAVE_GST_DP="yes" +fi + +if test "x$HAVE_GST_DP" = "xno"; then + as_fn_error $? "no GStreamer Data Protocol Libs found" "$LINENO" 5 +fi + + + + + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GST_PLUGINS_BASE" >&5 +$as_echo_n "checking for GST_PLUGINS_BASE... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$GST_PLUGINS_BASE_CFLAGS"; then + pkg_cv_GST_PLUGINS_BASE_CFLAGS="$GST_PLUGINS_BASE_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-plugins-base-\$GST_MAJORMINOR >= \$GSTPB_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gstreamer-plugins-base-$GST_MAJORMINOR >= $GSTPB_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GST_PLUGINS_BASE_CFLAGS=`$PKG_CONFIG --cflags "gstreamer-plugins-base-$GST_MAJORMINOR >= $GSTPB_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$GST_PLUGINS_BASE_LIBS"; then + pkg_cv_GST_PLUGINS_BASE_LIBS="$GST_PLUGINS_BASE_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-plugins-base-\$GST_MAJORMINOR >= \$GSTPB_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gstreamer-plugins-base-$GST_MAJORMINOR >= $GSTPB_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GST_PLUGINS_BASE_LIBS=`$PKG_CONFIG --libs "gstreamer-plugins-base-$GST_MAJORMINOR >= $GSTPB_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + GST_PLUGINS_BASE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gstreamer-plugins-base-$GST_MAJORMINOR >= $GSTPB_REQ"` + else + GST_PLUGINS_BASE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gstreamer-plugins-base-$GST_MAJORMINOR >= $GSTPB_REQ"` + fi + # Put the nasty error message in config.log where it belongs + echo "$GST_PLUGINS_BASE_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + HAVE_GST_PLUGINS_BASE="no" +elif test $pkg_failed = untried; then + HAVE_GST_PLUGINS_BASE="no" +else + GST_PLUGINS_BASE_CFLAGS=$pkg_cv_GST_PLUGINS_BASE_CFLAGS + GST_PLUGINS_BASE_LIBS=$pkg_cv_GST_PLUGINS_BASE_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + HAVE_GST_PLUGINS_BASE="yes" +fi + +if test "x$HAVE_GST_PLUGINS_BASE" = "xno"; then + as_fn_error $? "no gst-plugins-base found" "$LINENO" 5 +fi + + + + + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PYGOBJECT" >&5 +$as_echo_n "checking for PYGOBJECT... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$PYGOBJECT_CFLAGS"; then + pkg_cv_PYGOBJECT_CFLAGS="$PYGOBJECT_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pygobject-2.0 >= \$PYGOBJECT_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "pygobject-2.0 >= $PYGOBJECT_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_PYGOBJECT_CFLAGS=`$PKG_CONFIG --cflags "pygobject-2.0 >= $PYGOBJECT_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$PYGOBJECT_LIBS"; then + pkg_cv_PYGOBJECT_LIBS="$PYGOBJECT_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pygobject-2.0 >= \$PYGOBJECT_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "pygobject-2.0 >= $PYGOBJECT_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_PYGOBJECT_LIBS=`$PKG_CONFIG --libs "pygobject-2.0 >= $PYGOBJECT_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + PYGOBJECT_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "pygobject-2.0 >= $PYGOBJECT_REQ"` + else + PYGOBJECT_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "pygobject-2.0 >= $PYGOBJECT_REQ"` + fi + # Put the nasty error message in config.log where it belongs + echo "$PYGOBJECT_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + HAVE_PYGOBJECT="no" +elif test $pkg_failed = untried; then + HAVE_PYGOBJECT="no" +else + PYGOBJECT_CFLAGS=$pkg_cv_PYGOBJECT_CFLAGS + PYGOBJECT_LIBS=$pkg_cv_PYGOBJECT_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + HAVE_PYGOBJECT="yes" + +fi + +if test "x$HAVE_PYGOBJECT" = "xno"; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PYGTK" >&5 +$as_echo_n "checking for PYGTK... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$PYGTK_CFLAGS"; then + pkg_cv_PYGTK_CFLAGS="$PYGTK_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pygtk-2.0 >= \$PYGTK_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "pygtk-2.0 >= $PYGTK_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_PYGTK_CFLAGS=`$PKG_CONFIG --cflags "pygtk-2.0 >= $PYGTK_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$PYGTK_LIBS"; then + pkg_cv_PYGTK_LIBS="$PYGTK_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pygtk-2.0 >= \$PYGTK_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "pygtk-2.0 >= $PYGTK_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_PYGTK_LIBS=`$PKG_CONFIG --libs "pygtk-2.0 >= $PYGTK_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + PYGTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "pygtk-2.0 >= $PYGTK_REQ"` + else + PYGTK_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "pygtk-2.0 >= $PYGTK_REQ"` + fi + # Put the nasty error message in config.log where it belongs + echo "$PYGTK_PKG_ERRORS" >&5 + + as_fn_error $? "Package requirements (pygtk-2.0 >= $PYGTK_REQ) were not met: + +$PYGTK_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables PYGTK_CFLAGS +and PYGTK_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. +" "$LINENO" 5 +elif test $pkg_failed = untried; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables PYGTK_CFLAGS +and PYGTK_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details" "$LINENO" 5; } +else + PYGTK_CFLAGS=$pkg_cv_PYGTK_CFLAGS + PYGTK_LIBS=$pkg_cv_PYGTK_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + : +fi + + PYGOBJECT_CFLAGS="\$(PYGTK_CFLAGS)" +fi + + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PYGOBJECT_2_12" >&5 +$as_echo_n "checking for PYGOBJECT_2_12... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$PYGOBJECT_2_12_CFLAGS"; then + pkg_cv_PYGOBJECT_2_12_CFLAGS="$PYGOBJECT_2_12_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pygobject-2.0 >= 2.11.1\""; } >&5 + ($PKG_CONFIG --exists --print-errors "pygobject-2.0 >= 2.11.1") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_PYGOBJECT_2_12_CFLAGS=`$PKG_CONFIG --cflags "pygobject-2.0 >= 2.11.1" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$PYGOBJECT_2_12_LIBS"; then + pkg_cv_PYGOBJECT_2_12_LIBS="$PYGOBJECT_2_12_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pygobject-2.0 >= 2.11.1\""; } >&5 + ($PKG_CONFIG --exists --print-errors "pygobject-2.0 >= 2.11.1") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_PYGOBJECT_2_12_LIBS=`$PKG_CONFIG --libs "pygobject-2.0 >= 2.11.1" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + PYGOBJECT_2_12_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "pygobject-2.0 >= 2.11.1"` + else + PYGOBJECT_2_12_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "pygobject-2.0 >= 2.11.1"` + fi + # Put the nasty error message in config.log where it belongs + echo "$PYGOBJECT_2_12_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + HAVE_PYGOBJECT_2_12="no" +elif test $pkg_failed = untried; then + HAVE_PYGOBJECT_2_12="no" +else + PYGOBJECT_2_12_CFLAGS=$pkg_cv_PYGOBJECT_2_12_CFLAGS + PYGOBJECT_2_12_LIBS=$pkg_cv_PYGOBJECT_2_12_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + HAVE_PYGOBJECT_2_12="yes" + +cat >>confdefs.h <<_ACEOF +#define HAVE_PYGOBJECT_2_12 1 +_ACEOF + + +fi + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PYGOBJECT_2_16" >&5 +$as_echo_n "checking for PYGOBJECT_2_16... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$PYGOBJECT_2_16_CFLAGS"; then + pkg_cv_PYGOBJECT_2_16_CFLAGS="$PYGOBJECT_2_16_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pygobject-2.0 >= 2.15.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "pygobject-2.0 >= 2.15.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_PYGOBJECT_2_16_CFLAGS=`$PKG_CONFIG --cflags "pygobject-2.0 >= 2.15.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$PYGOBJECT_2_16_LIBS"; then + pkg_cv_PYGOBJECT_2_16_LIBS="$PYGOBJECT_2_16_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pygobject-2.0 >= 2.15.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "pygobject-2.0 >= 2.15.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_PYGOBJECT_2_16_LIBS=`$PKG_CONFIG --libs "pygobject-2.0 >= 2.15.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + PYGOBJECT_2_16_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "pygobject-2.0 >= 2.15.0"` + else + PYGOBJECT_2_16_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "pygobject-2.0 >= 2.15.0"` + fi + # Put the nasty error message in config.log where it belongs + echo "$PYGOBJECT_2_16_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + HAVE_PYGOBJECT_2_16="no" +elif test $pkg_failed = untried; then + HAVE_PYGOBJECT_2_16="no" +else + PYGOBJECT_2_16_CFLAGS=$pkg_cv_PYGOBJECT_2_16_CFLAGS + PYGOBJECT_2_16_LIBS=$pkg_cv_PYGOBJECT_2_16_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + HAVE_PYGOBJECT_2_16="yes" + +cat >>confdefs.h <<_ACEOF +#define HAVE_PYGOBJECT_2_16 1 +_ACEOF + + +fi + + if test x$HAVE_PYGOBJECT_2_16 != xno; then + HAVE_PYGOBJECT_2_16_TRUE= + HAVE_PYGOBJECT_2_16_FALSE='#' +else + HAVE_PYGOBJECT_2_16_TRUE='#' + HAVE_PYGOBJECT_2_16_FALSE= +fi + + + + + + + WARNING_CFLAGS="" + ERROR_CFLAGS="" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -Wall" >&5 +$as_echo_n "checking to see if compiler understands -Wall... " >&6; } + + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Wall" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + flag_ok=yes +else + flag_ok=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$save_CFLAGS" + + if test "X$flag_ok" = Xyes ; then + WARNING_CFLAGS="$WARNING_CFLAGS -Wall" + true + else + + true + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 +$as_echo "$flag_ok" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -Wdeclaration-after-statement" >&5 +$as_echo_n "checking to see if compiler understands -Wdeclaration-after-statement... " >&6; } + + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Wdeclaration-after-statement" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + flag_ok=yes +else + flag_ok=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$save_CFLAGS" + + if test "X$flag_ok" = Xyes ; then + WARNING_CFLAGS="$WARNING_CFLAGS -Wdeclaration-after-statement" + true + else + + true + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 +$as_echo "$flag_ok" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -Wvla" >&5 +$as_echo_n "checking to see if compiler understands -Wvla... " >&6; } + + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Wvla" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + flag_ok=yes +else + flag_ok=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$save_CFLAGS" + + if test "X$flag_ok" = Xyes ; then + WARNING_CFLAGS="$WARNING_CFLAGS -Wvla" + true + else + + true + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 +$as_echo "$flag_ok" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -Wpointer-arith" >&5 +$as_echo_n "checking to see if compiler understands -Wpointer-arith... " >&6; } + + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Wpointer-arith" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + flag_ok=yes +else + flag_ok=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$save_CFLAGS" + + if test "X$flag_ok" = Xyes ; then + WARNING_CFLAGS="$WARNING_CFLAGS -Wpointer-arith" + true + else + + true + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 +$as_echo "$flag_ok" >&6; } + + + if test "x$GST_CVS" != "xno" + then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -Werror" >&5 +$as_echo_n "checking to see if compiler understands -Werror... " >&6; } + + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Werror" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + flag_ok=yes +else + flag_ok=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$save_CFLAGS" + + if test "X$flag_ok" = Xyes ; then + ERROR_CFLAGS="$ERROR_CFLAGS -Werror" + true + else + + true + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 +$as_echo "$flag_ok" >&6; } + + + if test "x$ERROR_CFLAGS" = "x" + then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -errwarn=%all" >&5 +$as_echo_n "checking to see if compiler understands -errwarn=%all... " >&6; } + + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -errwarn=%all" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + flag_ok=yes +else + flag_ok=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$save_CFLAGS" + + if test "X$flag_ok" = Xyes ; then + + ERROR_CFLAGS="-errwarn=%all" + for f in 'no%E_EMPTY_DECLARATION' \ + 'no%E_STATEMENT_NOT_REACHED' \ + 'no%E_ARGUEMENT_MISMATCH' \ + 'no%E_MACRO_REDEFINED' \ + 'no%E_LOOP_NOT_ENTERED_AT_TOP' + do + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -errwarn=%all,$f" >&5 +$as_echo_n "checking to see if compiler understands -errwarn=%all,$f... " >&6; } + + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -errwarn=%all,$f" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + flag_ok=yes +else + flag_ok=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$save_CFLAGS" + + if test "X$flag_ok" = Xyes ; then + + ERROR_CFLAGS="$ERROR_CFLAGS,$f" + + true + else + + true + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 +$as_echo "$flag_ok" >&6; } + + done + + true + else + + true + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 +$as_echo "$flag_ok" >&6; } + + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 < 2.19.8\""; } >&5 + ($PKG_CONFIG --exists --print-errors "glib-2.0 < 2.19.8") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -fno-strict-aliasing" >&5 +$as_echo_n "checking to see if compiler understands -fno-strict-aliasing... " >&6; } + + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fno-strict-aliasing" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + flag_ok=yes +else + flag_ok=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$save_CFLAGS" + + if test "X$flag_ok" = Xyes ; then + ERROR_CFLAGS="$ERROR_CFLAGS -fno-strict-aliasing" + true + else + + true + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 +$as_echo "$flag_ok" >&6; } + + +fi + fi + fi + + if test "x" != "x" + then + UNSUPPORTED="" + list="" + for each in $list + do + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands $each" >&5 +$as_echo_n "checking to see if compiler understands $each... " >&6; } + + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $each" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + flag_ok=yes +else + flag_ok=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$save_CFLAGS" + + if test "X$flag_ok" = Xyes ; then + WARNING_CFLAGS="$WARNING_CFLAGS $each" + true + else + UNSUPPORTED="$UNSUPPORTED $each" + true + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 +$as_echo "$flag_ok" >&6; } + + done + if test "X$UNSUPPORTED" != X ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: unsupported compiler flags: $UNSUPPORTED" >&5 +$as_echo "$as_me: unsupported compiler flags: $UNSUPPORTED" >&6;} + fi + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: set WARNING_CFLAGS to $WARNING_CFLAGS" >&5 +$as_echo "$as_me: set WARNING_CFLAGS to $WARNING_CFLAGS" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: set ERROR_CFLAGS to $ERROR_CFLAGS" >&5 +$as_echo "$as_me: set ERROR_CFLAGS to $ERROR_CFLAGS" >&6;} + + +GST_OPTION_CFLAGS="\$(ERROR_CFLAGS) \$(GCOV_CFLAGS)" + +GST_OPTION_LIBS="\$(GCOV_LIBS)" + + + + EXP_VAR=PYTHONDIR + FROM_VAR=$pythondir + + prefix_save=$prefix + exec_prefix_save=$exec_prefix + + if test "x$prefix" = "xNONE"; then + prefix="$ac_default_prefix" + fi + if test "x$exec_prefix" = "xNONE"; then + exec_prefix=$prefix + fi + + full_var="$FROM_VAR" + while true; do + new_full_var="`eval echo $full_var`" + if test "x$new_full_var" = "x$full_var"; then break; fi + full_var=$new_full_var + done + + full_var=$new_full_var + PYTHONDIR="$full_var" + + + prefix=$prefix_save + exec_prefix=$exec_prefix_save + + + EXP_VAR=PYEXECDIR + FROM_VAR=$pyexecdir + + prefix_save=$prefix + exec_prefix_save=$exec_prefix + + if test "x$prefix" = "xNONE"; then + prefix="$ac_default_prefix" + fi + if test "x$exec_prefix" = "xNONE"; then + exec_prefix=$prefix + fi + + full_var="$FROM_VAR" + while true; do + new_full_var="`eval echo $full_var`" + if test "x$new_full_var" = "x$full_var"; then break; fi + full_var=$new_full_var + done + + full_var=$new_full_var + PYEXECDIR="$full_var" + + + prefix=$prefix_save + exec_prefix=$exec_prefix_save + + +PYGST_CFLAGS="-I\$(top_srcdir)/gst -I\$(top_builddir)/gst" + +# changequote(,)dnl +# if test "x$GCC" = xyes; then +# case " $CFLAGS " in +# *[\ \ ]-Wall[\ \ ]*) ;; +# *) CFLAGS="$CFLAGS -Wall" ;; +# esac + +# case " $CFLAGS " in +# *[\ \ ]-std=c9x[\ \ ]*) ;; +# *) CFLAGS="$CFLAGS -std=c9x" ;; +# esac +# fi +# changequote([,])dnl + + + # Check whether --enable-valgrind was given. +if test "${enable_valgrind+set}" = set; then : + enableval=$enable_valgrind; + case "${enableval}" in + yes) USE_VALGRIND="$USE_DEBUG" ;; + no) USE_VALGRIND=no ;; + *) as_fn_error $? "bad value ${enableval} for --enable-valgrind" "$LINENO" 5 ;; + esac +else + + USE_VALGRIND="$USE_DEBUG" + +fi + + VALGRIND_REQ="3.0" + if test "x$USE_VALGRIND" = xyes; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for VALGRIND" >&5 +$as_echo_n "checking for VALGRIND... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$VALGRIND_CFLAGS"; then + pkg_cv_VALGRIND_CFLAGS="$VALGRIND_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"valgrind >= \$VALGRIND_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "valgrind >= $VALGRIND_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_VALGRIND_CFLAGS=`$PKG_CONFIG --cflags "valgrind >= $VALGRIND_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$VALGRIND_LIBS"; then + pkg_cv_VALGRIND_LIBS="$VALGRIND_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"valgrind >= \$VALGRIND_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "valgrind >= $VALGRIND_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_VALGRIND_LIBS=`$PKG_CONFIG --libs "valgrind >= $VALGRIND_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + VALGRIND_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "valgrind >= $VALGRIND_REQ"` + else + VALGRIND_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "valgrind >= $VALGRIND_REQ"` + fi + # Put the nasty error message in config.log where it belongs + echo "$VALGRIND_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + USE_VALGRIND="no" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +elif test $pkg_failed = untried; then + + USE_VALGRIND="no" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +else + VALGRIND_CFLAGS=$pkg_cv_VALGRIND_CFLAGS + VALGRIND_LIBS=$pkg_cv_VALGRIND_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + USE_VALGRIND="yes" +fi + fi + + if test "x$USE_VALGRIND" = xyes; then + +$as_echo "#define HAVE_VALGRIND 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: Using extra code paths for valgrind" >&5 +$as_echo "$as_me: Using extra code paths for valgrind" >&6;} + fi + + + + # Extract the first word of "valgrind", so it can be a program name with args. +set dummy valgrind; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_VALGRIND_PATH+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $VALGRIND_PATH in + [\\/]* | ?:[\\/]*) + ac_cv_path_VALGRIND_PATH="$VALGRIND_PATH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_VALGRIND_PATH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_VALGRIND_PATH" && ac_cv_path_VALGRIND_PATH="no" + ;; +esac +fi +VALGRIND_PATH=$ac_cv_path_VALGRIND_PATH +if test -n "$VALGRIND_PATH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $VALGRIND_PATH" >&5 +$as_echo "$VALGRIND_PATH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test ! "x$VALGRIND_PATH" = "xno"; then + HAVE_VALGRIND_TRUE= + HAVE_VALGRIND_FALSE='#' +else + HAVE_VALGRIND_TRUE='#' + HAVE_VALGRIND_FALSE= +fi + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libraries required to embed python" >&5 +$as_echo_n "checking for libraries required to embed python... " >&6; } + +if $PYTHON-config --help 2>/dev/null; then + PYTHON_LIBS=`$PYTHON-config --ldflags 2>/dev/null` + PYTHON_LIB=`$PYTHON -c "import distutils.sysconfig as s; print s.get_python_lib(standard_lib=1)"` + if echo "$host_os" | grep darwin >/dev/null 2>&1; then + PYTHON_LIB_LOC=/usr/lib + else + PYTHON_LIB_LOC=$PYTHON_LIB/config + + # default to prefix/lib for distros that don't have a link in + # .../pythonX.Y/config/ + if test ! -e $PYTHON_LIB_LOC/libpython${PYTHON_VERSION}.so; then + PYTHON_LIB_LOC=${py_prefix}/lib + fi + fi +else + PYTHON_LIBS="-L${py_prefix}/lib -lpython${PYTHON_VERSION}" + PYTHON_LIB_LOC="${py_prefix}/lib" +fi + + +# Check whether --with-libpython-dir was given. +if test "${with_libpython_dir+set}" = set; then : + withval=$with_libpython_dir; + PYTHON_LIB_LOC=`echo "$withval" | sed -e 's/\/$//g'` + + +fi + + +if echo "$host_os" | grep darwin >/dev/null 2>&1; then + PYTHON_LIB_SUFFIX=\\\"dylib\\\" +else + PYTHON_LIB_SUFFIX=G_MODULE_SUFFIX +fi + + + + +save_LIBS="$LIBS" +LIBS="$LIBS $PYTHON_LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char Py_Initialize (); +int +main () +{ +return Py_Initialize (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + LIBS="$save_LIBS"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; }; +else + LIBS="$save_LIBS"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; }; as_fn_error $? "could not find Python lib" "$LINENO" 5 +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + + + + + EXP_VAR=PLUGINDIR + FROM_VAR=${libdir}/gstreamer-$GST_MAJORMINOR + + prefix_save=$prefix + exec_prefix_save=$exec_prefix + + if test "x$prefix" = "xNONE"; then + prefix="$ac_default_prefix" + fi + if test "x$exec_prefix" = "xNONE"; then + exec_prefix=$prefix + fi + + full_var="$FROM_VAR" + while true; do + new_full_var="`eval echo $full_var`" + if test "x$new_full_var" = "x$full_var"; then break; fi + full_var=$new_full_var + done + + full_var=$new_full_var + PLUGINDIR="$full_var" + + + prefix=$prefix_save + exec_prefix=$exec_prefix_save + + +cat >>confdefs.h <<_ACEOF +#define PLUGINDIR "$PLUGINDIR" +_ACEOF + + { $as_echo "$as_me:${as_lineno-$LINENO}: Using $PLUGINDIR as the plugin install location" >&5 +$as_echo "$as_me: Using $PLUGINDIR as the plugin install location" >&6;} + + plugindir="\$(libdir)/gstreamer-$GST_MAJORMINOR" + + + + + if test "x$PACKAGE_VERSION_NANO" = "x0"; then + + if test "xyes" = "xno" -o "xyes" = "x"; then + GST_PACKAGE_RELEASE_DATETIME=`date -u "+%Y-%m-%dT%H:%MZ"` + elif test "xyes" = "xyes"; then + if ( echo yes | grep -e '^201-90-9-0-10-9-0-30-9' >/dev/null ) ; then + GST_PACKAGE_RELEASE_DATETIME=yes + else + YYYY_MM_DD=`sh "${srcdir}/common/extract-release-date-from-doap-file" $PACKAGE_VERSION_MAJOR.$PACKAGE_VERSION_MINOR.$PACKAGE_VERSION_MICRO "${srcdir}/gst-python.doap" `; + if test "x$YYYY_MM_DD" != "x"; then + GST_PACKAGE_RELEASE_DATETIME=$YYYY_MM_DD + else + as_fn_error $? "SET_PACKAGE_RELEASE_DATETIME: could not extract + release date for release version $PACKAGE_VERSION_MAJOR.$PACKAGE_VERSION_MINOR.$PACKAGE_VERSION_MICRO from \"${srcdir}/gst-python.doap\" " "$LINENO" 5 + GST_PACKAGE_RELEASE_DATETIME="" + fi + fi + elif ( echo yes | grep -e '^201-90-9-0-10-9-0-30-9' >/dev/null ) ; then + GST_PACKAGE_RELEASE_DATETIME=yes + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: SET_PACKAGE_RELEASE_DATETIME: invalid first argument" >&5 +$as_echo "$as_me: WARNING: SET_PACKAGE_RELEASE_DATETIME: invalid first argument" >&2;} + GST_PACKAGE_RELEASE_DATETIME="" + fi + + if test "x$GST_PACKAGE_RELEASE_DATETIME" = "x"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Invalid package release date time: $GST_PACKAGE_RELEASE_DATETIME" >&5 +$as_echo "$as_me: WARNING: Invalid package release date time: $GST_PACKAGE_RELEASE_DATETIME" >&2;} + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Setting GST_PACKAGE_RELEASE_DATETIME to $GST_PACKAGE_RELEASE_DATETIME" >&5 +$as_echo "$as_me: Setting GST_PACKAGE_RELEASE_DATETIME to $GST_PACKAGE_RELEASE_DATETIME" >&6;} + + +cat >>confdefs.h <<_ACEOF +#define GST_PACKAGE_RELEASE_DATETIME "$GST_PACKAGE_RELEASE_DATETIME" +_ACEOF + + fi + + else + + if test "xno" = "xno" -o "xno" = "x"; then + GST_PACKAGE_RELEASE_DATETIME=`date -u "+%Y-%m-%dT%H:%MZ"` + elif test "xno" = "xyes"; then + if ( echo no | grep -e '^201-90-9-0-10-9-0-30-9' >/dev/null ) ; then + GST_PACKAGE_RELEASE_DATETIME=no + else + YYYY_MM_DD=`sh "${srcdir}/common/extract-release-date-from-doap-file" `; + if test "x$YYYY_MM_DD" != "x"; then + GST_PACKAGE_RELEASE_DATETIME=$YYYY_MM_DD + else + as_fn_error $? "SET_PACKAGE_RELEASE_DATETIME: could not extract + release date for release version from " "$LINENO" 5 + GST_PACKAGE_RELEASE_DATETIME="" + fi + fi + elif ( echo no | grep -e '^201-90-9-0-10-9-0-30-9' >/dev/null ) ; then + GST_PACKAGE_RELEASE_DATETIME=no + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: SET_PACKAGE_RELEASE_DATETIME: invalid first argument" >&5 +$as_echo "$as_me: WARNING: SET_PACKAGE_RELEASE_DATETIME: invalid first argument" >&2;} + GST_PACKAGE_RELEASE_DATETIME="" + fi + + if test "x$GST_PACKAGE_RELEASE_DATETIME" = "x"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Invalid package release date time: $GST_PACKAGE_RELEASE_DATETIME" >&5 +$as_echo "$as_me: WARNING: Invalid package release date time: $GST_PACKAGE_RELEASE_DATETIME" >&2;} + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Setting GST_PACKAGE_RELEASE_DATETIME to $GST_PACKAGE_RELEASE_DATETIME" >&5 +$as_echo "$as_me: Setting GST_PACKAGE_RELEASE_DATETIME to $GST_PACKAGE_RELEASE_DATETIME" >&6;} + + +cat >>confdefs.h <<_ACEOF +#define GST_PACKAGE_RELEASE_DATETIME "$GST_PACKAGE_RELEASE_DATETIME" +_ACEOF + + fi + + fi + + +ac_config_files="$ac_config_files Makefile codegen/Makefile common/Makefile common/m4/Makefile gst/Makefile gst/gstversion.override gst/extend/Makefile examples/Makefile pkgconfig/Makefile pkgconfig/gst-python.pc pkgconfig/gst-python-uninstalled.pc plugin/Makefile testsuite/Makefile win32/common/config.h gst-python.spec gst/__init__.py" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then + as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GST_GCOV_ENABLED_TRUE}" && test -z "${GST_GCOV_ENABLED_FALSE}"; then + as_fn_error $? "conditional \"GST_GCOV_ENABLED\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_GST_AUDIO_TRUE}" && test -z "${HAVE_GST_AUDIO_FALSE}"; then + as_fn_error $? "conditional \"HAVE_GST_AUDIO\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_GST_VIDEO_TRUE}" && test -z "${HAVE_GST_VIDEO_FALSE}"; then + as_fn_error $? "conditional \"HAVE_GST_VIDEO\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_GST_TAG_TRUE}" && test -z "${HAVE_GST_TAG_FALSE}"; then + as_fn_error $? "conditional \"HAVE_GST_TAG\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_PYGOBJECT_2_16_TRUE}" && test -z "${HAVE_PYGOBJECT_2_16_FALSE}"; then + as_fn_error $? "conditional \"HAVE_PYGOBJECT_2_16\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_VALGRIND_TRUE}" && test -z "${HAVE_VALGRIND_FALSE}"; then + as_fn_error $? "conditional \"HAVE_VALGRIND\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by GStreamer Python Bindings $as_me 0.10.22, which was +generated by GNU Autoconf 2.68. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +GStreamer Python Bindings config.status 0.10.22 +configured by $0, generated by GNU Autoconf 2.68, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' +AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' +macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' +macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' +enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' +pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' +SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' +ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' +host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' +host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' +host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' +build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' +build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' +build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' +SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' +Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' +GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' +EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' +FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' +LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' +NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' +LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' +ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' +exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' +lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' +lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' +lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' +reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' +file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' +want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' +sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' +AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' +archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' +STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' +RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' +lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' +CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' +compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' +GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' +lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' +objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' +need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' +MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' +LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' +OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' +libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' +module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld='`$ECHO "$hardcode_libdir_flag_spec_ld" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' +postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' +need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' +version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' +runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' +libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' +soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' +install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' +finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' +old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' +striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in AS \ +DLLTOOL \ +OBJDUMP \ +SHELL \ +ECHO \ +SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +deplibs_check_method \ +file_magic_cmd \ +file_magic_glob \ +want_nocaseglob \ +sharedlib_from_linklib_cmd \ +AR \ +AR_FLAGS \ +archiver_list_spec \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +nm_file_list_spec \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_pic \ +lt_prog_compiler_wl \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +MANIFEST_TOOL \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_flag_spec_ld \ +hardcode_libdir_separator \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +install_override_mode \ +finish_eval \ +old_striplib \ +striplib; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postlink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + + + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "codegen/Makefile") CONFIG_FILES="$CONFIG_FILES codegen/Makefile" ;; + "common/Makefile") CONFIG_FILES="$CONFIG_FILES common/Makefile" ;; + "common/m4/Makefile") CONFIG_FILES="$CONFIG_FILES common/m4/Makefile" ;; + "gst/Makefile") CONFIG_FILES="$CONFIG_FILES gst/Makefile" ;; + "gst/gstversion.override") CONFIG_FILES="$CONFIG_FILES gst/gstversion.override" ;; + "gst/extend/Makefile") CONFIG_FILES="$CONFIG_FILES gst/extend/Makefile" ;; + "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; + "pkgconfig/Makefile") CONFIG_FILES="$CONFIG_FILES pkgconfig/Makefile" ;; + "pkgconfig/gst-python.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gst-python.pc" ;; + "pkgconfig/gst-python-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gst-python-uninstalled.pc" ;; + "plugin/Makefile") CONFIG_FILES="$CONFIG_FILES plugin/Makefile" ;; + "testsuite/Makefile") CONFIG_FILES="$CONFIG_FILES testsuite/Makefile" ;; + "win32/common/config.h") CONFIG_FILES="$CONFIG_FILES win32/common/config.h" ;; + "gst-python.spec") CONFIG_FILES="$CONFIG_FILES gst-python.spec" ;; + "gst/__init__.py") CONFIG_FILES="$CONFIG_FILES gst/__init__.py" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, +# Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="" + +# ### BEGIN LIBTOOL CONFIG + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Assembler program. +AS=$lt_AS + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Object dumper program. +OBJDUMP=$lt_OBJDUMP + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# convert \$build file names to \$host format. +to_host_file_cmd=$lt_cv_to_host_file_cmd + +# convert \$build files to toolchain format. +to_tool_file_cmd=$lt_cv_to_tool_file_cmd + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob=$lt_file_magic_glob + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob=$lt_want_nocaseglob + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd + +# The archiver. +AR=$lt_AR + +# Flags to create an archive. +AR_FLAGS=$lt_AR_FLAGS + +# How to feed a file listing to the archiver. +archiver_list_spec=$lt_archiver_list_spec + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# Specify filename containing input files for \$NM. +nm_file_list_spec=$lt_nm_file_list_spec + +# The root where to search for dependent libraries,and in which our libraries should be installed. +lt_sysroot=$lt_sysroot + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Manifest tool. +MANIFEST_TOOL=$lt_MANIFEST_TOOL + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + if test x"$xsi_shell" = xyes; then + sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ +func_dirname ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_basename ()$/,/^} # func_basename /c\ +func_basename ()\ +{\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ +func_dirname_and_basename ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ +func_stripname ()\ +{\ +\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ +\ # positional parameters, so assign one to ordinary parameter first.\ +\ func_stripname_result=${3}\ +\ func_stripname_result=${func_stripname_result#"${1}"}\ +\ func_stripname_result=${func_stripname_result%"${2}"}\ +} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ +func_split_long_opt ()\ +{\ +\ func_split_long_opt_name=${1%%=*}\ +\ func_split_long_opt_arg=${1#*=}\ +} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ +func_split_short_opt ()\ +{\ +\ func_split_short_opt_arg=${1#??}\ +\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ +} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ +func_lo2o ()\ +{\ +\ case ${1} in\ +\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ +\ *) func_lo2o_result=${1} ;;\ +\ esac\ +} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_xform ()$/,/^} # func_xform /c\ +func_xform ()\ +{\ + func_xform_result=${1%.*}.lo\ +} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_arith ()$/,/^} # func_arith /c\ +func_arith ()\ +{\ + func_arith_result=$(( $* ))\ +} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_len ()$/,/^} # func_len /c\ +func_len ()\ +{\ + func_len_result=${#1}\ +} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + +fi + +if test x"$lt_shell_append" = xyes; then + sed -e '/^func_append ()$/,/^} # func_append /c\ +func_append ()\ +{\ + eval "${1}+=\\${2}"\ +} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ +func_append_quoted ()\ +{\ +\ func_quote_for_eval "${2}"\ +\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ +} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + # Save a `func_append' function call where possible by direct use of '+=' + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +else + # Save a `func_append' function call even when '+=' is not available + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +fi + +if test x"$_lt_function_replace_fail" = x":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 +$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} +fi + + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..235a187 --- /dev/null +++ b/configure.ac @@ -0,0 +1,448 @@ +AC_PREREQ(2.60) + +dnl initialize autoconf +dnl when going to/from release please set the nano (fourth number) right ! +dnl releases only do Wall, cvs and prerelease does Werror too +AC_INIT(GStreamer Python Bindings, 0.10.22, + http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer, + gst-python) + +AG_GST_INIT + +dnl initialize automake +AM_INIT_AUTOMAKE([-Wno-portability 1.10]) + +dnl define PACKAGE_VERSION_* variables +AS_VERSION + +dnl check if this is a release version +AS_NANO(GST_CVS="no", GST_CVS="yes") + +dnl can autoconf find the source ? +AC_CONFIG_SRCDIR([gst/gstmodule.c]) + +dnl define the output header for config +AM_CONFIG_HEADER([config.h]) + +dnl AM_MAINTAINER_MODE only provides the option to configure to enable it +AM_MAINTAINER_MODE + +dnl use pretty build output with automake >= 1.11 +m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])], + [AM_DEFAULT_VERBOSITY=1 + AC_SUBST(AM_DEFAULT_VERBOSITY)]) + +AC_DEFINE_UNQUOTED(PYGST_MAJOR_VERSION, $PACKAGE_VERSION_MAJOR, [PyGst major version]) +AC_DEFINE_UNQUOTED(PYGST_MINOR_VERSION, $PACKAGE_VERSION_MINOR, [PyGst minor version]) +AC_DEFINE_UNQUOTED(PYGST_MICRO_VERSION, $PACKAGE_VERSION_MICRO, [PyGst micro version]) +AC_DEFINE_UNQUOTED(PYGST_NANO_VERSION, $PACKAGE_VERSION_NANO, [PyGst nano version]) +AC_SUBST(PACKAGE_VERSION_MAJOR) +AC_SUBST(PACKAGE_VERSION_MINOR) +AC_SUBST(PACKAGE_VERSION_MICRO) +AC_SUBST(PACKAGE_VERSION_NANO) + +dnl Add parameters for aclocal +AC_SUBST(ACLOCAL_AMFLAGS, "-I m4 -I common/m4") + +dnl required versions of other packages +AC_SUBST(PYGTK_REQ, 2.6.3) +AC_SUBST(PYGOBJECT_REQ, 2.11.2) +AC_SUBST(GLIB_REQ, 2.8.0) +AC_SUBST(GTK_REQ, 2.6.0) +AC_SUBST(GST_REQ, 0.10.20) +AC_SUBST(GSTPB_REQ, 0.10.20) + +AC_DISABLE_STATIC + +AC_LIBTOOL_WIN32_DLL +AC_PROG_LIBTOOL + +dnl find a compiler +AC_PROG_CC +AC_PROG_CC_STDC + +dnl check if the compiler supports '-c' and '-o' options +AM_PROG_CC_C_O + +AG_GST_ARG_GCOV + +dnl check for python +dnl AM_PATH_PYTHON(2.2) +AM_PATH_PYTHON +AC_MSG_CHECKING(for python >= 2.3) +prog=" +import sys, string +minver = (2,3,0,'final',0) +if sys.version_info < minver: + sys.exit(1) +sys.exit(0)" + +if $PYTHON -c "$prog" 1>&AC_FD_CC 2>&AC_FD_CC +then + AC_MSG_RESULT(okay) +else + AC_MSG_ERROR(too old) +fi +AM_CHECK_PYTHON_HEADERS(,[AC_MSG_ERROR(could not find Python headers)]) + +dnl check for GStreamer +GST_MAJORMINOR=0.10 +AC_SUBST(GST_MAJORMINOR) +PKG_CHECK_MODULES(GST, gstreamer-$GST_MAJORMINOR >= $GST_REQ) +AC_DEFINE_UNQUOTED(GST_MAJORMINOR, "$GST_MAJORMINOR", [Gst MajorMinor version]) +GST_CFLAGS="$GST_CFLAGS $GLIB_EXTRA_CFLAGS" +AC_SUBST(GST_CFLAGS) +AC_SUBST(GST_LIBS) + +dnl get the installed GStreamer core version +GST_MINOR_VERSION=`$PKG_CONFIG --modversion gstreamer-$GST_MAJORMINOR | cut -f 3 -d.` +GST_PB_MINOR_VERSION=`$PKG_CONFIG --modversion gstreamer-plugins-base-$GST_MAJORMINOR | cut -f 3 -d.` +GST_CVS_VERSION=`$PKG_CONFIG --modversion gstreamer-$GST_MAJORMINOR | cut -f 4 -d.` + +echo "Building against GStreamer core 0.10.$GST_MINOR_VERSION , ignoring API additions if needed" + +dnl Magic for allowing new API additions without forcing dependency on new core +dnl release. The lines do the magic so that new API additions are ignored at +dnl compile time. +dnl * Also see gst/gstversion.override.in and gst-0.10.*.override +dnl The following lines should be updated whenever: +dnl _ GST_REQ is up-ed (remove obsolete lines + gst-0.10.MINOR.ignore) +dnl _ new core/base is released (add lines + gst-0.10.MINOR.ignore) + +if test "x$GST_CVS_VERSION" = "x" +then + if test $GST_MINOR_VERSION -lt "21" + then + IGNORE_GST_0_10_21="gst-0.10.21.ignore" + else + IGNORE_GST_0_10_21="" + fi + + if test $GST_MINOR_VERSION -lt "22" + then + IGNORE_GST_0_10_22="gst-0.10.22.ignore" + else + IGNORE_GST_0_10_22="" + fi + + if test $GST_MINOR_VERSION -lt "23" + then + IGNORE_GST_0_10_23="gst-0.10.23.ignore" + else + IGNORE_GST_0_10_23="" + fi + + if test $GST_MINOR_VERSION -lt "24" + then + IGNORE_GST_0_10_24="gst-0.10.24.ignore" + else + IGNORE_GST_0_10_24="" + fi + + if test $GST_MINOR_VERSION -lt "25" + then + IGNORE_GST_0_10_25="gst-0.10.25.ignore" + else + IGNORE_GST_0_10_25="" + fi + + if test $GST_MINOR_VERSION -lt "26" + then + IGNORE_GST_0_10_26="gst-0.10.26.ignore" + else + IGNORE_GST_0_10_26="" + fi + + if test $GST_MINOR_VERSION -lt "29" + then + IGNORE_GST_0_10_29="gst-0.10.29.ignore" + else + IGNORE_GST_0_10_29="" + fi + + if test $GST_MINOR_VERSION -lt "30" + then + IGNORE_GST_0_10_30="gst-0.10.30.ignore" + else + IGNORE_GST_0_10_30="" + fi + + if test $GST_MINOR_VERSION -lt "31" + then + IGNORE_GST_0_10_31="gst-0.10.31.ignore" + else + IGNORE_GST_0_10_31="" + fi + + if test $GST_MINOR_VERSION -lt "32" + then + IGNORE_GST_0_10_32="gst-0.10.32.ignore" + else + IGNORE_GST_0_10_32="" + fi + + dnl plugins base + if test $GST_PB_MINOR_VERSION -ge "22" + then + AC_DEFINE_UNQUOTED(HAVE_GST_AUDIO, 1, [We can use the gst-audio library]) + AC_DEFINE_UNQUOTED(HAVE_GST_VIDEO, 1, [We can use the gst-video library]) + AC_DEFINE_UNQUOTED(HAVE_GST_TAG, 1, [We can use the gst-tag library]) + fi + + if test $GST_PB_MINOR_VERSION -lt "23" + then + IGNORE_GST_PB_0_10_23="gst-pb-0.10.23.ignore" + else + IGNORE_GST_PB_0_10_23="" + fi + + if test $GST_PB_MINOR_VERSION -lt "25" + then + IGNORE_GST_PB_0_10_25="gst-pb-0.10.25.ignore" + else + IGNORE_GST_PB_0_10_25="" + AC_DEFINE_UNQUOTED(HAVE_STREAM_VOLUME_INTERFACE, 1, [We can use the streamvolume interface]) + fi + + if test $GST_PB_MINOR_VERSION -lt "26" + then + IGNORE_GST_PB_0_10_26="gst-pb-0.10.26.ignore" + else + IGNORE_GST_PB_0_10_26="" + fi + + if test $GST_PB_MINOR_VERSION -lt "29" + then + IGNORE_GST_PB_0_10_29="gst-pb-0.10.29.ignore" + else + IGNORE_GST_PB_0_10_29="" + fi + + if test $GST_PB_MINOR_VERSION -lt "30" + then + IGNORE_GST_PB_0_10_30="gst-pb-0.10.30.ignore" + else + IGNORE_GST_PB_0_10_30="" + fi + + if test $GST_PB_MINOR_VERSION -lt "31" + then + IGNORE_GST_PB_0_10_31="gst-pb-0.10.31.ignore" + else + IGNORE_GST_PB_0_10_31="" + fi + + if test $GST_PB_MINOR_VERSION -lt "32" + then + IGNORE_GST_PB_0_10_32="gst-pb-0.10.32.ignore" + else + IGNORE_GST_PB_0_10_32="" + fi + +else + IGNORE_GST_0_10_18="" + IGNORE_GST_0_10_21="" + IGNORE_GST_0_10_22="" + IGNORE_GST_0_10_23="" + IGNORE_GST_0_10_24="" + IGNORE_GST_0_10_25="" + IGNORE_GST_0_10_26="" + IGNORE_GST_0_10_29="" + IGNORE_GST_0_10_30="" + IGNORE_GST_0_10_31="" + IGNORE_GST_0_10_32="" + IGNORE_GST_PB_0_10_23="" + IGNORE_GST_PB_0_10_25="" + IGNORE_GST_PB_0_10_26="" + IGNORE_GST_PB_0_10_29="" + IGNORE_GST_PB_0_10_30="" + IGNORE_GST_PB_0_10_31="" + IGNORE_GST_PB_0_10_32="" + AC_DEFINE_UNQUOTED(HAVE_GST_AUDIO, 1, [We can use the gst-audio library]) + AC_DEFINE_UNQUOTED(HAVE_GST_VIDEO, 1, [We can use the gst-video library]) + AC_DEFINE_UNQUOTED(HAVE_GST_TAG, 1, [We can use the gst-tag library]) +fi +AC_DEFINE_UNQUOTED(HAVE_STREAM_VOLUME_INTERFACE, 1, [We can use the streamvolume interface]) +AC_SUBST(IGNORE_GST_0_10_21) +AC_SUBST(IGNORE_GST_0_10_22) +AC_SUBST(IGNORE_GST_0_10_23) +AC_SUBST(IGNORE_GST_0_10_24) +AC_SUBST(IGNORE_GST_0_10_25) +AC_SUBST(IGNORE_GST_0_10_26) +AC_SUBST(IGNORE_GST_0_10_29) +AC_SUBST(IGNORE_GST_0_10_30) +AC_SUBST(IGNORE_GST_0_10_31) +AC_SUBST(IGNORE_GST_0_10_32) +AC_SUBST(IGNORE_GST_PB_0_10_23) +AC_SUBST(IGNORE_GST_PB_0_10_25) +AC_SUBST(IGNORE_GST_PB_0_10_26) +AC_SUBST(IGNORE_GST_PB_0_10_29) +AC_SUBST(IGNORE_GST_PB_0_10_30) +AC_SUBST(IGNORE_GST_PB_0_10_31) +AC_SUBST(IGNORE_GST_PB_0_10_32) +AM_CONDITIONAL(HAVE_GST_AUDIO, $HAVE_GST_AUDIO) +AM_CONDITIONAL(HAVE_GST_VIDEO, $HAVE_GST_VIDEO) +AM_CONDITIONAL(HAVE_GST_TAG, $HAVE_GST_TAG) + +dnl check for gstreamer-base; uninstalled is selected preferentially +PKG_CHECK_MODULES(GST_BASE, gstreamer-base-$GST_MAJORMINOR >= $GST_REQ, + HAVE_GST_BASE="yes", HAVE_GST_BASE="no") + +if test "x$HAVE_GST_BASE" = "xno"; then + AC_MSG_ERROR(no GStreamer Base Libs found) +fi + +AC_SUBST(GST_BASE_LIBS) +AC_SUBST(GST_BASE_CFLAGS) + + +dnl check for gstreamer core features (subsystems) +GST_CONFIGPATH=`$PKG_CONFIG --variable=includedir gstreamer-0.10`"/gst/gstconfig.h" +AG_GST_PARSE_SUBSYSTEM_DISABLES($GST_CONFIGPATH) +if test $GST_DISABLE_LOADSAVE = "1"; then + AC_MSG_WARN("Load/Save XML persistence disabled") + IGNORE_GST_LOADSAVE="gst-disable-loadsave.ignore" +else + IGNORE_GST_LOADSAVE="" +fi +AC_SUBST(IGNORE_GST_LOADSAVE) + +dnl check for gstreamer-controller +PKG_CHECK_MODULES(GST_CONTROLLER, gstreamer-controller-$GST_MAJORMINOR >= $GST_REQ, + HAVE_GST_CONTROLLER="yes", HAVE_GST_CONTROLLER="no") + +if test "x$HAVE_GST_CONTROLLER" = "xno"; then + AC_MSG_ERROR(no GStreamer Controller Libs found) +fi + +AC_SUBST(GST_CONTROLLER_LIBS) +AC_SUBST(GST_CONTROLLER_CFLAGS) + +dnl check for gstreamer-net +PKG_CHECK_MODULES(GST_NET, gstreamer-net-$GST_MAJORMINOR >= $GST_REQ, + HAVE_GST_NET="yes", HAVE_GST_NET="no") + +if test "x$HAVE_GST_NET" = "xno"; then + AC_MSG_ERROR(no GStreamer Networking Libs found) +fi + +AC_SUBST(GST_NET_LIBS) +AC_SUBST(GST_NET_CFLAGS) + +dnl check for gstreamer-dataprotocol +PKG_CHECK_MODULES(GST_DP, gstreamer-dataprotocol-$GST_MAJORMINOR >= $GST_REQ, + HAVE_GST_DP="yes", HAVE_GST_DP="no") + +if test "x$HAVE_GST_DP" = "xno"; then + AC_MSG_ERROR(no GStreamer Data Protocol Libs found) +fi + +AC_SUBST(GST_DP_LIBS) +AC_SUBST(GST_DP_CFLAGS) + + +dnl check for gst-plugins-base +PKG_CHECK_MODULES(GST_PLUGINS_BASE, gstreamer-plugins-base-$GST_MAJORMINOR >= $GSTPB_REQ, + HAVE_GST_PLUGINS_BASE="yes", HAVE_GST_PLUGINS_BASE="no") + +if test "x$HAVE_GST_PLUGINS_BASE" = "xno"; then + AC_MSG_ERROR(no gst-plugins-base found) +fi + +AC_SUBST(GST_PLUGINS_BASE_LIBS) +AC_SUBST(GST_PLUGINS_BASE_CFLAGS) + + +dnl check for pygobject +PKG_CHECK_MODULES(PYGOBJECT, pygobject-2.0 >= $PYGOBJECT_REQ, + [ + HAVE_PYGOBJECT="yes" + ], HAVE_PYGOBJECT="no") + +if test "x$HAVE_PYGOBJECT" = "xno"; then + dnl If we don't have pygobject, then check for pygtk + dnl check for pygtk + PKG_CHECK_MODULES(PYGTK, pygtk-2.0 >= $PYGTK_REQ) + AC_SUBST(PYGTK_CFLAGS) + PYGOBJECT_CFLAGS="\$(PYGTK_CFLAGS)" +fi +AC_SUBST(PYGOBJECT_CFLAGS) + +dnl FIXME: check for a pygobject with a correct pyg_param_gvalue_from_pyobject +PKG_CHECK_MODULES(PYGOBJECT_2_12, pygobject-2.0 >= 2.11.1, + [ + HAVE_PYGOBJECT_2_12="yes" + AC_DEFINE_UNQUOTED(HAVE_PYGOBJECT_2_12, 1, + [Defined if we have a 2.12 series pygobject]) + ], HAVE_PYGOBJECT_2_12="no") + +dnl FIXME: check for a pygobject which exports pyg_option_group_new +PKG_CHECK_MODULES(PYGOBJECT_2_16, pygobject-2.0 >= 2.15.0, + [ + HAVE_PYGOBJECT_2_16="yes" + AC_DEFINE_UNQUOTED(HAVE_PYGOBJECT_2_16, 1, + [Defined if we have a 2.16 series pygobject]) + ], HAVE_PYGOBJECT_2_16="no") + +AM_CONDITIONAL(HAVE_PYGOBJECT_2_16, test x$HAVE_PYGOBJECT_2_16 != xno) + +dnl define an ERROR_CFLAGS Makefile variable +AG_GST_SET_ERROR_CFLAGS($GST_CVS) + +GST_OPTION_CFLAGS="\$(ERROR_CFLAGS) \$(GCOV_CFLAGS)" +AC_SUBST(GST_OPTION_CFLAGS) +GST_OPTION_LIBS="\$(GCOV_LIBS)" +AC_SUBST(GST_OPTION_LIBS) + +dnl full installation path +AS_AC_EXPAND(PYTHONDIR, $pythondir) +AS_AC_EXPAND(PYEXECDIR, $pyexecdir) + +PYGST_CFLAGS="-I\$(top_srcdir)/gst -I\$(top_builddir)/gst" +AC_SUBST(PYGST_CFLAGS) +dnl add debugging options ... +# changequote(,)dnl +# if test "x$GCC" = xyes; then +# case " $CFLAGS " in +# *[\ \ ]-Wall[\ \ ]*) ;; +# *) CFLAGS="$CFLAGS -Wall" ;; +# esac + +# case " $CFLAGS " in +# *[\ \ ]-std=c9x[\ \ ]*) ;; +# *) CFLAGS="$CFLAGS -std=c9x" ;; +# esac +# fi +# changequote([,])dnl + +AG_GST_VALGRIND_CHECK + +dnl Stuff needed for the python plugin loader + +AM_CHECK_PYTHON_LIBS(,[AC_MSG_ERROR(could not find Python lib)]) + +AG_GST_SET_PLUGINDIR + +dnl set release date/time +AG_GST_SET_PACKAGE_RELEASE_DATETIME_WITH_NANO([$PACKAGE_VERSION_NANO], + ["${srcdir}/gst-python.doap"], + [$PACKAGE_VERSION_MAJOR.$PACKAGE_VERSION_MINOR.$PACKAGE_VERSION_MICRO]) + +AC_OUTPUT([ + Makefile + codegen/Makefile + common/Makefile + common/m4/Makefile + gst/Makefile + gst/gstversion.override + gst/extend/Makefile + examples/Makefile + pkgconfig/Makefile + pkgconfig/gst-python.pc + pkgconfig/gst-python-uninstalled.pc + plugin/Makefile + testsuite/Makefile + win32/common/config.h + gst-python.spec + gst/__init__.py +]) diff --git a/depcomp b/depcomp new file mode 100755 index 0000000..df8eea7 --- /dev/null +++ b/depcomp @@ -0,0 +1,630 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2009-04-28.21; # UTC + +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free +# Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program 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 General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by `PROGRAMS ARGS'. + object Object file output by `PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputing dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u="sed s,\\\\\\\\,/,g" + depmode=msvisualcpp +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> "$depfile" + echo >> "$depfile" + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts `$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Intel's C compiler understands `-MD -MF file'. However on + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # ICC 7.0 will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + # ICC 7.1 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using \ : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | + sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" + # Add `dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + # With Tru64 cc, shared objects can also be used to make a + # static library. This mechanism is used in libtool 1.4 series to + # handle both shared and static libraries in a single compilation. + # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. + # + # With libtool 1.5 this exception was removed, and libtool now + # generates 2 separate objects for the 2 libraries. These two + # compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 + tmpdepfile2=$dir$base.o.d # libtool 1.5 + tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 + tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.o.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + tmpdepfile4=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for `:' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no eat=no + for arg + do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + if test $eat = yes; then + eat=no + continue + fi + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix=`echo "$object" | sed 's/^.*\././'` + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + IFS=" " + for arg + do + case "$arg" in + -o) + shift + ;; + $object) + shift + ;; + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/examples/Makefile.am b/examples/Makefile.am new file mode 100644 index 0000000..c6338de --- /dev/null +++ b/examples/Makefile.am @@ -0,0 +1,22 @@ +examplesdir = $(pkgdatadir)/$(GST_MAJORMINOR)/examples +examples_DATA = \ + audioconcat.py \ + audio-controller.py \ + bps.py \ + cp.py \ + debugslider.py \ + f2f.py \ + filesrc.py \ + fvumeter.py \ + gst-discover \ + gstfile.py \ + mixer.py \ + play.py \ + pipeline-tester \ + remuxer.py \ + sinkelement.py \ + vumeter.py \ + decodebin.py \ + maemogst.py + +EXTRA_DIST = $(examples_DATA) diff --git a/examples/Makefile.in b/examples/Makefile.in new file mode 100644 index 0000000..34f3f74 --- /dev/null +++ b/examples/Makefile.in @@ -0,0 +1,532 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = examples +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ + $(top_srcdir)/common/m4/as-compiler-flag.m4 \ + $(top_srcdir)/common/m4/as-version.m4 \ + $(top_srcdir)/common/m4/gst-args.m4 \ + $(top_srcdir)/common/m4/gst-error.m4 \ + $(top_srcdir)/common/m4/gst-feature.m4 \ + $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ + $(top_srcdir)/common/m4/gst-plugindir.m4 \ + $(top_srcdir)/common/m4/gst-valgrind.m4 \ + $(top_srcdir)/common/m4/gst.m4 $(top_srcdir)/common/m4/pkg.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(examplesdir)" +DATA = $(examples_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ERROR_CFLAGS = @ERROR_CFLAGS@ +EXEEXT = @EXEEXT@ +FFLAGS = @FFLAGS@ +FGREP = @FGREP@ +GCOV = @GCOV@ +GCOV_CFLAGS = @GCOV_CFLAGS@ +GCOV_LIBS = @GCOV_LIBS@ +GLIB_REQ = @GLIB_REQ@ +GREP = @GREP@ +GSTPB_REQ = @GSTPB_REQ@ +GST_BASE_CFLAGS = @GST_BASE_CFLAGS@ +GST_BASE_LIBS = @GST_BASE_LIBS@ +GST_CFLAGS = @GST_CFLAGS@ +GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@ +GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@ +GST_DISABLE_ALLOC_TRACE = @GST_DISABLE_ALLOC_TRACE@ +GST_DISABLE_GST_DEBUG = @GST_DISABLE_GST_DEBUG@ +GST_DISABLE_LOADSAVE = @GST_DISABLE_LOADSAVE@ +GST_DISABLE_PARSE = @GST_DISABLE_PARSE@ +GST_DISABLE_PLUGIN = @GST_DISABLE_PLUGIN@ +GST_DISABLE_REGISTRY = @GST_DISABLE_REGISTRY@ +GST_DISABLE_TRACE = @GST_DISABLE_TRACE@ +GST_DISABLE_XML = @GST_DISABLE_XML@ +GST_DP_CFLAGS = @GST_DP_CFLAGS@ +GST_DP_LIBS = @GST_DP_LIBS@ +GST_LIBS = @GST_LIBS@ +GST_MAJORMINOR = @GST_MAJORMINOR@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ +GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ +GST_OPTION_LIBS = @GST_OPTION_LIBS@ +GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@ +GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@ +GST_REQ = @GST_REQ@ +GTK_REQ = @GTK_REQ@ +IGNORE_GST_0_10_21 = @IGNORE_GST_0_10_21@ +IGNORE_GST_0_10_22 = @IGNORE_GST_0_10_22@ +IGNORE_GST_0_10_23 = @IGNORE_GST_0_10_23@ +IGNORE_GST_0_10_24 = @IGNORE_GST_0_10_24@ +IGNORE_GST_0_10_25 = @IGNORE_GST_0_10_25@ +IGNORE_GST_0_10_26 = @IGNORE_GST_0_10_26@ +IGNORE_GST_0_10_29 = @IGNORE_GST_0_10_29@ +IGNORE_GST_0_10_30 = @IGNORE_GST_0_10_30@ +IGNORE_GST_0_10_31 = @IGNORE_GST_0_10_31@ +IGNORE_GST_0_10_32 = @IGNORE_GST_0_10_32@ +IGNORE_GST_LOADSAVE = @IGNORE_GST_LOADSAVE@ +IGNORE_GST_PB_0_10_23 = @IGNORE_GST_PB_0_10_23@ +IGNORE_GST_PB_0_10_25 = @IGNORE_GST_PB_0_10_25@ +IGNORE_GST_PB_0_10_26 = @IGNORE_GST_PB_0_10_26@ +IGNORE_GST_PB_0_10_29 = @IGNORE_GST_PB_0_10_29@ +IGNORE_GST_PB_0_10_30 = @IGNORE_GST_PB_0_10_30@ +IGNORE_GST_PB_0_10_31 = @IGNORE_GST_PB_0_10_31@ +IGNORE_GST_PB_0_10_32 = @IGNORE_GST_PB_0_10_32@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@ +PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@ +PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@ +PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@ +PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PLUGINDIR = @PLUGINDIR@ +PYEXECDIR = @PYEXECDIR@ +PYGOBJECT_2_12_CFLAGS = @PYGOBJECT_2_12_CFLAGS@ +PYGOBJECT_2_12_LIBS = @PYGOBJECT_2_12_LIBS@ +PYGOBJECT_2_16_CFLAGS = @PYGOBJECT_2_16_CFLAGS@ +PYGOBJECT_2_16_LIBS = @PYGOBJECT_2_16_LIBS@ +PYGOBJECT_CFLAGS = @PYGOBJECT_CFLAGS@ +PYGOBJECT_LIBS = @PYGOBJECT_LIBS@ +PYGOBJECT_REQ = @PYGOBJECT_REQ@ +PYGST_CFLAGS = @PYGST_CFLAGS@ +PYGTK_CFLAGS = @PYGTK_CFLAGS@ +PYGTK_LIBS = @PYGTK_LIBS@ +PYGTK_REQ = @PYGTK_REQ@ +PYTHON = @PYTHON@ +PYTHONDIR = @PYTHONDIR@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_LIB_LOC = @PYTHON_LIB_LOC@ +PYTHON_LIB_SUFFIX = @PYTHON_LIB_SUFFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VALGRIND_PATH = @VALGRIND_PATH@ +VERSION = @VERSION@ +WARNING_CFLAGS = @WARNING_CFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +plugindir = @plugindir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +examplesdir = $(pkgdatadir)/$(GST_MAJORMINOR)/examples +examples_DATA = \ + audioconcat.py \ + audio-controller.py \ + bps.py \ + cp.py \ + debugslider.py \ + f2f.py \ + filesrc.py \ + fvumeter.py \ + gst-discover \ + gstfile.py \ + mixer.py \ + play.py \ + pipeline-tester \ + remuxer.py \ + sinkelement.py \ + vumeter.py \ + decodebin.py \ + maemogst.py + +EXTRA_DIST = $(examples_DATA) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu examples/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-examplesDATA: $(examples_DATA) + @$(NORMAL_INSTALL) + test -z "$(examplesdir)" || $(MKDIR_P) "$(DESTDIR)$(examplesdir)" + @list='$(examples_DATA)'; test -n "$(examplesdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(examplesdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(examplesdir)" || exit $$?; \ + done + +uninstall-examplesDATA: + @$(NORMAL_UNINSTALL) + @list='$(examples_DATA)'; test -n "$(examplesdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(examplesdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(examplesdir)" && rm -f $$files +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(examplesdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-examplesDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-examplesDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-examplesDATA install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am uninstall-examplesDATA + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/examples/audio-controller.py b/examples/audio-controller.py new file mode 100644 index 0000000..d676910 --- /dev/null +++ b/examples/audio-controller.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +# audio-controller.py +# (c) 2005 Edward Hervey +# Test case for the GstController on sinesrc -> alsasink +# Inspired from ensonic's examples/controller/audio-controller.c + +import pygst +pygst.require('0.10') +import gst +import time + +def main(): + pipeline = gst.Pipeline("audiocontroller") + src = gst.element_factory_make("audiotestsrc", "src") + sink = gst.element_factory_make("alsasink", "sink") + pipeline.add(src, sink) + src.link(sink) + + control = gst.Controller(src, "freq", "volume") + control.set_interpolation_mode("volume", gst.INTERPOLATE_LINEAR) + control.set_interpolation_mode("freq", gst.INTERPOLATE_LINEAR) + + control.set("volume", 0, 0.0) + control.set("volume", 2 * gst.SECOND, 1.0) + control.set("volume", 4 * gst.SECOND, 0.0) + control.set("volume", 6 * gst.SECOND, 1.0) + + control.set("freq", 0, 440.0) + control.set("freq", 3 * gst.SECOND, 3000.0) + control.set("freq", 6 * gst.SECOND, 880.0) + + pipeline.set_state(gst.STATE_PLAYING) + + time.sleep(7) + +if __name__ == "__main__": + main() diff --git a/examples/audioconcat.py b/examples/audioconcat.py new file mode 100644 index 0000000..306b24f --- /dev/null +++ b/examples/audioconcat.py @@ -0,0 +1,192 @@ +#!/usr/bin/env python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +# audioconcat.py - Concatenates multiple audio files to single ogg/vorbis file +# Uses the gnonlin elements (http://gnonlin.sf.net/) +# Copyright (C) 2005 Edward Hervey +# 2006 Jason Gerard DeRose +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library 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 +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# + +import sys + +import gobject +gobject.threads_init() + +import pygst +pygst.require('0.10') +import gst +from gst.extend.discoverer import Discoverer + + + +class AudioDec(gst.Bin): + '''Decodes audio file, outputs at specified caps''' + + def __init__(self, location, caps): + gst.Bin.__init__(self) + + # Create elements + src = gst.element_factory_make('filesrc') + dec = gst.element_factory_make('decodebin') + conv = gst.element_factory_make('audioconvert') + rsmpl = gst.element_factory_make('audioresample') + ident = gst.element_factory_make('identity') + + # Set 'location' property on filesrc + src.set_property('location', location) + + # Connect handler for 'new-decoded-pad' signal + dec.connect('new-decoded-pad', self.__on_new_decoded_pad) + + # Add elements to bin + self.add(src, dec, conv, rsmpl, ident) + + # Link *some* elements + # This is completed in self.__on_new_decoded_pad() + src.link(dec) + conv.link(rsmpl) + rsmpl.link(ident, caps) + + # Reference used in self.__on_new_decoded_pad() + self.__apad = conv.get_pad('sink') + + # Add ghost pad + self.add_pad(gst.GhostPad('src', ident.get_pad('src'))) + + + def __on_new_decoded_pad(self, element, pad, last): + caps = pad.get_caps() + name = caps[0].get_name() + print '\n__on_new_decoded_pad:', name + if 'audio' in name: + if not self.__apad.is_linked(): # Only link once + pad.link(self.__apad) + + + + +class AudioConcat: + '''Concatenates multiple audio files to single ogg/vorbis file''' + + caps = gst.caps_from_string('audio/x-raw-float, rate=44100, channels=2, endianness=1234, width=32') + + def __init__(self, infiles, outfile): + # These are used in iteration through infiles + self.infiles = infiles + self.i = 0 + self.start = 0L + + # The pipeline + self.pipeline = gst.Pipeline() + + # Create bus and connect 'eos' and 'error' handlers + self.bus = self.pipeline.get_bus() + self.bus.add_signal_watch() + self.bus.connect('message::eos', self.on_eos) + self.bus.connect('message::error', self.on_error) + + # Create elements + self.comp = gst.element_factory_make('gnlcomposition') + self.enc = gst.element_factory_make('vorbisenc') + self.mux = gst.element_factory_make('oggmux') + self.sink = gst.element_factory_make('filesink') + + # Connect handler for 'pad-added' signal + self.comp.connect('pad-added', self.on_pad_added) + + # Set 'location' property on filesink + self.sink.set_property('location', outfile) + + # Add elements to pipeline + self.pipeline.add(self.comp, self.enc, self.mux, self.sink) + + # Link *some* elements + # This in completed in self.on_pad_added() + gst.element_link_many(self.enc, self.mux, self.sink) + + # Reference used in self.on_pad_added() + self.apad = self.enc.get_pad('sink') + + # The MainLoop + self.mainloop = gobject.MainLoop() + + # Iterate through infiles + gobject.idle_add(self.discover) + self.mainloop.run() + + + def discover(self): + infile = self.infiles[self.i] + discoverer = Discoverer(infile) + discoverer.connect('discovered', self.on_discovered, infile) + discoverer.discover() + return False # Don't repeat idle call + + + def on_discovered(self, discoverer, ismedia, infile): + print '\non_discovered:', infile + discoverer.print_info() + if discoverer.is_audio: + dec = AudioDec(infile, self.caps) + src = gst.element_factory_make('gnlsource') + src.add(dec) + src.set_property('media-start', 0L) + src.set_property('media-duration', discoverer.audiolength) + src.set_property('start', self.start) + src.set_property('duration', discoverer.audiolength) + self.comp.add(src) + self.start += discoverer.audiolength + self.i += 1 + if self.i < len(self.infiles): + gobject.idle_add(self.discover) + else: + if self.start > 0: # At least 1 infile is_audio and audiolength > 0 + self.pipeline.set_state(gst.STATE_PLAYING) + else: + self.mainloop.quit() + + + def on_pad_added(self, element, pad): + caps = pad.get_caps() + name = caps[0].get_name() + print '\non_pad_added:', name + if name == 'audio/x-raw-float': + if not self.apad.is_linked(): # Only link once + pad.link(self.apad) + + + def on_eos(self, bus, msg): + print '\non_eos' + self.mainloop.quit() + + + def on_error(self, bus, msg): + error = msg.parse_error() + print '\non_error:', error[1] + self.mainloop.quit() + + + + +if __name__ == '__main__': + if len(sys.argv) >= 3: + AudioConcat(sys.argv[1:-1], sys.argv[-1]) + else: + print 'Usage: %s ' % sys.argv[0] + print 'Example: %s song1.mp3 song2.ogg output.ogg' % sys.argv[0] diff --git a/examples/bps.py b/examples/bps.py new file mode 100755 index 0000000..888fcdb --- /dev/null +++ b/examples/bps.py @@ -0,0 +1,120 @@ +#!/usr/bin/env python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +# gst-python +# Copyright (C) 2003 David I. Lehn +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library 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 +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# +# Author: David I. Lehn +# + +import pygtk +pygtk.require('2.0') + +import sys +import time +import gobject +import gtk + +import pygst +pygst.require('0.10') + +import gst + +class BPS(object): + def __init__(self): + self.buffers = 0 + self.start = 0 + + def done(self): + end = time.time() + dt = end - self.start + bps = self.buffers/dt + spb = dt/self.buffers + print '\t%d buffers / %fs\t= %f bps\t= %f spb' % (self.buffers, dt, bps, spb) + + def fakesrc(self, buffers): + src = gst.element_factory_make('fakesrc','src') + src.set_property('silent', 1) + src.set_property('num_buffers', buffers) + return src + + def fakesink(self): + sink = gst.element_factory_make('fakesink','sink') + sink.set_property('silent', 1) + return sink + + def build_pipeline(self, buffers): + pipeline = gst.Pipeline('pipeline') + + src = self.fakesrc(buffers) + pipeline.add(src) + sink = self.fakesink() + pipeline.add(sink) + src.link(sink) + + return pipeline + + def idle(self, pipeline): + return pipeline.iterate() + + def test(self): + self.bus = self.pipeline.get_bus() + + self.start = time.time() + + self.pipeline.set_state(gst.STATE_PLAYING) + + while 1: + msg = self.bus.poll(gst.MESSAGE_EOS | gst.MESSAGE_ERROR, gst.SECOND) + if msg: + break + + self.pipeline.set_state(gst.STATE_NULL) + self.done() + + def run(self, buffers): + self.buffers = buffers + + print '# Testing buffer processing rate for "fakesrc ! fakesink"' + print '# bps = buffers per second' + print '# spb = seconds per buffer' + + self.pipeline = self.build_pipeline(buffers) + assert self.pipeline + + self.test() + +def main(args): + "GStreamer Buffers-Per-Second tester" + + if len(args) < 2: + print 'usage: %s buffers' % args[0] + return 1 + + bps = BPS() + + buffers = int(args[1]) + if buffers < 1: + print 'buffers must be higher than 0' + return + + bps.run(buffers) + +if __name__ == '__main__': + sys.exit(main(sys.argv)) diff --git a/examples/cp.py b/examples/cp.py new file mode 100755 index 0000000..1111098 --- /dev/null +++ b/examples/cp.py @@ -0,0 +1,83 @@ +#!/usr/bin/env python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +# gst-python +# Copyright (C) 2002 David I. Lehn +# 2004 Johan Dahlin +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library 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 +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# +# Author: David I. Lehn +# + +import sys + +import gobject +gobject.threads_init() + +import pygst +pygst.require('0.10') +import gst + + +mainloop = gobject.MainLoop() + +def on_eos(bus, msg): + mainloop.quit() + +def filter(input, output): + "A GStreamer copy pipeline which can add arbitrary filters" + + # create a new bin to hold the elements + bin = gst.parse_launch('filesrc name=source ! ' + + 'progressreport ! ' + + # This 'statistics' element is depreciated in 0.10 + #'statistics silent=false buffer-update-freq=1 ' + + #'update_on_eos=true ! ' + + 'filesink name=sink') + filesrc = bin.get_by_name('source') + filesrc.set_property('location', input) + + filesink = bin.get_by_name('sink') + filesink.set_property('location', output) + + bus = bin.get_bus() + bus.add_signal_watch() + bus.connect('message::eos', on_eos) + + # start playing + bin.set_state(gst.STATE_PLAYING) + + try: + mainloop.run() + except KeyboardInterrupt: + pass + + # stop the bin + bin.set_state(gst.STATE_NULL) + +def main(args): + "A GStreamer based cp(1) with stats" + + if len(args) != 3: + print 'usage: %s source dest' % (sys.argv[0]) + return -1 + + return filter(args[1], args[2]) + +if __name__ == '__main__': + sys.exit(main(sys.argv)) diff --git a/examples/debugslider.py b/examples/debugslider.py new file mode 100644 index 0000000..16aee51 --- /dev/null +++ b/examples/debugslider.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +# gst-python +# Copyright (C) 2005 Fluendo S.L. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library 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 +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# +# Author: Andy Wingo + +import gtk +from gtk import gdk +import gobject + +import pygst +pygst.require('0.10') +import gst + +class DebugSlider(gtk.HScale): + def __init__(self): + adj = gtk.Adjustment(int(gst.debug_get_default_threshold()), + 0, 5, 1, 0, 0) + gtk.HScale.__init__(self, adj) + self.set_digits(0) + self.set_draw_value(True) + self.set_value_pos(gtk.POS_TOP) + + def value_changed(self): + newlevel = int(self.get_adjustment().get_value()) + gst.debug_set_default_threshold(newlevel) + + self.connect('value-changed', value_changed) + +if __name__ == '__main__': + p = gst.parse_launch('fakesrc ! fakesink') + p.set_state(gst.STATE_PLAYING) + + w = gtk.Window() + s = DebugSlider() + w.add(s) + s.show() + w.set_default_size(200, 40) + w.show() + w.connect('delete-event', lambda *args: gtk.main_quit()) + gtk.main() diff --git a/examples/decodebin.py b/examples/decodebin.py new file mode 100644 index 0000000..be044a6 --- /dev/null +++ b/examples/decodebin.py @@ -0,0 +1,109 @@ +#!/usr/bin/env python + +# decodebin.py - Audio autopluging example using 'decodebin' element +# Copyright (C) 2006 Jason Gerard DeRose + +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library 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 +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +import sys + +import gobject +gobject.threads_init() + +import pygst +pygst.require('0.10') +import gst + + +class Decodebin: + def __init__(self, location): + # The pipeline + self.pipeline = gst.Pipeline() + + # Create bus and connect several handlers + self.bus = self.pipeline.get_bus() + self.bus.add_signal_watch() + self.bus.connect('message::eos', self.on_eos) + self.bus.connect('message::tag', self.on_tag) + self.bus.connect('message::error', self.on_error) + + # Create elements + self.src = gst.element_factory_make('filesrc') + self.dec = gst.element_factory_make('decodebin') + self.conv = gst.element_factory_make('audioconvert') + self.rsmpl = gst.element_factory_make('audioresample') + self.sink = gst.element_factory_make('alsasink') + + # Set 'location' property on filesrc + self.src.set_property('location', location) + + # Connect handler for 'new-decoded-pad' signal + self.dec.connect('new-decoded-pad', self.on_new_decoded_pad) + + # Add elements to pipeline + self.pipeline.add(self.src, self.dec, self.conv, self.rsmpl, self.sink) + + # Link *some* elements + # This is completed in self.on_new_decoded_pad() + self.src.link(self.dec) + gst.element_link_many(self.conv, self.rsmpl, self.sink) + + # Reference used in self.on_new_decoded_pad() + self.apad = self.conv.get_pad('sink') + + # The MainLoop + self.mainloop = gobject.MainLoop() + + # And off we go! + self.pipeline.set_state(gst.STATE_PLAYING) + self.mainloop.run() + + + def on_new_decoded_pad(self, element, pad, last): + caps = pad.get_caps() + name = caps[0].get_name() + print 'on_new_decoded_pad:', name + if name == 'audio/x-raw-float' or name == 'audio/x-raw-int': + if not self.apad.is_linked(): # Only link once + pad.link(self.apad) + + + def on_eos(self, bus, msg): + print 'on_eos' + self.mainloop.quit() + + + def on_tag(self, bus, msg): + taglist = msg.parse_tag() + print 'on_tag:' + for key in taglist.keys(): + print '\t%s = %s' % (key, taglist[key]) + + + def on_error(self, bus, msg): + error = msg.parse_error() + print 'on_error:', error[1] + self.mainloop.quit() + + + + + +if __name__ == '__main__': + if len(sys.argv) == 2: + Decodebin(sys.argv[1]) + else: + print 'Usage: %s /path/to/media/file' % sys.argv[0] diff --git a/examples/f2f.py b/examples/f2f.py new file mode 100755 index 0000000..8513341 --- /dev/null +++ b/examples/f2f.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +# gst-python +# Copyright (C) 2002 David I. Lehn +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library 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 +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# +# Author: David I. Lehn +# + +import sys + +import pygst +pygst.require('0.10') + +import gst + +def handoff_cb(sender, *args): + print sender.get_name(), args + +def main(args): + # create a new bin to hold the elements + #gst_debug_set_categories(-1) + bin = gst.parse_launch('fakesrc name=source silent=1 num-buffers=10 signal-handoffs=true ! ' + + 'fakesink name=sink silent=1 signal-handoffs=true') + source = bin.get_by_name('source') + source.connect('handoff', handoff_cb) + source.get_pad("src").connect("have-data", handoff_cb) + sink = bin.get_by_name('sink') + sink.connect('handoff', handoff_cb) + sink.get_pad("sink").connect('have-data', handoff_cb) + + print source, sink + + bus = bin.get_bus() + + res = bin.set_state(gst.STATE_PLAYING); + assert res + + while 1: + msg = bus.poll(gst.MESSAGE_EOS | gst.MESSAGE_ERROR, gst.SECOND) + if msg: + break + + res = bin.set_state(gst.STATE_NULL) + assert res + +if __name__ == '__main__': + sys.exit(main(sys.argv)) diff --git a/examples/filesrc.py b/examples/filesrc.py new file mode 100755 index 0000000..f7823e0 --- /dev/null +++ b/examples/filesrc.py @@ -0,0 +1,99 @@ +#!/usr/bin/env python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +# GStreamer python bindings +# Copyright (C) 2002 David I. Lehn +# 2004 Johan Dahlin +# +# filesrc.py: implements a file source element completely in python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library 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 +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +import sys +import gobject; gobject.threads_init() +import pygst +pygst.require('0.10') +import gst + +class FileSource(gst.BaseSrc): + __gsttemplates__ = ( + gst.PadTemplate("src", + gst.PAD_SRC, + gst.PAD_ALWAYS, + gst.caps_new_any()), + ) + + blocksize = 4096 + fd = None + + def __init__(self, name): + self.__gobject_init__() + self.curoffset = 0 + self.set_name(name) + + def set_property(self, name, value): + if name == 'location': + self.fd = open(value, 'r') + + def do_create(self, offset, size): + if offset != self.curoffset: + self.fd.seek(offset, 0) + data = self.fd.read(self.blocksize) + if data: + self.curoffset += len(data) + return gst.FLOW_OK, gst.Buffer(data) + else: + return gst.FLOW_UNEXPECTED, None +gobject.type_register(FileSource) + +def main(args): + if len(args) != 3: + print 'Usage: %s input output' % (args[0]) + return -1 + + bin = gst.Pipeline('pipeline') + + filesrc = FileSource('filesource') + assert filesrc + filesrc.set_property('location', args[1]) + + filesink = gst.element_factory_make('filesink', 'sink') + filesink.set_property('location', args[2]) + + bin.add(filesrc, filesink) + gst.element_link_many(filesrc, filesink) + + bin.set_state(gst.STATE_PLAYING); + mainloop = gobject.MainLoop() + + def bus_event(bus, message): + t = message.type + if t == gst.MESSAGE_EOS: + mainloop.quit() + elif t == gst.MESSAGE_ERROR: + err, debug = message.parse_error() + print "Error: %s" % err, debug + mainloop.quit() + return True + bin.get_bus().add_watch(bus_event) + + mainloop.run() + bin.set_state(gst.STATE_NULL) + +if __name__ == '__main__': + sys.exit(main(sys.argv)) + diff --git a/examples/fvumeter.py b/examples/fvumeter.py new file mode 100644 index 0000000..cabf09f --- /dev/null +++ b/examples/fvumeter.py @@ -0,0 +1,239 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +# gst-python +# Copyright (C) 2005 Fluendo S.L. +# Originally from the Flumotion streaming server. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library 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 +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# +# Author: Zaheer Merali + +import gtk +from gtk import gdk +import gobject + + +# this VUMeter respects IEC standard +# BS 6840-18:1996/IEC-268-18 +# and is inspired by JACK's meterbridge dpm_meters.c + +class FVUMeter(gtk.DrawingArea): + __gsignals__ = { 'expose-event' : 'override', + 'size-allocate': 'override', + 'size-request': 'override', + 'realize' : 'override' + } + __gproperties__ = { + 'peak' : (gobject.TYPE_FLOAT, + 'peak volume level', + 'peak volume level in dB', + -90.0, + 0, + -90.0, + gobject.PARAM_READWRITE), + 'decay' : (gobject.TYPE_FLOAT, + 'decay volume level', + 'decay volume level in dB', + -90.0, + 0, + -90.0, + gobject.PARAM_READWRITE), + 'orange-threshold': (gobject.TYPE_FLOAT, + 'threshold for orange', + 'threshold for orange use in dB', + -90.0, + 0, + -10.0, + gobject.PARAM_READWRITE), + 'red-threshold': (gobject.TYPE_FLOAT, + 'threshold for red', + 'threshold for red use in dB', + -90.0, + 0, + -1.0, + gobject.PARAM_READWRITE) + + } + green_gc = None + orange_gc = None + red_gc = None + yellow_gc = None + + topborder = 7 + peaklevel = -90.0 + decaylevel = -90.0 + orange_threshold = -10.0 + red_threshold = -1.0 + bottomborder = 25 + leftborder = 15 + rightborder = 65 + + # Returns the meter deflection percentage given a db value + def iec_scale(self, db): + pct = 0.0 + + if db < -70.0: + pct = 0.0 + elif db < -60.0: + pct = (db + 70.0) * 0.25 + elif db < -50.0: + pct = (db + 60.0) * 0.5 + 2.5 + elif db < -40.0: + pct = (db + 50.0) * 0.75 + 7.5 + elif db < -30.0: + pct = (db + 40.0) * 1.5 + 15.0 + elif db < -20.0: + pct = (db + 30.0) * 2.0 + 30.0 + elif db < 0.0: + pct = (db + 20.0) * 2.5 + 50.0 + else: + pct = 100.0 + + return pct + + def do_get_property(self, property): + if property.name == 'peak': + return self.peaklevel + elif property.name == 'decay': + return self.decaylevel + elif property.name == 'orange-threshold': + return self.orange_threshold + elif property.name == 'red-threshold': + return self.red_threshold + else: + raise AttributeError, 'unknown property %s' % property.name + + def do_set_property(self, property, value): + if property.name == 'peak': + self.peaklevel = value + elif property.name == 'decay': + self.decaylevel = value + elif property.name == 'orange-threshold': + self.orange_threshold = value + elif property.name == 'red-threshold': + self.red_threshold = value + else: + raise AttributeError, 'unknown property %s' % property.name + + self.queue_draw() + + def do_size_request(self, requisition): + requisition.width = 250 + requisition.height = 50 + + def do_size_allocate(self, allocation): + self.allocation = allocation + if self.flags() & gtk.REALIZED: + self.window.move_resize(*allocation) + + def do_realize(self): + self.set_flags(self.flags() | gtk.REALIZED) + + self.window = gdk.Window(self.get_parent_window(), + width=self.allocation.width, + height=self.allocation.height, + window_type=gdk.WINDOW_CHILD, + wclass=gdk.INPUT_OUTPUT, + event_mask=self.get_events() | gdk.EXPOSURE_MASK) + + colormap = gtk.gdk.colormap_get_system() + green = colormap.alloc_color(0, 65535, 0) + orange = colormap.alloc_color(65535, 32768, 0) + red = colormap.alloc_color(65535, 0, 0) + yellow = colormap.alloc_color(65535, 65535, 0) + self.green_gc = gdk.GC(self.window, foreground=green) + self.orange_gc = gdk.GC(self.window, foreground=orange) + self.red_gc = gdk.GC(self.window, foreground=red) + self.yellow_gc = gdk.GC(self.window, foreground=yellow) + + self.window.set_user_data(self) + self.style.attach(self.window) + self.style.set_background(self.window, gtk.STATE_NORMAL) + + def do_expose_event(self, event): + self.chain(event) + + x, y, w, h = self.allocation + vumeter_width = w - (self.leftborder + self.rightborder) + vumeter_height = h - (self.topborder + self.bottomborder) + self.window.draw_rectangle(self.style.black_gc, True, + self.leftborder, self.topborder, + vumeter_width, + vumeter_height) + # draw peak level + # 0 maps to width of 0, full scale maps to total width + peaklevelpct = self.iec_scale(self.peaklevel) + peakwidth = int(vumeter_width * (peaklevelpct / 100)) + draw_gc = self.green_gc + if self.peaklevel >= self.orange_threshold: + draw_gc = self.orange_gc + if self.peaklevel >= self.red_threshold: + draw_gc = self.red_gc + if peakwidth > 0: + self.window.draw_rectangle(draw_gc, True, + self.leftborder, self.topborder, + peakwidth, vumeter_height) + + # draw yellow decay level + if self.decaylevel > -90.0: + decaylevelpct = self.iec_scale(self.decaylevel) + decaywidth = int(vumeter_width * (decaylevelpct / 100)) + # cheat the geometry by drawing 0% level at pixel 0, + # which is same position as just above 0% + if decaywidth == 0: + decaywidth = 1 + self.window.draw_line(self.yellow_gc, + self.leftborder + decaywidth - 1, + self.topborder, + self.leftborder + decaywidth - 1, + self.topborder + vumeter_height - 1) + + # draw tick marks + scalers = [ + ('-90', 0.0), + ('-40', 0.15), + ('-30', 0.30), + ('-20', 0.50), + ('-10', 0.75), + ( '-5', 0.875), + ( '0', 1.0), + ] + for level, scale in scalers: + # tick mark, 6 pixels high + # we cheat again here by putting the 0 at the first pixel + self.window.draw_line(self.style.black_gc, + self.leftborder + int(scale * (vumeter_width - 1)), + h - self.bottomborder, + self.leftborder + int(scale * (vumeter_width - 1)), + h - self.bottomborder + 5) + # tick label + layout = self.create_pango_layout(level) + layout_width, layout_height = layout.get_pixel_size() + self.window.draw_layout(self.style.black_gc, + self.leftborder + int(scale * vumeter_width) + - int(layout_width / 2), + h - self.bottomborder + 7, layout) + + # draw the peak level to the right + layout = self.create_pango_layout("%.2fdB" % self.peaklevel) + layout_width, layout_height = layout.get_pixel_size() + self.window.draw_layout(self.style.black_gc, + self.leftborder + vumeter_width + 5, + self.topborder + int(vumeter_height / 2 - layout_height / 2), + layout) + +gobject.type_register(FVUMeter) diff --git a/examples/gst-discover b/examples/gst-discover new file mode 100755 index 0000000..fa630b1 --- /dev/null +++ b/examples/gst-discover @@ -0,0 +1,89 @@ +#!/usr/bin/env python +# gst-python +# Copyright (C) 2006 Andy Wingo +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library 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 +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + + +import os +import sys + +import pygtk +pygtk.require('2.0') +import gobject +gobject.threads_init() +import pygst +pygst.require('0.10') +import gst +from gst.extend import discoverer + +def fail(path): + print "error: %r does not appear to be a media file" % path + sys.exit(1) + +def succeed(d): + def pp(prop, val): + print '%s: %s' % (prop, val) + pp('media type', d.mimetype) + + pp('has video', d.is_video) + if d.is_video: + pp('video caps', d.videocaps) + pp('video width (pixels)', d.videowidth) + pp('video height (pixels)', d.videoheight) + pp('video length (hh:mm:ss)', gst.TIME_ARGS(d.videolength)) + pp('framerate (fps)', '%s/%s' % (d.videorate.num, d.videorate.denom)) + + pp('has audio', d.is_audio) + if d.is_audio: + pp('audio caps', d.audiocaps) + pp('audio format', d.audiofloat and 'floating-point' or 'integer') + pp('sample rate (Hz)', d.audiorate) + pp('sample width (bits)', d.audiowidth) + pp('sample depth (bits)', d.audiodepth) + pp('audio length (hh:mm:ss)', gst.TIME_ARGS(d.audiolength)) + pp('audio channels', d.audiochannels) + + sys.exit(0) + +def discover(path): + def discovered(d, is_media): + if is_media: + succeed(d) + else: + fail(path) + + d = discoverer.Discoverer(path) + d.connect('discovered', discovered) + d.discover() + gobject.MainLoop().run() + +def usage(): + print >>sys.stderr, "usage: gst-discover PATH-TO-MEDIA-FILE" + sys.exit(1) + +def main(argv): + if len(argv) != 2: + usage() + path = argv.pop() + if not os.path.isfile(path): + print >>sys.stderr, "error: file %r does not exist" % path + usage() + + return discover(path) + +if __name__ == '__main__': + sys.exit(main(sys.argv)) diff --git a/examples/gstfile.py b/examples/gstfile.py new file mode 100644 index 0000000..ea0a768 --- /dev/null +++ b/examples/gstfile.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +# gstfile.py +# (c) 2005 Edward Hervey +# Discovers and prints out multimedia information of files + +# This example shows how to use gst-python: +# _ in an object-oriented way (Discoverer class) +# _ subclassing a gst.Pipeline +# _ and overidding existing methods (do_iterate()) + +import os +import sys + +import gobject +gobject.threads_init() + +import pygst +pygst.require('0.10') + +from gst.extend.discoverer import Discoverer + +class GstFile: + """ + Analyses one or more files and prints out the multimedia information of + each file. + """ + + def __init__(self, files): + self.files = files + self.mainloop = gobject.MainLoop() + self.current = None + + def run(self): + gobject.idle_add(self._discover_one) + self.mainloop.run() + + def _discovered(self, discoverer, ismedia): + discoverer.print_info() + self.current = None + if len(self.files): + print "\n" + gobject.idle_add(self._discover_one) + + def _discover_one(self): + if not len(self.files): + gobject.idle_add(self.mainloop.quit) + return False + filename = self.files.pop(0) + if not os.path.isfile(filename): + gobject.idle_add(self._discover_one) + return False + print "Running on", filename + # create a discoverer for that file + self.current = Discoverer(filename) + # connect a callback on the 'discovered' signal + self.current.connect('discovered', self._discovered) + # start the discovery + self.current.discover() + return False + +def main(args): + if len(args) < 2: + print 'usage: %s files...' % args[0] + return 2 + + gstfile = GstFile(args[1:]) + gstfile.run() + +if __name__ == '__main__': + sys.exit(main(sys.argv)) diff --git a/examples/maemogst.py b/examples/maemogst.py new file mode 100644 index 0000000..1f9ae0d --- /dev/null +++ b/examples/maemogst.py @@ -0,0 +1,101 @@ +import gobject +gobject.threads_init() +import gtk +gtk.gdk.threads_init() +import hildon +import gst +import sys + +# VideoWidget taken from play.py in gst-python examples +class VideoWidget(gtk.DrawingArea): + def __init__(self): + gtk.DrawingArea.__init__(self) + self.imagesink = None + self.unset_flags(gtk.DOUBLE_BUFFERED) + + def do_expose_event(self, event): + if self.imagesink: + self.imagesink.expose() + return False + else: + return True + + def set_sink(self, sink): + assert self.window.xid + self.imagesink = sink + self.imagesink.set_xwindow_id(self.window.xid) + +class MaemoGstView: + + def __init__(self): + # hildon has one program instance per app, so get instance + self.p = hildon.Program.get_instance() + # set name of application: this shows in titlebar + gtk.set_application_name("Maemo GStreamer VideoTest") + # stackable window in case we want more windows in future in app + self.w = hildon.StackableWindow() + box = gtk.VBox() + self.video_widget = VideoWidget() + # video widget we want to expand to size + box.pack_start(self.video_widget, True, True, 0) + # a button finger height to play/pause + self.button = hildon.Button(gtk.HILDON_SIZE_FINGER_HEIGHT, + hildon.BUTTON_ARRANGEMENT_VERTICAL, title="Pause") + self.button.connect_after("clicked", self.on_button_clicked) + # don't want button to expand or fill, just stay finger height + box.pack_start(self.button, False, False, 0) + self.w.add(box) + self.w.connect("delete-event", gtk.main_quit) + self.p.add_window(self.w) + self.w.show_all() + self.start_streaming() + + def start_streaming(self): + # we use ximagesink solely for screenshotting ability + # less cpu usage would happen with videotestsrc ! xvimagesink + self.pipeline = \ + gst.parse_launch("videotestsrc ! videoscale ! ximagesink") + bus = self.pipeline.get_bus() + # need to connect to sync message handler so we get the sink to be + # embedded at the right time and not have a temporary new window + bus.enable_sync_message_emission() + bus.add_signal_watch() + bus.connect("sync-message::element", self.on_sync_message) + bus.connect("message", self.on_message) + self.pipeline.set_state(gst.STATE_PLAYING) + + def on_sync_message(self, bus, message): + if message.structure is None: + return + if message.structure.get_name() == 'prepare-xwindow-id': + # all this is needed to sync with the X server before giving the + # x id to the sink + gtk.gdk.threads_enter() + gtk.gdk.display_get_default().sync() + self.video_widget.set_sink(message.src) + message.src.set_property("force-aspect-ratio", True) + gtk.gdk.threads_leave() + + def on_message(self, bus, message): + if message.type == gst.MESSAGE_ERROR: + err, debug = message.parse_error() + hildon.hildon_banner_show_information(self.w, '', + "Error: %s" % err) + + def on_button_clicked(self, widget): + success, state, pending = self.pipeline.get_state(1) + # do not listen if in middle of state change + if not pending: + if state == gst.STATE_PLAYING: + self.pipeline.set_state(gst.STATE_PAUSED) + self.button.set_label("Play") + else: + self.pipeline.set_state(gst.STATE_PLAYING) + self.button.set_label("Pause") + +def main(): + view = MaemoGstView() + gtk.main() + +if __name__ == '__main__': + sys.exit(main()) diff --git a/examples/mixer.py b/examples/mixer.py new file mode 100644 index 0000000..e9cb432 --- /dev/null +++ b/examples/mixer.py @@ -0,0 +1,31 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +import sys + +import gst +import gst.interfaces + +pipeline = "alsasrc" +if sys.argv[1:]: + pipeline = " ".join(sys.argv[1:]) +a = gst.element_factory_make(pipeline) +print dir(a) + +res = a.set_state(gst.STATE_PAUSED) +if res != gst.STATE_CHANGE_SUCCESS: + print "Could not set pipeline %s to PAUSED" % pipeline + +print "Inputs:" +for t in a.list_tracks(): + if t.flags & gst.interfaces.MIXER_TRACK_INPUT: + sys.stdout.write(t.label) + sys.stdout.write(': %d - %d' % (t.min_volume, t.max_volume)) + volumes = a.get_volume(t) + sys.stdout.write(': %r' % (volumes, )) + if t.props.num_channels > 0: + a.set_volume(t, volumes=volumes) + if t.flags & gst.interfaces.MIXER_TRACK_RECORD: + sys.stdout.write(' (selected)') + sys.stdout.write('\n') + diff --git a/examples/pipeline-tester b/examples/pipeline-tester new file mode 100755 index 0000000..0621097 --- /dev/null +++ b/examples/pipeline-tester @@ -0,0 +1,263 @@ +#!/usr/bin/env python +# +# gst-python +# Copyright (C) 2005 Andy Wingo +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library 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 +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + + +# A test more of gst-plugins than of gst-python. + + +import sys + +import pygtk +pygtk.require('2.0') +import gtk +import gtk.gdk +import pango +import gobject + +import pygst +pygst.require('0.10') +import gst + +import debugslider + + +data = (('Video capture via V4L', + 'v4lsrc name=source \n' + ' ! videorate \n' + ' ! ffmpegcolorspace ! autovideosink'), + ('Video capture via V4L, fixed frame rate', + 'v4lsrc name=source autoprobe=false autoprobe-fps=false \n' + ' ! video/x-raw-yuv,format=(fourcc)I420,framerate=(double)7.5 \n' + ' ! videorate \n' + ' ! ffmpegcolorspace \n' + ' ! autovideosink'), + ('Sound capture', + 'gconfaudiosrc\n' + ' ! audio/x-raw-int,rate=22050,depth=16,channels=1,width=16,signed=(boolean)TRUE,endianness=(int)BYTE_ORDER\n' + ' ! level message=true\n' + ' ! fakesink'), + ('Streaming Ogg/Theora+Vorbis playback, tee to disk', + 'gnomevfssrc location=http://gstreamer.freedesktop.org/media/small/cooldance.ogg \n' + ' ! tee name=tee \n' + ' tee. ! oggdemux name=demux \n' + ' demux. ! queue ! theoradec ! ffmpegcolorspace ! autovideosink \n' + ' demux. ! queue ! vorbisdec ! audioconvert ! autoaudiosink \n' + ' tee. ! queue ! filesink location=/tmp/cooldance.ogg'), + ('Video test, YUV format', + 'videotestsrc \n' + ' ! video/x-raw-yuv,format=(fourcc)I420 \n' + ' ! ffmpegcolorspace ! autovideosink'), + ('Video test, RGB format', + 'videotestsrc \n' + ' ! video/x-raw-rgb,red_mask=0xff00 \n' + ' ! ffmpegcolorspace \n' + ' ! autovideosink'), + ('Software scaling', + 'videotestsrc \n' + ' ! video/x-raw-rgb,height=200,width=320 \n' + ' ! videoscale method=2 \n' + ' ! ffmpegcolorspace ! autovideosink'), + ('Reencode Vorbis to mulaw, play', + 'filesrc location=/tmp/cooldance.ogg \n' + ' ! oggdemux \n' + ' ! vorbisdec ! audioconvert \n' + ' ! mulawenc ! mulawdec ! autoaudiosink'), + ('Capture DV via firewire, transcode into Ogg', + 'dv1394src \n' + ' ! dvdemux name=demux \n' + ' ! queue \n' + ' ! video/x-dv,systemstream=(boolean)false \n' + ' ! dvdec drop-factor=2 \n' + ' ! videorate \n' + ' ! videoscale \n' + ' ! video/x-raw-yuv,width=360,height=288 \n' + ' ! videoscale \n' + ' ! video/x-raw-yuv,width=240,height=192,framerate=10.0,format=(fourcc)YUY2 \n' + ' ! ffmpegcolorspace \n' + ' ! theoraenc \n' + ' ! oggmux name=mux \n' + ' ! filesink location=/tmp/dv.ogg \n' + ' \n' + ' demux. \n' + ' ! audio/x-raw-int \n' + ' ! queue \n' + ' ! audioconvert \n' + ' ! vorbisenc \n' + ' ! mux.')) + + +def escape(s, chars, escaper='\\'): + for c in chars: + s = s.replace(c, '%s%s' % (escaper, c)) + return s + + +def make_model(): + m = gtk.ListStore(str, str) + for pair in data: + i = m.append() + m.set_value(i, 0, pair[0]) + m.set_value(i, 1, pair[1]) + return m + + +class Window(gtk.Window): + def __init__(self): + gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL) + self.playing = False + self.selected_pipe = None + self.pipeline = None + self.prepare_ui() + + def prepare_ui(self): + self.set_default_size(300,400) + self.set_title('GStreamer Pipeline Tester') + self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) + self.connect('delete-event', lambda *x: gtk.main_quit()) + self.set_border_width(18) + b = gtk.VBox(False, 12) + b.show() + self.add(b) + l = gtk.Label() + l.set_markup('GStreamer Pipeline Tester') + l.show() + b.pack_start(l, False, False, 6) + l = gtk.Label('Choose a pipeline below to run.') + l.show() + b.pack_start(l, False, False, 0) + sw = gtk.ScrolledWindow() + sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_NEVER) + sw.set_shadow_type(gtk.SHADOW_IN) + sw.show() + b.pack_start(sw, True, True, 6) + tv = gtk.TreeView(make_model()) + tv.set_property('can-default', False) + r = gtk.CellRendererText() + r.set_property('xalign', 0.5) + c = gtk.TreeViewColumn('System', r, text=0) + tv.append_column(c) + tv.set_headers_visible(False) + tv.show() + sw.add(tv) + ds = debugslider.DebugSlider() + ds.show() + b.pack_start(ds, False, False, 0) + l = gtk.Label() + l.set_selectable(True) + l.show() + b.pack_start(l, False, False, 0) + bb = gtk.HButtonBox() + bb.set_layout(gtk.BUTTONBOX_SPREAD) + bb.show() + b.pack_start(bb, False, False, 0) + bu = gtk.Button(stock=gtk.STOCK_MEDIA_PLAY) + bu.set_property('can-default', True) + bu.set_focus_on_click(False) + bu.show() + bb.pack_start(bu, True, False, 0) + bu.set_property('has-default', True) + self.button = bu + + def on_changed(s): + m, i = s.get_selected() + if m: + self.selected_pipe = m.get_value(i, 1) + pasteable = escape(self.selected_pipe, '\n)(') + l.set_markup('%s' % pasteable) + else: + self.selected_pipe = None + l.set_markup('') + tv.get_selection().connect('changed', on_changed) + + tv.connect('row-activated', lambda *x: self.play_toggled()) + + bu.connect('clicked', lambda *x: self.play_toggled()) + + def error(self, message, secondary=None): + m = gtk.MessageDialog(self, + gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, + gtk.MESSAGE_ERROR, + gtk.BUTTONS_OK, + message) + if secondary: + m.format_secondary_text(secondary) + m.run() + m.destroy() + self.stop() + + def on_message(self, bus, message): + t = message.type + print message + if t == gst.MESSAGE_STATE_CHANGED: + pass + elif t == gst.MESSAGE_ERROR: + err, debug = message.parse_error() + self.error("%s" % err, debug) + elif t == gst.MESSAGE_EOS: + self.play_toggled() + else: + print '%s: %s:' % (message.src.get_path_string(), + message.type.value_nicks[1]) + if message.structure: + print ' %s' % message.structure.to_string() + else: + print ' (no structure)' + return True + + def play(self): + pipestr = self.selected_pipe + try: + self.set_sensitive(False) + pipeline = gst.parse_launch(pipestr) + self.set_sensitive(True) + except gobject.GError, e: + self.set_sensitive(True) + self.error('Could not create pipeline', str(e)) + return False + + bus = pipeline.get_bus() + bus.add_signal_watch() + watch_id = bus.connect('message', self.on_message) + self.pipeline = pipeline + self.watch_id = watch_id + pipeline.set_state(gst.STATE_PLAYING) + + def stop(self): + bus = self.pipeline.get_bus() + bus.disconnect(self.watch_id) + bus.remove_signal_watch() + self.pipeline.set_state(gst.STATE_NULL) + self.pipeline = None + del self.watch_id + + def play_toggled(self): + if self.playing: + self.stop() + self.button.set_label(gtk.STOCK_MEDIA_PLAY) + self.playing = False + else: + self.play() + self.playing = True + self.button.set_label(gtk.STOCK_MEDIA_STOP) + +if __name__ == '__main__': + w = Window() + w.show() + gtk.main() diff --git a/examples/play.py b/examples/play.py new file mode 100644 index 0000000..4045dff --- /dev/null +++ b/examples/play.py @@ -0,0 +1,299 @@ +#!/usr/bin/env python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +import pygtk +pygtk.require('2.0') + +import sys + +import gobject +gobject.threads_init() + +import pygst +pygst.require('0.10') +import gst +import gst.interfaces +import gtk +gtk.gdk.threads_init() + +class GstPlayer: + def __init__(self, videowidget): + self.playing = False + self.player = gst.element_factory_make("playbin", "player") + self.videowidget = videowidget + self.on_eos = False + + bus = self.player.get_bus() + bus.enable_sync_message_emission() + bus.add_signal_watch() + bus.connect('sync-message::element', self.on_sync_message) + bus.connect('message', self.on_message) + + def on_sync_message(self, bus, message): + if message.structure is None: + return + if message.structure.get_name() == 'prepare-xwindow-id': + # Sync with the X server before giving the X-id to the sink + gtk.gdk.threads_enter() + gtk.gdk.display_get_default().sync() + self.videowidget.set_sink(message.src) + message.src.set_property('force-aspect-ratio', True) + gtk.gdk.threads_leave() + + def on_message(self, bus, message): + t = message.type + if t == gst.MESSAGE_ERROR: + err, debug = message.parse_error() + print "Error: %s" % err, debug + if self.on_eos: + self.on_eos() + self.playing = False + elif t == gst.MESSAGE_EOS: + if self.on_eos: + self.on_eos() + self.playing = False + + def set_location(self, location): + self.player.set_property('uri', location) + + def query_position(self): + "Returns a (position, duration) tuple" + try: + position, format = self.player.query_position(gst.FORMAT_TIME) + except: + position = gst.CLOCK_TIME_NONE + + try: + duration, format = self.player.query_duration(gst.FORMAT_TIME) + except: + duration = gst.CLOCK_TIME_NONE + + return (position, duration) + + def seek(self, location): + """ + @param location: time to seek to, in nanoseconds + """ + gst.debug("seeking to %r" % location) + event = gst.event_new_seek(1.0, gst.FORMAT_TIME, + gst.SEEK_FLAG_FLUSH | gst.SEEK_FLAG_ACCURATE, + gst.SEEK_TYPE_SET, location, + gst.SEEK_TYPE_NONE, 0) + + res = self.player.send_event(event) + if res: + gst.info("setting new stream time to 0") + self.player.set_new_stream_time(0L) + else: + gst.error("seek to %r failed" % location) + + def pause(self): + gst.info("pausing player") + self.player.set_state(gst.STATE_PAUSED) + self.playing = False + + def play(self): + gst.info("playing player") + self.player.set_state(gst.STATE_PLAYING) + self.playing = True + + def stop(self): + self.player.set_state(gst.STATE_NULL) + gst.info("stopped player") + + def get_state(self, timeout=1): + return self.player.get_state(timeout=timeout) + + def is_playing(self): + return self.playing + +class VideoWidget(gtk.DrawingArea): + def __init__(self): + gtk.DrawingArea.__init__(self) + self.imagesink = None + self.unset_flags(gtk.DOUBLE_BUFFERED) + + def do_expose_event(self, event): + if self.imagesink: + self.imagesink.expose() + return False + else: + return True + + def set_sink(self, sink): + assert self.window.xid + self.imagesink = sink + self.imagesink.set_xwindow_id(self.window.xid) + +class PlayerWindow(gtk.Window): + UPDATE_INTERVAL = 500 + def __init__(self): + gtk.Window.__init__(self) + self.set_default_size(410, 325) + + self.create_ui() + + self.player = GstPlayer(self.videowidget) + + def on_eos(): + self.player.seek(0L) + self.play_toggled() + self.player.on_eos = lambda *x: on_eos() + + self.update_id = -1 + self.changed_id = -1 + self.seek_timeout_id = -1 + + self.p_position = gst.CLOCK_TIME_NONE + self.p_duration = gst.CLOCK_TIME_NONE + + def on_delete_event(): + self.player.stop() + gtk.main_quit() + self.connect('delete-event', lambda *x: on_delete_event()) + + def load_file(self, location): + self.player.set_location(location) + + def create_ui(self): + vbox = gtk.VBox() + self.add(vbox) + + self.videowidget = VideoWidget() + vbox.pack_start(self.videowidget) + + hbox = gtk.HBox() + vbox.pack_start(hbox, fill=False, expand=False) + + self.pause_image = gtk.image_new_from_stock(gtk.STOCK_MEDIA_PAUSE, + gtk.ICON_SIZE_BUTTON) + self.pause_image.show() + self.play_image = gtk.image_new_from_stock(gtk.STOCK_MEDIA_PLAY, + gtk.ICON_SIZE_BUTTON) + self.play_image.show() + self.button = button = gtk.Button() + button.add(self.play_image) + button.set_property('can-default', True) + button.set_focus_on_click(False) + button.show() + hbox.pack_start(button, False) + button.set_property('has-default', True) + button.connect('clicked', lambda *args: self.play_toggled()) + + self.adjustment = gtk.Adjustment(0.0, 0.00, 100.0, 0.1, 1.0, 1.0) + hscale = gtk.HScale(self.adjustment) + hscale.set_digits(2) + hscale.set_update_policy(gtk.UPDATE_CONTINUOUS) + hscale.connect('button-press-event', self.scale_button_press_cb) + hscale.connect('button-release-event', self.scale_button_release_cb) + hscale.connect('format-value', self.scale_format_value_cb) + hbox.pack_start(hscale) + self.hscale = hscale + + self.videowidget.connect_after('realize', + lambda *x: self.play_toggled()) + + def play_toggled(self): + self.button.remove(self.button.child) + if self.player.is_playing(): + self.player.pause() + self.button.add(self.play_image) + else: + self.player.play() + if self.update_id == -1: + self.update_id = gobject.timeout_add(self.UPDATE_INTERVAL, + self.update_scale_cb) + self.button.add(self.pause_image) + + def scale_format_value_cb(self, scale, value): + if self.p_duration == -1: + real = 0 + else: + real = value * self.p_duration / 100 + + seconds = real / gst.SECOND + + return "%02d:%02d" % (seconds / 60, seconds % 60) + + def scale_button_press_cb(self, widget, event): + # see seek.c:start_seek + gst.debug('starting seek') + + self.button.set_sensitive(False) + self.was_playing = self.player.is_playing() + if self.was_playing: + self.player.pause() + + # don't timeout-update position during seek + if self.update_id != -1: + gobject.source_remove(self.update_id) + self.update_id = -1 + + # make sure we get changed notifies + if self.changed_id == -1: + self.changed_id = self.hscale.connect('value-changed', + self.scale_value_changed_cb) + + def scale_value_changed_cb(self, scale): + # see seek.c:seek_cb + real = long(scale.get_value() * self.p_duration / 100) # in ns + gst.debug('value changed, perform seek to %r' % real) + self.player.seek(real) + # allow for a preroll + self.player.get_state(timeout=50*gst.MSECOND) # 50 ms + + def scale_button_release_cb(self, widget, event): + # see seek.cstop_seek + widget.disconnect(self.changed_id) + self.changed_id = -1 + + self.button.set_sensitive(True) + if self.seek_timeout_id != -1: + gobject.source_remove(self.seek_timeout_id) + self.seek_timeout_id = -1 + else: + gst.debug('released slider, setting back to playing') + if self.was_playing: + self.player.play() + + if self.update_id != -1: + self.error('Had a previous update timeout id') + else: + self.update_id = gobject.timeout_add(self.UPDATE_INTERVAL, + self.update_scale_cb) + + def update_scale_cb(self): + self.p_position, self.p_duration = self.player.query_position() + if self.p_position != gst.CLOCK_TIME_NONE: + value = self.p_position * 100.0 / self.p_duration + self.adjustment.set_value(value) + + return True + +def main(args): + def usage(): + sys.stderr.write("usage: %s URI-OF-MEDIA-FILE\n" % args[0]) + sys.exit(1) + + # Need to register our derived widget types for implicit event + # handlers to get called. + gobject.type_register(PlayerWindow) + gobject.type_register(VideoWidget) + + w = PlayerWindow() + + if len(args) != 2: + usage() + + if not gst.uri_is_valid(args[1]): + sys.stderr.write("Error: Invalid URI: %s\n" % args[1]) + sys.exit(1) + + w.load_file(args[1]) + w.show_all() + + gtk.main() + +if __name__ == '__main__': + sys.exit(main(sys.argv)) diff --git a/examples/remuxer.py b/examples/remuxer.py new file mode 100644 index 0000000..1ed4ab7 --- /dev/null +++ b/examples/remuxer.py @@ -0,0 +1,840 @@ +#!/usr/bin/env python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +import pygtk +pygtk.require('2.0') + +import sys + +import gobject +gobject.threads_init() + +import pygst +pygst.require('0.10') +import gst +import gst.interfaces +import gtk +gtk.gdk.threads_init() + +class GstPlayer: + def __init__(self, videowidget): + self.playing = False + self.player = gst.element_factory_make("playbin", "player") + self.videowidget = videowidget + + bus = self.player.get_bus() + bus.enable_sync_message_emission() + bus.add_signal_watch() + bus.connect('sync-message::element', self.on_sync_message) + bus.connect('message', self.on_message) + + def on_sync_message(self, bus, message): + if message.structure is None: + return + if message.structure.get_name() == 'prepare-xwindow-id': + # Sync with the X server before giving the X-id to the sink + gtk.gdk.threads_enter() + gtk.gdk.display_get_default().sync() + self.videowidget.set_sink(message.src) + message.src.set_property('force-aspect-ratio', True) + gtk.gdk.threads_leave() + + def on_message(self, bus, message): + t = message.type + if t == gst.MESSAGE_ERROR: + err, debug = message.parse_error() + print "Error: %s" % err, debug + if self.on_eos: + self.on_eos() + self.playing = False + elif t == gst.MESSAGE_EOS: + if self.on_eos: + self.on_eos() + self.playing = False + + def set_location(self, location): + self.player.set_state(gst.STATE_NULL) + self.player.set_property('uri', location) + + def get_location(self): + return self.player.get_property('uri') + + def query_position(self): + "Returns a (position, duration) tuple" + try: + position, format = self.player.query_position(gst.FORMAT_TIME) + except: + position = gst.CLOCK_TIME_NONE + + try: + duration, format = self.player.query_duration(gst.FORMAT_TIME) + except: + duration = gst.CLOCK_TIME_NONE + + return (position, duration) + + def seek(self, location): + """ + @param location: time to seek to, in nanoseconds + """ + gst.debug("seeking to %r" % location) + event = gst.event_new_seek(1.0, gst.FORMAT_TIME, + gst.SEEK_FLAG_FLUSH, + gst.SEEK_TYPE_SET, location, + gst.SEEK_TYPE_NONE, 0) + + res = self.player.send_event(event) + if res: + gst.info("setting new stream time to 0") + self.player.set_new_stream_time(0L) + else: + gst.error("seek to %r failed" % location) + + def pause(self): + gst.info("pausing player") + self.player.set_state(gst.STATE_PAUSED) + self.playing = False + + def play(self): + gst.info("playing player") + self.player.set_state(gst.STATE_PLAYING) + self.playing = True + + def stop(self): + self.player.set_state(gst.STATE_NULL) + gst.info("stopped player") + + def get_state(self, timeout=1): + return self.player.get_state(timeout=timeout) + + def is_playing(self): + return self.playing + +class VideoWidget(gtk.DrawingArea): + def __init__(self): + gtk.DrawingArea.__init__(self) + self.imagesink = None + self.unset_flags(gtk.DOUBLE_BUFFERED) + + def do_expose_event(self, event): + if self.imagesink: + self.imagesink.expose() + return False + else: + return True + + def set_sink(self, sink): + assert self.window.xid + self.imagesink = sink + self.imagesink.set_xwindow_id(self.window.xid) + +class TimeControl(gtk.HBox): + # all labels same size + sizegroup = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL) + __gproperties__ = {'time': (gobject.TYPE_UINT64, 'Time', 'Time', + # not actually usable: see #335854 + # kept for .notify() usage + 0L, (1<<63)-1, 0L, + gobject.PARAM_READABLE)} + + def __init__(self, window, label): + gtk.HBox.__init__(self) + self.pwindow = window + self.label = label + self.create_ui() + + def get_property(self, param, pspec): + if param == 'time': + return self.get_time() + else: + assert param in self.__gproperties__, \ + 'Unknown property: %s' % param + + def create_ui(self): + label = gtk.Label(self.label + ": ") + label.show() + a = gtk.Alignment(1.0, 0.5) + a.add(label) + a.set_padding(0, 0, 12, 0) + a.show() + self.sizegroup.add_widget(a) + self.pack_start(a, True, False, 0) + + self.minutes = minutes = gtk.Entry(5) + minutes.set_width_chars(5) + minutes.set_alignment(1.0) + minutes.connect('changed', lambda *x: self.notify('time')) + minutes.connect_after('activate', lambda *x: self.activated()) + label2 = gtk.Label(":") + self.seconds = seconds = gtk.Entry(2) + seconds.set_width_chars(2) + seconds.set_alignment(1.0) + seconds.connect('changed', lambda *x: self.notify('time')) + seconds.connect_after('activate', lambda *x: self.activated()) + label3 = gtk.Label(".") + self.milliseconds = milliseconds = gtk.Entry(3) + milliseconds.set_width_chars(3) + milliseconds.set_alignment(0.0) + milliseconds.connect('changed', lambda *x: self.notify('time')) + milliseconds.connect_after('activate', lambda *x: self.activated()) + set = gtk.Button('Set') + goto = gtk.Button('Go') + goto.set_property('image', + gtk.image_new_from_stock(gtk.STOCK_JUMP_TO, + gtk.ICON_SIZE_BUTTON)) + for w in minutes, label2, seconds, label3, milliseconds: + w.show() + self.pack_start(w, False) + set.show() + self.pack_start(set, False, False, 6) + goto.show() + self.pack_start(goto, False, False, 0) + set.connect('clicked', lambda *x: self.set_now()) + goto.connect('clicked', lambda *x: self.activated()) + pad = gtk.Label("") + pad.show() + self.pack_start(pad, True, False, 0) + + def get_time(self): + time = 0 + for w, multiplier in ((self.minutes, gst.SECOND*60), + (self.seconds, gst.SECOND), + (self.milliseconds, gst.MSECOND)): + text = w.get_text() + try: + val = int(text) + except ValueError: + val = 0 + w.set_text(val and str(val) or '0') + time += val * multiplier + return time + + def set_time(self, time): + if time == gst.CLOCK_TIME_NONE: + print "Can't set '%s' (invalid time)" % self.label + return + self.freeze_notify() + for w, multiplier in ((self.minutes, gst.SECOND*60), + (self.seconds, gst.SECOND), + (self.milliseconds, gst.MSECOND)): + val = time // multiplier + w.set_text(str(val)) + time -= val * multiplier + self.thaw_notify() + + def set_now(self): + time, dur = self.pwindow.player.query_position() + self.set_time(time) + + def activated(self): + time = self.get_time() + if self.pwindow.player.is_playing(): + self.pwindow.play_toggled() + self.pwindow.player.seek(time) + self.pwindow.player.get_state(timeout=gst.MSECOND * 200) + +class ProgressDialog(gtk.Dialog): + def __init__(self, title, description, task, parent, flags, buttons): + gtk.Dialog.__init__(self, title, parent, flags, buttons) + self._create_ui(title, description, task) + + def _create_ui(self, title, description, task): + self.set_border_width(6) + self.set_resizable(False) + self.set_has_separator(False) + + vbox = gtk.VBox() + vbox.set_border_width(6) + vbox.show() + self.vbox.pack_start(vbox, False) + + label = gtk.Label('%s' % title) + label.set_use_markup(True) + label.set_alignment(0.0, 0.0) + label.show() + vbox.pack_start(label, False) + + label = gtk.Label(description) + label.set_use_markup(True) + label.set_alignment(0.0, 0.0) + label.set_line_wrap(True) + label.set_padding(0, 12) + label.show() + vbox.pack_start(label, False) + + self.progress = progress = gtk.ProgressBar() + progress.show() + vbox.pack_start(progress, False) + + self.progresstext = label = gtk.Label('') + label.set_line_wrap(True) + label.set_use_markup(True) + label.set_alignment(0.0, 0.0) + label.show() + vbox.pack_start(label) + self.set_task(task) + + def set_task(self, task): + self.progresstext.set_markup('%s' % task) + +UNKNOWN = 0 +SUCCESS = 1 +FAILURE = 2 +CANCELLED = 3 + +class RemuxProgressDialog(ProgressDialog): + def __init__(self, parent, start, stop, fromname, toname): + ProgressDialog.__init__(self, + "Writing to disk", + ('Writing the selected segment of %s ' + 'to %s. This may take some time.' + % (fromname, toname)), + 'Starting media pipeline', + parent, + gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, + (gtk.STOCK_CANCEL, CANCELLED, + gtk.STOCK_CLOSE, SUCCESS)) + self.start = start + self.stop = stop + self.update_position(start) + self.set_completed(False) + + def update_position(self, pos): + pos = min(max(pos, self.start), self.stop) + remaining = self.stop - pos + minutes = remaining // (gst.SECOND * 60) + seconds = (remaining - minutes * gst.SECOND * 60) // gst.SECOND + self.progress.set_text('%d:%02d of video remaining' % (minutes, seconds)) + self.progress.set_fraction(1.0 - float(remaining) / (self.stop - self.start)) + + def set_completed(self, completed): + self.set_response_sensitive(CANCELLED, not completed) + self.set_response_sensitive(SUCCESS, completed) + +def set_connection_blocked_async_marshalled(pads, proc, *args, **kwargs): + def clear_list(l): + while l: + l.pop() + + to_block = list(pads) + to_relink = [(x, x.get_peer()) for x in pads] + + def on_pad_blocked_sync(pad, is_blocked): + if pad not in to_block: + # can happen after the seek and before unblocking -- racy, + # but no prob, bob. + return + to_block.remove(pad) + if not to_block: + # marshal to main thread + gobject.idle_add(on_pads_blocked) + + def on_pads_blocked(): + for src, sink in to_relink: + src.link(sink) + proc(*args, **kwargs) + for src, sink in to_relink: + src.set_blocked_async(False, lambda *x: None) + clear_list(to_relink) + + for src, sink in to_relink: + src.unlink(sink) + src.set_blocked_async(True, on_pad_blocked_sync) + +class Remuxer(gst.Pipeline): + + __gsignals__ = {'done': (gobject.SIGNAL_RUN_LAST, None, (int,))} + + def __init__(self, fromuri, touri, start, stop): + # HACK: should do Pipeline.__init__, but that doesn't do what we + # want; there's a bug open aboooot that + self.__gobject_init__() + + assert start >= 0 + assert stop > start + + self.fromuri = fromuri + self.touri = None + self.start_time = start + self.stop_time = stop + + self.src = self.remuxbin = self.sink = None + self.resolution = UNKNOWN + + self.window = None + self.pdialog = None + + self._query_id = -1 + + def do_setup_pipeline(self): + self.src = gst.element_make_from_uri(gst.URI_SRC, self.fromuri) + self.remuxbin = RemuxBin(self.start_time, self.stop_time) + self.sink = gst.element_make_from_uri(gst.URI_SINK, self.touri) + self.resolution = UNKNOWN + + if gobject.signal_lookup('allow-overwrite', self.sink.__class__): + self.sink.connect('allow-overwrite', lambda *x: True) + + self.add(self.src, self.remuxbin, self.sink) + + self.src.link(self.remuxbin) + self.remuxbin.link(self.sink) + + def do_get_touri(self): + chooser = gtk.FileChooserDialog('Save as...', + self.window, + action=gtk.FILE_CHOOSER_ACTION_SAVE, + buttons=(gtk.STOCK_CANCEL, + CANCELLED, + gtk.STOCK_SAVE, + SUCCESS)) + chooser.set_uri(self.fromuri) # to select the folder + chooser.unselect_all() + chooser.set_do_overwrite_confirmation(True) + name = self.fromuri.split('/')[-1][:-4] + '-remuxed.ogg' + chooser.set_current_name(name) + resp = chooser.run() + uri = chooser.get_uri() + chooser.destroy() + + if resp == SUCCESS: + return uri + else: + return None + + def _start_queries(self): + def do_query(): + try: + # HACK: self.remuxbin.query() should do the same + # (requires implementing a vmethod, dunno how to do that + # although i think it's possible) + # HACK: why does self.query_position(..) not give useful + # answers? + pad = self.remuxbin.get_pad('src') + pos, duration = pad.query_position(gst.FORMAT_TIME) + if pos != gst.CLOCK_TIME_NONE: + self.pdialog.update_position(pos) + except: + # print 'query failed' + pass + return True + if self._query_id == -1: + self._query_id = gobject.timeout_add(100, # 10 Hz + do_query) + + def _stop_queries(self): + if self._query_id != -1: + gobject.source_remove(self._query_id) + self._query_id = -1 + + def _bus_watch(self, bus, message): + if message.type == gst.MESSAGE_ERROR: + print 'error', message + self._stop_queries() + m = gtk.MessageDialog(self.window, + gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT, + gtk.MESSAGE_ERROR, + gtk.BUTTONS_CLOSE, + "Error processing file") + gerror, debug = message.parse_error() + txt = ('There was an error processing your file: %s\n\n' + 'Debug information:\n%s' % (gerror, debug)) + m.format_secondary_text(txt) + m.run() + m.destroy() + self.response(FAILURE) + elif message.type == gst.MESSAGE_WARNING: + print 'warning', message + elif message.type == gst.MESSAGE_EOS: + # print 'eos, woot', message.src + name = self.touri + if name.startswith('file://'): + name = name[7:] + self.pdialog.set_task('Finished writing %s' % name) + self.pdialog.update_position(self.stop_time) + self._stop_queries() + self.pdialog.set_completed(True) + elif message.type == gst.MESSAGE_STATE_CHANGED: + if message.src == self: + old, new, pending = message.parse_state_changed() + if ((old, new, pending) == + (gst.STATE_READY, gst.STATE_PAUSED, + gst.STATE_VOID_PENDING)): + self.pdialog.set_task('Processing file') + self.pdialog.update_position(self.start_time) + self._start_queries() + self.set_state(gst.STATE_PLAYING) + + def response(self, response): + assert self.resolution == UNKNOWN + self.resolution = response + self.set_state(gst.STATE_NULL) + self.pdialog.destroy() + self.pdialog = None + self.window.set_sensitive(True) + self.emit('done', response) + + def start(self, main_window): + self.window = main_window + self.touri = self.do_get_touri() + if not self.touri: + return False + self.do_setup_pipeline() + bus = self.get_bus() + bus.add_signal_watch() + bus.connect('message', self._bus_watch) + if self.window: + # can be None if we are debugging... + self.window.set_sensitive(False) + fromname = self.fromuri.split('/')[-1] + toname = self.touri.split('/')[-1] + self.pdialog = RemuxProgressDialog(main_window, self.start_time, + self.stop_time, fromname, toname) + self.pdialog.show() + self.pdialog.connect('response', lambda w, r: self.response(r)) + + self.set_state(gst.STATE_PAUSED) + return True + + def run(self, main_window): + if self.start(main_window): + loop = gobject.MainLoop() + self.connect('done', lambda *x: gobject.idle_add(loop.quit)) + loop.run() + else: + self.resolution = CANCELLED + return self.resolution + +class RemuxBin(gst.Bin): + def __init__(self, start_time, stop_time): + self.__gobject_init__() + + self.parsefactories = self._find_parsers() + self.parsers = [] + + self.demux = gst.element_factory_make('oggdemux') + self.mux = gst.element_factory_make('oggmux') + + self.add(self.demux, self.mux) + + self.add_pad(gst.GhostPad('sink', self.demux.get_pad('sink'))) + self.add_pad(gst.GhostPad('src', self.mux.get_pad('src'))) + + self.demux.connect('pad-added', self._new_demuxed_pad) + self.demux.connect('no-more-pads', self._no_more_pads) + + self.start_time = start_time + self.stop_time = stop_time + + def _find_parsers(self): + registry = gst.registry_get_default() + ret = {} + for f in registry.get_feature_list(gst.ElementFactory): + if f.get_klass().find('Parser') >= 0: + for t in f.get_static_pad_templates(): + if t.direction == gst.PAD_SINK: + for s in t.get_caps(): + ret[s.get_name()] = f.get_name() + break + return ret + + def _new_demuxed_pad(self, element, pad): + format = pad.get_caps()[0].get_name() + + if format not in self.parsefactories: + self.async_error("Unsupported media type: %s", format) + return + + queue = gst.element_factory_make('queue', None); + queue.set_property('max-size-buffers', 1000) + parser = gst.element_factory_make(self.parsefactories[format]) + self.add(queue) + self.add(parser) + queue.set_state(gst.STATE_PAUSED) + parser.set_state(gst.STATE_PAUSED) + pad.link(queue.get_compatible_pad(pad)) + queue.link(parser) + parser.link(self.mux) + self.parsers.append(parser) + + def _do_seek(self): + flags = gst.SEEK_FLAG_FLUSH + # HACK: self.seek should work, should try that at some point + return self.demux.seek(1.0, gst.FORMAT_TIME, flags, + gst.SEEK_TYPE_SET, self.start_time, + gst.SEEK_TYPE_SET, self.stop_time) + + def _no_more_pads(self, element): + pads = [x.get_pad('src') for x in self.parsers] + set_connection_blocked_async_marshalled(pads, + self._do_seek) + + +class PlayerWindow(gtk.Window): + UPDATE_INTERVAL = 500 + def __init__(self): + gtk.Window.__init__(self) + self.set_default_size(600, 425) + + self.create_ui() + + self.player = GstPlayer(self.videowidget) + + def on_eos(): + self.player.seek(0L) + self.play_toggled() + self.player.on_eos = lambda *x: on_eos() + + self.update_id = -1 + self.changed_id = -1 + self.seek_timeout_id = -1 + + self.p_position = gst.CLOCK_TIME_NONE + self.p_duration = gst.CLOCK_TIME_NONE + + def on_delete_event(): + self.player.stop() + gtk.main_quit() + self.connect('delete-event', lambda *x: on_delete_event()) + + def load_file(self, location): + filename = location.split('/')[-1] + self.set_title('%s munger' % filename) + self.player.set_location(location) + if self.videowidget.flags() & gtk.REALIZED: + self.play_toggled() + else: + self.videowidget.connect_after('realize', + lambda *x: self.play_toggled()) + + def create_ui(self): + vbox = gtk.VBox() + vbox.show() + self.add(vbox) + + self.videowidget = VideoWidget() + self.videowidget.show() + vbox.pack_start(self.videowidget) + + hbox = gtk.HBox() + hbox.show() + vbox.pack_start(hbox, fill=False, expand=False) + + self.adjustment = gtk.Adjustment(0.0, 0.00, 100.0, 0.1, 1.0, 1.0) + hscale = gtk.HScale(self.adjustment) + hscale.set_digits(2) + hscale.set_update_policy(gtk.UPDATE_CONTINUOUS) + hscale.connect('button-press-event', self.scale_button_press_cb) + hscale.connect('button-release-event', self.scale_button_release_cb) + hscale.connect('format-value', self.scale_format_value_cb) + hbox.pack_start(hscale) + hscale.show() + self.hscale = hscale + + table = gtk.Table(2,3) + table.show() + vbox.pack_start(table, fill=False, expand=False, padding=6) + + self.button = button = gtk.Button(stock=gtk.STOCK_MEDIA_PLAY) + button.set_property('can-default', True) + button.set_focus_on_click(False) + button.show() + + # problem: play and paused are of different widths and cause the + # window to re-layout + # "solution": add more buttons to a vbox so that the horizontal + # width is enough + bvbox = gtk.VBox() + bvbox.add(button) + bvbox.add(gtk.Button(stock=gtk.STOCK_MEDIA_PLAY)) + bvbox.add(gtk.Button(stock=gtk.STOCK_MEDIA_PAUSE)) + sizegroup = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL) + for kid in bvbox.get_children(): + sizegroup.add_widget(kid) + bvbox.show() + table.attach(bvbox, 0, 1, 0, 2, gtk.FILL, gtk.FILL) + + # can't set this property before the button has a window + button.set_property('has-default', True) + button.connect('clicked', lambda *args: self.play_toggled()) + + self.cutin = cut = TimeControl(self, "Cut in time") + cut.show() + table.attach(cut, 1, 2, 0, 1, gtk.EXPAND, 0, 12) + + self.cutout = cut = TimeControl(self, "Cut out time") + cut.show() + table.attach(cut, 1, 2, 1, 2, gtk.EXPAND, 0, 12) + + button = gtk.Button("_Open other movie...") + button.show() + button.connect('clicked', lambda *x: self.do_choose_file()) + table.attach(button, 2, 3, 0, 1, gtk.FILL, gtk.FILL) + + button = gtk.Button("_Write to disk") + button.set_property('image', + gtk.image_new_from_stock(gtk.STOCK_SAVE_AS, + gtk.ICON_SIZE_BUTTON)) + button.connect('clicked', lambda *x: self.do_remux()) + button.show() + table.attach(button, 2, 3, 1, 2, gtk.FILL, gtk.FILL) + + #self.cutin.connect('notify::time', lambda *x: self.check_cutout()) + #self.cutout.connect('notify::time', lambda *x: self.check_cutin()) + + def do_remux(self): + if self.player.is_playing(): + self.play_toggled() + in_uri = self.player.get_location() + out_uri = in_uri[:-4] + '-remuxed.ogg' + r = Remuxer(in_uri, out_uri, + self.cutin.get_time(), self.cutout.get_time()) + r.run(self) + + def do_choose_file(self): + if self.player.is_playing(): + self.play_toggled() + chooser = gtk.FileChooserDialog('Choose a movie to cut cut cut', + self, + buttons=(gtk.STOCK_CANCEL, + CANCELLED, + gtk.STOCK_OPEN, + SUCCESS)) + chooser.set_local_only(False) + chooser.set_select_multiple(False) + f = gtk.FileFilter() + f.set_name("All files") + f.add_pattern("*") + chooser.add_filter(f) + f = gtk.FileFilter() + f.set_name("Ogg files") + f.add_pattern("*.og[gvax]") # as long as this is the only thing we + # support... + chooser.add_filter(f) + chooser.set_filter(f) + + prev = self.player.get_location() + if prev: + chooser.set_uri(prev) + + resp = chooser.run() + uri = chooser.get_uri() + chooser.destroy() + + if resp == SUCCESS and uri != None: + self.load_file(uri) + return True + else: + return False + + def check_cutout(self): + if self.cutout.get_time() <= self.cutin.get_time(): + pos, dur = self.player.query_position() + self.cutout.set_time(dur) + + def check_cutin(self): + if self.cutin.get_time() >= self.cutout.get_time(): + self.cutin.set_time(0) + + def play_toggled(self): + if self.player.is_playing(): + self.player.pause() + self.button.set_label(gtk.STOCK_MEDIA_PLAY) + else: + self.player.play() + if self.update_id == -1: + self.update_id = gobject.timeout_add(self.UPDATE_INTERVAL, + self.update_scale_cb) + self.button.set_label(gtk.STOCK_MEDIA_PAUSE) + + def scale_format_value_cb(self, scale, value): + if self.p_duration == -1: + real = 0 + else: + real = value * self.p_duration / 100 + + seconds = real / gst.SECOND + + return "%02d:%02d" % (seconds / 60, seconds % 60) + + def scale_button_press_cb(self, widget, event): + # see seek.c:start_seek + gst.debug('starting seek') + + self.button.set_sensitive(False) + self.was_playing = self.player.is_playing() + if self.was_playing: + self.player.pause() + + # don't timeout-update position during seek + if self.update_id != -1: + gobject.source_remove(self.update_id) + self.update_id = -1 + + # make sure we get changed notifies + if self.changed_id == -1: + self.changed_id = self.hscale.connect('value-changed', + self.scale_value_changed_cb) + + def scale_value_changed_cb(self, scale): + # see seek.c:seek_cb + real = long(scale.get_value() * self.p_duration / 100) # in ns + gst.debug('value changed, perform seek to %r' % real) + self.player.seek(real) + # allow for a preroll + self.player.get_state(timeout=50*gst.MSECOND) # 50 ms + + def scale_button_release_cb(self, widget, event): + # see seek.cstop_seek + widget.disconnect(self.changed_id) + self.changed_id = -1 + + self.button.set_sensitive(True) + if self.seek_timeout_id != -1: + gobject.source_remove(self.seek_timeout_id) + self.seek_timeout_id = -1 + else: + gst.debug('released slider, setting back to playing') + if self.was_playing: + self.player.play() + + if self.update_id != -1: + self.error('Had a previous update timeout id') + else: + self.update_id = gobject.timeout_add(self.UPDATE_INTERVAL, + self.update_scale_cb) + + def update_scale_cb(self): + had_duration = self.p_duration != gst.CLOCK_TIME_NONE + self.p_position, self.p_duration = self.player.query_position() + if self.p_position != gst.CLOCK_TIME_NONE: + value = self.p_position * 100.0 / self.p_duration + self.adjustment.set_value(value) + if not had_duration: + self.cutin.set_time(0) + return True + +def main(args): + def usage(): + sys.stderr.write("usage: %s [URI-OF-MEDIA-FILE]\n" % args[0]) + return 1 + + w = PlayerWindow() + w.show() + + if len(args) == 1: + if not w.do_choose_file(): + return 1 + elif len(args) == 2: + if not gst.uri_is_valid(args[1]): + sys.stderr.write("Error: Invalid URI: %s\n" % args[1]) + return 1 + w.load_file(args[1]) + else: + return usage() + + gtk.main() + +if __name__ == '__main__': + sys.exit(main(sys.argv)) diff --git a/examples/sinkelement.py b/examples/sinkelement.py new file mode 100644 index 0000000..a596601 --- /dev/null +++ b/examples/sinkelement.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +# sinkelement.py +# (c) 2005 Edward Hervey +# Licensed under LGPL +# +# Small test application to show how to write a sink element +# in 20 lines in python +# +# Run this script with GST_DEBUG=python:5 to see the debug +# messages + +import pygst +pygst.require('0.10') +import gst +import gobject +gobject.threads_init () + +# +# Simple Sink element created entirely in python +# + +class MySink(gst.Element): + + _sinkpadtemplate = gst.PadTemplate ("sinkpadtemplate", + gst.PAD_SINK, + gst.PAD_ALWAYS, + gst.caps_new_any()) + + def __init__(self): + gst.Element.__init__(self) + gst.info('creating sinkpad') + self.sinkpad = gst.Pad(self._sinkpadtemplate, "sink") + gst.info('adding sinkpad to self') + self.add_pad(self.sinkpad) + + gst.info('setting chain/event functions') + self.sinkpad.set_chain_function(self.chainfunc) + self.sinkpad.set_event_function(self.eventfunc) + + def chainfunc(self, pad, buffer): + self.info("%s timestamp(buffer):%d" % (pad, buffer.timestamp)) + return gst.FLOW_OK + + def eventfunc(self, pad, event): + self.info("%s event:%r" % (pad, event.type)) + return True + +gobject.type_register(MySink) + +# +# Code to test the MySink class +# + +src = gst.element_factory_make('fakesrc') +gst.info('About to create MySink') +sink = MySink() + +pipeline = gst.Pipeline() +pipeline.add(src, sink) + +src.link(sink) + +pipeline.set_state(gst.STATE_PLAYING) + +gobject.MainLoop().run() diff --git a/examples/vumeter.py b/examples/vumeter.py new file mode 100755 index 0000000..5e1a590 --- /dev/null +++ b/examples/vumeter.py @@ -0,0 +1,108 @@ +#!/usr/bin/env python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +# gst-python +# Copyright (C) 2005 Andy Wingo +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library 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 +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + + +# A test more of gst-plugins than of gst-python. + + +import pygtk +pygtk.require('2.0') +import gtk +import gobject + +import pygst +pygst.require('0.10') +import gst + +import fvumeter + + +def clamp(x, min, max): + if x < min: + return min + elif x > max: + return max + return x + + +class Window(gtk.Dialog): + def __init__(self): + gtk.Dialog.__init__(self, 'Volume Level') + self.prepare_ui() + + def prepare_ui(self): + self.set_default_size(200,60) + self.set_title('Volume Level') + self.connect('delete-event', lambda *x: gtk.main_quit()) + self.vus = [] + self.vus.append(fvumeter.FVUMeter()) + self.vus.append(fvumeter.FVUMeter()) + self.vbox.add(self.vus[0]) + self.vbox.add(self.vus[1]) + self.vus[0].show() + self.vus[1].show() + + def error(self, message, secondary=None): + m = gtk.MessageDialog(self, + gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, + gtk.MESSAGE_ERROR, + gtk.BUTTONS_OK, + message) + if secondary: + m.format_secondary_text(secondary) + m.run() + + def on_message(self, bus, message): + if message.structure.get_name() == 'level': + s = message.structure + for i in range(0, len(s['peak'])): + self.vus[i].freeze_notify() + decay = clamp(s['decay'][i], -90.0, 0.0) + peak = clamp(s['peak'][i], -90.0, 0.0) + if peak > decay: + print "ERROR: peak bigger than decay!" + + self.vus[i].set_property('decay', decay) + self.vus[i].set_property('peak', peak) + return True + + def run(self): + try: + self.set_sensitive(False) + s = 'alsasrc ! level message=true ! fakesink' + pipeline = gst.parse_launch(s) + self.set_sensitive(True) + pipeline.get_bus().add_signal_watch() + i = pipeline.get_bus().connect('message::element', self.on_message) + pipeline.set_state(gst.STATE_PLAYING) + gtk.Dialog.run(self) + pipeline.get_bus().disconnect(i) + pipeline.get_bus().remove_signal_watch() + pipeline.set_state(gst.STATE_NULL) + except gobject.GError, e: + self.set_sensitive(True) + self.error('Could not create pipeline', e.__str__) + +if __name__ == '__main__': + w = Window() + w.show_all() + w.run() diff --git a/gst-python.doap b/gst-python.doap new file mode 100644 index 0000000..5482332 --- /dev/null +++ b/gst-python.doap @@ -0,0 +1,270 @@ + + + GStreamer Python Bindings + gst-python + + 1999-10-31 + +Python bindings for GStreamer + + +GStreamer Python Bindings is a set of Python bindings for GStreamer, using +the same system as PyGTK. +It also comes with a number of examples. + + + + + + Python + + + + + + + + + + + + + 0.10.22 + 0.10 + Ninety Tons of Thunder + 2011-10-29 + + + + + + + + 0.10.21 + 0.10 + he used to be an ironhorse, twenty years ago + 2011-01-20 + + + + + + + + 0.10.19 + 0.10 + Insert Casablanca quote here + 2010-07-15 + + + + + + + + 0.10.18 + 0.10 + A pigeon carrying a 500ton block + 2010-02-11 + + + + + + + + 0.10.17 + 0.10 + Shiny new button + 2009-10-05 + + + + + + + + 0.10.16 + 0.10 + Distorted memory + 2009-08-04 + + + + + + + + 0.10.15 + 0.10 + We built a wall + 2009-05-10 + + + + + + + + 0.10.14 + 0.10 + You Better Think + 2009-01-19 + + + + + + + + 0.10.13 + 0.10 + Feel The Sun Rise + 2008-10-02 + + + + + + + + 0.10.12 + 0.10 + A Wild Finish + 2008-06-18 + + + + + + + + 0.10.11 + 0.10 + What I got + 2008-03-21 + + + + + + + + 0.10.10 + 0.10 + Destination Overtime + 2008-01-28 + + + + + + + + 0.10.9 + 0.10 + I've heard a lot of stories in my time + 2007-11-28 + + + + + + + + 0.10.6 + 0.10 + You're not very subtle, but you are effective + 2006-12-04 + + + + + + + + 0.10.5 + 0.10 + My Little Poney wants some Funk + 2006-07-20 + + + + + + + + 0.10.4 + 0.10 + Alegre + 2006-04-28 + + + + + + + + 0.10.3 + 0.10 + Maybe not today. Maybe not tomorrow, but soon... + 2006-03-21 + + + + + + 0.10.2 + 0.10 + And if the devil is six + 2006-01-16 + + + + + + 0.10.1 + 0.10 + Krisimas Yakanaka + 2005-12-23 + + + + + + 0.10.0 + 0.10 + Reblochon + 2005-12-05 + + + + + + 0.8.4 + 0.8 + 64 bit is enough for everyone + 2006-03-08 + + + + + + + + Wim Taymans + 0d93fde052812d51a05fd86de9bdbf674423daa2 + + + + + Edward Hervey + + + + diff --git a/gst-python.spec b/gst-python.spec new file mode 100644 index 0000000..3c425e5 --- /dev/null +++ b/gst-python.spec @@ -0,0 +1,100 @@ +%define majorminor 0.10 +%define gstreamer gstreamer +%define _pygtk 2.6.3 +%define _gst 0.10.20 + +Name: %{gstreamer}-python +Version: 0.10.22 +Release: 1 +Summary: Python bindings for GStreamer. + +Group: Development/Languages +License: LGPL +URL: http://gstreamer.freedesktop.org/ +Source: http://gstreamer.freedesktop.org/src/gst-python/gst-python-%{version}.tar.gz + +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) + +Requires: python >= 2 +Requires: gnome-python2 +Requires: pygtk2 >= %_pygtk +Requires: %{gstreamer} +Requires: %{gstreamer}-plugins-base + +BuildRequires: python >= 2 +BuildRequires: python-devel >= 2 +BuildRequires: pygtk2-devel >= %_pygtk +BuildRequires: xmlto +BuildRequires: links + +BuildRequires: %{gstreamer}-devel >= %_gst +BuildRequires: %{gstreamer}-plugins-base-devel >= %_gst + +# sigh, libtool +BuildRequires: gcc-c++ + +%description +This module contains a wrapper that allows GStreamer applications +to be written in Python. + +%prep +%setup -q -n gst-python-%{version} + +%build +%configure +make %{?_smp_mflags} + +%install +rm -rf $RPM_BUILD_ROOT + +%makeinstall +find $RPM_BUILD_ROOT -type f -name "*.la" -exec rm -f {} ';' + +%clean +rm -rf $RPM_BUILD_ROOT + +%files +%defattr(-,root,root,-) +%doc AUTHORS COPYING ChangeLog NEWS README gst-python.doap +%dir %{_libdir}/python?.?/site-packages/gst-%{majorminor} +%{_libdir}/python?.?/site-packages/pygst.pth +%{_libdir}/python?.?/site-packages/pygst.py +%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/__init__.py* +%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/extend +%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/_gst.so +%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/interfaces.so +%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/pbutils.so +%{_libdir}/gstreamer-%{majorminor}/libgstpython.so +%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/audio.so +%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/tag.so +%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/video.so +%{_libdir}/python?.?/site-packages/gstoption.so + + +%{_datadir}/gst-python +%{_libdir}/pkgconfig/gst-python-%{majorminor}.pc + +%changelog +* Fri Dec 15 2006 Thomas Vander Stichele +- add doap file + +* Tue Dec 20 2005 Thomas Vander Stichele +- updated spec file + +* Thu Oct 06 2005 Edward Hervey < edward at fluendo dot com > +- Updated spec file for 0.9 + +* Fri Nov 05 2004 Christian Schaller < uraeus at gnome org > +- Remerged spec file with cvs version + +* Tue Oct 12 2004 Thomas Vander Stichele +- 0.7.93-0.fdr.1: new upstream release + +* Mon Jun 21 2004 Thomas Vander Stichele +- 0.7.92-0.fdr.1: new upstream release + +* Wed Mar 31 2004 Thomas Vander Stichele +- 0.7.91-0.fdr.1: new upstream release + +* Tue Sep 02 2003 Thomas Vander Stichele +- 0.1.0-0.fdr.1: first fedora release diff --git a/gst-python.spec.in b/gst-python.spec.in new file mode 100644 index 0000000..6989d65 --- /dev/null +++ b/gst-python.spec.in @@ -0,0 +1,100 @@ +%define majorminor @GST_MAJORMINOR@ +%define gstreamer gstreamer +%define _pygtk @PYGTK_REQ@ +%define _gst @GST_REQ@ + +Name: %{gstreamer}-python +Version: @VERSION@ +Release: 1 +Summary: Python bindings for GStreamer. + +Group: Development/Languages +License: LGPL +URL: http://gstreamer.freedesktop.org/ +Source: http://gstreamer.freedesktop.org/src/gst-python/gst-python-%{version}.tar.gz + +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) + +Requires: python >= 2 +Requires: gnome-python2 +Requires: pygtk2 >= %_pygtk +Requires: %{gstreamer} +Requires: %{gstreamer}-plugins-base + +BuildRequires: python >= 2 +BuildRequires: python-devel >= 2 +BuildRequires: pygtk2-devel >= %_pygtk +BuildRequires: xmlto +BuildRequires: links + +BuildRequires: %{gstreamer}-devel >= %_gst +BuildRequires: %{gstreamer}-plugins-base-devel >= %_gst + +# sigh, libtool +BuildRequires: gcc-c++ + +%description +This module contains a wrapper that allows GStreamer applications +to be written in Python. + +%prep +%setup -q -n gst-python-%{version} + +%build +%configure +make %{?_smp_mflags} + +%install +rm -rf $RPM_BUILD_ROOT + +%makeinstall +find $RPM_BUILD_ROOT -type f -name "*.la" -exec rm -f {} ';' + +%clean +rm -rf $RPM_BUILD_ROOT + +%files +%defattr(-,root,root,-) +%doc AUTHORS COPYING ChangeLog NEWS README gst-python.doap +%dir %{_libdir}/python?.?/site-packages/gst-%{majorminor} +%{_libdir}/python?.?/site-packages/pygst.pth +%{_libdir}/python?.?/site-packages/pygst.py +%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/__init__.py* +%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/extend +%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/_gst.so +%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/interfaces.so +%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/pbutils.so +%{_libdir}/gstreamer-%{majorminor}/libgstpython.so +%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/audio.so +%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/tag.so +%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/video.so +%{_libdir}/python?.?/site-packages/gstoption.so + + +%{_datadir}/gst-python +%{_libdir}/pkgconfig/gst-python-%{majorminor}.pc + +%changelog +* Fri Dec 15 2006 Thomas Vander Stichele +- add doap file + +* Tue Dec 20 2005 Thomas Vander Stichele +- updated spec file + +* Thu Oct 06 2005 Edward Hervey < edward at fluendo dot com > +- Updated spec file for 0.9 + +* Fri Nov 05 2004 Christian Schaller < uraeus at gnome org > +- Remerged spec file with cvs version + +* Tue Oct 12 2004 Thomas Vander Stichele +- 0.7.93-0.fdr.1: new upstream release + +* Mon Jun 21 2004 Thomas Vander Stichele +- 0.7.92-0.fdr.1: new upstream release + +* Wed Mar 31 2004 Thomas Vander Stichele +- 0.7.91-0.fdr.1: new upstream release + +* Tue Sep 02 2003 Thomas Vander Stichele +- 0.1.0-0.fdr.1: first fedora release diff --git a/gst/Makefile.am b/gst/Makefile.am new file mode 100644 index 0000000..4426a3a --- /dev/null +++ b/gst/Makefile.am @@ -0,0 +1,195 @@ +common_cflags = $(PYGOBJECT_CFLAGS) $(GST_CFLAGS) $(GST_OPTION_CFLAGS) -fno-strict-aliasing +common_libadd = $(GST_LIBS) $(GST_OPTION_LIBS) +common_ldflags = -module -avoid-version + +pkgpyexecdir = $(pyexecdir)/gst-$(GST_MAJORMINOR)/gst + +# we install everything in pyexecdir; otherwise you end up with a mess for +# multilib +pygstdir = $(pkgpyexecdir) +pygst_PYTHON = __init__.py + +pygstexecdir = $(pkgpyexecdir) +pygstexec_LTLIBRARIES = _gst.la $(interface_lib) $(pbutils_lib) + +interface_lib = interfaces.la +pbutils_lib = pbutils.la + +defs_DATA = gst-types.defs \ + gst-extrafuncs.defs \ + libs.defs \ + base.defs \ + pbutils.defs +defsdir = $(pkgdatadir)/$(GST_MAJORMINOR)/defs + +noinst_HEADERS = common.h pygst-private.h + +pygst_installdir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/ +pygst_install_HEADERS = pygst.h pygstvalue.h pygstminiobject.h pygstexception.h + +versioned_overrides = \ + gst-0.10.21.ignore \ + gst-0.10.22.ignore \ + gst-0.10.23.ignore \ + gst-0.10.24.ignore \ + gst-0.10.25.ignore \ + gst-0.10.26.ignore \ + gst-0.10.29.ignore \ + gst-0.10.30.ignore \ + gst-0.10.31.ignore \ + gst-0.10.32.ignore \ + gst-pb-0.10.23.ignore \ + gst-pb-0.10.25.ignore \ + gst-pb-0.10.26.ignore \ + gst-pb-0.10.29.ignore \ + gst-pb-0.10.30.ignore \ + gst-pb-0.10.31.ignore \ + gst-pb-0.10.32.ignore \ + gst-disable-loadsave.ignore + +INCLUDES = $(PYTHON_INCLUDES) +EXTRA_DIST = $(defs_DATA) $(versioned_overrides) common.h arg-types.py +GEN_FILES = arg-types.py gst-types.defs libs.defs base.defs pbutils.defs + +# GStreamer bindings +_gst_la_CFLAGS = $(common_cflags) +_gst_la_LIBADD = $(common_libadd) $(GST_BASE_LIBS) +_gst_la_LDFLAGS = $(common_ldflags) -export-symbols-regex "^(init_gst|_PyGObject_API|pygstminiobject_).*" \ + $(GST_BASE_LIBS) $(GST_CONTROLLER_LIBS) $(GST_NET_LIBS) $(GST_DP_LIBS) +_gst_la_SOURCES = \ + gst-argtypes.c \ + gstmodule.c \ + pygstiterator.c \ + pygstminiobject.c \ + pygstvalue.c \ + pygstexception.c + +nodist__gst_la_SOURCES = gst.c +GST_OVERRIDES = \ + gst.override \ + gstbin.override \ + gstbuffer.override \ + gstbus.override \ + gstevent.override \ + gstcaps.override \ + gstelement.override \ + gstelementfactory.override \ + gstmessage.override \ + gstobject.override \ + gstquery.override \ + gstpad.override \ + gststructure.override \ + gsttaglist.override \ + gstlibs.override \ + gstbase.override + +GST_DEFS = gst.defs gst-types.defs gst-extrafuncs.defs libs.defs base.defs +CLEANFILES = gst.c __init__.pyc +EXTRA_DIST += $(GST_DEFS) $(GST_OVERRIDES) gstversion.override.in +gst.c: $(GST_DEFS) $(GST_OVERRIDES) $(GEN_FILES) gstversion.override __init__.py + +# GStreamer interfaces bindings +interfaces_la_CFLAGS = $(common_cflags) $(GST_PLUGINS_BASE_CFLAGS) +interfaces_la_LIBADD = $(common_libadd) -lgstinterfaces-$(GST_MAJORMINOR) +interfaces_la_LDFLAGS = $(common_ldflags) \ + -export-symbols-regex "^(initinterface|_PyGObject_API).*" $(GST_PLUGINS_BASE_LIBS) +interfaces_la_SOURCES = interfacesmodule.c +nodist_interfaces_la_SOURCES = interfaces.c +INTERFACES_OVERRIDES = interfaces.override xoverlay.override +INTERFACES_DEFS = interfaces.defs xoverlay.defs +CLEANFILES += interfaces.c +EXTRA_DIST += $(INTERFACES_DEFS) $(INTERFACES_OVERRIDES) +interfaces.c: $(INTERFACES_DEFS) $(INTERFACES_OVERRIDES) $(GEN_FILES) + +# GStreamer pbutils bindings +pbutils_la_CFLAGS = $(common_cflags) $(GST_PLUGINS_BASE_CFLAGS) +pbutils_la_LIBADD = $(common_libadd) $(GST_PLUGINS_BASE_LIBS) -lgstpbutils-0.10 +pbutils_la_LDFLAGS = $(common_ldflags) \ + -export-symbols-regex "^(initpbutils|_PyGObject_API).*" $(GST_PLUGINS_BASE_LIBS) +pbutils_la_SOURCES = pbutilsmodule.c gst-argtypes.c +nodist_pbutils_la_SOURCES = pbutils.c +PBUTILS_OVERRIDES = pbutils.override +PBUTILS_DEFS = pbutils.defs +CLEANFILES += pbutils.c +EXTRA_DIST += $(PBUTILS_DEFS) $(PBUTILS_OVERRIDES) +pbutils.c: $(PBUTILS_DEFS) $(PBUTILS_OVERRIDES) $(GEN_FILES) + +# GStreamer audio bindings +AUDIO_OVERRIDES = audio.override +AUDIO_DEFS = audio.defs +CLEANFILES += audio.c +EXTRA_DIST += $(AUDIO_DEFS) $(AUDIO_OVERRIDES) +defs_DATA += $(AUDIO_DEFS) +GEN_FILES += $(AUDIO_DEFS) + +if HAVE_GST_AUDIO + + audio_lib = audio.la + pygstexec_LTLIBRARIES += $(audio_lib) + audio_la_CFLAGS = $(common_cflags) $(GST_PLUGINS_BASE_CFLAGS) + audio_la_LIBADD = $(common_libadd) $(GST_PLUGINS_BASE_LIBS) -lgstaudio-0.10 + audio_la_LDFLAGS = $(common_ldflags) \ + -export-symbols-regex "^(initaudio|_PyGObject_API).*" $(GST_PLUGINS_BASE_LIBS) + audio_la_SOURCES = audiomodule.c gst-argtypes.c + nodist_audio_la_SOURCES = audio.c +audio.c: $(AUDIO_DEFS) $(AUDIO_OVERRIDES) $(GEN_FILES) + +endif + +# GStreamer video bindings +VIDEO_OVERRIDES = video.override +VIDEO_DEFS = video.defs +CLEANFILES += video.c +EXTRA_DIST += $(VIDEO_DEFS) $(VIDEO_OVERRIDES) +defs_DATA += $(VIDEO_DEFS) +GEN_FILES += $(VIDEO_DEFS) + +if HAVE_GST_VIDEO + + video_lib = video.la + pygstexec_LTLIBRARIES += $(video_lib) + video_la_CFLAGS = $(common_cflags) $(GST_PLUGINS_BASE_CFLAGS) + video_la_LIBADD = $(common_libadd) $(GST_PLUGINS_BASE_LIBS) -lgstvideo-0.10 + video_la_LDFLAGS = $(common_ldflags) \ + -export-symbols-regex "^(initvideo|_PyGObject_API).*" $(GST_PLUGINS_BASE_LIBS) + video_la_SOURCES = videomodule.c gst-argtypes.c + nodist_video_la_SOURCES = video.c +video.c: $(VIDEO_DEFS) $(VIDEO_OVERRIDES) $(GEN_FILES) + +endif + +# GStreamer tag bindings +TAG_OVERRIDES = tag.override +TAG_DEFS = tag.defs +CLEANFILES += tag.c +EXTRA_DIST += $(TAG_DEFS) $(TAG_OVERRIDES) +defs_DATA += $(TAG_DEFS) +GEN_FILES += $(TAG_DEFS) + +if HAVE_GST_TAG + + tag_lib = tag.la + pygstexec_LTLIBRARIES += $(tag_lib) + tag_la_CFLAGS = $(common_cflags) $(GST_PLUGINS_BASE_CFLAGS) + tag_la_LIBADD = $(common_libadd) $(GST_PLUGINS_BASE_LIBS) -lgsttag-0.10 + tag_la_LDFLAGS = $(common_ldflags) \ + -export-symbols-regex "^(inittag|_PyGObject_API).*" $(GST_PLUGINS_BASE_LIBS) + tag_la_SOURCES = tagmodule.c gst-argtypes.c + nodist_tag_la_SOURCES = tag.c +tag.c: $(TAG_DEFS) $(TAG_OVERRIDES) $(GEN_FILES) + +endif + + +.defs.c: + $(AM_V_GEN)($(PYTHON) $(top_srcdir)/codegen/codegen.py \ + --load-types $(srcdir)/arg-types.py \ + --register $(srcdir)/gst-types.defs \ + --override $(srcdir)/$*.override \ + --extendpath $(top_builddir)/gst/ \ + --extendpath $(srcdir)/ \ + --prefix py$* $<) > gen-$*.c \ + && cp gen-$*.c $*.c \ + && rm -f gen-$*.c + +SUBDIRS = extend diff --git a/gst/Makefile.in b/gst/Makefile.in new file mode 100644 index 0000000..56281cf --- /dev/null +++ b/gst/Makefile.in @@ -0,0 +1,1313 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@HAVE_GST_AUDIO_TRUE@am__append_1 = $(audio_lib) +@HAVE_GST_VIDEO_TRUE@am__append_2 = $(video_lib) +@HAVE_GST_TAG_TRUE@am__append_3 = $(tag_lib) +subdir = gst +DIST_COMMON = $(noinst_HEADERS) $(pygst_PYTHON) \ + $(pygst_install_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/__init__.py.in \ + $(srcdir)/gstversion.override.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ + $(top_srcdir)/common/m4/as-compiler-flag.m4 \ + $(top_srcdir)/common/m4/as-version.m4 \ + $(top_srcdir)/common/m4/gst-args.m4 \ + $(top_srcdir)/common/m4/gst-error.m4 \ + $(top_srcdir)/common/m4/gst-feature.m4 \ + $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ + $(top_srcdir)/common/m4/gst-plugindir.m4 \ + $(top_srcdir)/common/m4/gst-valgrind.m4 \ + $(top_srcdir)/common/m4/gst.m4 $(top_srcdir)/common/m4/pkg.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = gstversion.override __init__.py +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(pygstexecdir)" "$(DESTDIR)$(pygstdir)" \ + "$(DESTDIR)$(defsdir)" "$(DESTDIR)$(pygst_installdir)" +LTLIBRARIES = $(pygstexec_LTLIBRARIES) +am__DEPENDENCIES_1 = +am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +_gst_la_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) +am__gst_la_OBJECTS = _gst_la-gst-argtypes.lo _gst_la-gstmodule.lo \ + _gst_la-pygstiterator.lo _gst_la-pygstminiobject.lo \ + _gst_la-pygstvalue.lo _gst_la-pygstexception.lo +nodist__gst_la_OBJECTS = _gst_la-gst.lo +_gst_la_OBJECTS = $(am__gst_la_OBJECTS) $(nodist__gst_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +_gst_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(_gst_la_CFLAGS) \ + $(CFLAGS) $(_gst_la_LDFLAGS) $(LDFLAGS) -o $@ +@HAVE_GST_AUDIO_TRUE@audio_la_DEPENDENCIES = $(am__DEPENDENCIES_2) \ +@HAVE_GST_AUDIO_TRUE@ $(am__DEPENDENCIES_1) +am__audio_la_SOURCES_DIST = audiomodule.c gst-argtypes.c +@HAVE_GST_AUDIO_TRUE@am_audio_la_OBJECTS = audio_la-audiomodule.lo \ +@HAVE_GST_AUDIO_TRUE@ audio_la-gst-argtypes.lo +@HAVE_GST_AUDIO_TRUE@nodist_audio_la_OBJECTS = audio_la-audio.lo +audio_la_OBJECTS = $(am_audio_la_OBJECTS) $(nodist_audio_la_OBJECTS) +audio_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(audio_la_CFLAGS) \ + $(CFLAGS) $(audio_la_LDFLAGS) $(LDFLAGS) -o $@ +@HAVE_GST_AUDIO_TRUE@am_audio_la_rpath = -rpath $(pygstexecdir) +interfaces_la_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_interfaces_la_OBJECTS = interfaces_la-interfacesmodule.lo +nodist_interfaces_la_OBJECTS = interfaces_la-interfaces.lo +interfaces_la_OBJECTS = $(am_interfaces_la_OBJECTS) \ + $(nodist_interfaces_la_OBJECTS) +interfaces_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(interfaces_la_CFLAGS) \ + $(CFLAGS) $(interfaces_la_LDFLAGS) $(LDFLAGS) -o $@ +pbutils_la_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) +am_pbutils_la_OBJECTS = pbutils_la-pbutilsmodule.lo \ + pbutils_la-gst-argtypes.lo +nodist_pbutils_la_OBJECTS = pbutils_la-pbutils.lo +pbutils_la_OBJECTS = $(am_pbutils_la_OBJECTS) \ + $(nodist_pbutils_la_OBJECTS) +pbutils_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(pbutils_la_CFLAGS) \ + $(CFLAGS) $(pbutils_la_LDFLAGS) $(LDFLAGS) -o $@ +@HAVE_GST_TAG_TRUE@tag_la_DEPENDENCIES = $(am__DEPENDENCIES_2) \ +@HAVE_GST_TAG_TRUE@ $(am__DEPENDENCIES_1) +am__tag_la_SOURCES_DIST = tagmodule.c gst-argtypes.c +@HAVE_GST_TAG_TRUE@am_tag_la_OBJECTS = tag_la-tagmodule.lo \ +@HAVE_GST_TAG_TRUE@ tag_la-gst-argtypes.lo +@HAVE_GST_TAG_TRUE@nodist_tag_la_OBJECTS = tag_la-tag.lo +tag_la_OBJECTS = $(am_tag_la_OBJECTS) $(nodist_tag_la_OBJECTS) +tag_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(tag_la_CFLAGS) $(CFLAGS) \ + $(tag_la_LDFLAGS) $(LDFLAGS) -o $@ +@HAVE_GST_TAG_TRUE@am_tag_la_rpath = -rpath $(pygstexecdir) +@HAVE_GST_VIDEO_TRUE@video_la_DEPENDENCIES = $(am__DEPENDENCIES_2) \ +@HAVE_GST_VIDEO_TRUE@ $(am__DEPENDENCIES_1) +am__video_la_SOURCES_DIST = videomodule.c gst-argtypes.c +@HAVE_GST_VIDEO_TRUE@am_video_la_OBJECTS = video_la-videomodule.lo \ +@HAVE_GST_VIDEO_TRUE@ video_la-gst-argtypes.lo +@HAVE_GST_VIDEO_TRUE@nodist_video_la_OBJECTS = video_la-video.lo +video_la_OBJECTS = $(am_video_la_OBJECTS) $(nodist_video_la_OBJECTS) +video_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(video_la_CFLAGS) \ + $(CFLAGS) $(video_la_LDFLAGS) $(LDFLAGS) -o $@ +@HAVE_GST_VIDEO_TRUE@am_video_la_rpath = -rpath $(pygstexecdir) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(_gst_la_SOURCES) $(nodist__gst_la_SOURCES) \ + $(audio_la_SOURCES) $(nodist_audio_la_SOURCES) \ + $(interfaces_la_SOURCES) $(nodist_interfaces_la_SOURCES) \ + $(pbutils_la_SOURCES) $(nodist_pbutils_la_SOURCES) \ + $(tag_la_SOURCES) $(nodist_tag_la_SOURCES) $(video_la_SOURCES) \ + $(nodist_video_la_SOURCES) +DIST_SOURCES = $(_gst_la_SOURCES) $(am__audio_la_SOURCES_DIST) \ + $(interfaces_la_SOURCES) $(pbutils_la_SOURCES) \ + $(am__tag_la_SOURCES_DIST) $(am__video_la_SOURCES_DIST) +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +py_compile = $(top_srcdir)/py-compile +DATA = $(defs_DATA) +HEADERS = $(noinst_HEADERS) $(pygst_install_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ERROR_CFLAGS = @ERROR_CFLAGS@ +EXEEXT = @EXEEXT@ +FFLAGS = @FFLAGS@ +FGREP = @FGREP@ +GCOV = @GCOV@ +GCOV_CFLAGS = @GCOV_CFLAGS@ +GCOV_LIBS = @GCOV_LIBS@ +GLIB_REQ = @GLIB_REQ@ +GREP = @GREP@ +GSTPB_REQ = @GSTPB_REQ@ +GST_BASE_CFLAGS = @GST_BASE_CFLAGS@ +GST_BASE_LIBS = @GST_BASE_LIBS@ +GST_CFLAGS = @GST_CFLAGS@ +GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@ +GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@ +GST_DISABLE_ALLOC_TRACE = @GST_DISABLE_ALLOC_TRACE@ +GST_DISABLE_GST_DEBUG = @GST_DISABLE_GST_DEBUG@ +GST_DISABLE_LOADSAVE = @GST_DISABLE_LOADSAVE@ +GST_DISABLE_PARSE = @GST_DISABLE_PARSE@ +GST_DISABLE_PLUGIN = @GST_DISABLE_PLUGIN@ +GST_DISABLE_REGISTRY = @GST_DISABLE_REGISTRY@ +GST_DISABLE_TRACE = @GST_DISABLE_TRACE@ +GST_DISABLE_XML = @GST_DISABLE_XML@ +GST_DP_CFLAGS = @GST_DP_CFLAGS@ +GST_DP_LIBS = @GST_DP_LIBS@ +GST_LIBS = @GST_LIBS@ +GST_MAJORMINOR = @GST_MAJORMINOR@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ +GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ +GST_OPTION_LIBS = @GST_OPTION_LIBS@ +GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@ +GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@ +GST_REQ = @GST_REQ@ +GTK_REQ = @GTK_REQ@ +IGNORE_GST_0_10_21 = @IGNORE_GST_0_10_21@ +IGNORE_GST_0_10_22 = @IGNORE_GST_0_10_22@ +IGNORE_GST_0_10_23 = @IGNORE_GST_0_10_23@ +IGNORE_GST_0_10_24 = @IGNORE_GST_0_10_24@ +IGNORE_GST_0_10_25 = @IGNORE_GST_0_10_25@ +IGNORE_GST_0_10_26 = @IGNORE_GST_0_10_26@ +IGNORE_GST_0_10_29 = @IGNORE_GST_0_10_29@ +IGNORE_GST_0_10_30 = @IGNORE_GST_0_10_30@ +IGNORE_GST_0_10_31 = @IGNORE_GST_0_10_31@ +IGNORE_GST_0_10_32 = @IGNORE_GST_0_10_32@ +IGNORE_GST_LOADSAVE = @IGNORE_GST_LOADSAVE@ +IGNORE_GST_PB_0_10_23 = @IGNORE_GST_PB_0_10_23@ +IGNORE_GST_PB_0_10_25 = @IGNORE_GST_PB_0_10_25@ +IGNORE_GST_PB_0_10_26 = @IGNORE_GST_PB_0_10_26@ +IGNORE_GST_PB_0_10_29 = @IGNORE_GST_PB_0_10_29@ +IGNORE_GST_PB_0_10_30 = @IGNORE_GST_PB_0_10_30@ +IGNORE_GST_PB_0_10_31 = @IGNORE_GST_PB_0_10_31@ +IGNORE_GST_PB_0_10_32 = @IGNORE_GST_PB_0_10_32@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@ +PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@ +PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@ +PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@ +PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PLUGINDIR = @PLUGINDIR@ +PYEXECDIR = @PYEXECDIR@ +PYGOBJECT_2_12_CFLAGS = @PYGOBJECT_2_12_CFLAGS@ +PYGOBJECT_2_12_LIBS = @PYGOBJECT_2_12_LIBS@ +PYGOBJECT_2_16_CFLAGS = @PYGOBJECT_2_16_CFLAGS@ +PYGOBJECT_2_16_LIBS = @PYGOBJECT_2_16_LIBS@ +PYGOBJECT_CFLAGS = @PYGOBJECT_CFLAGS@ +PYGOBJECT_LIBS = @PYGOBJECT_LIBS@ +PYGOBJECT_REQ = @PYGOBJECT_REQ@ +PYGST_CFLAGS = @PYGST_CFLAGS@ +PYGTK_CFLAGS = @PYGTK_CFLAGS@ +PYGTK_LIBS = @PYGTK_LIBS@ +PYGTK_REQ = @PYGTK_REQ@ +PYTHON = @PYTHON@ +PYTHONDIR = @PYTHONDIR@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_LIB_LOC = @PYTHON_LIB_LOC@ +PYTHON_LIB_SUFFIX = @PYTHON_LIB_SUFFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VALGRIND_PATH = @VALGRIND_PATH@ +VERSION = @VERSION@ +WARNING_CFLAGS = @WARNING_CFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = $(pyexecdir)/gst-$(GST_MAJORMINOR)/gst +pkgpythondir = @pkgpythondir@ +plugindir = @plugindir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +common_cflags = $(PYGOBJECT_CFLAGS) $(GST_CFLAGS) $(GST_OPTION_CFLAGS) -fno-strict-aliasing +common_libadd = $(GST_LIBS) $(GST_OPTION_LIBS) +common_ldflags = -module -avoid-version + +# we install everything in pyexecdir; otherwise you end up with a mess for +# multilib +pygstdir = $(pkgpyexecdir) +pygst_PYTHON = __init__.py +pygstexecdir = $(pkgpyexecdir) +pygstexec_LTLIBRARIES = _gst.la $(interface_lib) $(pbutils_lib) \ + $(am__append_1) $(am__append_2) $(am__append_3) +interface_lib = interfaces.la +pbutils_lib = pbutils.la +defs_DATA = gst-types.defs gst-extrafuncs.defs libs.defs base.defs \ + pbutils.defs $(AUDIO_DEFS) $(VIDEO_DEFS) $(TAG_DEFS) +defsdir = $(pkgdatadir)/$(GST_MAJORMINOR)/defs +noinst_HEADERS = common.h pygst-private.h +pygst_installdir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/ +pygst_install_HEADERS = pygst.h pygstvalue.h pygstminiobject.h pygstexception.h +versioned_overrides = \ + gst-0.10.21.ignore \ + gst-0.10.22.ignore \ + gst-0.10.23.ignore \ + gst-0.10.24.ignore \ + gst-0.10.25.ignore \ + gst-0.10.26.ignore \ + gst-0.10.29.ignore \ + gst-0.10.30.ignore \ + gst-0.10.31.ignore \ + gst-0.10.32.ignore \ + gst-pb-0.10.23.ignore \ + gst-pb-0.10.25.ignore \ + gst-pb-0.10.26.ignore \ + gst-pb-0.10.29.ignore \ + gst-pb-0.10.30.ignore \ + gst-pb-0.10.31.ignore \ + gst-pb-0.10.32.ignore \ + gst-disable-loadsave.ignore + +INCLUDES = $(PYTHON_INCLUDES) +EXTRA_DIST = $(defs_DATA) $(versioned_overrides) common.h arg-types.py \ + $(GST_DEFS) $(GST_OVERRIDES) gstversion.override.in \ + $(INTERFACES_DEFS) $(INTERFACES_OVERRIDES) $(PBUTILS_DEFS) \ + $(PBUTILS_OVERRIDES) $(AUDIO_DEFS) $(AUDIO_OVERRIDES) \ + $(VIDEO_DEFS) $(VIDEO_OVERRIDES) $(TAG_DEFS) $(TAG_OVERRIDES) +GEN_FILES = arg-types.py gst-types.defs libs.defs base.defs \ + pbutils.defs $(AUDIO_DEFS) $(VIDEO_DEFS) $(TAG_DEFS) + +# GStreamer bindings +_gst_la_CFLAGS = $(common_cflags) +_gst_la_LIBADD = $(common_libadd) $(GST_BASE_LIBS) +_gst_la_LDFLAGS = $(common_ldflags) -export-symbols-regex "^(init_gst|_PyGObject_API|pygstminiobject_).*" \ + $(GST_BASE_LIBS) $(GST_CONTROLLER_LIBS) $(GST_NET_LIBS) $(GST_DP_LIBS) + +_gst_la_SOURCES = \ + gst-argtypes.c \ + gstmodule.c \ + pygstiterator.c \ + pygstminiobject.c \ + pygstvalue.c \ + pygstexception.c + +nodist__gst_la_SOURCES = gst.c +GST_OVERRIDES = \ + gst.override \ + gstbin.override \ + gstbuffer.override \ + gstbus.override \ + gstevent.override \ + gstcaps.override \ + gstelement.override \ + gstelementfactory.override \ + gstmessage.override \ + gstobject.override \ + gstquery.override \ + gstpad.override \ + gststructure.override \ + gsttaglist.override \ + gstlibs.override \ + gstbase.override + +GST_DEFS = gst.defs gst-types.defs gst-extrafuncs.defs libs.defs base.defs +CLEANFILES = gst.c __init__.pyc interfaces.c pbutils.c audio.c video.c \ + tag.c + +# GStreamer interfaces bindings +interfaces_la_CFLAGS = $(common_cflags) $(GST_PLUGINS_BASE_CFLAGS) +interfaces_la_LIBADD = $(common_libadd) -lgstinterfaces-$(GST_MAJORMINOR) +interfaces_la_LDFLAGS = $(common_ldflags) \ + -export-symbols-regex "^(initinterface|_PyGObject_API).*" $(GST_PLUGINS_BASE_LIBS) + +interfaces_la_SOURCES = interfacesmodule.c +nodist_interfaces_la_SOURCES = interfaces.c +INTERFACES_OVERRIDES = interfaces.override xoverlay.override +INTERFACES_DEFS = interfaces.defs xoverlay.defs + +# GStreamer pbutils bindings +pbutils_la_CFLAGS = $(common_cflags) $(GST_PLUGINS_BASE_CFLAGS) +pbutils_la_LIBADD = $(common_libadd) $(GST_PLUGINS_BASE_LIBS) -lgstpbutils-0.10 +pbutils_la_LDFLAGS = $(common_ldflags) \ + -export-symbols-regex "^(initpbutils|_PyGObject_API).*" $(GST_PLUGINS_BASE_LIBS) + +pbutils_la_SOURCES = pbutilsmodule.c gst-argtypes.c +nodist_pbutils_la_SOURCES = pbutils.c +PBUTILS_OVERRIDES = pbutils.override +PBUTILS_DEFS = pbutils.defs + +# GStreamer audio bindings +AUDIO_OVERRIDES = audio.override +AUDIO_DEFS = audio.defs +@HAVE_GST_AUDIO_TRUE@audio_lib = audio.la +@HAVE_GST_AUDIO_TRUE@audio_la_CFLAGS = $(common_cflags) $(GST_PLUGINS_BASE_CFLAGS) +@HAVE_GST_AUDIO_TRUE@audio_la_LIBADD = $(common_libadd) $(GST_PLUGINS_BASE_LIBS) -lgstaudio-0.10 +@HAVE_GST_AUDIO_TRUE@audio_la_LDFLAGS = $(common_ldflags) \ +@HAVE_GST_AUDIO_TRUE@ -export-symbols-regex "^(initaudio|_PyGObject_API).*" $(GST_PLUGINS_BASE_LIBS) + +@HAVE_GST_AUDIO_TRUE@audio_la_SOURCES = audiomodule.c gst-argtypes.c +@HAVE_GST_AUDIO_TRUE@nodist_audio_la_SOURCES = audio.c + +# GStreamer video bindings +VIDEO_OVERRIDES = video.override +VIDEO_DEFS = video.defs +@HAVE_GST_VIDEO_TRUE@video_lib = video.la +@HAVE_GST_VIDEO_TRUE@video_la_CFLAGS = $(common_cflags) $(GST_PLUGINS_BASE_CFLAGS) +@HAVE_GST_VIDEO_TRUE@video_la_LIBADD = $(common_libadd) $(GST_PLUGINS_BASE_LIBS) -lgstvideo-0.10 +@HAVE_GST_VIDEO_TRUE@video_la_LDFLAGS = $(common_ldflags) \ +@HAVE_GST_VIDEO_TRUE@ -export-symbols-regex "^(initvideo|_PyGObject_API).*" $(GST_PLUGINS_BASE_LIBS) + +@HAVE_GST_VIDEO_TRUE@video_la_SOURCES = videomodule.c gst-argtypes.c +@HAVE_GST_VIDEO_TRUE@nodist_video_la_SOURCES = video.c + +# GStreamer tag bindings +TAG_OVERRIDES = tag.override +TAG_DEFS = tag.defs +@HAVE_GST_TAG_TRUE@tag_lib = tag.la +@HAVE_GST_TAG_TRUE@tag_la_CFLAGS = $(common_cflags) $(GST_PLUGINS_BASE_CFLAGS) +@HAVE_GST_TAG_TRUE@tag_la_LIBADD = $(common_libadd) $(GST_PLUGINS_BASE_LIBS) -lgsttag-0.10 +@HAVE_GST_TAG_TRUE@tag_la_LDFLAGS = $(common_ldflags) \ +@HAVE_GST_TAG_TRUE@ -export-symbols-regex "^(inittag|_PyGObject_API).*" $(GST_PLUGINS_BASE_LIBS) + +@HAVE_GST_TAG_TRUE@tag_la_SOURCES = tagmodule.c gst-argtypes.c +@HAVE_GST_TAG_TRUE@nodist_tag_la_SOURCES = tag.c +SUBDIRS = extend +all: all-recursive + +.SUFFIXES: +.SUFFIXES: .c .defs .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu gst/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +gstversion.override: $(top_builddir)/config.status $(srcdir)/gstversion.override.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +__init__.py: $(top_builddir)/config.status $(srcdir)/__init__.py.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +install-pygstexecLTLIBRARIES: $(pygstexec_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(pygstexecdir)" || $(MKDIR_P) "$(DESTDIR)$(pygstexecdir)" + @list='$(pygstexec_LTLIBRARIES)'; test -n "$(pygstexecdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pygstexecdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pygstexecdir)"; \ + } + +uninstall-pygstexecLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(pygstexec_LTLIBRARIES)'; test -n "$(pygstexecdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pygstexecdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pygstexecdir)/$$f"; \ + done + +clean-pygstexecLTLIBRARIES: + -test -z "$(pygstexec_LTLIBRARIES)" || rm -f $(pygstexec_LTLIBRARIES) + @list='$(pygstexec_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +_gst.la: $(_gst_la_OBJECTS) $(_gst_la_DEPENDENCIES) + $(AM_V_CCLD)$(_gst_la_LINK) -rpath $(pygstexecdir) $(_gst_la_OBJECTS) $(_gst_la_LIBADD) $(LIBS) +audio.la: $(audio_la_OBJECTS) $(audio_la_DEPENDENCIES) + $(AM_V_CCLD)$(audio_la_LINK) $(am_audio_la_rpath) $(audio_la_OBJECTS) $(audio_la_LIBADD) $(LIBS) +interfaces.la: $(interfaces_la_OBJECTS) $(interfaces_la_DEPENDENCIES) + $(AM_V_CCLD)$(interfaces_la_LINK) -rpath $(pygstexecdir) $(interfaces_la_OBJECTS) $(interfaces_la_LIBADD) $(LIBS) +pbutils.la: $(pbutils_la_OBJECTS) $(pbutils_la_DEPENDENCIES) + $(AM_V_CCLD)$(pbutils_la_LINK) -rpath $(pygstexecdir) $(pbutils_la_OBJECTS) $(pbutils_la_LIBADD) $(LIBS) +tag.la: $(tag_la_OBJECTS) $(tag_la_DEPENDENCIES) + $(AM_V_CCLD)$(tag_la_LINK) $(am_tag_la_rpath) $(tag_la_OBJECTS) $(tag_la_LIBADD) $(LIBS) +video.la: $(video_la_OBJECTS) $(video_la_DEPENDENCIES) + $(AM_V_CCLD)$(video_la_LINK) $(am_video_la_rpath) $(video_la_OBJECTS) $(video_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_gst_la-gst-argtypes.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_gst_la-gst.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_gst_la-gstmodule.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_gst_la-pygstexception.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_gst_la-pygstiterator.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_gst_la-pygstminiobject.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_gst_la-pygstvalue.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio_la-audio.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio_la-audiomodule.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio_la-gst-argtypes.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interfaces_la-interfaces.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interfaces_la-interfacesmodule.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pbutils_la-gst-argtypes.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pbutils_la-pbutils.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pbutils_la-pbutilsmodule.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tag_la-gst-argtypes.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tag_la-tag.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tag_la-tagmodule.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/video_la-gst-argtypes.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/video_la-video.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/video_la-videomodule.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +_gst_la-gst-argtypes.lo: gst-argtypes.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gst_la_CFLAGS) $(CFLAGS) -MT _gst_la-gst-argtypes.lo -MD -MP -MF $(DEPDIR)/_gst_la-gst-argtypes.Tpo -c -o _gst_la-gst-argtypes.lo `test -f 'gst-argtypes.c' || echo '$(srcdir)/'`gst-argtypes.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/_gst_la-gst-argtypes.Tpo $(DEPDIR)/_gst_la-gst-argtypes.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gst-argtypes.c' object='_gst_la-gst-argtypes.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gst_la_CFLAGS) $(CFLAGS) -c -o _gst_la-gst-argtypes.lo `test -f 'gst-argtypes.c' || echo '$(srcdir)/'`gst-argtypes.c + +_gst_la-gstmodule.lo: gstmodule.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gst_la_CFLAGS) $(CFLAGS) -MT _gst_la-gstmodule.lo -MD -MP -MF $(DEPDIR)/_gst_la-gstmodule.Tpo -c -o _gst_la-gstmodule.lo `test -f 'gstmodule.c' || echo '$(srcdir)/'`gstmodule.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/_gst_la-gstmodule.Tpo $(DEPDIR)/_gst_la-gstmodule.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstmodule.c' object='_gst_la-gstmodule.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gst_la_CFLAGS) $(CFLAGS) -c -o _gst_la-gstmodule.lo `test -f 'gstmodule.c' || echo '$(srcdir)/'`gstmodule.c + +_gst_la-pygstiterator.lo: pygstiterator.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gst_la_CFLAGS) $(CFLAGS) -MT _gst_la-pygstiterator.lo -MD -MP -MF $(DEPDIR)/_gst_la-pygstiterator.Tpo -c -o _gst_la-pygstiterator.lo `test -f 'pygstiterator.c' || echo '$(srcdir)/'`pygstiterator.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/_gst_la-pygstiterator.Tpo $(DEPDIR)/_gst_la-pygstiterator.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pygstiterator.c' object='_gst_la-pygstiterator.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gst_la_CFLAGS) $(CFLAGS) -c -o _gst_la-pygstiterator.lo `test -f 'pygstiterator.c' || echo '$(srcdir)/'`pygstiterator.c + +_gst_la-pygstminiobject.lo: pygstminiobject.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gst_la_CFLAGS) $(CFLAGS) -MT _gst_la-pygstminiobject.lo -MD -MP -MF $(DEPDIR)/_gst_la-pygstminiobject.Tpo -c -o _gst_la-pygstminiobject.lo `test -f 'pygstminiobject.c' || echo '$(srcdir)/'`pygstminiobject.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/_gst_la-pygstminiobject.Tpo $(DEPDIR)/_gst_la-pygstminiobject.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pygstminiobject.c' object='_gst_la-pygstminiobject.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gst_la_CFLAGS) $(CFLAGS) -c -o _gst_la-pygstminiobject.lo `test -f 'pygstminiobject.c' || echo '$(srcdir)/'`pygstminiobject.c + +_gst_la-pygstvalue.lo: pygstvalue.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gst_la_CFLAGS) $(CFLAGS) -MT _gst_la-pygstvalue.lo -MD -MP -MF $(DEPDIR)/_gst_la-pygstvalue.Tpo -c -o _gst_la-pygstvalue.lo `test -f 'pygstvalue.c' || echo '$(srcdir)/'`pygstvalue.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/_gst_la-pygstvalue.Tpo $(DEPDIR)/_gst_la-pygstvalue.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pygstvalue.c' object='_gst_la-pygstvalue.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gst_la_CFLAGS) $(CFLAGS) -c -o _gst_la-pygstvalue.lo `test -f 'pygstvalue.c' || echo '$(srcdir)/'`pygstvalue.c + +_gst_la-pygstexception.lo: pygstexception.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gst_la_CFLAGS) $(CFLAGS) -MT _gst_la-pygstexception.lo -MD -MP -MF $(DEPDIR)/_gst_la-pygstexception.Tpo -c -o _gst_la-pygstexception.lo `test -f 'pygstexception.c' || echo '$(srcdir)/'`pygstexception.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/_gst_la-pygstexception.Tpo $(DEPDIR)/_gst_la-pygstexception.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pygstexception.c' object='_gst_la-pygstexception.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gst_la_CFLAGS) $(CFLAGS) -c -o _gst_la-pygstexception.lo `test -f 'pygstexception.c' || echo '$(srcdir)/'`pygstexception.c + +_gst_la-gst.lo: gst.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gst_la_CFLAGS) $(CFLAGS) -MT _gst_la-gst.lo -MD -MP -MF $(DEPDIR)/_gst_la-gst.Tpo -c -o _gst_la-gst.lo `test -f 'gst.c' || echo '$(srcdir)/'`gst.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/_gst_la-gst.Tpo $(DEPDIR)/_gst_la-gst.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gst.c' object='_gst_la-gst.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gst_la_CFLAGS) $(CFLAGS) -c -o _gst_la-gst.lo `test -f 'gst.c' || echo '$(srcdir)/'`gst.c + +audio_la-audiomodule.lo: audiomodule.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(audio_la_CFLAGS) $(CFLAGS) -MT audio_la-audiomodule.lo -MD -MP -MF $(DEPDIR)/audio_la-audiomodule.Tpo -c -o audio_la-audiomodule.lo `test -f 'audiomodule.c' || echo '$(srcdir)/'`audiomodule.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/audio_la-audiomodule.Tpo $(DEPDIR)/audio_la-audiomodule.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='audiomodule.c' object='audio_la-audiomodule.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(audio_la_CFLAGS) $(CFLAGS) -c -o audio_la-audiomodule.lo `test -f 'audiomodule.c' || echo '$(srcdir)/'`audiomodule.c + +audio_la-gst-argtypes.lo: gst-argtypes.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(audio_la_CFLAGS) $(CFLAGS) -MT audio_la-gst-argtypes.lo -MD -MP -MF $(DEPDIR)/audio_la-gst-argtypes.Tpo -c -o audio_la-gst-argtypes.lo `test -f 'gst-argtypes.c' || echo '$(srcdir)/'`gst-argtypes.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/audio_la-gst-argtypes.Tpo $(DEPDIR)/audio_la-gst-argtypes.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gst-argtypes.c' object='audio_la-gst-argtypes.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(audio_la_CFLAGS) $(CFLAGS) -c -o audio_la-gst-argtypes.lo `test -f 'gst-argtypes.c' || echo '$(srcdir)/'`gst-argtypes.c + +audio_la-audio.lo: audio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(audio_la_CFLAGS) $(CFLAGS) -MT audio_la-audio.lo -MD -MP -MF $(DEPDIR)/audio_la-audio.Tpo -c -o audio_la-audio.lo `test -f 'audio.c' || echo '$(srcdir)/'`audio.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/audio_la-audio.Tpo $(DEPDIR)/audio_la-audio.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='audio.c' object='audio_la-audio.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(audio_la_CFLAGS) $(CFLAGS) -c -o audio_la-audio.lo `test -f 'audio.c' || echo '$(srcdir)/'`audio.c + +interfaces_la-interfacesmodule.lo: interfacesmodule.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(interfaces_la_CFLAGS) $(CFLAGS) -MT interfaces_la-interfacesmodule.lo -MD -MP -MF $(DEPDIR)/interfaces_la-interfacesmodule.Tpo -c -o interfaces_la-interfacesmodule.lo `test -f 'interfacesmodule.c' || echo '$(srcdir)/'`interfacesmodule.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/interfaces_la-interfacesmodule.Tpo $(DEPDIR)/interfaces_la-interfacesmodule.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='interfacesmodule.c' object='interfaces_la-interfacesmodule.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(interfaces_la_CFLAGS) $(CFLAGS) -c -o interfaces_la-interfacesmodule.lo `test -f 'interfacesmodule.c' || echo '$(srcdir)/'`interfacesmodule.c + +interfaces_la-interfaces.lo: interfaces.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(interfaces_la_CFLAGS) $(CFLAGS) -MT interfaces_la-interfaces.lo -MD -MP -MF $(DEPDIR)/interfaces_la-interfaces.Tpo -c -o interfaces_la-interfaces.lo `test -f 'interfaces.c' || echo '$(srcdir)/'`interfaces.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/interfaces_la-interfaces.Tpo $(DEPDIR)/interfaces_la-interfaces.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='interfaces.c' object='interfaces_la-interfaces.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(interfaces_la_CFLAGS) $(CFLAGS) -c -o interfaces_la-interfaces.lo `test -f 'interfaces.c' || echo '$(srcdir)/'`interfaces.c + +pbutils_la-pbutilsmodule.lo: pbutilsmodule.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pbutils_la_CFLAGS) $(CFLAGS) -MT pbutils_la-pbutilsmodule.lo -MD -MP -MF $(DEPDIR)/pbutils_la-pbutilsmodule.Tpo -c -o pbutils_la-pbutilsmodule.lo `test -f 'pbutilsmodule.c' || echo '$(srcdir)/'`pbutilsmodule.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pbutils_la-pbutilsmodule.Tpo $(DEPDIR)/pbutils_la-pbutilsmodule.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pbutilsmodule.c' object='pbutils_la-pbutilsmodule.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pbutils_la_CFLAGS) $(CFLAGS) -c -o pbutils_la-pbutilsmodule.lo `test -f 'pbutilsmodule.c' || echo '$(srcdir)/'`pbutilsmodule.c + +pbutils_la-gst-argtypes.lo: gst-argtypes.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pbutils_la_CFLAGS) $(CFLAGS) -MT pbutils_la-gst-argtypes.lo -MD -MP -MF $(DEPDIR)/pbutils_la-gst-argtypes.Tpo -c -o pbutils_la-gst-argtypes.lo `test -f 'gst-argtypes.c' || echo '$(srcdir)/'`gst-argtypes.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pbutils_la-gst-argtypes.Tpo $(DEPDIR)/pbutils_la-gst-argtypes.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gst-argtypes.c' object='pbutils_la-gst-argtypes.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pbutils_la_CFLAGS) $(CFLAGS) -c -o pbutils_la-gst-argtypes.lo `test -f 'gst-argtypes.c' || echo '$(srcdir)/'`gst-argtypes.c + +pbutils_la-pbutils.lo: pbutils.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pbutils_la_CFLAGS) $(CFLAGS) -MT pbutils_la-pbutils.lo -MD -MP -MF $(DEPDIR)/pbutils_la-pbutils.Tpo -c -o pbutils_la-pbutils.lo `test -f 'pbutils.c' || echo '$(srcdir)/'`pbutils.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pbutils_la-pbutils.Tpo $(DEPDIR)/pbutils_la-pbutils.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pbutils.c' object='pbutils_la-pbutils.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pbutils_la_CFLAGS) $(CFLAGS) -c -o pbutils_la-pbutils.lo `test -f 'pbutils.c' || echo '$(srcdir)/'`pbutils.c + +tag_la-tagmodule.lo: tagmodule.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tag_la_CFLAGS) $(CFLAGS) -MT tag_la-tagmodule.lo -MD -MP -MF $(DEPDIR)/tag_la-tagmodule.Tpo -c -o tag_la-tagmodule.lo `test -f 'tagmodule.c' || echo '$(srcdir)/'`tagmodule.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tag_la-tagmodule.Tpo $(DEPDIR)/tag_la-tagmodule.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tagmodule.c' object='tag_la-tagmodule.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tag_la_CFLAGS) $(CFLAGS) -c -o tag_la-tagmodule.lo `test -f 'tagmodule.c' || echo '$(srcdir)/'`tagmodule.c + +tag_la-gst-argtypes.lo: gst-argtypes.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tag_la_CFLAGS) $(CFLAGS) -MT tag_la-gst-argtypes.lo -MD -MP -MF $(DEPDIR)/tag_la-gst-argtypes.Tpo -c -o tag_la-gst-argtypes.lo `test -f 'gst-argtypes.c' || echo '$(srcdir)/'`gst-argtypes.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tag_la-gst-argtypes.Tpo $(DEPDIR)/tag_la-gst-argtypes.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gst-argtypes.c' object='tag_la-gst-argtypes.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tag_la_CFLAGS) $(CFLAGS) -c -o tag_la-gst-argtypes.lo `test -f 'gst-argtypes.c' || echo '$(srcdir)/'`gst-argtypes.c + +tag_la-tag.lo: tag.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tag_la_CFLAGS) $(CFLAGS) -MT tag_la-tag.lo -MD -MP -MF $(DEPDIR)/tag_la-tag.Tpo -c -o tag_la-tag.lo `test -f 'tag.c' || echo '$(srcdir)/'`tag.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tag_la-tag.Tpo $(DEPDIR)/tag_la-tag.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tag.c' object='tag_la-tag.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tag_la_CFLAGS) $(CFLAGS) -c -o tag_la-tag.lo `test -f 'tag.c' || echo '$(srcdir)/'`tag.c + +video_la-videomodule.lo: videomodule.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(video_la_CFLAGS) $(CFLAGS) -MT video_la-videomodule.lo -MD -MP -MF $(DEPDIR)/video_la-videomodule.Tpo -c -o video_la-videomodule.lo `test -f 'videomodule.c' || echo '$(srcdir)/'`videomodule.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/video_la-videomodule.Tpo $(DEPDIR)/video_la-videomodule.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='videomodule.c' object='video_la-videomodule.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(video_la_CFLAGS) $(CFLAGS) -c -o video_la-videomodule.lo `test -f 'videomodule.c' || echo '$(srcdir)/'`videomodule.c + +video_la-gst-argtypes.lo: gst-argtypes.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(video_la_CFLAGS) $(CFLAGS) -MT video_la-gst-argtypes.lo -MD -MP -MF $(DEPDIR)/video_la-gst-argtypes.Tpo -c -o video_la-gst-argtypes.lo `test -f 'gst-argtypes.c' || echo '$(srcdir)/'`gst-argtypes.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/video_la-gst-argtypes.Tpo $(DEPDIR)/video_la-gst-argtypes.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gst-argtypes.c' object='video_la-gst-argtypes.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(video_la_CFLAGS) $(CFLAGS) -c -o video_la-gst-argtypes.lo `test -f 'gst-argtypes.c' || echo '$(srcdir)/'`gst-argtypes.c + +video_la-video.lo: video.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(video_la_CFLAGS) $(CFLAGS) -MT video_la-video.lo -MD -MP -MF $(DEPDIR)/video_la-video.Tpo -c -o video_la-video.lo `test -f 'video.c' || echo '$(srcdir)/'`video.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/video_la-video.Tpo $(DEPDIR)/video_la-video.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='video.c' object='video_la-video.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(video_la_CFLAGS) $(CFLAGS) -c -o video_la-video.lo `test -f 'video.c' || echo '$(srcdir)/'`video.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-pygstPYTHON: $(pygst_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(pygstdir)" || $(MKDIR_P) "$(DESTDIR)$(pygstdir)" + @list='$(pygst_PYTHON)'; dlist=; list2=; test -n "$(pygstdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pygstdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pygstdir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(pygstdir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(pygstdir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-pygstPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(pygst_PYTHON)'; test -n "$(pygstdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + echo " ( cd '$(DESTDIR)$(pygstdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(pygstdir)" && rm -f $$files || exit $$?; \ + echo " ( cd '$(DESTDIR)$(pygstdir)' && rm -f" $$filesc ")"; \ + cd "$(DESTDIR)$(pygstdir)" && rm -f $$filesc || exit $$?; \ + echo " ( cd '$(DESTDIR)$(pygstdir)' && rm -f" $$fileso ")"; \ + cd "$(DESTDIR)$(pygstdir)" && rm -f $$fileso +install-defsDATA: $(defs_DATA) + @$(NORMAL_INSTALL) + test -z "$(defsdir)" || $(MKDIR_P) "$(DESTDIR)$(defsdir)" + @list='$(defs_DATA)'; test -n "$(defsdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(defsdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(defsdir)" || exit $$?; \ + done + +uninstall-defsDATA: + @$(NORMAL_UNINSTALL) + @list='$(defs_DATA)'; test -n "$(defsdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(defsdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(defsdir)" && rm -f $$files +install-pygst_installHEADERS: $(pygst_install_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(pygst_installdir)" || $(MKDIR_P) "$(DESTDIR)$(pygst_installdir)" + @list='$(pygst_install_HEADERS)'; test -n "$(pygst_installdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pygst_installdir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(pygst_installdir)" || exit $$?; \ + done + +uninstall-pygst_installHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(pygst_install_HEADERS)'; test -n "$(pygst_installdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(pygst_installdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(pygst_installdir)" && rm -f $$files + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(pygstexecdir)" "$(DESTDIR)$(pygstdir)" "$(DESTDIR)$(defsdir)" "$(DESTDIR)$(pygst_installdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool clean-pygstexecLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-defsDATA install-pygstPYTHON \ + install-pygst_installHEADERS + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: install-pygstexecLTLIBRARIES + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-defsDATA uninstall-pygstPYTHON \ + uninstall-pygst_installHEADERS uninstall-pygstexecLTLIBRARIES + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + clean-pygstexecLTLIBRARIES ctags ctags-recursive distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am \ + install-defsDATA install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-pygstPYTHON \ + install-pygst_installHEADERS install-pygstexecLTLIBRARIES \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-defsDATA \ + uninstall-pygstPYTHON uninstall-pygst_installHEADERS \ + uninstall-pygstexecLTLIBRARIES + +gst.c: $(GST_DEFS) $(GST_OVERRIDES) $(GEN_FILES) gstversion.override __init__.py +interfaces.c: $(INTERFACES_DEFS) $(INTERFACES_OVERRIDES) $(GEN_FILES) +pbutils.c: $(PBUTILS_DEFS) $(PBUTILS_OVERRIDES) $(GEN_FILES) +@HAVE_GST_AUDIO_TRUE@audio.c: $(AUDIO_DEFS) $(AUDIO_OVERRIDES) $(GEN_FILES) +@HAVE_GST_VIDEO_TRUE@video.c: $(VIDEO_DEFS) $(VIDEO_OVERRIDES) $(GEN_FILES) +@HAVE_GST_TAG_TRUE@tag.c: $(TAG_DEFS) $(TAG_OVERRIDES) $(GEN_FILES) + +.defs.c: + $(AM_V_GEN)($(PYTHON) $(top_srcdir)/codegen/codegen.py \ + --load-types $(srcdir)/arg-types.py \ + --register $(srcdir)/gst-types.defs \ + --override $(srcdir)/$*.override \ + --extendpath $(top_builddir)/gst/ \ + --extendpath $(srcdir)/ \ + --prefix py$* $<) > gen-$*.c \ + && cp gen-$*.c $*.c \ + && rm -f gen-$*.c + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gst/__init__.py b/gst/__init__.py new file mode 100644 index 0000000..2c439e3 --- /dev/null +++ b/gst/__init__.py @@ -0,0 +1,229 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python +# Copyright (C) 2002 David I. Lehn +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library 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 +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# +# Author: David I. Lehn + +try: + import gstlibtoolimporter + gstlibtoolimporter.install() +except ImportError: + gstlibtoolimporter = None + +import sys + +# we always require 2.0 of pygtk; so if pygtk is not imported anywhere +# yet, we import pygtk here and .require +if 'gobject' not in sys.modules: + import pygtk + pygtk.require('2.0') + +class Value: + def __init__(self, type): + assert type in ('fourcc', 'intrange', 'doublerange', 'fractionrange', 'fraction') + self.type = type + +class Fourcc(Value): + def __init__(self, string): + Value.__init__(self, 'fourcc') + self.fourcc = string + + def __repr__(self): + return '' % self.fourcc + + def __eq__(self, other): + if isinstance(other, Fourcc): + return self.fourcc == other.fourcc + + return False + + def __ne__(self, other): + return not self.__eq__(other) + +class IntRange(Value): + def __init__(self, low, high): + Value.__init__(self, 'intrange') + self.low = low + self.high = high + def __repr__(self): + return '' % (self.low, self.high) + +class DoubleRange(Value): + def __init__(self, low, high): + Value.__init__(self, 'doublerange') + self.low = low + self.high = high + def __repr__(self): + return '' % (self.low, self.high) + +class FractionRange(Value): + def __init__(self, low, high): + Value.__init__(self, 'fractionrange') + self.low = low + self.high = high + def __repr__(self): + return '' % (self.low.num, + self.low.denom, + self.high.num, + self.high.denom) + +class Fraction(Value): + def __init__(self, num, denom=1): + def __gcd(a,b): + while b != 0: + tmp = a + a = b + b = tmp % b + return abs(a) + + def __simplify(): + num = self.num + denom = self.denom + + if num < 0: + num = -num + denom = -denom + + # Compute greatest common divisor + gcd = __gcd(num,denom) + if gcd != 0: + num /= gcd + denom /= gcd + + self.num = num + self.denom = denom + + Value.__init__(self, 'fraction') + + self.num = num + self.denom = denom + + __simplify() + + def __repr__(self): + return '' % (self.num, self.denom) + + def __eq__(self, other): + if isinstance(other, Fraction): + return self.num * other.denom == other.num * self.denom + return False + + def __ne__(self, other): + return not self.__eq__(other) + + def __mul__(self, other): + if isinstance(other, Fraction): + return Fraction(self.num * other.num, + self.denom * other.denom) + elif isinstance(other, int): + return Fraction(self.num * other, self.denom) + raise TypeError + + __rmul__ = __mul__ + + def __div__(self, other): + if isinstance(other, Fraction): + return Fraction(self.num * other.denom, + self.denom * other.num) + elif isinstance(other, int): + return Fraction(self.num, self.denom * other) + return TypeError + + def __rdiv__(self, other): + if isinstance(other, int): + return Fraction(self.denom * other, self.num) + return TypeError + + def __float__(self): + return float(self.num) / float(self.denom) + +try: + dlsave = sys.getdlopenflags() + from DLFCN import RTLD_GLOBAL, RTLD_LAZY +except AttributeError: + # windows doesn't have sys.getdlopenflags() + RTLD_GLOBAL = -1 + RTLD_LAZY = -1 +except ImportError: + RTLD_GLOBAL = -1 + RTLD_LAZY = -1 + import os + osname = os.uname()[0] + if osname == 'Linux' or osname == 'SunOS' or osname == 'FreeBSD' or osname == 'GNU/kFreeBSD' or osname == 'GNU': + machinename = os.uname()[4] + if machinename == 'mips' or machinename == 'mips64': + RTLD_GLOBAL = 0x4 + RTLD_LAZY = 0x1 + else: + RTLD_GLOBAL = 0x100 + RTLD_LAZY = 0x1 + elif osname == 'Darwin': + RTLD_GLOBAL = 0x8 + RTLD_LAZY = 0x1 + del os +except: + RTLD_GLOBAL = -1 + RTLD_LAZY = -1 + +if RTLD_GLOBAL != -1 and RTLD_LAZY != -1: + sys.setdlopenflags(RTLD_LAZY | RTLD_GLOBAL) + +try: + import libxml2 +except: + pass + +from _gst import * +import interfaces + +if RTLD_GLOBAL != -1 and RTLD_LAZY != -1: + sys.setdlopenflags(dlsave) +del sys + +version = get_gst_version + +# Fixes for API cleanups that would cause an API breakage. +# See #446674 + +import warnings +if locals().has_key("parse_bin_from_description"): + def gst_parse_bin_from_description(*args, **kwargs): + warnings.warn("gst_parse_bin_from_description() is deprecated, please use parse_bin_from_description instead", + DeprecationWarning) + return parse_bin_from_description(*args, **kwargs) + +if locals().has_key("message_new_buffering"): + def gst_message_new_buffering(*args, **kwargs): + warnings.warn("gst_message_new_buffering() is deprecated, please use message_new_buffering() instead", + DeprecationWarning) + return message_new_buffering(*args, **kwargs) + +# this restores previously installed importhooks, so we don't interfere +# with other people's module importers +# it also clears out the module completely as if it were never loaded, +# so that if anyone else imports gstltihooks the hooks get installed +if gstlibtoolimporter is not None: + import audio + import pbutils + import tag + import video + gstlibtoolimporter.uninstall() + import sys + del sys.modules["gstlibtoolimporter"] diff --git a/gst/__init__.py.in b/gst/__init__.py.in new file mode 100644 index 0000000..2c439e3 --- /dev/null +++ b/gst/__init__.py.in @@ -0,0 +1,229 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python +# Copyright (C) 2002 David I. Lehn +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library 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 +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# +# Author: David I. Lehn + +try: + import gstlibtoolimporter + gstlibtoolimporter.install() +except ImportError: + gstlibtoolimporter = None + +import sys + +# we always require 2.0 of pygtk; so if pygtk is not imported anywhere +# yet, we import pygtk here and .require +if 'gobject' not in sys.modules: + import pygtk + pygtk.require('2.0') + +class Value: + def __init__(self, type): + assert type in ('fourcc', 'intrange', 'doublerange', 'fractionrange', 'fraction') + self.type = type + +class Fourcc(Value): + def __init__(self, string): + Value.__init__(self, 'fourcc') + self.fourcc = string + + def __repr__(self): + return '' % self.fourcc + + def __eq__(self, other): + if isinstance(other, Fourcc): + return self.fourcc == other.fourcc + + return False + + def __ne__(self, other): + return not self.__eq__(other) + +class IntRange(Value): + def __init__(self, low, high): + Value.__init__(self, 'intrange') + self.low = low + self.high = high + def __repr__(self): + return '' % (self.low, self.high) + +class DoubleRange(Value): + def __init__(self, low, high): + Value.__init__(self, 'doublerange') + self.low = low + self.high = high + def __repr__(self): + return '' % (self.low, self.high) + +class FractionRange(Value): + def __init__(self, low, high): + Value.__init__(self, 'fractionrange') + self.low = low + self.high = high + def __repr__(self): + return '' % (self.low.num, + self.low.denom, + self.high.num, + self.high.denom) + +class Fraction(Value): + def __init__(self, num, denom=1): + def __gcd(a,b): + while b != 0: + tmp = a + a = b + b = tmp % b + return abs(a) + + def __simplify(): + num = self.num + denom = self.denom + + if num < 0: + num = -num + denom = -denom + + # Compute greatest common divisor + gcd = __gcd(num,denom) + if gcd != 0: + num /= gcd + denom /= gcd + + self.num = num + self.denom = denom + + Value.__init__(self, 'fraction') + + self.num = num + self.denom = denom + + __simplify() + + def __repr__(self): + return '' % (self.num, self.denom) + + def __eq__(self, other): + if isinstance(other, Fraction): + return self.num * other.denom == other.num * self.denom + return False + + def __ne__(self, other): + return not self.__eq__(other) + + def __mul__(self, other): + if isinstance(other, Fraction): + return Fraction(self.num * other.num, + self.denom * other.denom) + elif isinstance(other, int): + return Fraction(self.num * other, self.denom) + raise TypeError + + __rmul__ = __mul__ + + def __div__(self, other): + if isinstance(other, Fraction): + return Fraction(self.num * other.denom, + self.denom * other.num) + elif isinstance(other, int): + return Fraction(self.num, self.denom * other) + return TypeError + + def __rdiv__(self, other): + if isinstance(other, int): + return Fraction(self.denom * other, self.num) + return TypeError + + def __float__(self): + return float(self.num) / float(self.denom) + +try: + dlsave = sys.getdlopenflags() + from DLFCN import RTLD_GLOBAL, RTLD_LAZY +except AttributeError: + # windows doesn't have sys.getdlopenflags() + RTLD_GLOBAL = -1 + RTLD_LAZY = -1 +except ImportError: + RTLD_GLOBAL = -1 + RTLD_LAZY = -1 + import os + osname = os.uname()[0] + if osname == 'Linux' or osname == 'SunOS' or osname == 'FreeBSD' or osname == 'GNU/kFreeBSD' or osname == 'GNU': + machinename = os.uname()[4] + if machinename == 'mips' or machinename == 'mips64': + RTLD_GLOBAL = 0x4 + RTLD_LAZY = 0x1 + else: + RTLD_GLOBAL = 0x100 + RTLD_LAZY = 0x1 + elif osname == 'Darwin': + RTLD_GLOBAL = 0x8 + RTLD_LAZY = 0x1 + del os +except: + RTLD_GLOBAL = -1 + RTLD_LAZY = -1 + +if RTLD_GLOBAL != -1 and RTLD_LAZY != -1: + sys.setdlopenflags(RTLD_LAZY | RTLD_GLOBAL) + +try: + import libxml2 +except: + pass + +from _gst import * +import interfaces + +if RTLD_GLOBAL != -1 and RTLD_LAZY != -1: + sys.setdlopenflags(dlsave) +del sys + +version = get_gst_version + +# Fixes for API cleanups that would cause an API breakage. +# See #446674 + +import warnings +if locals().has_key("parse_bin_from_description"): + def gst_parse_bin_from_description(*args, **kwargs): + warnings.warn("gst_parse_bin_from_description() is deprecated, please use parse_bin_from_description instead", + DeprecationWarning) + return parse_bin_from_description(*args, **kwargs) + +if locals().has_key("message_new_buffering"): + def gst_message_new_buffering(*args, **kwargs): + warnings.warn("gst_message_new_buffering() is deprecated, please use message_new_buffering() instead", + DeprecationWarning) + return message_new_buffering(*args, **kwargs) + +# this restores previously installed importhooks, so we don't interfere +# with other people's module importers +# it also clears out the module completely as if it were never loaded, +# so that if anyone else imports gstltihooks the hooks get installed +if gstlibtoolimporter is not None: + import audio + import pbutils + import tag + import video + gstlibtoolimporter.uninstall() + import sys + del sys.modules["gstlibtoolimporter"] diff --git a/gst/arg-types.py b/gst/arg-types.py new file mode 100644 index 0000000..bf45607 --- /dev/null +++ b/gst/arg-types.py @@ -0,0 +1,418 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python +# Copyright (C) 2002 David I. Lehn +# 2004 Johan Dahlin +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library 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 +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# +# Author: David I. Lehn + +from argtypes import UInt64Arg, Int64Arg, PointerArg, ArgMatcher, ArgType, matcher +from reversewrapper import Parameter, ReturnType, GBoxedParam, GBoxedReturn, IntParam, IntReturn + +class XmlNodeArg(ArgType): + """libxml2 node generator""" + + names = {"xobj":"xmlNode", + "xptr":"xmlNodePtr", + "xwrap":"libxml_xmlNodePtrWrap"} + + parm = (' if(xml == NULL) return NULL;\n' + ' xobj = PyObject_GetAttrString(xml, "%(xobj)s");\n' + ' if(!PyObject_IsInstance(py%(name)s, xobj)) {\n' + ' PyErr_Clear();\n' + ' PyErr_SetString(PyExc_RuntimeError,"%(name)s is not a %(xobj)s instance");\n' + ' Py_DECREF(xobj);Py_DECREF(xml);\n' + ' return NULL;\n' + ' }\n' + ' o = PyObject_GetAttrString(py%(name)s, "_o");\n' + ' %(name)s = PyCObject_AsVoidPtr(o);\n') + parmp = (' Py_DECREF(o); Py_DECREF(xobj);Py_DECREF(xml);\n') + + ret = (' if(xml == NULL) return NULL;\n') + retp = (' xargs = PyTuple_New(1);\n' + ' xobj = PyObject_GetAttrString(xml, "%(xobj)s");\n' + ' o = %(xwrap)s(ret);\n' + ' PyTuple_SetItem(xargs, 0, o);\n' + ' return PyInstance_New(xobj, xargs, PyDict_New());\n') + + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + info.varlist.add('PyObject', '*xml = _gst_get_libxml2_module()') + info.varlist.add('PyObject', '*o') + info.varlist.add('PyObject', '*xobj') + info.varlist.add('PyObject', '*py' + pname) + info.varlist.add(self.names["xptr"], pname) + #if pnull: + info.add_parselist('O', ['&py'+pname], [pname]) + info.arglist.append(pname) + self.names["name"] = pname + info.codebefore.append(self.parm % self.names) + info.codeafter.append(self.parmp % self.names); + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('PyObject', '*xml = _gst_get_libxml2_module()') + info.varlist.add('PyObject', '*xargs') + info.varlist.add('PyObject', '*xobj') + info.varlist.add('PyObject', '*o') + info.varlist.add(self.names["xptr"], 'ret') + info.codebefore.append(self.ret % self.names) + info.codeafter.append(self.retp % self.names) + +class XmlDocArg(XmlNodeArg): + """libxml2 doc generator""" + names = {"xobj":"xmlDoc", + "xptr":"xmlDocPtr", + "xwrap":"libxml_xmlDocPtrWrap"} + +class GstCapsArg(ArgType): + """GstCaps node generator""" + + before = (' %(name)s = pygst_caps_from_pyobject (py_%(name)s, %(namecopy)s);\n' + ' if (PyErr_Occurred())\n' + ' return NULL;\n') + beforenull = (' if (py_%(name)s == Py_None || py_%(name)s == NULL)\n' + ' %(name)s = NULL;\n' + ' else\n' + ' ' + before) + after = (' if (%(name)s && %(name)s_is_copy)\n' + ' gst_caps_unref (%(name)s);\n') + + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if ptype == 'const-GstCaps*': + self.write_const_param(pname, pdflt, pnull, info) + elif ptype == 'GstCaps*': + self.write_normal_param(pname, pdflt, pnull, info) + else: + raise RuntimeError, "write_param not implemented for %s" % ptype + + def write_const_param(self, pname, pdflt, pnull, info): + if pdflt: + assert pdflt == 'NULL' + info.varlist.add('PyObject', '*py_' + pname + ' = NULL') + else: + info.varlist.add('PyObject', '*py_' + pname) + info.varlist.add('GstCaps', '*'+pname) + info.varlist.add('gboolean', pname+'_is_copy') + info.add_parselist('O', ['&py_'+pname], [pname]) + info.arglist.append(pname) + if pnull: + info.codebefore.append (self.beforenull % { 'name' : pname, 'namecopy' : '&'+pname+'_is_copy' }) + else: + info.codebefore.append (self.before % { 'name' : pname, 'namecopy' : '&'+pname+'_is_copy' }) + info.codeafter.append (self.after % { 'name' : pname, 'namecopy' : '&'+pname+'_is_copy' }) + + def write_normal_param(self, pname, pdflt, pnull, info): + if pdflt: + assert pdflt == 'NULL' + info.varlist.add('PyObject', '*py_' + pname + ' = NULL') + else: + info.varlist.add('PyObject', '*py_' + pname) + info.varlist.add('GstCaps', '*'+pname) + info.add_parselist('O', ['&py_'+pname], [pname]) + info.arglist.append(pname) + if pnull: + info.codebefore.append (self.beforenull % { 'name' : pname, 'namecopy' : 'NULL' }) + else: + info.codebefore.append (self.before % { 'name' : pname, 'namecopy' : 'NULL' }) + + def write_return(self, ptype, ownsreturn, info): + if ptype == 'GstCaps*': + info.varlist.add('GstCaps', '*ret') + copyval = 'FALSE' + elif ptype == 'const-GstCaps*': + info.varlist.add('const GstCaps', '*ret') + copyval = 'TRUE' + else: + raise RuntimeError, "write_return not implemented for %s" % ptype + info.codeafter.append(' return pyg_boxed_new (GST_TYPE_CAPS, (GstCaps*) ret, '+copyval+', TRUE);') + +class GstIteratorArg(ArgType): + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('GstIterator', '*ret') + info.codeafter.append(' return pygst_iterator_new(ret);') + +class GstMiniObjectArg(ArgType): + + before = (' %(name)s = %(macro)s(pygstminiobject_get (py_%(name)s));\n' + ' if (PyErr_Occurred())\n' + ' return NULL;\n') + + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + assert pdflt == 'NULL' + info.varlist.add('PyObject', '*py_' + pname + ' = NULL') + else: + info.varlist.add('PyObject', '*py_' + pname) + + #Converts 'GstBuffer*' to 'GstBuffer' + #and const-GstBuffer* to 'const GstBuffer' + info.varlist.add(ptype.replace('-',' ').replace('*',''), '*'+pname) + + if ptype in ['GstBuffer*', 'const-GstBuffer*']: + info.codebefore.append(self.before % { 'name' : pname, 'macro' : 'GST_BUFFER' }) + + elif ptype in ['GstMessage*', 'const-GstMessage*']: + info.codebefore.append(self.before % { 'name' : pname, 'macro' : 'GST_MESSAGE' }) + + elif ptype in ['GstEvent*', 'const-GstEvent*']: + info.codebefore.append(self.before % { 'name' : pname, 'macro' : 'GST_EVENT' }) + + elif ptype in ['GstQuery*', 'const-GstQuery*']: + info.codebefore.append(self.before % { 'name' : pname, 'macro' : 'GST_QUERY' }) + + else: + raise RuntimeError, "write_param not implemented for %s" % ptype + + info.add_parselist('O', ['&py_'+pname], [pname]) + info.arglist.append(pname) + + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('GstMiniObject', '*ret') + info.codeafter.append(' return pygstminiobject_new((GstMiniObject *) ret);') + +class GstMiniObjectParam(Parameter): + + def get_c_type(self): + return self.props.get('c_type', 'GstMiniObject *') + + def convert_c2py(self): + self.wrapper.add_declaration("PyObject *py_%s = NULL;" % self.name) + self.wrapper.write_code(code=("if (%s) {\n" + " py_%s = pygstminiobject_new((GstMiniObject *) %s);\n" + " gst_mini_object_unref ((GstMiniObject *) %s);\n" + "} else {\n" + " Py_INCREF(Py_None);\n" + " py_%s = Py_None;\n" + "}" + % (self.name, self.name, self.name, self.name, self.name)), + cleanup=("gst_mini_object_ref ((GstMiniObject *) %s); Py_DECREF(py_%s);" % (self.name, self.name))) + self.wrapper.add_pyargv_item("py_%s" % self.name) + +matcher.register_reverse('GstMiniObject*', GstMiniObjectParam) + +class GstMiniObjectReturn(ReturnType): + + def get_c_type(self): + return self.props.get('c_type', 'GstMiniObject *') + + def write_decl(self): + self.wrapper.add_declaration("%s retval;" % self.get_c_type()) + + def write_error_return(self): + self.wrapper.write_code("return NULL;") + + def write_conversion(self): + self.wrapper.write_code("retval = (%s) pygstminiobject_get(py_retval);" + % self.get_c_type()) + self.wrapper.write_code("gst_mini_object_ref((GstMiniObject *) retval);") + +matcher.register_reverse_ret('GstMiniObject*', GstMiniObjectReturn) + +class GstCapsParam(Parameter): + + def get_c_type(self): + return self.props.get('c_type', 'GstCaps *') + + def convert_c2py(self): + self.wrapper.add_declaration("PyObject *py_%s = NULL;" % self.name) + self.wrapper.write_code(code=("if (%s)\n" + " py_%s = pyg_boxed_new (GST_TYPE_CAPS, %s, FALSE, TRUE);\n" + "else {\n" + " Py_INCREF(Py_None);\n" + " py_%s = Py_None;\n" + "}" + % (self.name, self.name, self.name, self.name)), + cleanup=("gst_caps_ref(%s);\nPy_DECREF(py_%s);" % (self.name, self.name))) + self.wrapper.add_pyargv_item("py_%s" % self.name) + +matcher.register_reverse('GstCaps*', GstCapsParam) + +class GstCapsReturn(ReturnType): + + def get_c_type(self): + return self.props.get('c_type', 'GstCaps *') + + def write_decl(self): + self.wrapper.add_declaration("%s retval;" % self.get_c_type()) + + def write_error_return(self): + self.wrapper.write_code("return NULL;") + + def write_conversion(self): + self.wrapper.write_code("retval = (%s) pygst_caps_from_pyobject (py_retval, NULL);" + % self.get_c_type()) +## self.wrapper.write_code("gst_mini_object_ref((GstMiniObject *) retval);") + +matcher.register_reverse_ret('GstCaps*', GstCapsReturn) + + +class Int64Param(Parameter): + + def get_c_type(self): + return self.props.get('c_type', 'gint64') + + def convert_c2py(self): + self.wrapper.add_declaration("PyObject *py_%s;" % self.name) + self.wrapper.write_code(code=("py_%s = PyLong_FromLongLong(%s);" % + (self.name, self.name)), + cleanup=("Py_DECREF(py_%s);" % self.name)) + self.wrapper.add_pyargv_item("py_%s" % self.name) + +class Int64Return(ReturnType): + def get_c_type(self): + return self.props.get('c_type', 'gint64') + def write_decl(self): + self.wrapper.add_declaration("%s retval;" % self.get_c_type()) + def write_error_return(self): + self.wrapper.write_code("return -G_MAXINT;") + def write_conversion(self): + self.wrapper.write_code( + code=None, + failure_expression="!PyLong_Check(py_retval)", + failure_cleanup='PyErr_SetString(PyExc_TypeError, "retval should be an long");') + self.wrapper.write_code("retval = PyLong_AsLongLong(py_retval);") + +class UInt64Param(Parameter): + + def get_c_type(self): + return self.props.get('c_type', 'guint64') + + def convert_c2py(self): + self.wrapper.add_declaration("PyObject *py_%s;" % self.name) + self.wrapper.write_code(code=("py_%s = PyLong_FromUnsignedLongLong(%s);" % + (self.name, self.name)), + cleanup=("Py_DECREF(py_%s);" % self.name)) + self.wrapper.add_pyargv_item("py_%s" % self.name) + +class UInt64Return(ReturnType): + def get_c_type(self): + return self.props.get('c_type', 'guint64') + def write_decl(self): + self.wrapper.add_declaration("%s retval;" % self.get_c_type()) + def write_error_return(self): + self.wrapper.write_code("return -G_MAXINT;") + def write_conversion(self): + self.wrapper.write_code( + code=None, + failure_expression="!PyLong_Check(py_retval)", + failure_cleanup='PyErr_SetString(PyExc_TypeError, "retval should be an long");') + self.wrapper.write_code("retval = PyLong_AsUnsignedLongLongMask(py_retval);") + +class ULongParam(Parameter): + + def get_c_type(self): + return self.props.get('c_type', 'gulong') + + def convert_c2py(self): + self.wrapper.add_declaration("PyObject *py_%s;" % self.name) + self.wrapper.write_code(code=("py_%s = PyLong_FromUnsignedLong(%s);" % + (self.name, self.name)), + cleanup=("Py_DECREF(py_%s);" % self.name)) + self.wrapper.add_pyargv_item("py_%s" % self.name) + +class ULongReturn(ReturnType): + def get_c_type(self): + return self.props.get('c_type', 'gulong') + def write_decl(self): + self.wrapper.add_declaration("%s retval;" % self.get_c_type()) + def write_error_return(self): + self.wrapper.write_code("return -G_MAXINT;") + def write_conversion(self): + self.wrapper.write_code( + code=None, + failure_expression="!PyLong_Check(py_retval)", + failure_cleanup='PyErr_SetString(PyExc_TypeError, "retval should be an long");') + self.wrapper.write_code("retval = PyLong_AsUnsignedLongMask(py_retval);") + +class ConstStringReturn(ReturnType): + + def get_c_type(self): + return "const gchar *" + + def write_decl(self): + self.wrapper.add_declaration("const gchar *retval;") + + def write_error_return(self): + self.wrapper.write_code("return NULL;") + + def write_conversion(self): + self.wrapper.write_code( + code=None, + failure_expression="!PyString_Check(py_retval)", + failure_cleanup='PyErr_SetString(PyExc_TypeError, "retval should be a string");') + self.wrapper.write_code("retval = g_strdup(PyString_AsString(py_retval));") + +class StringArrayArg(ArgType): + """Arg type for NULL-terminated string pointer arrays (GStrv, aka gchar**).""" + def write_return(self, ptype, ownsreturn, info): + if ownsreturn: + raise NotImplementedError () + else: + info.varlist.add("gchar", "**ret") + info.codeafter.append(" if (ret) {\n" + " guint size = g_strv_length(ret);\n" + " PyObject *py_ret = PyTuple_New(size);\n" + " gint i;\n" + " for (i = 0; i < size; i++)\n" + " PyTuple_SetItem(py_ret, i,\n" + " PyString_FromString(ret[i]));\n" + " return py_ret;\n" + " }\n" + " return PyTuple_New (0);\n") + + +matcher.register('GstClockTime', UInt64Arg()) +matcher.register('GstElementFactoryListType', UInt64Arg()) +matcher.register('GstClockTimeDiff', Int64Arg()) +matcher.register('xmlNodePtr', XmlNodeArg()) +matcher.register('xmlDocPtr', XmlDocArg()) +matcher.register('GstCaps', GstCapsArg()) #FIXME: does this work? +matcher.register('GstCaps*', GstCapsArg()) #FIXME: does this work? +matcher.register('const-GstCaps*', GstCapsArg()) +matcher.register('GstIterator*', GstIteratorArg()) + +arg = PointerArg('gpointer', 'G_TYPE_POINTER') +matcher.register('GstClockID', arg) + +for typename in ["GstPlugin", "GstStructure", "GstTagList", "GError", "GstDate", "GstSegment"]: + matcher.register_reverse(typename, GBoxedParam) + matcher.register_reverse_ret(typename, GBoxedReturn) + +for typename in ["GstBuffer*", "const-GstBuffer*", "GstEvent*", "const-GstEvent*", "GstMessage*", "const-GstMessage*", "GstQuery*", "const-GstQuery*"]: + matcher.register(typename, GstMiniObjectArg()) + matcher.register_reverse(typename, GstMiniObjectParam) + matcher.register_reverse_ret(typename, GstMiniObjectReturn) + +for typename in ["gint64", "GstClockTimeDiff"]: + matcher.register_reverse(typename, Int64Param) + matcher.register_reverse_ret(typename, Int64Return) + +for typename in ["guint64", "GstClockTime", "GstElementFactoryListType"]: + matcher.register_reverse(typename, UInt64Param) + matcher.register_reverse_ret(typename, UInt64Return) + +matcher.register_reverse_ret("const-gchar*", ConstStringReturn) + +matcher.register_reverse("GType", IntParam) +matcher.register_reverse_ret("GType", IntReturn) + +matcher.register_reverse("gulong", ULongParam) +matcher.register_reverse_ret("gulong", ULongReturn) + +matcher.register("GStrv", StringArrayArg()) + +del arg diff --git a/gst/audio.defs b/gst/audio.defs new file mode 100644 index 0000000..2385ebb --- /dev/null +++ b/gst/audio.defs @@ -0,0 +1,872 @@ +;; -*- scheme -*- +; object definitions ... +(define-object AudioClock + (in-module "Gst") + (parent "GstSystemClock") + (c-name "GstAudioClock") + (gtype-id "GST_TYPE_AUDIO_CLOCK") +) + +(define-object AudioFilter + (in-module "Gst") + (parent "GstBaseTransform") + (c-name "GstAudioFilter") + (gtype-id "GST_TYPE_AUDIO_FILTER") +) + +(define-object BaseAudioSink + (in-module "Gst") + (parent "GstBaseSink") + (c-name "GstBaseAudioSink") + (gtype-id "GST_TYPE_BASE_AUDIO_SINK") +) + +(define-object AudioSink + (in-module "Gst") + (parent "GstBaseAudioSink") + (c-name "GstAudioSink") + (gtype-id "GST_TYPE_AUDIO_SINK") +) + +;; (define-object BaseAudioSrc +;; (in-module "Gst") +;; (parent "GstPushSrc") +;; (c-name "GstBaseAudioSrc") +;; (gtype-id "GST_TYPE_BASE_AUDIO_SRC") +;; ) + +;; (define-object AudioSrc +;; (in-module "Gst") +;; (parent "GstBaseAudioSrc") +;; (c-name "GstAudioSrc") +;; (gtype-id "GST_TYPE_AUDIO_SRC") +;; ) + +(define-object RingBuffer + (in-module "Gst") + (parent "GstObject") + (c-name "GstRingBuffer") + (gtype-id "GST_TYPE_RING_BUFFER") +) + +;; Enumerations and flags ... + +(define-enum BaseAudioSinkSlaveMethod + (in-module "Gst") + (c-name "GstBaseAudioSinkSlaveMethod") + (gtype-id "GST_TYPE_BASE_AUDIO_SINK_SLAVE_METHOD") + (values + '("resample" "GST_BASE_AUDIO_SINK_SLAVE_RESAMPLE") + '("skew" "GST_BASE_AUDIO_SINK_SLAVE_SKEW") + '("none" "GST_BASE_AUDIO_SINK_SLAVE_NONE") + ) +) + +(define-enum BaseAudioSrcSlaveMethod + (in-module "Gst") + (c-name "GstBaseAudioSrcSlaveMethod") + (gtype-id "GST_TYPE_BASE_AUDIO_SRC_SLAVE_METHOD") + (values + '("resample" "GST_BASE_AUDIO_SRC_SLAVE_RESAMPLE") + '("retimestamp" "GST_BASE_AUDIO_SRC_SLAVE_RETIMESTAMP") + '("skew" "GST_BASE_AUDIO_SRC_SLAVE_SKEW") + '("none" "GST_BASE_AUDIO_SRC_SLAVE_NONE") + ) +) + +(define-enum RingBufferState + (in-module "Gst") + (c-name "GstRingBufferState") + (gtype-id "GST_TYPE_RING_BUFFER_STATE") + (values + '("stopped" "GST_RING_BUFFER_STATE_STOPPED") + '("paused" "GST_RING_BUFFER_STATE_PAUSED") + '("started" "GST_RING_BUFFER_STATE_STARTED") + ) +) + +(define-enum RingBufferSegState + (in-module "Gst") + (c-name "GstRingBufferSegState") + (gtype-id "GST_TYPE_RING_BUFFER_SEG_STATE") + (values + '("invalid" "GST_SEGSTATE_INVALID") + '("empty" "GST_SEGSTATE_EMPTY") + '("filled" "GST_SEGSTATE_FILLED") + '("partial" "GST_SEGSTATE_PARTIAL") + ) +) + +(define-enum BufferFormatType + (in-module "Gst") + (c-name "GstBufferFormatType") + (gtype-id "GST_TYPE_BUFFER_FORMAT_TYPE") + (values + '("linear" "GST_BUFTYPE_LINEAR") + '("float" "GST_BUFTYPE_FLOAT") + '("mu-law" "GST_BUFTYPE_MU_LAW") + '("a-law" "GST_BUFTYPE_A_LAW") + '("ima-adpcm" "GST_BUFTYPE_IMA_ADPCM") + '("mpeg" "GST_BUFTYPE_MPEG") + '("gsm" "GST_BUFTYPE_GSM") + '("iec958" "GST_BUFTYPE_IEC958") + '("ac3" "GST_BUFTYPE_AC3") + '("eac3" "GST_BUFTYPE_EAC3") + '("dts" "GST_BUFTYPE_DTS") + ) +) + +(define-enum BufferFormat + (in-module "Gst") + (c-name "GstBufferFormat") + (gtype-id "GST_TYPE_BUFFER_FORMAT") + (values + '("unknown" "GST_UNKNOWN") + '("s8" "GST_S8") + '("u8" "GST_U8") + '("s16-le" "GST_S16_LE") + '("s16-be" "GST_S16_BE") + '("u16-le" "GST_U16_LE") + '("u16-be" "GST_U16_BE") + '("s24-le" "GST_S24_LE") + '("s24-be" "GST_S24_BE") + '("u24-le" "GST_U24_LE") + '("u24-be" "GST_U24_BE") + '("s32-le" "GST_S32_LE") + '("s32-be" "GST_S32_BE") + '("u32-le" "GST_U32_LE") + '("u32-be" "GST_U32_BE") + '("s24-3le" "GST_S24_3LE") + '("s24-3be" "GST_S24_3BE") + '("u24-3le" "GST_U24_3LE") + '("u24-3be" "GST_U24_3BE") + '("s20-3le" "GST_S20_3LE") + '("s20-3be" "GST_S20_3BE") + '("u20-3le" "GST_U20_3LE") + '("u20-3be" "GST_U20_3BE") + '("s18-3le" "GST_S18_3LE") + '("s18-3be" "GST_S18_3BE") + '("u18-3le" "GST_U18_3LE") + '("u18-3be" "GST_U18_3BE") + '("float32-le" "GST_FLOAT32_LE") + '("float32-be" "GST_FLOAT32_BE") + '("float64-le" "GST_FLOAT64_LE") + '("float64-be" "GST_FLOAT64_BE") + '("mu-law" "GST_MU_LAW") + '("a-law" "GST_A_LAW") + '("ima-adpcm" "GST_IMA_ADPCM") + '("mpeg" "GST_MPEG") + '("gsm" "GST_GSM") + '("iec958" "GST_IEC958") + '("ac3" "GST_AC3") + '("eac3" "GST_EAC3") + '("dts" "GST_DTS") + ) +) + +(define-enum AudioChannelPosition + (in-module "Gst") + (c-name "GstAudioChannelPosition") + (gtype-id "GST_TYPE_AUDIO_CHANNEL_POSITION") + (values + '("invalid" "GST_AUDIO_CHANNEL_POSITION_INVALID") + '("front-mono" "GST_AUDIO_CHANNEL_POSITION_FRONT_MONO") + '("front-left" "GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT") + '("front-right" "GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT") + '("rear-center" "GST_AUDIO_CHANNEL_POSITION_REAR_CENTER") + '("rear-left" "GST_AUDIO_CHANNEL_POSITION_REAR_LEFT") + '("rear-right" "GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT") + '("lfe" "GST_AUDIO_CHANNEL_POSITION_LFE") + '("front-center" "GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER") + '("front-left-of-center" "GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER") + '("front-right-of-center" "GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER") + '("side-left" "GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT") + '("side-right" "GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT") + '("none" "GST_AUDIO_CHANNEL_POSITION_NONE") + '("num" "GST_AUDIO_CHANNEL_POSITION_NUM") + ) +) + + +;; From audio.h + +(define-function frame_byte_size + (c-name "gst_audio_frame_byte_size") + (return-type "int") + (parameters + '("GstPad*" "pad") + ) +) + +(define-function frame_length + (c-name "gst_audio_frame_length") + (return-type "long") + (parameters + '("GstPad*" "pad") + '("GstBuffer*" "buf") + ) +) + +(define-function duration_from_pad_buffer + (c-name "gst_audio_duration_from_pad_buffer") + (return-type "GstClockTime") + (parameters + '("GstPad*" "pad") + '("GstBuffer*" "buf") + ) +) + +(define-function is_buffer_framed + (c-name "gst_audio_is_buffer_framed") + (return-type "gboolean") + (parameters + '("GstPad*" "pad") + '("GstBuffer*" "buf") + ) +) + +(define-function buffer_clip + (c-name "gst_audio_buffer_clip") + (return-type "GstBuffer*") + (parameters + '("GstBuffer*" "buffer") + '("GstSegment*" "segment") + '("gint" "rate") + '("gint" "frame_size") + ) +) + + + +;; From gstaudioclock.h + +(define-function gst_audio_clock_get_type + (c-name "gst_audio_clock_get_type") + (return-type "GType") +) + +(define-function gst_audio_clock_new + (c-name "gst_audio_clock_new") + (is-constructor-of "GstAudioClock") + (return-type "GstClock*") + (parameters + '("gchar*" "name") + '("GstAudioClockGetTimeFunc" "func") + '("gpointer" "user_data") + ) +) + +(define-function audio_clock_new_full + (c-name "gst_audio_clock_new_full") + (return-type "GstClock*") + (parameters + '("const-gchar*" "name") + '("GstAudioClockGetTimeFunc" "func") + '("gpointer" "user_data") + '("GDestroyNotify" "destroy_notify") + ) +) + +(define-method reset + (of-object "GstAudioClock") + (c-name "gst_audio_clock_reset") + (return-type "none") + (parameters + '("GstClockTime" "time") + ) +) + +(define-function clock_get_time + (c-name "gst_audio_clock_get_time") + (return-type "GstClockTime") + (parameters + '("GstClock*" "clock") + ) +) + +(define-function clock_adjust + (c-name "gst_audio_clock_adjust") + (return-type "GstClockTime") + (parameters + '("GstClock*" "clock") + '("GstClockTime" "time") + ) +) + +(define-function audio_clock_invalidate + (c-name "gst_audio_clock_invalidate") + (return-type "none") + (parameters + '("GstClock*" "clock") + ) +) + +;; From gstaudiofilter.h + +(define-function gst_audio_filter_get_type + (c-name "gst_audio_filter_get_type") + (return-type "GType") +) + +(define-method add_pad_templates + (of-object "GstAudioFilterClass") + (c-name "gst_audio_filter_class_add_pad_templates") + (return-type "none") + (parameters + '("const-GstCaps*" "allowed_caps") + ) +) + +(define-virtual setup + (of-object "GstAudioFilter") + (return-type "gboolean") + (parameters + '("GstRingBufferSpec*" "format") + ) +) + +;; From gstaudiosink.h + +(define-function gst_audio_sink_get_type + (c-name "gst_audio_sink_get_type") + (return-type "GType") +) + +(define-virtual open + (of-object "GstAudioSink") + (return-type "gboolean") +) + +(define-virtual prepare + (of-object "GstAudioSink") + (return-type "gboolean") + (parameters + '("GstRingBufferSpec*" "spec") + ) +) + +(define-virtual unprepare + (of-object "GstAudioSink") + (return-type "gboolean") +) + +(define-virtual close + (of-object "GstAudioSink") + (return-type "gboolean") +) + +(define-virtual write + (of-object "GstAudioSink") + (return-type "guint") + (parameters + '("gpointer" "data") + '("guint" "length") + ) +) + +(define-virtual delay + (of-object "GstAudioSink") + (return-type "guint") +) + +(define-virtual reset + (of-object "GstAudioSink") + (return-type "none") +) + +;; From gstaudiosrc.h + +(define-function gst_audio_src_get_type + (c-name "gst_audio_src_get_type") + (return-type "GType") +) + + + +;; From gstbaseaudiosink.h + +(define-function gst_base_audio_sink_get_type + (c-name "gst_base_audio_sink_get_type") + (return-type "GType") +) + +(define-method create_ringbuffer + (of-object "GstBaseAudioSink") + (c-name "gst_base_audio_sink_create_ringbuffer") + (return-type "GstRingBuffer*") +) + +(define-virtual create_ringbuffer + (of-object "GstBaseAudioSink") + (c-name "gst_base_audio_sink_create_ringbuffer") + (return-type "GstRingBuffer*") +) +(define-method set_provide_clock + (of-object "GstBaseAudioSink") + (c-name "gst_base_audio_sink_set_provide_clock") + (return-type "none") + (parameters + '("gboolean" "provide") + ) +) + +(define-method get_provide_clock + (of-object "GstBaseAudioSink") + (c-name "gst_base_audio_sink_get_provide_clock") + (return-type "gboolean") +) + +(define-method set_slave_method + (of-object "GstBaseAudioSink") + (c-name "gst_base_audio_sink_set_slave_method") + (return-type "none") + (parameters + '("GstBaseAudioSinkSlaveMethod" "method") + ) +) + +(define-method get_slave_method + (of-object "GstBaseAudioSink") + (c-name "gst_base_audio_sink_get_slave_method") + (return-type "GstBaseAudioSinkSlaveMethod") +) + +(define-method set_drift_tolerance + (of-object "GstBaseAudioSink") + (c-name "gst_base_audio_sink_set_drift_tolerance") + (return-type "none") + (parameters + '("gint64" "drift_tolerance") + ) +) + +(define-method get_drift_tolerance + (of-object "GstBaseAudioSink") + (c-name "gst_base_audio_sink_get_drift_tolerance") + (return-type "gint64") +) + + + +;; From gstbaseaudiosrc.h + +(define-function gst_base_audio_src_get_type + (c-name "gst_base_audio_src_get_type") + (return-type "GType") +) + +(define-method create_ringbuffer + (of-object "GstBaseAudioSrc") + (c-name "gst_base_audio_src_create_ringbuffer") + (return-type "GstRingBuffer*") +) + +(define-virtual create_ringbuffer + (of-object "GstBaseAudioSrc") + (c-name "gst_base_audio_src_create_ringbuffer") + (return-type "GstRingBuffer*") +) + +(define-method set_provide_clock + (of-object "GstBaseAudioSrc") + (c-name "gst_base_audio_src_set_provide_clock") + (return-type "none") + (parameters + '("gboolean" "provide") + ) +) + +(define-method get_provide_clock + (of-object "GstBaseAudioSrc") + (c-name "gst_base_audio_src_get_provide_clock") + (return-type "gboolean") +) + +(define-method set_slave_method + (of-object "GstBaseAudioSrc") + (c-name "gst_base_audio_src_set_slave_method") + (return-type "none") + (parameters + '("GstBaseAudioSrcSlaveMethod" "method") + ) +) + +(define-method get_slave_method + (of-object "GstBaseAudioSrc") + (c-name "gst_base_audio_src_get_slave_method") + (return-type "GstBaseAudioSrcSlaveMethod") +) + + + +;; From gstringbuffer.h + +(define-function gst_ring_buffer_get_type + (c-name "gst_ring_buffer_get_type") + (return-type "GType") +) + +(define-method set_callback + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_set_callback") + (return-type "none") + (parameters + '("GstRingBufferCallback" "cb") + '("gpointer" "user_data") + ) +) + +(define-function ring_buffer_parse_caps + (c-name "gst_ring_buffer_parse_caps") + (return-type "gboolean") + (parameters + '("GstRingBufferSpec*" "spec") + '("GstCaps*" "caps") + ) +) + +(define-function ring_buffer_debug_spec_caps + (c-name "gst_ring_buffer_debug_spec_caps") + (return-type "none") + (parameters + '("GstRingBufferSpec*" "spec") + ) +) + +(define-function ring_buffer_debug_spec_buff + (c-name "gst_ring_buffer_debug_spec_buff") + (return-type "none") + (parameters + '("GstRingBufferSpec*" "spec") + ) +) + +(define-method convert + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_convert") + (return-type "gboolean") + (parameters + '("GstFormat" "src_fmt") + '("gint64" "src_val") + '("GstFormat" "dest_fmt") + '("gint64*" "dest_val") + ) +) + +(define-method open_device + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_open_device") + (return-type "gboolean") +) + +(define-method close_device + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_close_device") + (return-type "gboolean") +) + +(define-method device_is_open + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_device_is_open") + (return-type "gboolean") +) + +(define-method acquire + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_acquire") + (return-type "gboolean") + (parameters + '("GstRingBufferSpec*" "spec") + ) +) + +(define-method release + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_release") + (return-type "gboolean") +) + +(define-method is_acquired + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_is_acquired") + (return-type "gboolean") +) + +(define-method activate + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_activate") + (return-type "gboolean") + (parameters + '("gboolean" "active") + ) +) + +(define-method is_active + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_is_active") + (return-type "gboolean") +) + +(define-method set_flushing + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_set_flushing") + (return-type "none") + (parameters + '("gboolean" "flushing") + ) +) + +(define-method start + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_start") + (return-type "gboolean") +) + +(define-method pause + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_pause") + (return-type "gboolean") +) + +(define-method stop + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_stop") + (return-type "gboolean") +) + +(define-method delay + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_delay") + (return-type "guint") +) + +(define-method samples_done + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_samples_done") + (return-type "guint64") +) + +(define-method set_sample + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_set_sample") + (return-type "none") + (parameters + '("guint64" "sample") + ) +) + +(define-method clear_all + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_clear_all") + (return-type "none") +) + +(define-method commit + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_commit") + (return-type "guint") + (parameters + '("guint64" "sample") + '("guchar*" "data") + '("guint" "len") + ) +) + +(define-method commit_full + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_commit_full") + (return-type "guint") + (parameters + '("guint64*" "sample") + '("guchar*" "data") + '("gint" "in_samples") + '("gint" "out_samples") + '("gint*" "accum") + ) +) + +(define-method read + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_read") + (return-type "guint") + (parameters + '("guint64" "sample") + '("guchar*" "data") + '("guint" "len") + ) +) + +(define-method prepare_read + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_prepare_read") + (return-type "gboolean") + (parameters + '("gint*" "segment") + '("guint8**" "readptr") + '("gint*" "len") + ) +) + +(define-method clear + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_clear") + (return-type "none") + (parameters + '("gint" "segment") + ) +) + +(define-method advance + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_advance") + (return-type "none") + (parameters + '("guint" "advance") + ) +) + +(define-method may_start + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_may_start") + (return-type "none") + (parameters + '("gboolean" "allowed") + ) +) + +(define-virtual open_device + (of-object "GstRingBuffer") + (return-type "gboolean") +) + +(define-virtual acquire + (of-object "GstRingBuffer") + (return-type "gboolean") + (parameters + '("GstRingBufferSpec*" "spec") + ) +) + +(define-virtual release + (of-object "GstRingBuffer") + (return-type "gboolean") +) + +(define-virtual close_device + (of-object "GstRingBuffer") + (return-type "gboolean") +) + +(define-virtual start + (of-object "GstRingBuffer") + (return-type "gboolean") +) + +(define-virtual pause + (of-object "GstRingBuffer") + (return-type "gboolean") +) + +(define-virtual resume + (of-object "GstRingBuffer") + (return-type "gboolean") +) + +(define-virtual stop + (of-object "GstRingBuffer") + (return-type "gboolean") +) + +(define-virtual delay + (of-object "GstRingBuffer") + (return-type "guint") +) + +(define-virtual activate + (of-object "GstRingBuffer") + (return-type "gboolean") + (parameters + '("gboolean" "active") + ) +) + +;; From mixerutils.h + +(define-function default_registry_mixer_filter + (c-name "gst_audio_default_registry_mixer_filter") + (return-type "GList*") + (parameters + '("GstAudioMixerFilterFunc" "filter_func") + '("gboolean" "first") + '("gpointer" "user_data") + ) +) + + + +;; From multichannel-enumtypes.h + +(define-function gst_audio_channel_position_get_type + (c-name "gst_audio_channel_position_get_type") + (return-type "GType") +) + + + +;; From multichannel.h + +(define-function get_channel_positions + (c-name "gst_audio_get_channel_positions") + (return-type "GstAudioChannelPosition*") + (parameters + '("GstStructure*" "str") + ) +) + +(define-function set_channel_positions + (c-name "gst_audio_set_channel_positions") + (return-type "none") + (parameters + '("GstStructure*" "str") + '("const-GstAudioChannelPosition*" "pos") + ) +) + +(define-function set_structure_channel_positions_list + (c-name "gst_audio_set_structure_channel_positions_list") + (return-type "none") + (parameters + '("GstStructure*" "str") + '("const-GstAudioChannelPosition*" "pos") + '("gint" "num_positions") + ) +) + +(define-function set_caps_channel_positions_list + (c-name "gst_audio_set_caps_channel_positions_list") + (return-type "none") + (parameters + '("GstCaps*" "caps") + '("const-GstAudioChannelPosition*" "pos") + '("gint" "num_positions") + ) +) + +(define-function fixate_channel_positions + (c-name "gst_audio_fixate_channel_positions") + (return-type "GstAudioChannelPosition*") + (parameters + '("GstStructure*" "str") + ) +) + +(define-function check_channel_positions + (c-name "gst_audio_check_channel_positions") + (return-type "gboolean") + (parameters + '("const-GstAudioChannelPosition*" "pos") + '("guint" "channels") + ) +) + + diff --git a/gst/audio.override b/gst/audio.override new file mode 100644 index 0000000..f252346 --- /dev/null +++ b/gst/audio.override @@ -0,0 +1,72 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2008 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ +%% +headers + +#ifdef HAVE_CONFIG_H +# include +#endif + +#define NO_IMPORT_PYGOBJECT +#include "common.h" +#include "pygst.h" + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include "pygstminiobject.h" +GST_DEBUG_CATEGORY_EXTERN (pygst_debug); +#define GST_CAT_DEFAULT pygst_debug + +/* Boonky define that allows for backwards compatibility with Python 2.4 */ +#if PY_VERSION_HEX < 0x02050000 +#define Py_ssize_t int +#endif + +%% +modulename gst.audio +%% +import gobject.GObject as PyGObject_Type +import gst.Object as PyGstObject_Type +import gst.Structure as PyGstStructure_Type +import gst.Element as PyGstElement_Type +import gst.Pad as PyGstPad_Type +import gst.Buffer as PyGstBuffer_Type +import gst.Message as PyGstMessage_Type +import gst.SystemClock as PyGstSystemClock_Type +import gst.BaseTransform as PyGstBaseTransform_Type +import gst.BaseSink as PyGstBaseSink_Type +import gst.Clock as PyGstClock_Type +%% +include + gstversion.override +%% +ignore-glob + _* + *init + *_free + *_get_type diff --git a/gst/audiomodule.c b/gst/audiomodule.c new file mode 100644 index 0000000..eeab97e --- /dev/null +++ b/gst/audiomodule.c @@ -0,0 +1,58 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2008 Edward Hervey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +/* include this first, before NO_IMPORT_PYGOBJECT is defined */ +#include +#include +#include +#include +#include +#include "pygst.h" + +void pyaudio_register_classes (PyObject * d); +void pyaudio_add_constants (PyObject * module, const gchar * strip_prefix); + +extern PyMethodDef pyaudio_functions[]; + +GST_DEBUG_CATEGORY (pygst_debug); /* for python code */ + +DL_EXPORT (void) +initaudio (void) +{ + PyObject *m, *d; + + init_pygobject (); + pygst_init (); + + m = Py_InitModule ("audio", pyaudio_functions); + d = PyModule_GetDict (m); + + pyaudio_register_classes (d); + pyaudio_add_constants (m, "GST_"); + + if (PyErr_Occurred ()) { + PyErr_Print (); + Py_FatalError ("can't initialize module gst.audio"); + } +} diff --git a/gst/base.defs b/gst/base.defs new file mode 100644 index 0000000..16aa692 --- /dev/null +++ b/gst/base.defs @@ -0,0 +1,1164 @@ +;; -*- scheme -*- +; object definitions ... +(define-object Adapter + (in-module "Gst") + (parent "GObject") + (c-name "GstAdapter") + (gtype-id "GST_TYPE_ADAPTER") +) + +(define-object BaseSink + (in-module "Gst") + (parent "GstElement") + (c-name "GstBaseSink") + (gtype-id "GST_TYPE_BASE_SINK") +) + +(define-object BaseSrc + (in-module "Gst") + (parent "GstElement") + (c-name "GstBaseSrc") + (gtype-id "GST_TYPE_BASE_SRC") +) + +(define-object BaseTransform + (in-module "Gst") + (parent "GstElement") + (c-name "GstBaseTransform") + (gtype-id "GST_TYPE_BASE_TRANSFORM") +) + +(define-object CollectPads + (in-module "Gst") + (parent "GstObject") + (c-name "GstCollectPads") + (gtype-id "GST_TYPE_COLLECT_PADS") +) + +(define-object DataQueue + (in-module "Gst") + (parent "GObject") + (c-name "GstDataQueue") + (gtype-id "GST_TYPE_DATA_QUEUE") +) + +; PushSrc doesn't work due to limitations in the code generator, so disable +;(define-object PushSrc +; (in-module "Gst") +; (parent "GstBaseSrc") +; (c-name "GstPushSrc") +; (gtype-id "GST_TYPE_PUSH_SRC") +;) + +;; Enumerations and flags ... + +; (define-flags BaseSrcFlags +; (in-module "Gst") +; (c-name "GstBaseSrcFlags") +; (gtype-id "GST_TYPE_BASE_SRC_FLAGS") +; (values +; '("started" "GST_BASE_SRC_STARTED") +; '("flag-last" "GST_BASE_SRC_FLAG_LAST") +; ) +; ) + + +;; From ../gstreamer/libs/gst/base/gstadapter.h + +(define-function gst_adapter_new + (c-name "gst_adapter_new") + (is-constructor-of "GstAdapter") + (return-type "GstAdapter*") +) + +(define-method clear + (of-object "GstAdapter") + (c-name "gst_adapter_clear") + (return-type "none") +) + +(define-method push + (of-object "GstAdapter") + (c-name "gst_adapter_push") + (return-type "none") + (parameters + '("GstBuffer*" "buf" (keep-refcount)) + ) +) + +(define-method peek + (of-object "GstAdapter") + (c-name "gst_adapter_peek") + (return-type "const-guint8*") + (parameters + '("guint" "size") + ) +) + +(define-method copy + (of-object "GstAdapter") + (c-name "gst_adapter_copy") + (return-type "none") + (parameters + '("guint8*" "dest") + '("guint" "offset") + '("guint" "size") + ) +) + +(define-method flush + (of-object "GstAdapter") + (c-name "gst_adapter_flush") + (return-type "none") + (parameters + '("guint" "flush") + ) +) + +(define-method take + (of-object "GstAdapter") + (c-name "gst_adapter_take") + (return-type "guint8*") + (caller-owns-return #t) + (parameters + '("guint" "nbytes") + ) +) + +(define-method take_buffer + (of-object "GstAdapter") + (c-name "gst_adapter_take_buffer") + (return-type "GstBuffer*") + (caller-owns-return #t) + (parameters + '("guint" "nbytes") + ) +) + +(define-method take_list + (of-object "GstAdapter") + (c-name "gst_adapter_take_list") + (return-type "GList*") + (parameters + '("guint" "nbytes") + ) +) + +(define-method available + (of-object "GstAdapter") + (c-name "gst_adapter_available") + (return-type "guint") +) + +(define-method available_fast + (of-object "GstAdapter") + (c-name "gst_adapter_available_fast") + (return-type "guint") +) + +(define-method prev_timestamp + (of-object "GstAdapter") + (c-name "gst_adapter_prev_timestamp") + (return-type "GstClockTime") + (parameters + '("guint64*" "distance") + ) +) + +(define-method masked_scan_uint32 + (of-object "GstAdapter") + (c-name "gst_adapter_masked_scan_uint32") + (return-type "guint") + (parameters + '("guint32" "mask") + '("guint32" "pattern") + '("guint" "offset") + '("guint" "size") + ) +) + +(define-method masked_scan_uint32_peek + (of-object "GstAdapter") + (c-name "gst_adapter_masked_scan_uint32_peek") + (return-type "guint") + (parameters + '("guint32" "mask") + '("guint32" "pattern") + '("guint" "offset") + '("guint" "size") + '("guint32*" "value") + ) +) + +(define-function gst_adapter_get_type + (c-name "gst_adapter_get_type") + (return-type "GType") +) + + + +;; From ../gstreamer/libs/gst/base/gstbasesink.h + +(define-function gst_base_sink_get_type + (c-name "gst_base_sink_get_type") + (return-type "GType") +) + +(define-method wait_preroll + (of-object "GstBaseSink") + (c-name "gst_base_sink_wait_preroll") + (return-type "GstFlowReturn") +) + +(define-method set_sync + (of-object "GstBaseSink") + (c-name "gst_base_sink_set_sync") + (return-type "none") + (parameters + '("gboolean" "sync") + ) +) + +(define-method get_sync + (of-object "GstBaseSink") + (c-name "gst_base_sink_get_sync") + (return-type "gboolean") +) + +(define-method set_max_lateness + (of-object "GstBaseSink") + (c-name "gst_base_sink_set_max_lateness") + (return-type "none") + (parameters + '("gint64" "max_lateness") + ) +) + +(define-method get_max_lateness + (of-object "GstBaseSink") + (c-name "gst_base_sink_get_max_lateness") + (return-type "gint64") +) + +(define-method set_qos_enabled + (of-object "GstBaseSink") + (c-name "gst_base_sink_set_qos_enabled") + (return-type "none") + (parameters + '("gboolean" "enabled") + ) +) + +(define-method is_qos_enabled + (of-object "GstBaseSink") + (c-name "gst_base_sink_is_qos_enabled") + (return-type "gboolean") +) + +(define-method set_async_enabled + (of-object "GstBaseSink") + (c-name "gst_base_sink_set_async_enabled") + (return-type "none") + (parameters + '("gboolean" "enabled") + ) +) + +(define-method is_async_enabled + (of-object "GstBaseSink") + (c-name "gst_base_sink_is_async_enabled") + (return-type "gboolean") +) + +(define-method set_ts_offset + (of-object "GstBaseSink") + (c-name "gst_base_sink_set_ts_offset") + (return-type "none") + (parameters + '("GstClockTimeDiff" "offset") + ) +) + +(define-method get_ts_offset + (of-object "GstBaseSink") + (c-name "gst_base_sink_get_ts_offset") + (return-type "GstClockTimeDiff") +) + +(define-method get_last_buffer + (of-object "GstBaseSink") + (c-name "gst_base_sink_get_last_buffer") + (return-type "GstBuffer*") + (caller-owns-return #t) +) + +(define-method set_last_buffer_enabled + (of-object "GstBaseSink") + (c-name "gst_base_sink_set_last_buffer_enabled") + (return-type "none") + (parameters + '("gboolean" "enabled") + ) +) + +(define-method is_last_buffer_enabled + (of-object "GstBaseSink") + (c-name "gst_base_sink_is_last_buffer_enabled") + (return-type "gboolean") +) + +(define-method query_latency + (of-object "GstBaseSink") + (c-name "gst_base_sink_query_latency") + (return-type "gboolean") + (parameters + '("gboolean*" "live") + '("gboolean*" "upstream_live") + '("GstClockTime*" "min_latency") + '("GstClockTime*" "max_latency") + ) +) + +(define-method get_latency + (of-object "GstBaseSink") + (c-name "gst_base_sink_get_latency") + (return-type "GstClockTime") +) + +(define-method wait_eos + (of-object "GstBaseSink") + (c-name "gst_base_sink_wait_eos") + (return-type "GstFlowReturn") + (parameters + '("GstClockTime" "time") + '("GstClockTimeDiff*" "jitter") + ) +) + +(define-virtual get_caps + (of-object "GstBaseSink") + (return-type "GstCaps*") +) + +(define-virtual set_caps + (of-object "GstBaseSink") + (return-type "gboolean") + (parameters + '("GstCaps*" "caps") + ) +) + +(define-virtual buffer_alloc + (of-object "GstBaseSink") + (return-type "GstFlowReturn") + (parameters + '("guint64" "offset") + '("guint" "size") + '("GstCaps*" "caps") + '("GstBuffer**" "buffer") + ) +) + +(define-virtual get_times + (of-object "GstBaseSink") + (return-type "none") + (parameters + '("GstBuffer*" "buffer") + '("GstClockTime*" "start") + '("GstClockTime*" "end") + ) +) + +(define-virtual start + (of-object "GstBaseSink") + (return-type "gboolean") +) + +(define-virtual stop + (of-object "GstBaseSink") + (return-type "gboolean") +) + +(define-virtual unlock + (of-object "GstBaseSink") + (return-type "gboolean") +) + +(define-virtual event + (of-object "GstBaseSink") + (return-type "gboolean") + (parameters + '("GstEvent*" "event") + ) +) + +(define-virtual preroll + (of-object "GstBaseSink") + (return-type "GstFlowReturn") + (parameters + '("GstBuffer*" "buffer") + ) +) + +(define-virtual render + (of-object "GstBaseSink") + (return-type "GstFlowReturn") + (parameters + '("GstBuffer*" "buffer") + ) +) + +(define-virtual activate_pull + (of-object "GstBaseSink") + (return-type "gboolean") + (parameters + '("gboolean" "active") + ) +) + +(define-virtual fixate + (of-object "GstBaseSink") + (return-type "none") + (parameters + '("GstCaps*" "caps") + ) +) + +(define-virtual unlock_stop + (of-object "GstBaseSink") + (return-type "gboolean") +) + +;; From ../gstreamer/libs/gst/base/gstbasesrc.h + +(define-function gst_base_src_get_type + (c-name "gst_base_src_get_type") + (return-type "GType") +) + +(define-method wait_playing + (of-object "GstBaseSrc") + (c-name "gst_base_src_wait_playing") + (return-type "GstFlowReturn") +) + +(define-method set_live + (of-object "GstBaseSrc") + (c-name "gst_base_src_set_live") + (return-type "none") + (parameters + '("gboolean" "live") + ) +) + +(define-method is_live + (of-object "GstBaseSrc") + (c-name "gst_base_src_is_live") + (return-type "gboolean") +) + +(define-method set_format + (of-object "GstBaseSrc") + (c-name "gst_base_src_set_format") + (return-type "none") + (parameters + '("GstFormat" "format") + ) +) + +(define-method query_latency + (of-object "GstBaseSrc") + (c-name "gst_base_src_query_latency") + (return-type "gboolean") + (parameters + '("gboolean*" "live") + '("GstClockTime*" "min_latency") + '("GstClockTime*" "max_latency") + ) +) + +(define-method set_do_timestamp + (of-object "GstBaseSrc") + (c-name "gst_base_src_set_do_timestamp") + (return-type "none") + (parameters + '("gboolean" "timestamp") + ) +) + +(define-method get_do_timestamp + (of-object "GstBaseSrc") + (c-name "gst_base_src_get_do_timestamp") + (return-type "gboolean") +) + +(define-method new_seamless_segment + (of-object "GstBaseSrc") + (c-name "gst_base_src_new_seamless_segment") + (return-type "gboolean") + (parameters + '("gint64" "start") + '("gint64" "stop") + '("gint64" "position") + ) +) + +(define-virtual get_caps + (of-object "GstBaseSrc") + (return-type "GstCaps*") +) + +(define-virtual set_caps + (of-object "GstBaseSrc") + (return-type "gboolean") + (parameters + '("GstCaps*" "caps") + ) +) + +(define-virtual negotiate + (of-object "GstBaseSrc") + (return-type "gboolean") +) + +(define-virtual newsegment + (of-object "GstBaseSrc") + (return-type "gboolean") +) + +(define-virtual start + (of-object "GstBaseSrc") + (return-type "gboolean") +) + +(define-virtual stop + (of-object "GstBaseSrc") + (return-type "gboolean") +) + +(define-virtual get_times + (of-object "GstBaseSrc") + (return-type "none") + (parameters + '("GstBuffer*" "buffer") + '("GstClockTime*" "start") + '("GstClockTime*" "end") + ) +) + +(define-virtual get_size + (of-object "GstBaseSrc") + (return-type "gboolean") + (parameters + '("guint64*" "size") + ) +) + +(define-virtual is_seekable + (of-object "GstBaseSrc") + (return-type "gboolean") +) + +(define-virtual unlock + (of-object "GstBaseSrc") + (return-type "gboolean") +) + +(define-virtual event + (of-object "GstBaseSrc") + (return-type "gboolean") + (parameters + '("GstEvent*" "event") + ) +) + +(define-virtual create + (of-object "GstBaseSrc") + (return-type "GstFlowReturn") + (parameters + '("guint64" "offset") + '("guint" "size") + '("GstBuffer**" "buf") + ) +) + +(define-virtual do_seek + (of-object "GstBaseSrc") + (return-type "gboolean") + (parameters + '("GstSegment*" "segment") + ) +) + +(define-virtual query + (of-object "GstBaseSrc") + (return-type "gboolean") + (parameters + '("GstQuery*" "query") + ) +) + +(define-virtual check_get_range + (of-object "GstBaseSrc") + (return-type "gboolean") +) + +(define-virtual fixate + (of-object "GstBaseSrc") + (return-type "none") + (parameters + '("GstCaps*" "caps") + ) +) + +(define-virtual unlock_stop + (of-object "GstBaseSrc") + (return-type "gboolean") +) + +(define-virtual prepare_seek_segment + (of-object "GstBaseSrc") + (return-type "gboolean") + (parameters + '("GstEvent*" "seek") + '("GstSegment*" "segment") + ) +) + + +;; From ../gstreamer/libs/gst/base/gstbasetransform.h + +(define-function gst_base_transform_get_type + (c-name "gst_base_transform_get_type") + (return-type "GType") +) + +(define-method set_passthrough + (of-object "GstBaseTransform") + (c-name "gst_base_transform_set_passthrough") + (return-type "none") + (parameters + '("gboolean" "passthrough") + ) +) + +(define-method is_passthrough + (of-object "GstBaseTransform") + (c-name "gst_base_transform_is_passthrough") + (return-type "gboolean") +) + +(define-method set_in_place + (of-object "GstBaseTransform") + (c-name "gst_base_transform_set_in_place") + (return-type "none") + (parameters + '("gboolean" "in_place") + ) +) + +(define-method is_in_place + (of-object "GstBaseTransform") + (c-name "gst_base_transform_is_in_place") + (return-type "gboolean") +) + +(define-method update_qos + (of-object "GstBaseTransform") + (c-name "gst_base_transform_update_qos") + (return-type "none") + (parameters + '("gdouble" "proportion") + '("GstClockTimeDiff" "diff") + '("GstClockTime" "timestamp") + ) +) + +(define-method set_qos_enabled + (of-object "GstBaseTransform") + (c-name "gst_base_transform_set_qos_enabled") + (return-type "none") + (parameters + '("gboolean" "enabled") + ) +) + +(define-method is_qos_enabled + (of-object "GstBaseTransform") + (c-name "gst_base_transform_is_qos_enabled") + (return-type "gboolean") +) + +(define-method set_gap_aware + (of-object "GstBaseTransform") + (c-name "gst_base_transform_set_gap_aware") + (return-type "none") + (parameters + '("gboolean" "gap_aware") + ) +) + +(define-method suggest + (of-object "GstBaseTransform") + (c-name "gst_base_transform_suggest") + (return-type "none") + (parameters + '("GstCaps*" "caps" (null-ok)) + '("guint" "size") + ) +) + +(define-method reconfigure + (of-object "GstBaseTransform") + (c-name "gst_base_transform_reconfigure") + (return-type "none") +) + +(define-virtual transform_caps + (of-object "GstBaseTransform") + (return-type "GstCaps*") + (parameters + '("GstPadDirection" "direction") + '("GstCaps*" "caps") + ) +) + +(define-virtual fixate_caps + (of-object "GstBaseTransform") + (return-type "none") + (parameters + '("GstPadDirection" "direction") + '("GstCaps*" "caps") + '("GstCaps*" "othercaps") + ) +) + +(define-virtual transform_size + (of-object "GstBaseTransform") + (return-type "gboolean") + (parameters + '("GstPadDirection" "direction") + '("GstCaps*" "caps") + '("guint" "size") + '("GstCaps*" "othercaps") + '("guint*" "othersize") + ) +) + +(define-virtual get_unit_size + (of-object "GstBaseTransform") + (return-type "gboolean") + (parameters + '("GstCaps*" "caps") + '("guint*" "size") + ) +) + +(define-virtual transform_size + (of-object "GstBaseTransform") + (return-type "gboolean") + (parameters + '("GstCaps*" "caps") + '("guint*" "size") + '("GstCaps*" "othercaps") + '("guint*" "othersize") + ) +) + +(define-virtual set_caps + (of-object "GstBaseTransform") + (return-type "gboolean") + (parameters + '("GstCaps*" "incaps") + '("GstCaps*" "outcaps") + ) +) + +(define-virtual start + (of-object "GstBaseTransform") + (return-type "gboolean") +) + +(define-virtual stop + (of-object "GstBaseTransform") + (return-type "gboolean") +) + +(define-virtual event + (of-object "GstBaseTransform") + (return-type "gboolean") + (parameters + '("GstEvent*" "event") + ) +) + +(define-virtual transform + (of-object "GstBaseTransform") + (return-type "GstFlowReturn") + (parameters + '("GstBuffer*" "inbuf") + '("GstBuffer*" "outbuf") + ) +) + +(define-virtual transform_ip + (of-object "GstBaseTransform") + (return-type "GstFlowReturn") + (parameters + '("GstBuffer*" "buf") + ) +) + +(define-virtual prepare_output_buffer + (of-object "GstBaseTransform") + (return-type "GstFlowReturn") + (parameters + '("GstBuffer*" "input") + '("gint" "size") + '("GstCaps*" "caps") + '("GstBuffer**" "buf") + ) +) + +(define-virtual src_event + (of-object "GstBaseTransform") + (return-type "gboolean") + (parameters + '("GstEvent*" "event") + ) +) + +;; From ../gstreamer/libs/gst/base/gstcollectpads.h + +(define-function gst_collect_pads_get_type + (c-name "gst_collect_pads_get_type") + (return-type "GType") +) + +(define-function collect_pads_new + (c-name "gst_collect_pads_new") + (is-constructor-of "GstCollectPads") + (return-type "GstCollectPads*") +) + +(define-method set_function + (of-object "GstCollectPads") + (c-name "gst_collect_pads_set_function") + (return-type "none") + (parameters + '("GstCollectPadsFunction" "func") + '("gpointer" "user_data") + ) +) + +(define-method set_clip_function + (of-object "GstCollectPads") + (c-name "gst_collect_pads_set_clip_function") + (return-type "none") + (parameters + '("GstCollectPadsClipFunction" "clipfunc") + '("gpointer" "user_data") + ) +) + +(define-method add_pad + (of-object "GstCollectPads") + (c-name "gst_collect_pads_add_pad") + (return-type "GstCollectData*") + (parameters + '("GstPad*" "pad") + '("guint" "size") + ) +) + +(define-method add_pad_full + (of-object "GstCollectPads") + (c-name "gst_collect_pads_add_pad_full") + (return-type "GstCollectData*") + (parameters + '("GstPad*" "pad") + '("guint" "size") + '("GstCollectDataDestroyNotify" "destroy_notify") + ) +) + +(define-method remove_pad + (of-object "GstCollectPads") + (c-name "gst_collect_pads_remove_pad") + (return-type "gboolean") + (parameters + '("GstPad*" "pad") + ) +) + +(define-method is_active + (of-object "GstCollectPads") + (c-name "gst_collect_pads_is_active") + (return-type "gboolean") + (parameters + '("GstPad*" "pad") + ) +) + +(define-method collect + (of-object "GstCollectPads") + (c-name "gst_collect_pads_collect") + (return-type "GstFlowReturn") +) + +(define-method collect_range + (of-object "GstCollectPads") + (c-name "gst_collect_pads_collect_range") + (return-type "GstFlowReturn") + (parameters + '("guint64" "offset") + '("guint" "length") + ) +) + +(define-method start + (of-object "GstCollectPads") + (c-name "gst_collect_pads_start") + (return-type "none") +) + +(define-method stop + (of-object "GstCollectPads") + (c-name "gst_collect_pads_stop") + (return-type "none") +) + +(define-method set_flushing + (of-object "GstCollectPads") + (c-name "gst_collect_pads_set_flushing") + (return-type "none") + (parameters + '("gboolean" "flushing") + ) +) + +(define-method peek + (of-object "GstCollectPads") + (c-name "gst_collect_pads_peek") + (return-type "GstBuffer*") + (parameters + '("GstCollectData*" "data") + ) +) + +(define-method pop + (of-object "GstCollectPads") + (c-name "gst_collect_pads_pop") + (return-type "GstBuffer*") + (parameters + '("GstCollectData*" "data") + ) +) + +(define-method available + (of-object "GstCollectPads") + (c-name "gst_collect_pads_available") + (return-type "guint") +) + +(define-method read + (of-object "GstCollectPads") + (c-name "gst_collect_pads_read") + (return-type "guint") + (parameters + '("GstCollectData*" "data") + '("guint8**" "bytes") + '("guint" "size") + ) +) + +(define-method read_buffer + (of-object "GstCollectPads") + (c-name "gst_collect_pads_read_buffer") + (return-type "GstBuffer*") + (parameters + '("GstCollectData*" "data") + '("guint" "size") + ) +) + +(define-method take_buffer + (of-object "GstCollectPads") + (c-name "gst_collect_pads_take_buffer") + (return-type "GstBuffer*") + (caller-owns-return #t) + (parameters + '("GstCollectData*" "data") + '("guint" "size") + ) +) + +(define-method flush + (of-object "GstCollectPads") + (c-name "gst_collect_pads_flush") + (return-type "guint") + (parameters + '("GstCollectData*" "data") + '("guint" "size") + ) +) + + + +;; From ../gstreamer/libs/gst/base/gstpushsrc.h + +;(define-function gst_push_src_get_type +; (c-name "gst_push_src_get_type") +; (return-type "GType") +;) + +;(define-virtual create +; (of-object "GstPushSrc") +; (return-type "GstFlowReturn") +; (parameters +; '("GstBuffer**" "buf") +; ) +;) + + + +;; From ../gstreamer/libs/gst/base/gsttypefindhelper.h + +(define-function type_find_helper + (c-name "gst_type_find_helper") + (return-type "GstCaps*") + (parameters + '("GstPad*" "src") + '("guint64" "size") + ) +) + +(define-function type_find_helper_for_buffer + (c-name "gst_type_find_helper_for_buffer") + (return-type "GstCaps*") + (parameters + '("GstObject*" "obj") + '("GstBuffer*" "buf") + '("GstTypeFindProbability*" "prob") + ) +) + +(define-function type_find_helper_get_range + (c-name "gst_type_find_helper_get_range") + (return-type "GstCaps*") + (parameters + '("GstObject*" "obj") + '("GstTypeFindHelperGetRangeFunction" "func") + '("guint64" "size") + '("GstTypeFindProbability*" "prob") + ) +) + +(define-function type_find_helper_get_range_ext + (c-name "gst_type_find_helper_get_range_ext") + (return-type "GstCaps*") + (parameters + '("GstObject*" "obj") + '("GstTypeFindHelperGetRangeFunction" "func") + '("guint64" "size") + '("const-gchar*" "extension") + '("GstTypeFindProbability*" "prob") + ) +) + +(define-function type_find_helper_for_extension + (c-name "gst_type_find_helper_for_extension") + (return-type "GstCaps*") + (parameters + '("GstObject*" "obj") + '("const-gchar*" "extension") + ) +) + +;; From gstdataqueue.h + +(define-function gst_data_queue_get_type + (c-name "gst_data_queue_get_type") + (return-type "GType") +) + +(define-function gst_data_queue_new + (c-name "gst_data_queue_new") + (is-constructor-of "GstDataQueue") + (return-type "GstDataQueue*") + (parameters + '("GstDataQueueCheckFullFunction" "checkfull") + '("gpointer" "checkdata") + ) +) + +(define-method push + (of-object "GstDataQueue") + (c-name "gst_data_queue_push") + (return-type "gboolean") + (parameters + '("GstDataQueueItem*" "item") + ) +) + +(define-method pop + (of-object "GstDataQueue") + (c-name "gst_data_queue_pop") + (return-type "gboolean") + (parameters + '("GstDataQueueItem**" "item") + ) +) + +(define-method flush + (of-object "GstDataQueue") + (c-name "gst_data_queue_flush") + (return-type "none") +) + +(define-method set_flushing + (of-object "GstDataQueue") + (c-name "gst_data_queue_set_flushing") + (return-type "none") + (parameters + '("gboolean" "flushing") + ) +) + +(define-method drop_head + (of-object "GstDataQueue") + (c-name "gst_data_queue_drop_head") + (return-type "gboolean") + (parameters + '("GType" "type") + ) +) + +(define-method is_full + (of-object "GstDataQueue") + (c-name "gst_data_queue_is_full") + (return-type "gboolean") +) + +(define-method is_empty + (of-object "GstDataQueue") + (c-name "gst_data_queue_is_empty") + (return-type "gboolean") +) + +(define-method get_level + (of-object "GstDataQueue") + (c-name "gst_data_queue_get_level") + (return-type "none") + (parameters + '("GstDataQueueSize*" "level") + ) +) + +(define-method limits_changed + (of-object "GstDataQueue") + (c-name "gst_data_queue_limits_changed") + (return-type "none") +) + + diff --git a/gst/common.h b/gst/common.h new file mode 100644 index 0000000..5d21854 --- /dev/null +++ b/gst/common.h @@ -0,0 +1,73 @@ +/* -*- Mode: C; ; c-file-style: "python" -*- */ +/* gst-python + * Copyright (C) 2004 Johan Dahlin + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Johan Dahlin + */ +#ifndef __COMMON_H__ +#define __COMMON_H__ + +#include +#include +#include +#include +#include + +#include "pygstminiobject.h" + +#if (defined HAVE_OLD_PYGTK && (PY_VERSION_HEX < 0x02030000)) + typedef destructor freefunc; +#endif + +#if PY_VERSION_HEX < 0x02050000 +#define lenfunc inquiry +#define ssizeargfunc intargfunc +#define ssizessizeargfunc intintargfunc +#define ssizeobjargproc intobjargproc +#define ssizessizeobjargproc intintobjargproc +#endif + +typedef struct { + PyGObject *pad; + GClosure *link_function; + GClosure *event_function; + GClosure *chain_function; + GClosure *get_function; + GClosure *getcaps_function; + GClosure *setcaps_function; + GClosure *activate_function; + GClosure *activatepull_function; + GClosure *activatepush_function; + /* Query is not implemented as a closure to avoid refcounting + * making the query immutable and therefore useless */ + PyObject *query_function; +} PyGstPadPrivate; + +typedef struct { + PyObject *func, *data; +} PyGstCustomNotify; + +typedef struct { + PyObject_HEAD + GstIterator *iter; +} PyGstIterator; + +extern PyTypeObject PyGstIterator_Type; + + +#endif /* __COMMON_H__ */ diff --git a/gst/extend/Makefile.am b/gst/extend/Makefile.am new file mode 100644 index 0000000..f1ed499 --- /dev/null +++ b/gst/extend/Makefile.am @@ -0,0 +1,5 @@ +pkgpyexecdir = $(pyexecdir)/gst-$(GST_MAJORMINOR)/gst/extend + +pygstdir = $(pkgpyexecdir) +pygst_PYTHON = __init__.py pygobject.py utils.py discoverer.py sources.py \ + leveller.py jukebox.py diff --git a/gst/extend/Makefile.in b/gst/extend/Makefile.in new file mode 100644 index 0000000..a7c1464 --- /dev/null +++ b/gst/extend/Makefile.in @@ -0,0 +1,532 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = gst/extend +DIST_COMMON = $(pygst_PYTHON) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ + $(top_srcdir)/common/m4/as-compiler-flag.m4 \ + $(top_srcdir)/common/m4/as-version.m4 \ + $(top_srcdir)/common/m4/gst-args.m4 \ + $(top_srcdir)/common/m4/gst-error.m4 \ + $(top_srcdir)/common/m4/gst-feature.m4 \ + $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ + $(top_srcdir)/common/m4/gst-plugindir.m4 \ + $(top_srcdir)/common/m4/gst-valgrind.m4 \ + $(top_srcdir)/common/m4/gst.m4 $(top_srcdir)/common/m4/pkg.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(pygstdir)" +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ERROR_CFLAGS = @ERROR_CFLAGS@ +EXEEXT = @EXEEXT@ +FFLAGS = @FFLAGS@ +FGREP = @FGREP@ +GCOV = @GCOV@ +GCOV_CFLAGS = @GCOV_CFLAGS@ +GCOV_LIBS = @GCOV_LIBS@ +GLIB_REQ = @GLIB_REQ@ +GREP = @GREP@ +GSTPB_REQ = @GSTPB_REQ@ +GST_BASE_CFLAGS = @GST_BASE_CFLAGS@ +GST_BASE_LIBS = @GST_BASE_LIBS@ +GST_CFLAGS = @GST_CFLAGS@ +GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@ +GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@ +GST_DISABLE_ALLOC_TRACE = @GST_DISABLE_ALLOC_TRACE@ +GST_DISABLE_GST_DEBUG = @GST_DISABLE_GST_DEBUG@ +GST_DISABLE_LOADSAVE = @GST_DISABLE_LOADSAVE@ +GST_DISABLE_PARSE = @GST_DISABLE_PARSE@ +GST_DISABLE_PLUGIN = @GST_DISABLE_PLUGIN@ +GST_DISABLE_REGISTRY = @GST_DISABLE_REGISTRY@ +GST_DISABLE_TRACE = @GST_DISABLE_TRACE@ +GST_DISABLE_XML = @GST_DISABLE_XML@ +GST_DP_CFLAGS = @GST_DP_CFLAGS@ +GST_DP_LIBS = @GST_DP_LIBS@ +GST_LIBS = @GST_LIBS@ +GST_MAJORMINOR = @GST_MAJORMINOR@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ +GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ +GST_OPTION_LIBS = @GST_OPTION_LIBS@ +GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@ +GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@ +GST_REQ = @GST_REQ@ +GTK_REQ = @GTK_REQ@ +IGNORE_GST_0_10_21 = @IGNORE_GST_0_10_21@ +IGNORE_GST_0_10_22 = @IGNORE_GST_0_10_22@ +IGNORE_GST_0_10_23 = @IGNORE_GST_0_10_23@ +IGNORE_GST_0_10_24 = @IGNORE_GST_0_10_24@ +IGNORE_GST_0_10_25 = @IGNORE_GST_0_10_25@ +IGNORE_GST_0_10_26 = @IGNORE_GST_0_10_26@ +IGNORE_GST_0_10_29 = @IGNORE_GST_0_10_29@ +IGNORE_GST_0_10_30 = @IGNORE_GST_0_10_30@ +IGNORE_GST_0_10_31 = @IGNORE_GST_0_10_31@ +IGNORE_GST_0_10_32 = @IGNORE_GST_0_10_32@ +IGNORE_GST_LOADSAVE = @IGNORE_GST_LOADSAVE@ +IGNORE_GST_PB_0_10_23 = @IGNORE_GST_PB_0_10_23@ +IGNORE_GST_PB_0_10_25 = @IGNORE_GST_PB_0_10_25@ +IGNORE_GST_PB_0_10_26 = @IGNORE_GST_PB_0_10_26@ +IGNORE_GST_PB_0_10_29 = @IGNORE_GST_PB_0_10_29@ +IGNORE_GST_PB_0_10_30 = @IGNORE_GST_PB_0_10_30@ +IGNORE_GST_PB_0_10_31 = @IGNORE_GST_PB_0_10_31@ +IGNORE_GST_PB_0_10_32 = @IGNORE_GST_PB_0_10_32@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@ +PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@ +PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@ +PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@ +PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PLUGINDIR = @PLUGINDIR@ +PYEXECDIR = @PYEXECDIR@ +PYGOBJECT_2_12_CFLAGS = @PYGOBJECT_2_12_CFLAGS@ +PYGOBJECT_2_12_LIBS = @PYGOBJECT_2_12_LIBS@ +PYGOBJECT_2_16_CFLAGS = @PYGOBJECT_2_16_CFLAGS@ +PYGOBJECT_2_16_LIBS = @PYGOBJECT_2_16_LIBS@ +PYGOBJECT_CFLAGS = @PYGOBJECT_CFLAGS@ +PYGOBJECT_LIBS = @PYGOBJECT_LIBS@ +PYGOBJECT_REQ = @PYGOBJECT_REQ@ +PYGST_CFLAGS = @PYGST_CFLAGS@ +PYGTK_CFLAGS = @PYGTK_CFLAGS@ +PYGTK_LIBS = @PYGTK_LIBS@ +PYGTK_REQ = @PYGTK_REQ@ +PYTHON = @PYTHON@ +PYTHONDIR = @PYTHONDIR@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_LIB_LOC = @PYTHON_LIB_LOC@ +PYTHON_LIB_SUFFIX = @PYTHON_LIB_SUFFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VALGRIND_PATH = @VALGRIND_PATH@ +VERSION = @VERSION@ +WARNING_CFLAGS = @WARNING_CFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = $(pyexecdir)/gst-$(GST_MAJORMINOR)/gst/extend +pkgpythondir = @pkgpythondir@ +plugindir = @plugindir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +pygstdir = $(pkgpyexecdir) +pygst_PYTHON = __init__.py pygobject.py utils.py discoverer.py sources.py \ + leveller.py jukebox.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/extend/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu gst/extend/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-pygstPYTHON: $(pygst_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(pygstdir)" || $(MKDIR_P) "$(DESTDIR)$(pygstdir)" + @list='$(pygst_PYTHON)'; dlist=; list2=; test -n "$(pygstdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pygstdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pygstdir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(pygstdir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(pygstdir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-pygstPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(pygst_PYTHON)'; test -n "$(pygstdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + echo " ( cd '$(DESTDIR)$(pygstdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(pygstdir)" && rm -f $$files || exit $$?; \ + echo " ( cd '$(DESTDIR)$(pygstdir)' && rm -f" $$filesc ")"; \ + cd "$(DESTDIR)$(pygstdir)" && rm -f $$filesc || exit $$?; \ + echo " ( cd '$(DESTDIR)$(pygstdir)' && rm -f" $$fileso ")"; \ + cd "$(DESTDIR)$(pygstdir)" && rm -f $$fileso +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(pygstdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-pygstPYTHON + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-pygstPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-pygstPYTHON \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am uninstall-pygstPYTHON + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gst/extend/__init__.py b/gst/extend/__init__.py new file mode 100644 index 0000000..350c71d --- /dev/null +++ b/gst/extend/__init__.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# GStreamer python bindings +# Copyright (C) 2002 David I. Lehn +# 2004 Johan Dahlin + +# 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.1 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA diff --git a/gst/extend/discoverer.py b/gst/extend/discoverer.py new file mode 100644 index 0000000..55e7617 --- /dev/null +++ b/gst/extend/discoverer.py @@ -0,0 +1,355 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +# discoverer.py +# (c) 2005-2008 Edward Hervey +# Discovers multimedia information on files + +# 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.1 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +""" +Class and functions for getting multimedia information about files +""" + +import os.path + +import gobject + +import gst + +from gst.extend.pygobject import gsignal + +class Discoverer(gst.Pipeline): + """ + Discovers information about files. + This class is event-based and needs a mainloop to work properly. + Emits the 'discovered' signal when discovery is finished. + + The 'discovered' callback has one boolean argument, which is True if the + file contains decodable multimedia streams. + """ + __gsignals__ = { + 'discovered' : (gobject.SIGNAL_RUN_FIRST, + None, + (gobject.TYPE_BOOLEAN, )) + } + + mimetype = None + + audiocaps = {} + videocaps = {} + + videowidth = 0 + videoheight = 0 + videorate = 0 + + audiofloat = False + audiorate = 0 + audiodepth = 0 + audiowidth = 0 + audiochannels = 0 + + audiolength = 0L + videolength = 0L + + is_video = False + is_audio = False + + otherstreams = [] + + finished = False + sinknumber = 0 + tags = {} + + + def __init__(self, filename, max_interleave=1.0, timeout=3000): + """ + filename: str; absolute path of the file to be discovered. + max_interleave: int or float; the maximum frame interleave in seconds. + The value must be greater than the input file frame interleave + or the discoverer may not find out all input file's streams. + The default value is 1 second and you shouldn't have to change it, + changing it mean larger discovering time and bigger memory usage. + timeout: int; duration in ms for the discovery to complete. + """ + gobject.GObject.__init__(self) + + self.mimetype = None + + self.audiocaps = {} + self.videocaps = {} + + self.videowidth = 0 + self.videoheight = 0 + self.videorate = gst.Fraction(0,1) + + self.audiofloat = False + self.audiorate = 0 + self.audiodepth = 0 + self.audiowidth = 0 + self.audiochannels = 0 + + self.audiolength = 0L + self.videolength = 0L + + self.is_video = False + self.is_audio = False + + self.otherstreams = [] + + self.finished = False + self.tags = {} + self._success = False + self._nomorepads = False + + self._timeoutid = 0 + self._timeout = timeout + self._max_interleave = max_interleave + + if not os.path.isfile(filename): + self.debug("File '%s' does not exist, finished" % filename) + self.finished = True + return + + # the initial elements of the pipeline + self.src = gst.element_factory_make("filesrc") + self.src.set_property("location", filename) + self.src.set_property("blocksize", 1000000) + self.dbin = gst.element_factory_make("decodebin") + self.add(self.src, self.dbin) + self.src.link(self.dbin) + self.typefind = self.dbin.get_by_name("typefind") + + # callbacks + self.typefind.connect("have-type", self._have_type_cb) + self.dbin.connect("new-decoded-pad", self._new_decoded_pad_cb) + self.dbin.connect("no-more-pads", self._no_more_pads_cb) + self.dbin.connect("unknown-type", self._unknown_type_cb) + + def _timed_out_or_eos(self): + if (not self.is_audio and not self.is_video) or \ + (self.is_audio and not self.audiocaps) or \ + (self.is_video and not self.videocaps): + self._finished(False) + else: + self._finished(True) + + def _finished(self, success=False): + self.debug("success:%d" % success) + self._success = success + self.bus.remove_signal_watch() + if self._timeoutid: + gobject.source_remove(self._timeoutid) + self._timeoutid = 0 + gobject.idle_add(self._stop) + return False + + def _stop(self): + self.debug("success:%d" % self._success) + self.finished = True + self.set_state(gst.STATE_READY) + self.debug("about to emit signal") + self.emit('discovered', self._success) + + def _bus_message_cb(self, bus, message): + if message.type == gst.MESSAGE_EOS: + self.debug("Got EOS") + self._timed_out_or_eos() + elif message.type == gst.MESSAGE_TAG: + for key in message.parse_tag().keys(): + self.tags[key] = message.structure[key] + elif message.type == gst.MESSAGE_ERROR: + self.debug("Got error") + self._finished() + + def discover(self): + """Find the information on the given file asynchronously""" + self.debug("starting discovery") + if self.finished: + self.emit('discovered', False) + return + + self.bus = self.get_bus() + self.bus.add_signal_watch() + self.bus.connect("message", self._bus_message_cb) + + # 3s timeout + self._timeoutid = gobject.timeout_add(self._timeout, self._timed_out_or_eos) + + self.info("setting to PLAY") + if not self.set_state(gst.STATE_PLAYING): + self._finished() + + def _time_to_string(self, value): + """ + transform a value in nanoseconds into a human-readable string + """ + ms = value / gst.MSECOND + sec = ms / 1000 + ms = ms % 1000 + min = sec / 60 + sec = sec % 60 + return "%2dm %2ds %3d" % (min, sec, ms) + + def print_info(self): + """prints out the information on the given file""" + if not self.finished: + return + if not self.mimetype: + print "Unknown media type" + return + print "Mime Type :\t", self.mimetype + if not self.is_video and not self.is_audio: + return + print "Length :\t", self._time_to_string(max(self.audiolength, self.videolength)) + print "\tAudio:", self._time_to_string(self.audiolength), "\tVideo:", self._time_to_string(self.videolength) + if self.is_video and self.videorate: + print "Video :" + print "\t%d x %d @ %d/%d fps" % (self.videowidth, + self.videoheight, + self.videorate.num, self.videorate.denom) + if self.tags.has_key("video-codec"): + print "\tCodec :", self.tags["video-codec"] + if self.is_audio: + print "Audio :" + if self.audiofloat: + print "\t%d channels(s) : %dHz @ %dbits (float)" % (self.audiochannels, + self.audiorate, + self.audiowidth) + else: + print "\t%d channels(s) : %dHz @ %dbits (int)" % (self.audiochannels, + self.audiorate, + self.audiodepth) + if self.tags.has_key("audio-codec"): + print "\tCodec :", self.tags["audio-codec"] + for stream in self.otherstreams: + if not stream == self.mimetype: + print "Other unsuported Multimedia stream :", stream + if self.tags: + print "Additional information :" + for tag in self.tags.keys(): + print "%20s :\t" % tag, self.tags[tag] + + def _no_more_pads_cb(self, dbin): + self.info("no more pads") + self._nomorepads = True + + def _unknown_type_cb(self, dbin, pad, caps): + self.debug("unknown type : %s" % caps.to_string()) + # if we get an unknown type and we don't already have an + # audio or video pad, we are finished ! + self.otherstreams.append(caps.to_string()) + if not self.is_video and not self.is_audio: + self.finished = True + self._finished() + + def _have_type_cb(self, typefind, prob, caps): + self.mimetype = caps.to_string() + + def _notify_caps_cb(self, pad, args): + caps = pad.get_negotiated_caps() + if not caps: + pad.info("no negotiated caps available") + return + pad.info("caps:%s" % caps.to_string()) + # the caps are fixed + # We now get the total length of that stream + q = gst.query_new_duration(gst.FORMAT_TIME) + pad.info("sending duration query") + if pad.get_peer().query(q): + format, length = q.parse_duration() + if format == gst.FORMAT_TIME: + pad.info("got duration (time) : %s" % (gst.TIME_ARGS(length),)) + else: + pad.info("got duration : %d [format:%d]" % (length, format)) + else: + length = -1 + gst.warning("duration query failed") + + # We store the caps and length in the proper location + if "audio" in caps.to_string(): + self.audiocaps = caps + self.audiolength = length + self.audiorate = caps[0]["rate"] + self.audiowidth = caps[0]["width"] + self.audiochannels = caps[0]["channels"] + if "x-raw-float" in caps.to_string(): + self.audiofloat = True + else: + self.audiodepth = caps[0]["depth"] + if self._nomorepads and ((not self.is_video) or self.videocaps): + self._finished(True) + elif "video" in caps.to_string(): + self.videocaps = caps + self.videolength = length + self.videowidth = caps[0]["width"] + self.videoheight = caps[0]["height"] + self.videorate = caps[0]["framerate"] + if self._nomorepads and ((not self.is_audio) or self.audiocaps): + self._finished(True) + + def _new_decoded_pad_cb(self, dbin, pad, is_last): + # Does the file contain got audio or video ? + caps = pad.get_caps() + gst.info("caps:%s" % caps.to_string()) + if "audio" in caps.to_string(): + self.is_audio = True + elif "video" in caps.to_string(): + self.is_video = True + else: + self.warning("got a different caps.. %s" % caps.to_string()) + return + if is_last and not self.is_video and not self.is_audio: + self.debug("is last, not video or audio") + self._finished(False) + return + # we connect a fakesink to the new pad... + pad.info("adding queue->fakesink") + fakesink = gst.element_factory_make("fakesink", "fakesink%d-%s" % + (self.sinknumber, "audio" in caps.to_string() and "audio" or "video")) + self.sinknumber += 1 + queue = gst.element_factory_make("queue") + # we want the queue to buffer up to the specified amount of data + # before outputting. This enables us to cope with formats + # that don't create their source pads straight away, + # but instead wait for the first buffer of that stream. + # The specified time must be greater than the input file + # frame interleave for the discoverer to work properly. + queue.props.min_threshold_time = int(self._max_interleave * gst.SECOND) + queue.props.max_size_time = int(2 * self._max_interleave * gst.SECOND) + queue.props.max_size_bytes = 0 + + # If durations are bad on the buffers (common for video decoders), we'll + # never reach the min_threshold_time or max_size_time. So, set a + # max size in buffers, and if reached, disable the min_threshold_time. + # This ensures we don't fail to discover with various ffmpeg + # demuxers/decoders that provide bogus (or no) duration. + queue.props.max_size_buffers = int(100 * self._max_interleave) + def _disable_min_threshold_cb(queue): + queue.props.min_threshold_time = 0 + queue.disconnect(signal_id) + signal_id = queue.connect('overrun', _disable_min_threshold_cb) + + self.add(fakesink, queue) + queue.link(fakesink) + sinkpad = fakesink.get_pad("sink") + queuepad = queue.get_pad("sink") + # ... and connect a callback for when the caps are fixed + sinkpad.connect("notify::caps", self._notify_caps_cb) + if pad.link(queuepad): + pad.warning("##### Couldn't link pad to queue") + queue.set_state(gst.STATE_PLAYING) + fakesink.set_state(gst.STATE_PLAYING) + gst.info('finished here') diff --git a/gst/extend/jukebox.py b/gst/extend/jukebox.py new file mode 100644 index 0000000..c29b742 --- /dev/null +++ b/gst/extend/jukebox.py @@ -0,0 +1,356 @@ +#!/usr/bin/env python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# GStreamer python bindings +# Copyright (C) 2005 Edward Hervey +# Copyright (C) 2005 Thomas Vander Stichele + +# 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.1 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import os +import sys +import pickle +import random as rand + +import gobject +gobject.threads_init() +import pygst +pygst.require('0.10') +import gst + +import utils +from pygobject import gsignal +import sources +from leveller import Leveller + +class Jukebox(gst.Bin): + gsignal('done', str) + gsignal('prerolled') # emitted when at least 2 sources are ready + gsignal('changed', str, gobject.TYPE_UINT64) # clocktime, filename + gsignal('looped') + + def __init__(self, files, rms=0.2, loops=0, random=False, + caps="audio/x-raw-int,channels=2,rate=44100", + picklepath='level.pck'): + # with pygtk 2.4 this call is needed for the gsignal to work + self.__gobject_init__() + + self._target_rms = rms + self._loopsleft = loops + self._loopsdone = 0 + self._random = random + self._picklepath = picklepath + self._caps = gst.caps_from_string(caps) + self._files = files[:] # copy + self._levels = {} # filename -> rms, mixin, mixout, length + self._prerolled = False + self._playing = False + self._scani = 0 # index into self._files for scanning + self._playi = 0 # index into self._files for playing + + self._lastadded = None # last file added to composition + self._lastposition = long(0) # last position where file was added + + if not len(files) > 1: + raise TypeError, 'Must have at least 2 files' + + self._composition = gst.element_factory_make("gnlcomposition") + self._composition.connect('pad-added', self._composition_pad_added_cb) + self.add(self._composition) + + self._srcpad = None + + # load our pickle if it exists + if os.path.exists(self._picklepath): + file = open(self._picklepath) + self._levels = pickle.load(file) + file.close() + + # randomize our list if asked for + if self._random: + self._files = rand.sample(self._files, len(self._files)) + + + ## public API + + def preroll(self): + # scan the first few files and start playing + gst.debug("starting jukebox prerolling") + self._scan() + + def start(self): + ## + ## FIXME : THIS SHOULD'T BE NEEDED ! + ## USE STATE CHANGES INSTEAD + ## + if not self._prerolled: + raise Exception, "baby" + self.set_state(gst.STATE_PAUSED) + + + ## Scanning private methods + + def _scan(self): + # start a leveller for a new _toscan file + if self._scani >= len(self._files): + gst.debug("We're done scanning !") + return + + file = self._files[self._scani] + self._scani += 1 + + if file in self._levels.keys(): + gst.debug("already did file %s" % file) + self._check_prerolled() + gobject.timeout_add(0, self._scan) + return + + gst.debug("creating leveller for %s" % file) + leveller = Leveller(file) + leveller.connect('done', self._leveller_done_cb, file) + gobject.timeout_add(0, leveller.start) + ##gobject.idle_add(leveller.iterate) + + def _leveller_done_cb(self, l, reason, file): + if reason != sources.EOS: + gst.debug("Error: %s" % reason) + return + + gst.debug("in: %s, out: %s" % (gst.TIME_ARGS(l.mixin), + gst.TIME_ARGS(l.mixout))) + gst.debug("rms: %f, %f dB" % (l.rms, l.rmsdB)) + + # store infos + self._levels[file] = (l.rms, l.mixin, l.mixout, l.length) + + gst.debug("writing level pickle") + file = open(self._picklepath, "w") + pickle.dump(self._levels, file) + file.close() + + self._check_prerolled() + self._scan() + + # clean up leveller after this handler + gobject.timeout_add(0, l.clean) + + + ## GnlSource-related methods + + def _new_gnl_source(self, location, start): + """ + Creates a new GnlSource containing an AudioSource with the following + properties correctly set: + _ volume level + _ priority + _ duration + The start position MUST be given + """ + if not self._levels[location]: + return None + self.debug("Creating new GnlSource at %s for %s" % (gst.TIME_ARGS(start), location)) + idx = self._files.index(location) + self._loopsdone * len(self._files) + rms, mixin, mixout, duration = self._levels[location] + gnls = gst.element_factory_make("gnlsource", "source-%d-%s" % (idx, location)) + src = sources.AudioSource(location) + gnls.add(src) + + # set volume + level = 1.0 + if rms > self._target_rms: + level = self._target_rms / rms + gst.debug('setting volume of %f' % level) + else: + gst.debug('not going to go above 1.0 level') + src.set_volume(level) + + # set proper position/duration/priority in composition + gnls.props.priority = (2 * self._loopsdone) + 1 + (idx % 2) + gnls.props.start = long(start) + gnls.props.duration = long(duration) + gnls.props.media_duration = long(duration) + gnls.props.media_start = long(0) + + return gnls + + def _new_mixer(self, start, duration): + gnlo = gst.element_factory_make("gnloperation") + ad = gst.element_factory_make("adder") + gnlo.add(ad) + gnlo.props.sinks = 2 + gnlo.props.start = start + gnlo.props.duration = duration + gnlo.props.priority = 0 + + return gnlo + + def _append_file(self, location): + """ + Appends the given file to the composition, along with the proper mixer effect + """ + self.debug("location:%s" % location) + start = self._lastposition + if self._lastadded: + start += self._levels[self._lastadded][2] + start -= self._levels[location][1] + + gnls = self._new_gnl_source(location, start) + self._composition.add(gnls) + + if self._lastadded: + # create the mixer + duration = self._levels[self._lastadded][3] - self._levels[self._lastadded][2] + self._levels[location][1] + mixer = self._new_mixer(start, duration) + self._composition.add(mixer) + + self._lastposition = start + self._lastadded = location + + self.debug("lastposition:%s , lastadded:%s" % (gst.TIME_ARGS(self._lastposition), + self._lastadded)) + + def _check_prerolled(self): + gst.debug("_check_prerolled: index: scan %d, play %d" % ( + self._scani, self._playi)) + if not self._prerolled and self._scani > self._playi + 1: + self._prerolled = True + # add initial sources here + self._append_file(self._files[0]) + self._append_file(self._files[1]) + self.debug("now prerolled and ready to play") + self.emit('prerolled') + + + def _emit_changed(self, file, when): + print "emitting changed for %s at %r" % (file, when) + self.emit('changed', file, when) + + def _source_clean(self, source): + source.set_state(gst.STATE_NULL) + self.remove(source) + source.clean() + + ## composition callbacks + + def _composition_pad_added_cb(self, comp, pad): + if self._srcpad: + return + self.debug("Ghosting source pad %s" % pad) + self._srcpad = gst.GhostPad("src", pad) + self._srcpad.set_active(True) + self.add_pad(self._srcpad) + + ## gst.Bin/Element virtual methods + + def do_handle_message(self, message): + self.debug("got message %s / %s / %r" % (message.src.get_name(), message.type.first_value_name, message)) + + # chaining up + gst.Bin.do_handle_message(self, message) + + def do_state_change(self, transition): + if not self._prerolled: + gst.error("Call Jukebox.preroll() before!") + return gst.STATE_CHANGE_FAILURE + # chaining up + return gst.Bin.do_state_change(self, message) + +gobject.type_register(Jukebox) + +# helper functions +def _find_elements_recurse(element): + if not isinstance(element, gst.Bin): + return [element, ] + l = [] + for e in element.elements(): + l.extend(_find_elements_recurse(e)) + return l + +def _find_unconnected_pad(bin, direction): + for e in _find_elements_recurse(bin): + for p in e.pads(): + if p.get_direction() == direction and not p.get_peer(): + return p + + return None + +# run us to test +if __name__ == "__main__": + main = gobject.MainLoop() + pipeline = gst.Pipeline('jukebox') + list = open(sys.argv[1]).read().rstrip().split('\n') + print list + #source = Jukebox(list, random=True, loops=-1) + source = Jukebox(list, random=True, loops=1) + + def _jukebox_prerolled_cb(jukebox): + print "prerolled" + _start() + + def _jukebox_changed_cb(jukebox, filename, when): + print "changed file to %s at %s" % (filename, float(when) / gst.TIME_ARGS(gst.SECOND)) + + def _jukebox_looped_cb(jukebox): + print "jukebox looped" + + def _start(): + source.start() + print "setting pipeline to PLAYING" + pipeline.set_state(gst.STATE_PLAYING) + print "set pipeline to PLAYING" + + def jukebox_pad_added(comp, pad, sinkpad): + pad.link(sinkpad) + + def jukebox_message(bus, message): + if message.type == gst.MESSAGE_ERROR: + print "Error: %s" % message.parse_error() + main.quit() + elif message.type == gst.MESSAGE_EOS: + print "done" + main.quit() + + source.connect('prerolled', _jukebox_prerolled_cb) + source.connect('changed', _jukebox_changed_cb) + source.connect('looped', _jukebox_looped_cb) + source.preroll() + pipeline.add(source) + + bus = pipeline.get_bus() + bus.add_signal_watch() + bus.connect("message", jukebox_message) + + p = "alsasink" + if len(sys.argv) > 2: + p = " ".join(sys.argv[2:]) + + print "parsing output pipeline %s" % p + sinkbin = gst.parse_launch("bin.( %s )" % p) + pipeline.add(sinkbin) + apad = _find_unconnected_pad(sinkbin, gst.PAD_SINK) + if not apad: + raise TypeError, "No unconnected sink pad found in bin %r" % sinkbin + sinkpad = gst.GhostPad("sink", apad) + sinkbin.add_pad(sinkpad) + source.connect('pad-added', jukebox_pad_added, sinkpad) + + print "Going into main loop" + sys.stdout.flush() + main.run() + print "Left main loop" + sys.stdout.flush() + + pipeline.set_state(gst.STATE_NULL) diff --git a/gst/extend/leveller.py b/gst/extend/leveller.py new file mode 100644 index 0000000..5fd7597 --- /dev/null +++ b/gst/extend/leveller.py @@ -0,0 +1,285 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# GStreamer python bindings +# Copyright (C) 2005 Thomas Vander Stichele + +# 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.1 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import os +import sys +import math + +import gobject +import pygst +pygst.require('0.10') +import gst + +import utils +from pygobject import gsignal + +import sources +from sources import EOS, ERROR, UNKNOWN_TYPE, WRONG_TYPE + +class Leveller(gst.Pipeline): + """ + I am a pipeline that calculates RMS values and mix-in/out points. + I will signal 'done' when I'm done scanning the file, with return value + EOS, ERROR, UNKNOWN_TYPE, or WRONG_TYPE from gst.extend.sources + """ + + gsignal('done', str) + + def __init__(self, filename, threshold=-9.0): + gst.Pipeline.__init__(self) + + self._filename = filename + + self._thresholddB = threshold + self._threshold = math.pow(10, self._thresholddB / 10.0) + + self._source = sources.AudioSource(filename) + self._source.connect('done', self._done_cb) + + self._level = gst.element_factory_make("level") + + self._fakesink = gst.element_factory_make("fakesink") + + self.add(self._source, self._level, self._fakesink) + self._source.connect("pad-added", self._sourcePadAddedCb) + self._level.link(self._fakesink) + + # temporary values for each timepoint + self._rmsdB = {} # hash of channel, rmsdB value + self._peakdB = 0.0 # highest value over all channels for this time + + # results over the whole file + self._meansquaresums = [] # list of time -> mean square sum value + self._peaksdB = [] # list of time -> peak value + + self._lasttime = 0 + + # will be set when done + self.mixin = 0 + self.mixout = 0 + self.length = 0 + self.rms = 0.0 + self.rmsdB = 0.0 + + def _sourcePadAddedCb(self, source, pad): + self._source.link(self._level) + + def do_handle_message(self, message): + self.debug("got message %r" % message) + if (message.type == gst.MESSAGE_ELEMENT) and (message.src == self._level): + struc = message.structure + endtime = struc["endtime"] + rmss = struc["rms"] + peaks = struc["peak"] + decays = struc["decay"] + infos = zip(rmss, peaks, decays) + channid = 0 + for rms,peak,decay in infos: + self._level_cb(message.src, endtime, channid, rms, peak, decay) + channid += 1 + elif message.type == gst.MESSAGE_EOS: + self._eos_cb(message.src) + # chaining up + gst.Pipeline.do_handle_message(self, message) + + def _level_cb(self, element, time, channel, rmsdB, peakdB, decaydB): + # rms is being signalled in dB + # FIXME: maybe level should have a way of signalling actual values + # signals are received in order, so I should get each channel one + # by one + if time > self._lasttime and self._lasttime > 0: + # we have a new time point, so calculate stuff for the old block + meansquaresum = 0.0 + for i in self._rmsdB.keys(): + meansquaresum += math.pow(10, self._rmsdB[i] / 10.0) + # average over channels + meansquaresum /= len(self._rmsdB.keys()) + try: + rmsdBstr = str(10 * math.log10(meansquaresum)) + except OverflowError: + rmsdBstr = "(-inf)" + gst.log("meansquaresum %f (%s dB)" % (meansquaresum, rmsdBstr)) + + # update values + self._peaksdB.append((self._lasttime, peakdB)) + self._meansquaresums.append((self._lasttime, meansquaresum)) + self._rmsdB = {} + self._peakdB = 0.0 + + # store the current values for later processing + gst.log("time %s, channel %d, rmsdB %f" % (gst.TIME_ARGS(time), channel, rmsdB)) + self._lasttime = time + self._rmsdB[channel] = rmsdB + if peakdB > self._peakdB: + self._peakdB = peakdB + + def _done_cb(self, source, reason): + gst.debug("done, reason %s" % reason) + # we ignore eos because we want the whole pipeline to eos + if reason == EOS: + return + self.emit('done', reason) + + def _eos_cb(self, source): + gst.debug("eos, start calcing") + + # get the highest peak RMS for this track + highestdB = self._peaksdB[0][1] + + for (time, peakdB) in self._peaksdB: + if peakdB > highestdB: + highestdB = peakdB + gst.debug("highest peak(dB): %f" % highestdB) + + # get the length + (self.length, peakdB) = self._peaksdB[-1] + + # find the mix in point + for (time, peakdB) in self._peaksdB: + gst.log("time %s, peakdB %f" % (gst.TIME_ARGS(time), peakdB)) + if peakdB > self._thresholddB + highestdB: + gst.debug("found mix-in point of %f dB at %s" % ( + peakdB, gst.TIME_ARGS(time))) + self.mixin = time + break + + # reverse and find out point + self._peaksdB.reverse() + found = None + for (time, peakdB) in self._peaksdB: + if found: + self.mixout = time + gst.debug("found mix-out point of %f dB right before %s" % ( + found, gst.TIME_ARGS(time))) + break + + if peakdB > self._thresholddB + highestdB: + found = peakdB + + # now calculate RMS between these two points + weightedsquaresums = 0.0 + lasttime = self.mixin + for (time, meansquaresum) in self._meansquaresums: + if time <= self.mixin: + continue + + delta = time - lasttime + weightedsquaresums += meansquaresum * delta + gst.log("added MSS %f over time %s at time %s, now %f" % ( + meansquaresum, gst.TIME_ARGS(delta), + gst.TIME_ARGS(time), weightedsquaresums)) + + lasttime = time + + if time > self.mixout: + break + + # calculate + try: + ms = weightedsquaresums / (self.mixout - self.mixin) + except ZeroDivisionError: + # this is possible when, for example, the whole sound file is + # empty + gst.warning('ZeroDivisionError on %s, mixin %s, mixout %s' % ( + self._filename, gst.TIME_ARGS(self.mixin), + gst.TIME_ARGS(self.mixout))) + self.emit('done', WRONG_TYPE) + return + + self.rms = math.sqrt(ms) + self.rmsdB = 10 * math.log10(ms) + + self.emit('done', EOS) + + def start(self): + gst.debug("Setting to PLAYING") + self.set_state(gst.STATE_PLAYING) + gst.debug("Set to PLAYING") + + # FIXME: we might want to do this ourselves automatically ? + def stop(self): + """ + Stop the leveller, freeing all resources. + Call after the leveller emitted 'done' to clean up. + """ + gst.debug("Setting to NULL") + self.set_state(gst.STATE_NULL) + gst.debug("Set to NULL") + utils.gc_collect('Leveller.stop()') + + def clean(self): + # clean ourselves up completely + self.stop() + # let's be ghetto and clean out our bin manually + self.remove(self._source) + self.remove(self._level) + self.remove(self._fakesink) + gst.debug("Emptied myself") + self._source.clean() + utils.gc_collect('Leveller.clean() cleaned up source') + self._source = None + self._fakesink = None + self._level = None + utils.gc_collect('Leveller.clean() done') + +gobject.type_register(Leveller) + +if __name__ == "__main__": + main = gobject.MainLoop() + + try: + leveller = Leveller(sys.argv[1]) + except IndexError: + sys.stderr.write("Please give a file to calculate level of\n") + sys.exit(1) + + print "Starting" + bus = leveller.get_bus() + bus.add_signal_watch() + dontstop = True + + leveller.set_state(gst.STATE_PLAYING) + + while dontstop: + message = bus.poll(gst.MESSAGE_ANY, gst.SECOND) + if message: + gst.debug("got message from poll:%s/%r" % (message.type, message)) + else: + gst.debug("got NOTHING from poll") + if message: + if message.type == gst.MESSAGE_EOS: + print "in: %s, out: %s, length: %s" % (gst.TIME_ARGS(leveller.mixin), + gst.TIME_ARGS(leveller.mixout), + gst.TIME_ARGS(leveller.length)) + print "rms: %f, %f dB" % (leveller.rms, leveller.rmsdB) + dontstop = False + elif message.type == gst.MESSAGE_ERROR: + error,debug = message.parse_error() + print "ERROR[%s] %s" % (error.domain, error.message) + dontstop = False + + leveller.stop() + leveller.clean() + + gst.debug('deleting leveller, verify objects are freed') + utils.gc_collect('quit main loop') + del leveller + utils.gc_collect('deleted leveller') + gst.debug('stopping forever') diff --git a/gst/extend/pygobject.py b/gst/extend/pygobject.py new file mode 100644 index 0000000..04d378f --- /dev/null +++ b/gst/extend/pygobject.py @@ -0,0 +1,172 @@ +#!/usr/bin/env python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# GStreamer python bindings +# Copyright (C) 2004 Johan Dahlin + +# 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.1 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +""" +PyGTK helper functions +""" + +import sys + +import gobject + +def gobject_set_property(object, property, value): + """ + Set the given property to the given value on the given object. + + @type object: L{gobject.GObject} + @type property: string + @param value: value to set property to + """ + for pspec in gobject.list_properties(object): + if pspec.name == property: + break + else: + raise errors.PropertyError( + "Property '%s' in element '%s' does not exist" % ( + property, object.get_property('name'))) + + if pspec.value_type in (gobject.TYPE_INT, gobject.TYPE_UINT, + gobject.TYPE_INT64, gobject.TYPE_UINT64): + try: + value = int(value) + except ValueError: + msg = "Invalid value given for property '%s' in element '%s'" % ( + property, object.get_property('name')) + raise errors.PropertyError(msg) + + elif pspec.value_type == gobject.TYPE_BOOLEAN: + if value == 'False': + value = False + elif value == 'True': + value = True + else: + value = bool(value) + elif pspec.value_type in (gobject.TYPE_DOUBLE, gobject.TYPE_FLOAT): + value = float(value) + elif pspec.value_type == gobject.TYPE_STRING: + value = str(value) + # FIXME: this is superevil ! we really need to find a better way + # of checking if this property is a param enum + # also, we only allow int for now + elif repr(pspec.__gtype__).startswith(" + +# 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.1 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import os +import sys + +import gobject +import pygst +pygst.require('0.10') +import gst + +from pygobject import gsignal + +EOS = 'EOS' +ERROR = 'ERROR' +WRONG_TYPE = 'WRONG_TYPE' +UNKNOWN_TYPE = 'UNKNOWN_TYPE' + +class AudioSource(gst.Bin): + """A bin for audio sources with proper audio converters""" + + gsignal('done', str) + gsignal('prerolled') + + def __init__(self, filename, caps="audio/x-raw-int,channels=2,rate=44100"): + # with pygtk 2.4 this call is needed for the gsignal to work + gst.Bin.__init__(self) + + self.filename = filename + self.outcaps = caps + + self.filesrc = gst.element_factory_make("filesrc") + self.filesrc.set_property("location", self.filename) + self.dbin = gst.element_factory_make("decodebin") + self.audioconvert = gst.element_factory_make("audioconvert") + self.audioresample = gst.element_factory_make("audioresample") + self.volume = gst.element_factory_make("volume") + + self.add(self.filesrc, self.dbin, + self.audioconvert, self.audioresample, self.volume) + self.filesrc.link(self.dbin) + self.audioconvert.link(self.audioresample) + self.audioresample.link(self.volume, caps) + + self.dbin.connect("new-decoded-pad", self._new_decoded_pad_cb) + self.dbin.connect("unknown-type", self._unknown_type_cb) + + self._srcpad = None + + def __repr__(self): + return "" % self.filename + + def set_volume(self, volume): + gst.debug("setting volume to %f" % volume) + self.volume.set_property("volume", volume) + + def _new_decoded_pad_cb(self, dbin, pad, is_last): + gst.debug("new decoded pad: pad %r [%s]" % (pad, pad.get_caps().to_string())) + if not "audio" in pad.get_caps().to_string() or self._srcpad: + return + + gst.debug("linking pad %r to audioconvert" % pad) + pad.link(self.audioconvert.get_pad("sink")) + + self._srcpad = gst.GhostPad("src", self.volume.get_pad("src")) + self._srcpad.set_active(True) + self.add_pad(self._srcpad) + + def _unknown_type_cb(self, pad, caps): + self.emit('done', UNKNOWN_TYPE) + + def stop(self): + self.set_state(gst.STATE_NULL) + + def clean(self): + self.stop() + self.remove(self.filesrc) + self.remove(self.dbin) + self.remove(self.audioconvert) + self.remove(self.audioresample) + self.remove(self.volume) + self.filesrc = None + self.dbin = None + self.audioconvert = None + self.volume = None + +gobject.type_register(AudioSource) + + +# run us to test +if __name__ == "__main__": + main = gobject.MainLoop() + + def _done_cb(source, reason): + print "Done" + sys.stdout.flush() + if reason != EOS: + print "Some error happened: %s" % reason + main.quit() + + def _error_cb(source, element, gerror, message): + print "Error: %s" % gerror + main.quit() + + try: + source = AudioSource(sys.argv[1]) + except IndexError: + sys.stderr.write("Please give a filename to play\n") + sys.exit(1) + + pipeline = gst.Pipeline("playing") + # connecting on the source also catches eos emit when + # no audio pad + source.connect('done', _done_cb) + pipeline.connect('error', _error_cb) + + p = "osssink" + if len(sys.argv) > 2: + p = " ".join(sys.argv[2:]) + + pipeline.add(source) + sink = gst.parse_launch(p) + pipeline.add(sink) + source.link(sink) + + # we schedule this as a timeout so that we are definately in the main + # loop when it goes to PLAYING, and errors make main.quit() work correctly + def _start(pipeline): + print "setting pipeline to PLAYING" + pipeline.set_state(gst.STATE_PLAYING) + print "set pipeline to PLAYING" + + gobject.timeout_add(0, _start, pipeline) + gobject.idle_add(pipeline.iterate) + + print "Going into main loop" + main.run() + print "Left main loop" + + pipeline.set_state(gst.STATE_NULL) + pipeline.remove(source) + pipeline.remove(sink) + utils.gc_collect('cleaned out pipeline') + source.clean() + utils.gc_collect('cleaned up source') + source = None + utils.gc_collect('set source to None') diff --git a/gst/extend/utils.py b/gst/extend/utils.py new file mode 100644 index 0000000..784dab9 --- /dev/null +++ b/gst/extend/utils.py @@ -0,0 +1,77 @@ +import os + +import gobject +import gst + +def gst_dump(bin): + dump_element(bin, 0) + +def dump_bin(bin, indent): + # Iterate the children + for child in bin.get_list(): + dump_element(child, indent + 2) + +def dump_element(element, indent): + states = { 1: 'NULL', 2: 'READY', + 4: 'PAUSED', 8: 'PLAYING' } + + state = 'UNKNOWN' + try: + state = states[element.get_state()] + except KeyError: + state = 'UNKNOWN (%d)' % element.get_state() + + c = element.get_clock() + if c is None: + clock_str = "clock - None" + else: + clock_str = "clock - %s" % (c.get_name()) + + out = "%s (%s): state %s, %s" % (element.get_name(), + gobject.type_name(element.__gtype__), state, clock_str) + + print out.rjust(len(out) + indent) + + tmp = { True: 'active', False: 'inactive' } + + for curpad in element.get_pad_list(): + if curpad.get_direction() == gst.PAD_SRC: + if curpad.is_linked(): + peer = curpad.get_peer() + out = " - %s:%s (%s) => %s:%s (%s)" % ( + curpad.get_parent().get_name(), curpad.get_name(), + tmp[curpad.is_active()], + peer.get_parent().get_name(), peer.get_name(), + tmp[peer.is_active()]) + + print out.rjust(len(out) + indent) + + if isinstance(element, gst.Bin): + dump_bin(element, indent + 2) + elif isinstance(element, gst.Queue): + out = " - time_level: %ld" % ( + element.get_property('current-level-time')) + print out.rjust(len(out) + indent) + out = " - bytes_level: %ld" % ( + element.get_property('current-level-bytes')) + print out.rjust(len(out) + indent) + +def gc_collect(reason=None): + """ + Garbage-collect if GST_GC env var is set. + This helps in debugging object refcounting. + Sprinkle liberally around checkpoints. + """ + env = os.environ.get('GST_GC', None) + if not env: + return + import gc + if env == 'DEBUG_LEAK': + gc.set_debug(gc.DEBUG_LEAK) + + gst.debug('collecting garbage') + if reason: + gst.debug('because of %s' % reason) + count = gc.collect() + gst.debug('collected garbage, %d objects collected, %d left' % ( + count, len(gc.get_objects()))) diff --git a/gst/gst-0.10.21.ignore b/gst/gst-0.10.21.ignore new file mode 100644 index 0000000..b9b54b2 --- /dev/null +++ b/gst/gst-0.10.21.ignore @@ -0,0 +1,11 @@ +%% +ignore + gst_pad_set_iterate_internal_links_function + gst_pad_iterate_internal_links + gst_pad_iterate_internal_links_default + gst_base_transform_suggest + gst_base_transform_reconfigure +%% +ignore-type + +%% diff --git a/gst/gst-0.10.22.ignore b/gst/gst-0.10.22.ignore new file mode 100644 index 0000000..724750f --- /dev/null +++ b/gst/gst-0.10.22.ignore @@ -0,0 +1,18 @@ +%% +ignore + gst_bin_recalculate_latency + gst_event_get_seqnum + gst_event_set_seqnum + gst_message_set_seqnum + gst_message_new_structure_change + gst_message_parse_structure_change + gst_query_new_uri + gst_query_parse_uri + gst_query_set_uri + gst_tag_setter_reset_tags + gst_util_seqnum_next + gst_util_seqnum_compare +%% +ignore-type + GstStructureChangeType +%% diff --git a/gst/gst-0.10.23.ignore b/gst/gst-0.10.23.ignore new file mode 100644 index 0000000..3e065f3 --- /dev/null +++ b/gst/gst-0.10.23.ignore @@ -0,0 +1,23 @@ +%% +ignore + gst_debug_construct_win_color + gst_message_new_request_state + gst_message_parse_request_state + gst_util_array_binary_search + gst_poll_new_timer + gst_poll_write_control + gst_poll_read_control + gst_tag_list_get_buffer + gst_tag_list_get_buffer_index + gst_fixme + gst_memdump + gst_object_fixme + gst_object_memdump + gst_type_find_helper_for_extension + GST_PARAM_MUTABLE_READY + GST_PARAM_MUTABLE_PAUSED + GST_PARAM_MUTABLE_PLAYING +%% +ignore-type + GstSearchMode +%% diff --git a/gst/gst-0.10.24.ignore b/gst/gst-0.10.24.ignore new file mode 100644 index 0000000..41d9b4f --- /dev/null +++ b/gst/gst-0.10.24.ignore @@ -0,0 +1,46 @@ +%% +ignore + gst_element_set_start_time + gst_element_get_start_time + gst_element_lost_state_full + gst_event_new_step + gst_event_parse_step + gst_message_new_tag_full + gst_message_parse_tag_full + gst_message_new_step_done + gst_message_parse_step_done + gst_message_new_stream_status + gst_message_parse_stream_status + gst_message_set_stream_status_object + gst_message_get_stream_status_object + gst_message_new_step_start + gst_message_parse_step_start + gst_pad_set_chain_list_function + gst_pad_push_list + gst_pad_chain_list + gst_plugin_get_cache_data + gst_plugin_set_cache_data + gst_segment_to_position + gst_segment_set_running_time + gst_structure_get_valist + gst_structure_get + gst_structure_id_get_valist + gst_structure_id_get + gst_tag_list_add_value + gst_tag_setter_add_tag_value + gst_task_set_priority + gst_task_get_pool + gst_task_set_pool + gst_task_set_thread_callbacks + gst_task_set_state + gst_adapter_prev_timestamp + gst_adapter_masked_scan_uint32 +%% +ignore-type + GstBufferList + GstTaskPool + GstBufferListItem + GstStreamStatusType + GstBufferList + GstBufferListIterator +%% diff --git a/gst/gst-0.10.25.ignore b/gst/gst-0.10.25.ignore new file mode 100644 index 0000000..c8a6d4f --- /dev/null +++ b/gst/gst-0.10.25.ignore @@ -0,0 +1,4 @@ +%% +ignore + gst_caps_can_intersect +%% \ No newline at end of file diff --git a/gst/gst-0.10.26.ignore b/gst/gst-0.10.26.ignore new file mode 100644 index 0000000..5a07bb9 --- /dev/null +++ b/gst/gst-0.10.26.ignore @@ -0,0 +1,20 @@ +%% +ignore + gst_caps_set_value + gst_pad_get_caps_reffed + gst_pad_peer_get_caps_reffed + gst_util_greatest_common_divisor + gst_util_fraction_to_double + gst_util_double_to_fraction + gst_util_fraction_multiply + gst_util_fraction_add + gst_event_new_sink_message + gst_event_parse_sink_message + gst_plugin_feature_list_copy + gst_registry_get_feature_list_cookie + gst_structure_id_has_field + gst_structure_id_has_field_type + gst_base_src_new_seamless_segment + gst_collect_pads_set_clip_function + gst_type_find_helper_get_range_ext +%% \ No newline at end of file diff --git a/gst/gst-0.10.29.ignore b/gst/gst-0.10.29.ignore new file mode 100644 index 0000000..106c41c --- /dev/null +++ b/gst/gst-0.10.29.ignore @@ -0,0 +1,9 @@ +%% +ignore + gst_message_new_qos + gst_message_set_qos_values + gst_message_set_qos_stats + gst_message_parse_qos + gst_message_parse_qos_values + gst_message_parse_qos_stats +%% \ No newline at end of file diff --git a/gst/gst-0.10.30.ignore b/gst/gst-0.10.30.ignore new file mode 100644 index 0000000..bb3baf0 --- /dev/null +++ b/gst/gst-0.10.30.ignore @@ -0,0 +1,14 @@ +%% +ignore + gst_caps_steal_structure + gst_structure_fixate_field_boolean + gst_tag_list_peek_string_index + gst_pad_link_full + gst_element_link_pads_full + gst_adapter_masked_scan_uint32_peek + gst_base_sink_set_last_buffer_enabled + gst_base_sink_is_last_buffer_enabled +%% +ignore-type + GstPadLinkCheck +%% \ No newline at end of file diff --git a/gst/gst-0.10.31.ignore b/gst/gst-0.10.31.ignore new file mode 100644 index 0000000..b324ae4 --- /dev/null +++ b/gst/gst-0.10.31.ignore @@ -0,0 +1,26 @@ +%% +ignore + gst_is_initialized + gst_buffer_list_iterator_add_list + gst_element_class_set_documentation_uri + gst_element_class_set_icon_name + gst_element_class_get_documentation_uri + gst_element_class_get_icon_name + gst_element_factory_list_is_type + gst_element_factory_list_get_elements + gst_element_factory_list_filter + gst_element_factory_get_documentation_uri + gst_element_factory_get_icon_name + gst_plugin_Feature_rank_compare_func + gst_query_add_buffering_range + gst_query_get_n_buffering_ranges + gst_query_parse_nth_buffering_range + gst_util_fraction_compare + gst_value_set_int64_range + gst_value_get_int64_range_min + gst_value_get_int64_range_max + gst_adapter_take_list +%% +ignore-type + GstDateTime +%% diff --git a/gst/gst-0.10.32.ignore b/gst/gst-0.10.32.ignore new file mode 100644 index 0000000..0875abe --- /dev/null +++ b/gst/gst-0.10.32.ignore @@ -0,0 +1,8 @@ +%% +ignore + gst_clock_single_shot_id_reinit + gst_read_gpollfd + gst_value_list_merge + gst_element_request_pad +%% + diff --git a/gst/gst-argtypes.c b/gst/gst-argtypes.c new file mode 100644 index 0000000..3b67a6b --- /dev/null +++ b/gst/gst-argtypes.c @@ -0,0 +1,65 @@ +/* gst-python + * Copyright (C) 2004 Johan Dahlin + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Johan Dahlin + */ + +/* define this for all source files that don't run init_pygobject() + * before including pygobject.h */ +#define NO_IMPORT_PYGOBJECT + +#include "common.h" +#include + +/* This function will return a copy, unless the following is all TRUE: + * - The given PyObject contains a GstCaps already + * - The copy parameter is non-NULL + * - New years is the first of January + * If copy is non-NULL, it is set to TRUE if a copy was made. + * If the PyObject could not be converted to a caps, a TypeError is raised + * and NULL is returned. + */ +GstCaps * +pygst_caps_from_pyobject (PyObject * object, gboolean * copy) +{ + if (pyg_boxed_check (object, GST_TYPE_CAPS)) { + GstCaps *caps = pyg_boxed_get (object, GstCaps); + if (copy) { + *copy = FALSE; + return caps; + } else { + return gst_caps_copy (caps); + } + } else if (pyg_boxed_check (object, GST_TYPE_STRUCTURE)) { + GstStructure *structure = pyg_boxed_get (object, GstStructure); + if (copy) + *copy = TRUE; + return gst_caps_new_full (gst_structure_copy (structure), NULL); + } else if (PyString_Check (object)) { + GstCaps *caps = gst_caps_from_string (PyString_AsString (object)); + if (!caps) { + PyErr_SetString (PyExc_TypeError, "could not convert string to GstCaps"); + return NULL; + } + if (copy) + *copy = TRUE; + return caps; + } + PyErr_SetString (PyExc_TypeError, "could not convert to GstCaps"); + return NULL; +} diff --git a/gst/gst-disable-loadsave.ignore b/gst/gst-disable-loadsave.ignore new file mode 100644 index 0000000..4a43897 --- /dev/null +++ b/gst/gst-disable-loadsave.ignore @@ -0,0 +1,14 @@ +%% +ignore + gst_element_save_thyself + gst_element_restore_thyself + gst_xml_get_topelements + gst_xml_make_element + gst_xml_new + gst_xml_parse_memory + gst_xml_write + gst_xml_write_file +%% +ignore-type + GstXML +%% \ No newline at end of file diff --git a/gst/gst-extrafuncs.defs b/gst/gst-extrafuncs.defs new file mode 100644 index 0000000..6826627 --- /dev/null +++ b/gst/gst-extrafuncs.defs @@ -0,0 +1,150 @@ +; -*- scheme -*- + +(define-method flags + (of-object "GstElement") + (c-name "GST_OBJECT_FLAGS") + (return-type "GstElementFlags") +) + +(define-method set_flag + (of-object "GstObject") + (c-name "GST_OBJECT_FLAG_SET") + (return-type "none") + (parameters + '("GstObjectFlags" "flags") + ) +) + +(define-method unset_flag + (of-object "GstObject") + (c-name "GST_OBJECT_FLAG_UNSET") + (return-type "none") + (parameters + '("GstObjectFlags" "flag") + ) +) + +;; DEBUGGING FUNCTIONS FROM PYTHON +;; The c functions don't actually exist + +(define-function log + (c-name "gst_log") + (return-type "none") + (parameters + '("gchar *" "msg") + ) +) + +(define-function debug + (c-name "gst_debug") + (return-type "none") + (parameters + '("gchar *" "msg") + ) +) + +(define-function info + (c-name "gst_info") + (return-type "none") + (parameters + '("gchar *" "msg") + ) +) + +(define-function warning + (c-name "gst_warning") + (return-type "none") + (parameters + '("gchar *" "msg") + ) +) + +(define-function error + (c-name "gst_error") + (return-type "none") + (parameters + '("gchar *" "msg") + ) +) + +(define-function fixme + (c-name "gst_fixme") + (return-type "none") + (parameters + '("gchar *" "msg") + ) +) + +(define-function memdump + (c-name "gst_memdump") + (return-type "none") + (parameters + '("gchar *" "msg") + ) +) + +;; OBJECT DEBUGGING FUNCTIONS FROM PYTHON +;; The c functions don't actually exist + +(define-method log + (of-object "GstObject") + (c-name "gst_object_log") + (return-type "none") + (parameters + '("gchar *" "msg") + ) +) + +(define-method debug + (of-object "GstObject") + (c-name "gst_object_debug") + (return-type "none") + (parameters + '("gchar *" "msg") + ) +) + +(define-method info + (of-object "GstObject") + (c-name "gst_object_info") + (return-type "none") + (parameters + '("gchar *" "msg") + ) +) + +(define-method warning + (of-object "GstObject") + (c-name "gst_object_warning") + (return-type "none") + (parameters + '("gchar *" "msg") + ) +) + +(define-method error + (of-object "GstObject") + (c-name "gst_object_error") + (return-type "none") + (parameters + '("gchar *" "msg") + ) +) + +(define-method fixme + (of-object "GstObject") + (c-name "gst_object_fixme") + (return-type "none") + (parameters + '("gchar *" "msg") + ) +) + +(define-method memdump + (of-object "GstObject") + (c-name "gst_object_memdump") + (return-type "none") + (parameters + '("gchar *" "msg") + ) +) diff --git a/gst/gst-pb-0.10.23.ignore b/gst/gst-pb-0.10.23.ignore new file mode 100644 index 0000000..92a18b6 --- /dev/null +++ b/gst/gst-pb-0.10.23.ignore @@ -0,0 +1,19 @@ +%% +ignore + gst_audio_clock_get_time + gst_audio_clock_adjust + gst_navigation_send_command + gst_video_format_parse_caps_interlaced + gst_video_format_new_caps_interlaced +%% +ignore-glob + gst_navigation_query_* + gst_navigation_message_* + gst_navigation_event_* +%% +ignore-type + GstNavigationCommand + GstNavigationQueryType + GstNavigationMessageType + GstNavigationEventType +%% diff --git a/gst/gst-pb-0.10.25.ignore b/gst/gst-pb-0.10.25.ignore new file mode 100644 index 0000000..95e26f8 --- /dev/null +++ b/gst/gst-pb-0.10.25.ignore @@ -0,0 +1,9 @@ +%% +ignore +%% +ignore-glob + gst_stream_volume_* +%% +ignore-type + GstStreamVolumeFormat +%% diff --git a/gst/gst-pb-0.10.26.ignore b/gst/gst-pb-0.10.26.ignore new file mode 100644 index 0000000..9991cea --- /dev/null +++ b/gst/gst-pb-0.10.26.ignore @@ -0,0 +1,10 @@ +%% +ignore + gst_tag_get_language_code + gst_tag_get_language_name + gst_tag_get_language_code_iso_639_1 + gst_tag_get_language_code_iso_638_2B + gst_tag_get_language_code_iso_638_2T + gst_video_event_new_still_frame + gst_video_event_parse_still_frame +%% \ No newline at end of file diff --git a/gst/gst-pb-0.10.29.ignore b/gst/gst-pb-0.10.29.ignore new file mode 100644 index 0000000..8e39404 --- /dev/null +++ b/gst/gst-pb-0.10.29.ignore @@ -0,0 +1,9 @@ +%% +ignore + gst_x_overlay_set_render_rectangle + gst_tag_list_from_xmp_buffer + gst_tag_list_to_xmp_buffer + gst_video_format_is_gray + gst_video_parse_caps_chroma_site + gst_video_parse_caps_color_matrix +%% \ No newline at end of file diff --git a/gst/gst-pb-0.10.30.ignore b/gst/gst-pb-0.10.30.ignore new file mode 100644 index 0000000..ea1e659 --- /dev/null +++ b/gst/gst-pb-0.10.30.ignore @@ -0,0 +1,7 @@ +%% +ignore + gst_tag_list_to_exif_buffer + gst_tag_list_to_exif_buffer_with_tiff_header + gst_tag_list_from_exif_buffer + gst_tag_list_from_exif_buffer_with_tiff_header +%% diff --git a/gst/gst-pb-0.10.31.ignore b/gst/gst-pb-0.10.31.ignore new file mode 100644 index 0000000..2b28116 --- /dev/null +++ b/gst/gst-pb-0.10.31.ignore @@ -0,0 +1,31 @@ +%% +ignore + gst_codec_utils_aac_get_sample_rate_from_index + gst_codec_utils_aac_get_profile + gst_codec_utils_aac_get_level + gst_codec_utils_aac_caps_set_level_and_profile + gst_codec_utils_h264_get_profile + gst_codec_utils_h264_get_level + gst_codec_utils_h264_caps_set_level_and_profile + gst_codec_utils_mpeg4video_get_profile + gst_codec_utils_mpeg4video_get_level + gst_codec_utils_mpeg4video_caps_set_level_and_profile + gst_plugins_base_version + gst_plugins_base_version_string + gst_audio_clock_invalidate + gst_base_audio_sink_set_drift_tolerance + gst_base_audio_sink_get_drift_tolerance + gst_x_overlay_set_window_handle + gst_x_overlay_got_window_handle + gst_video_convert_frame + gst_video_convert_frame_async +%% +ignore-type + GstDiscoverer + GstDiscovererResult + GstDiscovererInfo + GstDiscovererStreamInfo + GstDiscovererContainerInfo + GstDiscovererAudioInfo + GstDiscovererVideoInfo +%% \ No newline at end of file diff --git a/gst/gst-pb-0.10.32.ignore b/gst/gst-pb-0.10.32.ignore new file mode 100644 index 0000000..5e334fc --- /dev/null +++ b/gst/gst-pb-0.10.32.ignore @@ -0,0 +1,50 @@ +%% +ignore + gst_encoding_profile_get_name + gst_encoding_profile_get_description + gst_encoding_profile_get_format + gst_encoding_profile_get_preset + gst_encoding_profile_get_presence + gst_encoding_profile_get_restriction + gst_encoding_profile_set_name + gst_encoding_profile_set_description + gst_encoding_profile_set_format + gst_encoding_profile_set_preset + gst_encoding_profile_set_presence + gst_encoding_profile_set_restriction + gst_encoding_profile_is_equal + gst_encoding_profile_get_output_caps + gst_encoding_profile_get_type_nick + gst_encoding_profile_find + gst_encoding_container_profile_add_profile + gst_encoding_container_profile_contains_profile + gst_encoding_container_profile_get_profiles + gst_encoding_container_profile_new + gst_encoding_audio_profile_new + gst_encoding_video_profile_new + gst_encoding_video_profile_get_pass + gst_encoding_video_profile_set_pass + gst_encoding_video_profile_get_variableframerate + gst_encoding_video_profile_set_variableframerate + gst_encoding_target_new + gst_encoding_target_get_name + gst_encoding_target_get_category + gst_encoding_target_get_description + gst_encoding_target_get_profiles + gst_encoding_target_add_profile + gst_encoding_target_save + gst_encoding_target_save_to_file + gst_encoding_target_load + gst_encoding_target_load_from_file + gst_encoding_list_available_categories + gst_encoding_list_all_targets + gst_discoverer_info_get_seekable + gst_video_parse_caps_palette +%% +ignore-type + GstEncodingProfile + GstEncodingContainerProfile + GstEncodingAudioProfile + GstEncodingVideoProfile + GstEncodingTarget +%% \ No newline at end of file diff --git a/gst/gst-types.defs b/gst/gst-types.defs new file mode 100644 index 0000000..e7ce858 --- /dev/null +++ b/gst/gst-types.defs @@ -0,0 +1,1240 @@ +;; -*- scheme -*- + +; object definitions ... + +(define-object Object + (in-module "Gst") + (parent "GObject") + (c-name "GstObject") + (gtype-id "GST_TYPE_OBJECT") + (fields + '("int" "__gstrefcount__") + ) +) + +(define-object Index + (in-module "Gst") + (parent "GstObject") + (c-name "GstIndex") + (gtype-id "GST_TYPE_INDEX") +) + +(define-object Element + (in-module "Gst") + (parent "GstObject") + (c-name "GstElement") + (gtype-id "GST_TYPE_ELEMENT") +) + +(define-object Bin + (in-module "Gst") + (parent "GstElement") + (c-name "GstBin") + (gtype-id "GST_TYPE_BIN") +) + +(define-object Clock + (in-module "Gst") + (parent "GstObject") + (c-name "GstClock") + (gtype-id "GST_TYPE_CLOCK") +) + +(define-object Bus + (in-module "Gst") + (parent "GstObject") + (c-name "GstBus") + (gtype-id "GST_TYPE_BUS") +) + +(define-object Pad + (in-module "Gst") + (parent "GstObject") + (c-name "GstPad") + (gtype-id "GST_TYPE_PAD") +) + +(define-object GhostPad + (in-module "Gst") + (parent "GstPad") + (c-name "GstGhostPad") + (gtype-id "GST_TYPE_GHOST_PAD") +) + +(define-object PadTemplate + (in-module "Gst") + (parent "GstObject") + (c-name "GstPadTemplate") + (gtype-id "GST_TYPE_PAD_TEMPLATE") + (fields + '("const-gchar*" "name_template") + '("GstPadDirection" "direction") + '("GstPadPresence" "presence") + '("GstCaps*" "caps") + ) +) + +(define-object Pipeline + (in-module "Gst") + (parent "GstBin") + (c-name "GstPipeline") + (gtype-id "GST_TYPE_PIPELINE") +) + +(define-object PluginFeature + (in-module "Gst") + (parent "GstObject") + (c-name "GstPluginFeature") + (gtype-id "GST_TYPE_PLUGIN_FEATURE") +) + +(define-object IndexFactory + (in-module "Gst") + (parent "GstPluginFeature") + (c-name "GstIndexFactory") + (gtype-id "GST_TYPE_INDEX_FACTORY") +) + +(define-object ElementFactory + (in-module "Gst") + (parent "GstPluginFeature") + (c-name "GstElementFactory") + (gtype-id "GST_TYPE_ELEMENT_FACTORY") +) + +(define-object Registry + (in-module "Gst") + (parent "GstObject") + (c-name "GstRegistry") + (gtype-id "GST_TYPE_REGISTRY") +) + +(define-object SystemClock + (in-module "Gst") + (parent "GstClock") + (c-name "GstSystemClock") + (gtype-id "GST_TYPE_SYSTEM_CLOCK") +) + +(define-object Task + (in-module "Gst") + (parent "GstObject") + (c-name "GstTask") + (gtype-id "GST_TYPE_TASK") +) + +(define-object TaskPool + (in-module "Gst") + (parent "GstObject") + (c-name "GstTaskPool") + (gtype-id "GST_TYPE_TASK_POOL") +) + +(define-object TypeFindFactory + (in-module "Gst") + (parent "GstPluginFeature") + (c-name "GstTypeFindFactory") + (gtype-id "GST_TYPE_TYPE_FIND_FACTORY") +) + +(define-object XML + (in-module "Gst") + (parent "GstObject") + (c-name "GstXML") + (gtype-id "GST_TYPE_XML") +) + +(define-object NetClientClock + (in-module "Gst") + (parent "GstSystemClock") + (c-name "GstNetClientClock") + (gtype-id "GST_TYPE_NET_CLIENT_CLOCK") +) + +(define-object NetTimeProvider + (in-module "Gst") + (parent "GstObject") + (c-name "GstNetTimeProvider") + (gtype-id "GST_TYPE_NET_TIME_PROVIDER") +) + +;; +;; MiniObject types +;; + +(define-miniobject Buffer + (in-module "Gst") + (parent "GstMiniObject") + (c-name "GstBuffer") + (gtype-id "GST_TYPE_BUFFER") + (fields + '("guint8" "data") + '("guint" "size") + '("GstClockTime" "timestamp") + '("GstClockTime" "duration") + '("guint64" "offset") + '("guint64" "offset_end") + '("GstCaps*" "caps") + ) +) + +(define-miniobject BufferList + (in-module "Gst") + (parent "GstMiniObject") + (c-name "GstBufferList") + (gtype-id "GST_TYPE_BUFFER_LIST") +) + +(define-miniobject Event + (in-module "Gst") + (parent "GstMiniObject") + (c-name "GstEvent") + (gtype-id "GST_TYPE_EVENT") + (fields + '("GstEventType" "type") + '("guint64" "timestamp") + '("GstObject*" "src") + ) +) + +(define-miniobject Message + (in-module "Gst") + (parent "GstMiniObject") + (c-name "GstMessage") + (gtype-id "GST_TYPE_MESSAGE") + (fields + '("GstMessageType" "type") + '("guint64" "timestamp") + '("GstObject*" "src") + '("GstStructure*" "structure") + ) +) + +(define-miniobject Query + (in-module "Gst") + (parent "GstMiniObject") + (c-name "GstQuery") + (gtype-id "GST_TYPE_QUERY") + (fields + '("GstQueryType" "type") + '("GstStructure*" "structure") + ) +) + + +;; +;; Boxed types +;; + +(define-boxed Caps + (in-module "Gst") + (c-name "GstCaps") + (gtype-id "GST_TYPE_CAPS") + (fields + '("int" "__refcount__") + ) +) + +(define-boxed DateTime + (in-module "Gst") + (c-name "GstDateTime") + (gtype-id "GST_TYPE_DATE_TIME") +) + +(define-object Plugin + (in-module "Gst") + (parent "GstObject") + (c-name "GstPlugin") + (gtype-id "GST_TYPE_PLUGIN") +) + +(define-boxed Structure + (in-module "Gst") + (c-name "GstStructure") + (gtype-id "GST_TYPE_STRUCTURE") + (copy-func "gst_structure_copy") + (release-func "gst_structure_unref") +) + +(define-boxed TagList + (in-module "Gst") + (c-name "GstTagList") + (gtype-id "GST_TYPE_TAG_LIST") +) + +(define-boxed GError + (in-module "Gst") + (c-name "GError") + (gtype-id "GST_TYPE_G_ERROR") + (copy-func "g_error_copy") + (release-func "g_error_free") + (fields + '("GQuark" "domain") + '("gint" "code") + '("gchar*" "message")) +) + +(define-boxed Date + (in-module "Gst") + (c-name "GstDate") + (gtype-id "GST_TYPE_DATE") + (fields + '("gint" "day") + '("gint" "month") + '("gint" "year") + ) +) + +(define-boxed Segment + (in-module "Gst") + (c-name "GstSegment") + (gtype-id "GST_TYPE_SEGMENT") + (fields + '("gdouble" "rate") + '("gdouble" "abs_rate") + '("GstFormat" "format") + '("GstSeekFlags" "flags") + '("gint64" "start") + '("gint64" "stop") + '("gint64" "time") + '("gint64" "accum") + '("gint64" "last_stop") + '("gint64" "duration") + ) +) + +(define-boxed IndexEntry + (in-module "Gst") + (c-name "GstIndexEntry") + (gtype-id "GST_TYPE_INDEX_ENTRY") + (fields + '("GstIndexEntryType" "type") + '("gint" "id") + '("gint" "NASSOCS") + '("GstAssocFlags" "ASSOC_FLAGS") + '("const-gchar*" "ID_DESCRIPTION") + ) +) + + +(define-pointer StaticPadTemplate + (in-module "Gst") + (c-name "GstStaticPadTemplate") + (gtype-id "GST_TYPE_STATIC_PAD_TEMPLATE") + (fields + '("gchar*" "name_template") + '("GstPadDirection" "direction") + '("GstPadPresence" "presence") + '("GstStaticCaps" "static_caps") + ) +) + +(define-pointer StaticCaps + (in-module "Gst") + (c-name "GstStaticCaps") + (gtype-id "GST_TYPE_STATIC_CAPS") + (fields + '("GstCaps" "caps") + '("const-gchar*" "string") + ) +) + +(define-pointer TypeFind + (in-module "Gst") + (c-name "GstTypeFind") + (gtype-id "GST_TYPE_TYPE_FIND") + (fields + ) +) + +;; Enumerations and flags ... + +(define-flags BinFlags + (in-module "Gst") + (c-name "GstBinFlags") + (gtype-id "GST_TYPE_BIN_FLAGS") + (values + '("last" "GST_BIN_FLAG_LAST") + ) +) + +(define-flags BufferFlag + (in-module "Gst") + (c-name "GstBufferFlag") + (gtype-id "GST_TYPE_BUFFER_FLAG") + (values + '("readonly" "GST_BUFFER_FLAG_READONLY") + '("preroll" "GST_BUFFER_FLAG_PREROLL") + '("discont" "GST_BUFFER_FLAG_DISCONT") + '("in-caps" "GST_BUFFER_FLAG_IN_CAPS") + '("gap" "GST_BUFFER_FLAG_GAP") + '("delta-unit" "GST_BUFFER_FLAG_DELTA_UNIT") + '("media1" "GST_BUFFER_FLAG_MEDIA1") + '("media2" "GST_BUFFER_FLAG_MEDIA2") + '("media3" "GST_BUFFER_FLAG_MEDIA3") + '("last" "GST_BUFFER_FLAG_LAST") + ) +) + +(define-flags BufferCopyFlags + (in-module "Gst") + (c-name "GstBufferCopyFlags") + (gtype-id "GST_TYPE_BUFFER_COPY_FLAGS") + (values + '("flags" "GST_BUFFER_COPY_FLAGS") + '("timestamps" "GST_BUFFER_COPY_TIMESTAMPS") + '("caps" "GST_BUFFER_COPY_CAPS") + ) +) + +(define-enum BufferListItem + (in-module "Gst") + (c-name "GstBufferListItem") + (gtype-id "GST_TYPE_BUFFER_LIST_ITEM") + (values + '("continue" "GST_BUFFER_LIST_CONTINUE") + '("skip-group" "GST_BUFFER_LIST_SKIP_GROUP") + '("end" "GST_BUFFER_LIST_END") + ) +) + +(define-flags BusFlags + (in-module "Gst") + (c-name "GstBusFlags") + (gtype-id "GST_TYPE_BUS_FLAGS") + (values + '("flushing" "GST_BUS_FLUSHING") + '("flag-last" "GST_BUS_FLAG_LAST") + ) +) + +(define-enum BusSyncReply + (in-module "Gst") + (c-name "GstBusSyncReply") + (gtype-id "GST_TYPE_BUS_SYNC_REPLY") + (values + '("drop" "GST_BUS_DROP") + '("pass" "GST_BUS_PASS") + '("async" "GST_BUS_ASYNC") + ) +) + +(define-flags CapsFlags + (in-module "Gst") + (c-name "GstCapsFlags") + (gtype-id "GST_TYPE_CAPS_FLAGS") + (values + '("y" "GST_CAPS_FLAGS_ANY") + ) +) + +(define-enum ClockReturn + (in-module "Gst") + (c-name "GstClockReturn") + (gtype-id "GST_TYPE_CLOCK_RETURN") + (values + '("ok" "GST_CLOCK_OK") + '("early" "GST_CLOCK_EARLY") + '("unscheduled" "GST_CLOCK_UNSCHEDULED") + '("busy" "GST_CLOCK_BUSY") + '("badtime" "GST_CLOCK_BADTIME") + '("error" "GST_CLOCK_ERROR") + '("unsupported" "GST_CLOCK_UNSUPPORTED") + '("done" "GST_CLOCK_DONE") + ) +) + +(define-enum ClockEntryType + (in-module "Gst") + (c-name "GstClockEntryType") + (gtype-id "GST_TYPE_CLOCK_ENTRY_TYPE") + (values + '("single" "GST_CLOCK_ENTRY_SINGLE") + '("periodic" "GST_CLOCK_ENTRY_PERIODIC") + ) +) + +(define-flags ClockFlags + (in-module "Gst") + (c-name "GstClockFlags") + (gtype-id "GST_TYPE_CLOCK_FLAGS") + (values + '("can-do-single-sync" "GST_CLOCK_FLAG_CAN_DO_SINGLE_SYNC") + '("can-do-single-async" "GST_CLOCK_FLAG_CAN_DO_SINGLE_ASYNC") + '("can-do-periodic-sync" "GST_CLOCK_FLAG_CAN_DO_PERIODIC_SYNC") + '("can-do-periodic-async" "GST_CLOCK_FLAG_CAN_DO_PERIODIC_ASYNC") + '("can-set-resolution" "GST_CLOCK_FLAG_CAN_SET_RESOLUTION") + '("can-set-master" "GST_CLOCK_FLAG_CAN_SET_MASTER") + '("last" "GST_CLOCK_FLAG_LAST") + ) +) + +(define-flags DebugGraphDetails + (in-module "Gst") + (c-name "GstDebugGraphDetails") + (gtype-id "GST_TYPE_DEBUG_GRAPH_DETAILS") + (values + '("media-type" "GST_DEBUG_GRAPH_SHOW_MEDIA_TYPE") + '("caps-details" "GST_DEBUG_GRAPH_SHOW_CAPS_DETAILS") + '("non-default-params" "GST_DEBUG_GRAPH_SHOW_NON_DEFAULT_PARAMS") + '("states" "GST_DEBUG_GRAPH_SHOW_STATES") + '("all" "GST_DEBUG_GRAPH_SHOW_ALL") + ) +) + +(define-flags ElementFlags + (in-module "Gst") + (c-name "GstElementFlags") + (gtype-id "GST_TYPE_ELEMENT_FLAGS") + (values + '("locked-state" "GST_ELEMENT_LOCKED_STATE") + '("is-sink" "GST_ELEMENT_IS_SINK") + '("unparenting" "GST_ELEMENT_UNPARENTING") + '("flag-last" "GST_ELEMENT_FLAG_LAST") + ) +) + +(define-flags ParamFlags + (in-module "Gst") + (c-name "GstParamFlags") + (values + '("controllable" "GST_PARAM_CONTROLLABLE") + '("mutable-ready" "GST_PARAM_MUTABLE_READY") + '("mutable-paused" "GST_PARAM_MUTABLE_PAUSED") + '("mutable-playing" "GST_PARAM_MUTABLE_PLAYING") + '("user-shift" "GST_PARAM_USER_SHIFT") + ) +) + +(define-enum CoreError + (in-module "Gst") + (c-name "GstCoreError") + (gtype-id "GST_TYPE_CORE_ERROR") + (values + '("failed" "GST_CORE_ERROR_FAILED") + '("too-lazy" "GST_CORE_ERROR_TOO_LAZY") + '("not-implemented" "GST_CORE_ERROR_NOT_IMPLEMENTED") + '("state-change" "GST_CORE_ERROR_STATE_CHANGE") + '("pad" "GST_CORE_ERROR_PAD") + '("thread" "GST_CORE_ERROR_THREAD") + '("negotiation" "GST_CORE_ERROR_NEGOTIATION") + '("event" "GST_CORE_ERROR_EVENT") + '("seek" "GST_CORE_ERROR_SEEK") + '("caps" "GST_CORE_ERROR_CAPS") + '("tag" "GST_CORE_ERROR_TAG") + '("missing-plugin" "GST_CORE_ERROR_MISSING_PLUGIN") + '("clock" "GST_CORE_ERROR_CLOCK") + '("disabled" "GST_CORE_ERROR_DISABLED") + '("num-errors" "GST_CORE_ERROR_NUM_ERRORS") + ) +) + +(define-enum LibraryError + (in-module "Gst") + (c-name "GstLibraryError") + (gtype-id "GST_TYPE_LIBRARY_ERROR") + (values + '("failed" "GST_LIBRARY_ERROR_FAILED") + '("too-lazy" "GST_LIBRARY_ERROR_TOO_LAZY") + '("init" "GST_LIBRARY_ERROR_INIT") + '("shutdown" "GST_LIBRARY_ERROR_SHUTDOWN") + '("settings" "GST_LIBRARY_ERROR_SETTINGS") + '("encode" "GST_LIBRARY_ERROR_ENCODE") + '("num-errors" "GST_LIBRARY_ERROR_NUM_ERRORS") + ) +) + +(define-enum ResourceError + (in-module "Gst") + (c-name "GstResourceError") + (gtype-id "GST_TYPE_RESOURCE_ERROR") + (values + '("failed" "GST_RESOURCE_ERROR_FAILED") + '("too-lazy" "GST_RESOURCE_ERROR_TOO_LAZY") + '("not-found" "GST_RESOURCE_ERROR_NOT_FOUND") + '("busy" "GST_RESOURCE_ERROR_BUSY") + '("open-read" "GST_RESOURCE_ERROR_OPEN_READ") + '("open-write" "GST_RESOURCE_ERROR_OPEN_WRITE") + '("open-read-write" "GST_RESOURCE_ERROR_OPEN_READ_WRITE") + '("close" "GST_RESOURCE_ERROR_CLOSE") + '("read" "GST_RESOURCE_ERROR_READ") + '("write" "GST_RESOURCE_ERROR_WRITE") + '("seek" "GST_RESOURCE_ERROR_SEEK") + '("sync" "GST_RESOURCE_ERROR_SYNC") + '("settings" "GST_RESOURCE_ERROR_SETTINGS") + '("no-space-left" "GST_RESOURCE_ERROR_NO_SPACE_LEFT") + '("num-errors" "GST_RESOURCE_ERROR_NUM_ERRORS") + ) +) + +(define-enum StreamError + (in-module "Gst") + (c-name "GstStreamError") + (gtype-id "GST_TYPE_STREAM_ERROR") + (values + '("failed" "GST_STREAM_ERROR_FAILED") + '("too-lazy" "GST_STREAM_ERROR_TOO_LAZY") + '("not-implemented" "GST_STREAM_ERROR_NOT_IMPLEMENTED") + '("type-not-found" "GST_STREAM_ERROR_TYPE_NOT_FOUND") + '("wrong-type" "GST_STREAM_ERROR_WRONG_TYPE") + '("codec-not-found" "GST_STREAM_ERROR_CODEC_NOT_FOUND") + '("decode" "GST_STREAM_ERROR_DECODE") + '("encode" "GST_STREAM_ERROR_ENCODE") + '("demux" "GST_STREAM_ERROR_DEMUX") + '("mux" "GST_STREAM_ERROR_MUX") + '("format" "GST_STREAM_ERROR_FORMAT") + '("decrypt" "GST_STREAM_ERROR_DECRYPT") + '("decrypt-nokey" "GST_STREAM_ERROR_DECRYPT_NOKEY") + '("num-errors" "GST_STREAM_ERROR_NUM_ERRORS") + ) +) + +(define-flags EventTypeFlags + (in-module "Gst") + (c-name "GstEventTypeFlags") + (gtype-id "GST_TYPE_EVENT_TYPE_FLAGS") + (values + '("upstream" "GST_EVENT_TYPE_UPSTREAM") + '("downstream" "GST_EVENT_TYPE_DOWNSTREAM") + '("serialized" "GST_EVENT_TYPE_SERIALIZED") + ) +) + +(define-enum EventType + (in-module "Gst") + (c-name "GstEventType") + (gtype-id "GST_TYPE_EVENT_TYPE") + (values + '("unknown" "GST_EVENT_UNKNOWN") + '("flush-start" "GST_EVENT_FLUSH_START") + '("flush-stop" "GST_EVENT_FLUSH_STOP") + '("eos" "GST_EVENT_EOS") + '("newsegment" "GST_EVENT_NEWSEGMENT") + '("tag" "GST_EVENT_TAG") + '("filler" "GST_EVENT_FILLER") + '("buffersize" "GST_EVENT_BUFFERSIZE") + '("sink-message" "GST_EVENT_SINK_MESSAGE") + '("qos" "GST_EVENT_QOS") + '("seek" "GST_EVENT_SEEK") + '("navigation" "GST_EVENT_NAVIGATION") + '("latency" "GST_EVENT_LATENCY") + '("step" "GST_EVENT_STEP") + '("custom-upstream" "GST_EVENT_CUSTOM_UPSTREAM") + '("custom-downstream" "GST_EVENT_CUSTOM_DOWNSTREAM") + '("custom-downstream-oob" "GST_EVENT_CUSTOM_DOWNSTREAM_OOB") + '("custom-both" "GST_EVENT_CUSTOM_BOTH") + '("custom-both-oob" "GST_EVENT_CUSTOM_BOTH_OOB") + ) +) + +(define-enum SeekType + (in-module "Gst") + (c-name "GstSeekType") + (gtype-id "GST_TYPE_SEEK_TYPE") + (values + '("none" "GST_SEEK_TYPE_NONE") + '("cur" "GST_SEEK_TYPE_CUR") + '("set" "GST_SEEK_TYPE_SET") + '("end" "GST_SEEK_TYPE_END") + ) +) + +(define-flags SeekFlags + (in-module "Gst") + (c-name "GstSeekFlags") + (gtype-id "GST_TYPE_SEEK_FLAGS") + (values + '("none" "GST_SEEK_FLAG_NONE") + '("flush" "GST_SEEK_FLAG_FLUSH") + '("accurate" "GST_SEEK_FLAG_ACCURATE") + '("key-unit" "GST_SEEK_FLAG_KEY_UNIT") + '("segment" "GST_SEEK_FLAG_SEGMENT") + '("skip" "GST_SEEK_FLAG_SKIP") + ) +) + +(define-enum Format + (in-module "Gst") + (c-name "GstFormat") + (gtype-id "GST_TYPE_FORMAT") + (values + '("undefined" "GST_FORMAT_UNDEFINED") + '("default" "GST_FORMAT_DEFAULT") + '("bytes" "GST_FORMAT_BYTES") + '("time" "GST_FORMAT_TIME") + '("buffers" "GST_FORMAT_BUFFERS") + '("percent" "GST_FORMAT_PERCENT") + ) +) + +(define-enum IndexCertainty + (in-module "Gst") + (c-name "GstIndexCertainty") + (gtype-id "GST_TYPE_INDEX_CERTAINTY") + (values + '("unknown" "GST_INDEX_UNKNOWN") + '("certain" "GST_INDEX_CERTAIN") + '("fuzzy" "GST_INDEX_FUZZY") + ) +) + +(define-enum IndexEntryType + (in-module "Gst") + (c-name "GstIndexEntryType") + (gtype-id "GST_TYPE_INDEX_ENTRY_TYPE") + (values + '("id" "GST_INDEX_ENTRY_ID") + '("association" "GST_INDEX_ENTRY_ASSOCIATION") + '("object" "GST_INDEX_ENTRY_OBJECT") + '("format" "GST_INDEX_ENTRY_FORMAT") + ) +) + +(define-enum IndexLookupMethod + (in-module "Gst") + (c-name "GstIndexLookupMethod") + (gtype-id "GST_TYPE_INDEX_LOOKUP_METHOD") + (values + '("exact" "GST_INDEX_LOOKUP_EXACT") + '("before" "GST_INDEX_LOOKUP_BEFORE") + '("after" "GST_INDEX_LOOKUP_AFTER") + ) +) + +(define-flags AssocFlags + (in-module "Gst") + (c-name "GstAssocFlags") + (gtype-id "GST_TYPE_ASSOC_FLAGS") + (values + '("none" "GST_ASSOCIATION_FLAG_NONE") + '("key-unit" "GST_ASSOCIATION_FLAG_KEY_UNIT") + '("delta-unit" "GST_ASSOCIATION_FLAG_DELTA_UNIT") + '("last" "GST_ASSOCIATION_FLAG_LAST") + ) +) + +(define-enum IndexResolverMethod + (in-module "Gst") + (c-name "GstIndexResolverMethod") + (gtype-id "GST_TYPE_INDEX_RESOLVER_METHOD") + (values + '("custom" "GST_INDEX_RESOLVER_CUSTOM") + '("gtype" "GST_INDEX_RESOLVER_GTYPE") + '("path" "GST_INDEX_RESOLVER_PATH") + ) +) + +(define-flags IndexFlags + (in-module "Gst") + (c-name "GstIndexFlags") + (gtype-id "GST_TYPE_INDEX_FLAGS") + (values + '("writable" "GST_INDEX_WRITABLE") + '("readable" "GST_INDEX_READABLE") + '("flag-last" "GST_INDEX_FLAG_LAST") + ) +) + +(define-enum DebugLevel + (in-module "Gst") + (c-name "GstDebugLevel") + (gtype-id "GST_TYPE_DEBUG_LEVEL") + (values + '("none" "GST_LEVEL_NONE") + '("error" "GST_LEVEL_ERROR") + '("warning" "GST_LEVEL_WARNING") + '("info" "GST_LEVEL_INFO") + '("debug" "GST_LEVEL_DEBUG") + '("log" "GST_LEVEL_LOG") + '("fixme" "GST_LEVEL_FIXME") + '("trace" "GST_LEVEL_TRACE") + '("memdump" "GST_LEVEL_MEMDUMP") + '("count" "GST_LEVEL_COUNT") + ) +) + +(define-enum DebugColorFlags + (in-module "Gst") + (c-name "GstDebugColorFlags") + (gtype-id "GST_TYPE_DEBUG_COLOR_FLAGS") + (values + '("fg-black" "GST_DEBUG_FG_BLACK") + '("fg-red" "GST_DEBUG_FG_RED") + '("fg-green" "GST_DEBUG_FG_GREEN") + '("fg-yellow" "GST_DEBUG_FG_YELLOW") + '("fg-blue" "GST_DEBUG_FG_BLUE") + '("fg-magenta" "GST_DEBUG_FG_MAGENTA") + '("fg-cyan" "GST_DEBUG_FG_CYAN") + '("fg-white" "GST_DEBUG_FG_WHITE") + '("bg-black" "GST_DEBUG_BG_BLACK") + '("bg-red" "GST_DEBUG_BG_RED") + '("bg-green" "GST_DEBUG_BG_GREEN") + '("bg-yellow" "GST_DEBUG_BG_YELLOW") + '("bg-blue" "GST_DEBUG_BG_BLUE") + '("bg-magenta" "GST_DEBUG_BG_MAGENTA") + '("bg-cyan" "GST_DEBUG_BG_CYAN") + '("bg-white" "GST_DEBUG_BG_WHITE") + '("bold" "GST_DEBUG_BOLD") + '("underline" "GST_DEBUG_UNDERLINE") + ) +) + +(define-enum IteratorResult + (in-module "Gst") + (c-name "GstIteratorResult") + (gtype-id "GST_TYPE_ITERATOR_RESULT") + (values + '("done" "GST_ITERATOR_DONE") + '("ok" "GST_ITERATOR_OK") + '("resync" "GST_ITERATOR_RESYNC") + '("error" "GST_ITERATOR_ERROR") + ) +) + +(define-enum IteratorItem + (in-module "Gst") + (c-name "GstIteratorItem") + (gtype-id "GST_TYPE_ITERATOR_ITEM") + (values + '("skip" "GST_ITERATOR_ITEM_SKIP") + '("pass" "GST_ITERATOR_ITEM_PASS") + '("end" "GST_ITERATOR_ITEM_END") + ) +) + +(define-flags MessageType + (in-module "Gst") + (c-name "GstMessageType") + (gtype-id "GST_TYPE_MESSAGE_TYPE") + (values + '("unknown" "GST_MESSAGE_UNKNOWN") + '("eos" "GST_MESSAGE_EOS") + '("error" "GST_MESSAGE_ERROR") + '("warning" "GST_MESSAGE_WARNING") + '("info" "GST_MESSAGE_INFO") + '("tag" "GST_MESSAGE_TAG") + '("buffering" "GST_MESSAGE_BUFFERING") + '("state-changed" "GST_MESSAGE_STATE_CHANGED") + '("state-dirty" "GST_MESSAGE_STATE_DIRTY") + '("step-done" "GST_MESSAGE_STEP_DONE") + '("clock-provide" "GST_MESSAGE_CLOCK_PROVIDE") + '("clock-lost" "GST_MESSAGE_CLOCK_LOST") + '("new-clock" "GST_MESSAGE_NEW_CLOCK") + '("structure-change" "GST_MESSAGE_STRUCTURE_CHANGE") + '("stream-status" "GST_MESSAGE_STREAM_STATUS") + '("application" "GST_MESSAGE_APPLICATION") + '("element" "GST_MESSAGE_ELEMENT") + '("segment-start" "GST_MESSAGE_SEGMENT_START") + '("segment-done" "GST_MESSAGE_SEGMENT_DONE") + '("duration" "GST_MESSAGE_DURATION") + '("latency" "GST_MESSAGE_LATENCY") + '("async-start" "GST_MESSAGE_ASYNC_START") + '("async-done" "GST_MESSAGE_ASYNC_DONE") + '("request-state" "GST_MESSAGE_REQUEST_STATE") + '("step-start" "GST_MESSAGE_STEP_START") + '("qos" "GST_MESSAGE_QOS") + '("any" "GST_MESSAGE_ANY") + ) +) + +(define-enum StructureChangeType + (in-module "Gst") + (c-name "GstStructureChangeType") + (gtype-id "GST_TYPE_STRUCTURE_CHANGE_TYPE") + (values + '("link" "GST_STRUCTURE_CHANGE_TYPE_PAD_LINK") + '("unlink" "GST_STRUCTURE_CHANGE_TYPE_PAD_UNLINK") + ) +) + +(define-enum StreamStatusType + (in-module "Gst") + (c-name "GstStreamStatusType") + (gtype-id "GST_TYPE_STREAM_STATUS_TYPE") + (values + '("create" "GST_STREAM_STATUS_TYPE_CREATE") + '("enter" "GST_STREAM_STATUS_TYPE_ENTER") + '("leave" "GST_STREAM_STATUS_TYPE_LEAVE") + '("destroy" "GST_STREAM_STATUS_TYPE_DESTROY") + '("start" "GST_STREAM_STATUS_TYPE_START") + '("pause" "GST_STREAM_STATUS_TYPE_PAUSE") + '("stop" "GST_STREAM_STATUS_TYPE_STOP") + ) +) + +(define-flags MiniObjectFlags + (in-module "Gst") + (c-name "GstMiniObjectFlags") + (gtype-id "GST_TYPE_MINI_OBJECT_FLAGS") + (values + '("readonly" "GST_MINI_OBJECT_FLAG_READONLY") + '("last" "GST_MINI_OBJECT_FLAG_LAST") + ) +) + +(define-flags ObjectFlags + (in-module "Gst") + (c-name "GstObjectFlags") + (gtype-id "GST_TYPE_OBJECT_FLAGS") + (values + '("disposing" "GST_OBJECT_DISPOSING") + '("floating" "GST_OBJECT_FLOATING") + '("flag-last" "GST_OBJECT_FLAG_LAST") + ) +) + +(define-enum PadLinkReturn + (in-module "Gst") + (c-name "GstPadLinkReturn") + (gtype-id "GST_TYPE_PAD_LINK_RETURN") + (values + '("ok" "GST_PAD_LINK_OK") + '("wrong-hierarchy" "GST_PAD_LINK_WRONG_HIERARCHY") + '("was-linked" "GST_PAD_LINK_WAS_LINKED") + '("wrong-direction" "GST_PAD_LINK_WRONG_DIRECTION") + '("noformat" "GST_PAD_LINK_NOFORMAT") + '("nosched" "GST_PAD_LINK_NOSCHED") + '("refused" "GST_PAD_LINK_REFUSED") + ) +) + +(define-enum FlowReturn + (in-module "Gst") + (c-name "GstFlowReturn") + (gtype-id "GST_TYPE_FLOW_RETURN") + (values + '("custom-success-2" "GST_FLOW_CUSTOM_SUCCESS_2") + '("custom-success-1" "GST_FLOW_CUSTOM_SUCCESS_1") + '("custom-success" "GST_FLOW_CUSTOM_SUCCESS") + '("resend" "GST_FLOW_RESEND") + '("ok" "GST_FLOW_OK") + '("not-linked" "GST_FLOW_NOT_LINKED") + '("wrong-state" "GST_FLOW_WRONG_STATE") + '("unexpected" "GST_FLOW_UNEXPECTED") + '("not-negotiated" "GST_FLOW_NOT_NEGOTIATED") + '("error" "GST_FLOW_ERROR") + '("not-supported" "GST_FLOW_NOT_SUPPORTED") + '("custom-error" "GST_FLOW_CUSTOM_ERROR") + '("custom-error-1" "GST_FLOW_CUSTOM_ERROR_1") + '("custom-error-2" "GST_FLOW_CUSTOM_ERROR_2") + ) +) + +(define-flags PadLinkCheck + (in-module "Gst") + (c-name "GstPadLinkCheck") + (gtype-id "GST_TYPE_PAD_LINK_CHECK") + (values + '("nothing" "GST_PAD_LINK_CHECK_NOTHING") + '("hierarchy" "GST_PAD_LINK_CHECK_HIERARCHY") + '("template-caps" "GST_PAD_LINK_CHECK_TEMPLATE_CAPS") + '("caps" "GST_PAD_LINK_CHECK_CAPS") + ) +) + +(define-enum ActivateMode + (in-module "Gst") + (c-name "GstActivateMode") + (gtype-id "GST_TYPE_ACTIVATE_MODE") + (values + '("none" "GST_ACTIVATE_NONE") + '("push" "GST_ACTIVATE_PUSH") + '("pull" "GST_ACTIVATE_PULL") + ) +) + +(define-enum PadDirection + (in-module "Gst") + (c-name "GstPadDirection") + (gtype-id "GST_TYPE_PAD_DIRECTION") + (values + '("unknown" "GST_PAD_UNKNOWN") + '("src" "GST_PAD_SRC") + '("sink" "GST_PAD_SINK") + ) +) + +(define-flags PadFlags + (in-module "Gst") + (c-name "GstPadFlags") + (gtype-id "GST_TYPE_PAD_FLAGS") + (values + '("blocked" "GST_PAD_BLOCKED") + '("flushing" "GST_PAD_FLUSHING") + '("in-getcaps" "GST_PAD_IN_GETCAPS") + '("in-setcaps" "GST_PAD_IN_SETCAPS") + '("flag-last" "GST_PAD_FLAG_LAST") + ) +) + +(define-enum PadPresence + (in-module "Gst") + (c-name "GstPadPresence") + (gtype-id "GST_TYPE_PAD_PRESENCE") + (values + '("always" "GST_PAD_ALWAYS") + '("sometimes" "GST_PAD_SOMETIMES") + '("request" "GST_PAD_REQUEST") + ) +) + +(define-flags PadTemplateFlags + (in-module "Gst") + (c-name "GstPadTemplateFlags") + (gtype-id "GST_TYPE_PAD_TEMPLATE_FLAGS") + (values + '("fixed" "GST_PAD_TEMPLATE_FIXED") + '("flag-last" "GST_PAD_TEMPLATE_FLAG_LAST") + ) +) + +(define-enum ParseError + (in-module "Gst") + (c-name "GstParseError") + (gtype-id "GST_TYPE_PARSE_ERROR") + (values + '("syntax" "GST_PARSE_ERROR_SYNTAX") + '("no-such-element" "GST_PARSE_ERROR_NO_SUCH_ELEMENT") + '("no-such-property" "GST_PARSE_ERROR_NO_SUCH_PROPERTY") + '("link" "GST_PARSE_ERROR_LINK") + '("could-not-set-property" "GST_PARSE_ERROR_COULD_NOT_SET_PROPERTY") + '("empty-bin" "GST_PARSE_ERROR_EMPTY_BIN") + '("empty" "GST_PARSE_ERROR_EMPTY") + ) +) + +(define-flags ParseFlags + (in-module "Gst") + (c-name "GstParseFlags") + (gtype-id "GST_TYPE_PARSE_FLAGS") + (values + '("none" "GST_PARSE_FLAG_NONE") + '("fatal-errors" "GST_PARSE_FLAG_FATAL_ERRORS") + ) +) + +(define-flags PipelineFlags + (in-module "Gst") + (c-name "GstPipelineFlags") + (gtype-id "GST_TYPE_PIPELINE_FLAGS") + (values + '("fixed-clock" "GST_PIPELINE_FLAG_FIXED_CLOCK") + '("last" "GST_PIPELINE_FLAG_LAST") + ) +) + +(define-enum PluginError + (in-module "Gst") + (c-name "GstPluginError") + (gtype-id "GST_TYPE_PLUGIN_ERROR") + (values + '("module" "GST_PLUGIN_ERROR_MODULE") + '("dependencies" "GST_PLUGIN_ERROR_DEPENDENCIES") + '("name-mismatch" "GST_PLUGIN_ERROR_NAME_MISMATCH") + ) +) + +(define-flags PluginFlags + (in-module "Gst") + (c-name "GstPluginFlags") + (gtype-id "GST_TYPE_PLUGIN_FLAGS") + (values + '("cached" "GST_PLUGIN_FLAG_CACHED") + '("blacklisted" "GST_PLUGIN_FLAG_BLACKLISTED") + ) +) + +(define-enum QueryType + (in-module "Gst") + (c-name "GstQueryType") + (gtype-id "GST_TYPE_QUERY_TYPE") + (values + '("none" "GST_QUERY_NONE") + '("position" "GST_QUERY_POSITION") + '("duration" "GST_QUERY_DURATION") + '("latency" "GST_QUERY_LATENCY") + '("jitter" "GST_QUERY_JITTER") + '("rate" "GST_QUERY_RATE") + '("seeking" "GST_QUERY_SEEKING") + '("segment" "GST_QUERY_SEGMENT") + '("convert" "GST_QUERY_CONVERT") + '("formats" "GST_QUERY_FORMATS") + '("buffering" "GST_QUERY_BUFFERING") + '("custom" "GST_QUERY_CUSTOM") + '("uri" "GST_QUERY_URI") + ) +) + +(define-enum BufferingMode + (in-module "Gst") + (c-name "GstBufferingMode") + (gtype-id "GST_TYPE_BUFFERING_MODE") + (values + '("stream" "GST_BUFFERING_STREAM") + '("download" "GST_BUFFERING_DOWNLOAD") + '("timeshift" "GST_BUFFERING_TIMESHIFT") + '("live" "GST_BUFFERING_LIVE") + ) +) + +(define-enum TagMergeMode + (in-module "Gst") + (c-name "GstTagMergeMode") + (gtype-id "GST_TYPE_TAG_MERGE_MODE") + (values + '("undefined" "GST_TAG_MERGE_UNDEFINED") + '("replace-all" "GST_TAG_MERGE_REPLACE_ALL") + '("replace" "GST_TAG_MERGE_REPLACE") + '("append" "GST_TAG_MERGE_APPEND") + '("prepend" "GST_TAG_MERGE_PREPEND") + '("keep" "GST_TAG_MERGE_KEEP") + '("keep-all" "GST_TAG_MERGE_KEEP_ALL") + '("count" "GST_TAG_MERGE_COUNT") + ) +) + +(define-enum TagFlag + (in-module "Gst") + (c-name "GstTagFlag") + (gtype-id "GST_TYPE_TAG_FLAG") + (values + '("undefined" "GST_TAG_FLAG_UNDEFINED") + '("meta" "GST_TAG_FLAG_META") + '("encoded" "GST_TAG_FLAG_ENCODED") + '("decoded" "GST_TAG_FLAG_DECODED") + '("count" "GST_TAG_FLAG_COUNT") + ) +) + +(define-enum TaskState + (in-module "Gst") + (c-name "GstTaskState") + (gtype-id "GST_TYPE_TASK_STATE") + (values + '("started" "GST_TASK_STARTED") + '("stopped" "GST_TASK_STOPPED") + '("paused" "GST_TASK_PAUSED") + ) +) + +(define-flags AllocTraceFlags + (in-module "Gst") + (c-name "GstAllocTraceFlags") + (gtype-id "GST_TYPE_ALLOC_TRACE_FLAGS") + (values + '("live" "GST_ALLOC_TRACE_LIVE") + '("mem-live" "GST_ALLOC_TRACE_MEM_LIVE") + ) +) + +(define-enum TypeFindProbability + (in-module "Gst") + (c-name "GstTypeFindProbability") + (gtype-id "GST_TYPE_TYPE_FIND_PROBABILITY") + (values + '("minimum" "GST_TYPE_FIND_MINIMUM") + '("possible" "GST_TYPE_FIND_POSSIBLE") + '("likely" "GST_TYPE_FIND_LIKELY") + '("nearly-certain" "GST_TYPE_FIND_NEARLY_CERTAIN") + '("maximum" "GST_TYPE_FIND_MAXIMUM") + ) +) + +(define-enum State + (in-module "Gst") + (c-name "GstState") + (gtype-id "GST_TYPE_STATE") + (values + '("void-pending" "GST_STATE_VOID_PENDING") + '("null" "GST_STATE_NULL") + '("ready" "GST_STATE_READY") + '("paused" "GST_STATE_PAUSED") + '("playing" "GST_STATE_PLAYING") + ) +) + +(define-enum StateChangeReturn + (in-module "Gst") + (c-name "GstStateChangeReturn") + (gtype-id "GST_TYPE_STATE_CHANGE_RETURN") + (values + '("failure" "GST_STATE_CHANGE_FAILURE") + '("success" "GST_STATE_CHANGE_SUCCESS") + '("async" "GST_STATE_CHANGE_ASYNC") + '("no-preroll" "GST_STATE_CHANGE_NO_PREROLL") + ) +) + +(define-enum StateChange + (in-module "Gst") + (c-name "GstStateChange") + (gtype-id "GST_TYPE_STATE_CHANGE") + (values + '("null-to-ready" "GST_STATE_CHANGE_NULL_TO_READY") + '("ready-to-paused" "GST_STATE_CHANGE_READY_TO_PAUSED") + '("paused-to-playing" "GST_STATE_CHANGE_PAUSED_TO_PLAYING") + '("playing-to-paused" "GST_STATE_CHANGE_PLAYING_TO_PAUSED") + '("paused-to-ready" "GST_STATE_CHANGE_PAUSED_TO_READY") + '("ready-to-null" "GST_STATE_CHANGE_READY_TO_NULL") + ) +) + +(define-enum Rank + (in-module "Gst") + (c-name "GstRank") + (gtype-id "GST_TYPE_RANK") + (values + '("none" "GST_RANK_NONE") + '("marginal" "GST_RANK_MARGINAL") + '("secondary" "GST_RANK_SECONDARY") + '("primary" "GST_RANK_PRIMARY") + ) +) + +(define-enum URIType + (in-module "Gst") + (c-name "GstURIType") + (gtype-id "GST_TYPE_URI_TYPE") + (values + '("unknown" "GST_URI_UNKNOWN") + '("sink" "GST_URI_SINK") + '("src" "GST_URI_SRC") + ) +) + +(define-enum SearchMode + (in-module "Gst") + (c-name "GstSearchMode") + (gtype-id "GST_TYPE_SEARCH_MODE") + (values + '("exact" "GST_SEARCH_MODE_EXACT") + '("before" "GST_SEARCH_MODE_BEFORE") + '("after" "GST_SEARCH_MODE_AFTER") + ) +) + +(define-interface URIHandler + (in-module "Gst") + (c-name "GstURIHandler") + (gtype-id "GST_TYPE_URI_HANDLER") + (vtable "GstURIHandlerInterface") +) + +(define-interface TagSetter + (in-module "Gst") + (c-name "GstTagSetter") + (gtype-id "GST_TYPE_TAG_SETTER") +) + +(define-interface ImplementsInterface + (in-module "Gst") + (c-name "GstImplementsInterface") + (gtype-id "GST_TYPE_IMPLEMENTS_INTERFACE") + (vtable "GstImplementsInterfaceClass") +) + +(define-interface Preset + (in-module "Gst") + (c-name "GstPreset") + (gtype-id "GST_TYPE_PRESET") +) diff --git a/gst/gst.defs b/gst/gst.defs new file mode 100644 index 0000000..ac0690e --- /dev/null +++ b/gst/gst.defs @@ -0,0 +1,9482 @@ +;; -*- scheme -*- + +(include "gst-extrafuncs.defs") +(include "gst-types.defs") +(include "libs.defs") +(include "base.defs") + +;; From ../gstreamer/gst/gst.h + +(define-function init + (c-name "gst_init") + (return-type "none") + (parameters + '("int*" "argc") + '("char**[]" "argv") + ) +) + +(define-function init_check + (c-name "gst_init_check") + (return-type "gboolean") + (parameters + '("int*" "argc") + '("char**[]" "argv") + '("GError**" "err") + ) +) + +(define-function is_initialized + (c-name "gst_is_initialized") + (return-type "gboolean") +) + + +(define-function init_get_option_group + (c-name "gst_init_get_option_group") + (return-type "GOptionGroup*") +) + +(define-function deinit + (c-name "gst_deinit") + (return-type "none") +) + +(define-function version + (c-name "gst_version") + (return-type "none") + (parameters + '("guint*" "major") + '("guint*" "minor") + '("guint*" "micro") + '("guint*" "nano") + ) +) + +(define-function version_string + (c-name "gst_version_string") + (return-type "gchar*") +) + +(define-function segtrap_is_enabled + (c-name "gst_segtrap_is_enabled") + (return-type "gboolean") +) + +(define-function segtrap_set_enabled + (c-name "gst_segtrap_set_enabled") + (return-type "none") + (parameters + '("gboolean" "enabled") + ) +) + +(define-function registry_fork_is_enabled + (c-name "gst_registry_fork_is_enabled") + (return-type "gboolean") +) + +(define-function registry_fork_set_enabled + (c-name "gst_registry_fork_set_enabled") + (return-type "none") + (parameters + '("gboolean" "enabled") + ) +) + +(define-function update_registry + (c-name "gst_update_registry") + (return-type "gboolean") +) + +(define-function get_gst_version + (c-name "gst_get_gst_version") + (return-type "none") +) + +(define-function get_pygst_version + (c-name "gst_get_pygst_version") + (return-type "none") +) + + +;; From ../gstreamer/gst/gstbin.h + +(define-function bin_get_type + (c-name "gst_bin_get_type") + (return-type "GType") +) + +(define-function bin_new + (c-name "gst_bin_new") + (is-constructor-of "GstBin") + (return-type "GstElement*") + (properties + '("name" (argname "name") (optional)) + ) +) + +(define-method add + (of-object "GstBin") + (c-name "gst_bin_add") + (return-type "none") + (parameters + '("GstElement*" "element_1") + ) + (varargs #t) +) + +(define-method add_many + (of-object "GstBin") + (c-name "gst_bin_add_many") + (return-type "none") + (parameters + '("GstElement*" "element_1") + ) + (varargs #t) +) + +(define-method remove + (of-object "GstBin") + (c-name "gst_bin_remove") + (return-type "gboolean") + (parameters + '("GstElement*" "element_1") + ) + (varargs #t) +) + +(define-method remove_many + (of-object "GstBin") + (c-name "gst_bin_remove_many") + (return-type "gboolean") + (parameters + '("GstElement*" "element_1") + ) + (varargs #t) +) + +(define-method get_by_name + (of-object "GstBin") + (c-name "gst_bin_get_by_name") + (return-type "GstElement*") + (caller-owns-return #t) + (parameters + '("const-gchar*" "name") + ) +) + +(define-method get_by_name_recurse_up + (of-object "GstBin") + (c-name "gst_bin_get_by_name_recurse_up") + (return-type "GstElement*") + (caller-owns-return #t) + (parameters + '("const-gchar*" "name") + ) +) + +(define-method get_by_interface + (of-object "GstBin") + (c-name "gst_bin_get_by_interface") + (return-type "GstElement*") + (caller-owns-return #t) + (parameters + '("GType" "iface_gtype") + ) +) + +(define-method elements + (of-object "GstBin") + (c-name "gst_bin_iterate_elements") + (return-type "GstIterator*") +) + +(define-method sorted + (of-object "GstBin") + (c-name "gst_bin_iterate_sorted") + (return-type "GstIterator*") +) + +(define-method recurse + (of-object "GstBin") + (c-name "gst_bin_iterate_recurse") + (return-type "GstIterator*") +) + +(define-method sinks + (of-object "GstBin") + (c-name "gst_bin_iterate_sinks") + (return-type "GstIterator*") +) + +(define-method iterate_sources + (of-object "GstBin") + (c-name "gst_bin_iterate_sources") + (return-type "GstIterator*") +) + +(define-method iterate_all_by_interface + (of-object "GstBin") + (c-name "gst_bin_iterate_all_by_interface") + (return-type "GstIterator*") + (parameters + '("GType" "iface_gtype") + ) +) + +(define-method recalculate_latency + (of-object "GstBin") + (c-name "gst_bin_recalculate_latency") + (return-type "gboolean") +) + +(define-virtual add_element + (of-object "GstBin") + (return-type "gboolean") + (parameters + '("GstElement*" "element") + ) +) + +(define-virtual remove_element + (of-object "GstBin") + (return-type "gboolean") + (parameters + '("GstElement*" "element") + ) +) + +(define-virtual handle_message + (of-object "GstBin") + (return-type "none") + (parameters + '("GstMessage*" "message") + ) +) + +;; From ../gstreamer/gst/gstbuffer.h + +(define-function buffer_get_type + (c-name "gst_buffer_get_type") + (return-type "GType") +) + +(define-function buffer_new + (c-name "gst_buffer_new") + (is-constructor-of "GstBuffer") + (return-type "GstBuffer*") +) + +(define-function buffer_new_and_alloc + (c-name "gst_buffer_new_and_alloc") + (return-type "GstBuffer*") + (caller-owns-return #t) + (parameters + '("guint" "size") + ) +) + +(define-function buffer_try_new_and_alloc + (c-name "gst_buffer_try_new_and_alloc") + (return-type "GstBuffer*") + (caller-owns-return #t) + (parameters + '("guint" "size") + ) +) + +(define-method is_metadata_writable + (of-object "GstBuffer") + (c-name "gst_buffer_is_metadata_writable") + (return-type "gboolean") +) + +(define-method make_metadata_writable + (of-object "GstBuffer") + (c-name "gst_buffer_make_metadata_writable") + (return-type "GstBuffer*") +) + +(define-method get_caps + (of-object "GstBuffer") + (c-name "gst_buffer_get_caps") + (return-type "GstCaps*") + (caller-owns-return #t) +) + +(define-method set_caps + (of-object "GstBuffer") + (c-name "gst_buffer_set_caps") + (return-type "none") + (parameters + '("GstCaps*" "caps") + ) +) + +(define-method create_sub + (of-object "GstBuffer") + (c-name "gst_buffer_create_sub") + (return-type "GstBuffer*") + (caller-owns-return #t) + (parameters + '("guint" "offset") + '("guint" "size") + ) +) + +(define-method is_span_fast + (of-object "GstBuffer") + (c-name "gst_buffer_is_span_fast") + (return-type "gboolean") + (parameters + '("GstBuffer*" "buf2") + ) +) + +(define-method span + (of-object "GstBuffer") + (c-name "gst_buffer_span") + (return-type "GstBuffer*") + (caller-owns-return #t) + (parameters + '("guint32" "offset") + '("GstBuffer*" "buf2") + '("guint32" "len") + ) +) + + + +;; From gstbufferlist.h + +(define-function gst_buffer_list_get_type + (c-name "gst_buffer_list_get_type") + (return-type "GType") +) + +(define-function gst_buffer_list_new + (c-name "gst_buffer_list_new") + (is-constructor-of "GstBufferList") + (return-type "GstBufferList*") +) + +(define-method foreach + (of-object "GstBufferList") + (c-name "gst_buffer_list_foreach") + (return-type "none") + (parameters + '("GstBufferListFunc" "func") + '("gpointer" "user_data") + ) +) + +(define-method get + (of-object "GstBufferList") + (c-name "gst_buffer_list_get") + (return-type "GstBuffer*") + (parameters + '("guint" "group") + '("guint" "idx") + ) +) + +(define-method iterate + (of-object "GstBufferList") + (c-name "gst_buffer_list_iterate") + (return-type "GstBufferListIterator*") +) + +(define-method free + (of-object "GstBufferListIterator") + (c-name "gst_buffer_list_iterator_free") + (return-type "none") +) + +(define-method n_buffers + (of-object "GstBufferListIterator") + (c-name "gst_buffer_list_iterator_n_buffers") + (return-type "guint") +) + +(define-method next + (of-object "GstBufferListIterator") + (c-name "gst_buffer_list_iterator_next") + (return-type "GstBuffer*") +) + +(define-method next_group + (of-object "GstBufferListIterator") + (c-name "gst_buffer_list_iterator_next_group") + (return-type "gboolean") +) + +(define-method add + (of-object "GstBufferListIterator") + (c-name "gst_buffer_list_iterator_add") + (return-type "none") + (parameters + '("GstBuffer*" "buffer") + ) +) + +(define-method add_list + (of-object "GstBufferListIterator") + (c-name "gst_buffer_list_iterator_add_list") + (return-type "none") + (parameters + '("GList*" "list") + ) +) + +(define-method add_group + (of-object "GstBufferListIterator") + (c-name "gst_buffer_list_iterator_add_group") + (return-type "none") +) + +(define-method remove + (of-object "GstBufferListIterator") + (c-name "gst_buffer_list_iterator_remove") + (return-type "none") +) + +(define-method steal + (of-object "GstBufferListIterator") + (c-name "gst_buffer_list_iterator_steal") + (return-type "GstBuffer*") +) + +(define-method take + (of-object "GstBufferListIterator") + (c-name "gst_buffer_list_iterator_take") + (return-type "none") + (parameters + '("GstBuffer*" "buffer") + ) +) + +(define-method do + (of-object "GstBufferListIterator") + (c-name "gst_buffer_list_iterator_do") + (return-type "GstBuffer*") + (parameters + '("GstBufferListDoFunction" "do_func") + '("gpointer" "user_data") + ) +) + +(define-method merge_group + (of-object "GstBufferListIterator") + (c-name "gst_buffer_list_iterator_merge_group") + (return-type "GstBuffer*") +) + + + +;; From ../gstreamer/gst/gstbus.h + +(define-function bus_get_type + (c-name "gst_bus_get_type") + (return-type "GType") +) + +(define-function bus_new + (c-name "gst_bus_new") + (is-constructor-of "GstBus") + (return-type "GstBus*") +) + +(define-method post + (of-object "GstBus") + (c-name "gst_bus_post") + (return-type "gboolean") + (parameters + '("GstMessage*" "message" (keep-refcount)) + ) +) + +(define-method have_pending + (of-object "GstBus") + (c-name "gst_bus_have_pending") + (return-type "gboolean") +) + +(define-method peek + (of-object "GstBus") + (c-name "gst_bus_peek") + (return-type "GstMessage*") + (caller-owns-return #t) +) + +(define-method pop + (of-object "GstBus") + (c-name "gst_bus_pop") + (return-type "GstMessage*") + (caller-owns-return #t) +) + +(define-method pop_filtered + (of-object "GstBus") + (c-name "gst_bus_pop_filtered") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstMessageType" "types") + ) +) + +(define-method timed_pop + (of-object "GstBus") + (c-name "gst_bus_timed_pop") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstClockTime" "timeout") + ) +) + +(define-method timed_pop_filtered + (of-object "GstBus") + (c-name "gst_bus_timed_pop_filtered") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstClockTime" "timeout") + '("GstMessageType" "types") + ) +) + +(define-method set_flushing + (of-object "GstBus") + (c-name "gst_bus_set_flushing") + (return-type "none") + (parameters + '("gboolean" "flushing") + ) +) + +(define-method set_sync_handler + (of-object "GstBus") + (c-name "gst_bus_set_sync_handler") + (return-type "none") + (parameters + '("GstBusSyncHandler" "func") + '("gpointer" "data") + ) +) + +(define-method create_watch + (of-object "GstBus") + (c-name "gst_bus_create_watch") + (return-type "GSource*") +) + +(define-method add_watch_full + (of-object "GstBus") + (c-name "gst_bus_add_watch_full") + (return-type "guint") + (parameters + '("gint" "priority") + '("GstBusFunc" "func") + '("gpointer" "user_data") + '("GDestroyNotify" "notify") + ) +) + +(define-method add_watch + (of-object "GstBus") + (c-name "gst_bus_add_watch") + (return-type "guint") + (parameters + '("GstBusFunc" "func") + '("gpointer" "user_data") + ) +) + +(define-method poll + (of-object "GstBus") + (c-name "gst_bus_poll") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstMessageType" "events") + '("GstClockTimeDiff" "timeout") + ) +) + +(define-method async_signal_func + (of-object "GstBus") + (c-name "gst_bus_async_signal_func") + (return-type "gboolean") + (parameters + '("GstMessage*" "message") + '("gpointer" "data") + ) +) + +(define-method sync_signal_handler + (of-object "GstBus") + (c-name "gst_bus_sync_signal_handler") + (return-type "GstBusSyncReply") + (parameters + '("GstMessage*" "message") + '("gpointer" "data") + ) +) + +(define-method add_signal_watch + (of-object "GstBus") + (c-name "gst_bus_add_signal_watch") + (return-type "none") +) + +(define-method add_signal_watch_full + (of-object "GstBus") + (c-name "gst_bus_add_signal_watch_full") + (return-type "none") + (parameters + '("gint" "priority") + ) +) + +(define-method remove_signal_watch + (of-object "GstBus") + (c-name "gst_bus_remove_signal_watch") + (return-type "none") +) + + +(define-method enable_sync_message_emission + (of-object "GstBus") + (c-name "gst_bus_enable_sync_message_emission") + (return-type "none") +) + +(define-method disable_sync_message_emission + (of-object "GstBus") + (c-name "gst_bus_disable_sync_message_emission") + (return-type "none") +) + + +;; From ../gstreamer/gst/gstcaps.h + +(define-function caps_get_type + (c-name "gst_caps_get_type") + (return-type "GType") +) + +(define-function caps_new_empty + (is-constructor-of "GstCaps") + (c-name "gst_caps_new_empty") + (return-type "GstCaps*") +) + +(define-function caps_new_any + (c-name "gst_caps_new_any") + (return-type "GstCaps*") + (caller-owns-return #t) +) + +(define-function caps_new_simple + (c-name "gst_caps_new_simple") + (return-type "GstCaps*") + (caller-owns-return #t) + (parameters + '("const-char*" "media_type") + '("const-char*" "fieldname") + ) + (varargs #t) +) + +(define-function caps_new_full + (c-name "gst_caps_new_full") + (return-type "GstCaps*") + (caller-owns-return #t) + (parameters + '("GstStructure*" "struct1") + ) + (varargs #t) +) + +(define-function caps_new_full_valist + (c-name "gst_caps_new_full_valist") + (return-type "GstCaps*") + (caller-owns-return #t) + (parameters + '("GstStructure*" "structure") + '("va_list" "var_args") + ) +) + +(define-method ref + (of-object "GstCaps") + (c-name "gst_caps_ref") + (return-type "GstCaps*") +) + +(define-method copy + (of-object "GstCaps") + (c-name "gst_caps_copy") + (return-type "GstCaps*") + (caller-owns-return #t) +) + +(define-method make_writable + (of-object "GstCaps") + (c-name "gst_caps_make_writable") + (return-type "GstCaps*") + (caller-owns-return #t) +) + +(define-method unref + (of-object "GstCaps") + (c-name "gst_caps_unref") + (return-type "none") +) + +(define-method get + (of-object "GstStaticCaps") + (c-name "gst_static_caps_get") + (return-type "GstCaps*") +) + +(define-method append + (of-object "GstCaps") + (c-name "gst_caps_append") + (return-type "none") + (parameters + '("GstCaps*" "caps2") + ) +) + +(define-method append_structure + (of-object "GstCaps") + (c-name "gst_caps_append_structure") + (return-type "none") + (parameters + '("GstStructure*" "structure") + ) +) + +(define-method get_size + (of-object "GstCaps") + (c-name "gst_caps_get_size") + (return-type "guint") +) + +(define-method get_structure + (of-object "GstCaps") + (c-name "gst_caps_get_structure") + (return-type "GstStructure*") + (parameters + '("guint" "index") + ) +) + +(define-method steal_structure + (of-object "GstCaps") + (c-name "gst_caps_steal_structure") + (return-type "GstStructure*") + (caller-owns-return #t) + (parameters + '("guint" "index") + ) +) + +(define-method copy_nth + (of-object "GstCaps") + (c-name "gst_caps_copy_nth") + (return-type "GstCaps*") + (caller-owns-return #t) + (parameters + '("guint" "nth") + ) +) + +(define-method truncate + (of-object "GstCaps") + (c-name "gst_caps_truncate") + (return-type "none") +) + +(define-method set_value + (of-object "GstCaps") + (c-name "gst_caps_set_value") + (return-type "none") + (parameters + '("const-char*" "field") + '("const-GValue*" "value") + ) +) + +(define-method set_simple + (of-object "GstCaps") + (c-name "gst_caps_set_simple") + (return-type "none") + (parameters + '("const-char*" "field") + ) + (varargs #t) +) + +(define-method set_simple_valist + (of-object "GstCaps") + (c-name "gst_caps_set_simple_valist") + (return-type "none") + (parameters + '("const-char*" "field") + '("va_list" "varargs") + ) +) + +(define-method is_any + (of-object "GstCaps") + (c-name "gst_caps_is_any") + (return-type "gboolean") +) + +(define-method is_empty + (of-object "GstCaps") + (c-name "gst_caps_is_empty") + (return-type "gboolean") +) + +(define-method is_fixed + (of-object "GstCaps") + (c-name "gst_caps_is_fixed") + (return-type "gboolean") +) + +(define-method is_always_compatible + (of-object "GstCaps") + (c-name "gst_caps_is_always_compatible") + (return-type "gboolean") + (parameters + '("const-GstCaps*" "caps2") + ) +) + +(define-method is_subset + (of-object "GstCaps") + (c-name "gst_caps_is_subset") + (return-type "gboolean") + (parameters + '("const-GstCaps*" "superset") + ) +) + +(define-method is_equal + (of-object "GstCaps") + (c-name "gst_caps_is_equal") + (return-type "gboolean") + (parameters + '("const-GstCaps*" "caps2") + ) +) + +(define-method can_intersect + (of-object "GstCaps") + (c-name "gst_caps_can_intersect") + (return-type "gboolean") + (parameters + '("const-GstCaps*" "caps2") + ) +) + +(define-method intersect + (of-object "GstCaps") + (c-name "gst_caps_intersect") + (return-type "GstCaps*") + (caller-owns-return #t) + (parameters + '("const-GstCaps*" "caps2") + ) +) + +(define-method subtract + (of-object "GstCaps") + (c-name "gst_caps_subtract") + (return-type "GstCaps*") + (caller-owns-return #t) + (parameters + '("const-GstCaps*" "subtrahend") + ) +) + +(define-method union + (of-object "GstCaps") + (c-name "gst_caps_union") + (return-type "GstCaps*") + (caller-owns-return #t) + (parameters + '("const-GstCaps*" "caps2") + ) +) + +(define-method normalize + (of-object "GstCaps") + (c-name "gst_caps_normalize") + (return-type "GstCaps*") + (caller-owns-return #t) +) + +(define-method do_simplify + (of-object "GstCaps") + (c-name "gst_caps_do_simplify") + (return-type "gboolean") +) + +(define-method save_thyself + (of-object "GstCaps") + (c-name "gst_caps_save_thyself") + (return-type "xmlNodePtr") + (parameters + '("xmlNodePtr" "parent") + ) +) + +(define-method merge + (of-object "GstCaps") + (c-name "gst_caps_merge") + (return-type "none") + (parameters + '("GstCaps*" "caps2") + ) +) + +(define-method merge_structure + (of-object "GstCaps") + (c-name "gst_caps_merge_structure") + (return-type "none") + (parameters + '("GstStructure*" "structure") + ) +) + +(define-function caps_load_thyself + (c-name "gst_caps_load_thyself") + (return-type "GstCaps*") + (parameters + '("xmlNodePtr" "parent") + ) +) + +(define-function caps_replace + (c-name "gst_caps_replace") + (return-type "none") + (parameters + '("GstCaps**" "caps") + '("GstCaps*" "newcaps") + ) +) + +(define-method to_string + (of-object "GstCaps") + (c-name "gst_caps_to_string") + (return-type "gchar*") +) + +(define-function caps_from_string + (c-name "gst_caps_from_string") + (return-type "GstCaps*") + (caller-owns-return #t) + (parameters + '("const-gchar*" "string") + ) +) + + + +;; From ../gstreamer/gst/gstclock.h + +(define-function clock_get_type + (c-name "gst_clock_get_type") + (return-type "GType") +) + +(define-method set_resolution + (of-object "GstClock") + (c-name "gst_clock_set_resolution") + (return-type "GstClockTime") + (parameters + '("GstClockTime" "resolution") + ) +) + +(define-method get_resolution + (of-object "GstClock") + (c-name "gst_clock_get_resolution") + (return-type "GstClockTime") +) + +(define-method get_time + (of-object "GstClock") + (c-name "gst_clock_get_time") + (return-type "GstClockTime") +) + +(define-method set_calibration + (of-object "GstClock") + (c-name "gst_clock_set_calibration") + (return-type "none") + (parameters + '("GstClockTime" "internal") + '("GstClockTime" "external") + '("GstClockTime" "rate_num") + '("GstClockTime" "rate_denom") + ) +) + +(define-method get_calibration + (of-object "GstClock") + (c-name "gst_clock_get_calibration") + (return-type "none") + (parameters + '("GstClockTime*" "internal") + '("GstClockTime*" "external") + '("GstClockTime*" "rate_num") + '("GstClockTime*" "rate_denom") + ) +) + +(define-method set_master + (of-object "GstClock") + (c-name "gst_clock_set_master") + (return-type "gboolean") + (parameters + '("GstClock*" "master") + ) +) + +(define-method get_master + (of-object "GstClock") + (c-name "gst_clock_get_master") + (return-type "GstClock*") +) + +(define-method add_observation + (of-object "GstClock") + (c-name "gst_clock_add_observation") + (return-type "gboolean") + (parameters + '("GstClockTime" "slave") + '("GstClockTime" "master") + '("gdouble*" "r_squared") + ) +) + +(define-method get_internal_time + (of-object "GstClock") + (c-name "gst_clock_get_internal_time") + (return-type "GstClockTime") +) + +(define-method adjust_unlocked + (of-object "GstClock") + (c-name "gst_clock_adjust_unlocked") + (return-type "GstClockTime") + (parameters + '("GstClockTime" "internal") + ) +) + +(define-method unadjust_unlocked + (of-object "GstClock") + (c-name "gst_clock_unadjust_unlocked") + (return-type "GstClockTime") + (parameters + '("GstClockTime" "external") + ) +) + +(define-method new_single_shot_id + (of-object "GstClock") + (c-name "gst_clock_new_single_shot_id") + (return-type "GstClockID") + (parameters + '("GstClockTime" "time") + ) +) + +(define-method new_periodic_id + (of-object "GstClock") + (c-name "gst_clock_new_periodic_id") + (return-type "GstClockID") + (parameters + '("GstClockTime" "start_time") + '("GstClockTime" "interval") + ) +) + +(define-method ref + (of-object "GstClockID") + (c-name "gst_clock_id_ref") + (return-type "GstClockID") +) + +(define-method unref + (of-object "GstClockID") + (c-name "gst_clock_id_unref") + (return-type "none") +) + +(define-function clock_id_compare_func + (c-name "gst_clock_id_compare_func") + (return-type "gint") + (parameters + '("gconstpointer" "id1") + '("gconstpointer" "id2") + ) +) + +(define-method get_time + (of-object "GstClockID") + (c-name "gst_clock_id_get_time") + (return-type "GstClockTime") +) + +(define-method wait + (of-object "GstClockID") + (c-name "gst_clock_id_wait") + (return-type "GstClockReturn") + (parameters + '("GstClockTimeDiff*" "jitter") + ) +) + +(define-method wait_async + (of-object "GstClockID") + (c-name "gst_clock_id_wait_async") + (return-type "GstClockReturn") + (parameters + '("GstClockCallback" "func") + '("gpointer" "user_data") + ) +) + +(define-method unschedule + (of-object "GstClockID") + (c-name "gst_clock_id_unschedule") + (return-type "none") +) + +(define-method single_shot_id_reinit + (of-object "GstClock") + (c-name "gst_clock_single_shot_id_reinit") + (return-type "gboolean") + (parameters + '("GstClockID" "id") + '("GstClockTime" "time") + ) +) + +(define-virtual change_resolution + (of-object "GstClock") + (return-type "GstClockTime") + (parameters + '("GstClockTime" "old_resolution") + '("GstClockTime" "new_resolution") + ) +) + +(define-virtual get_resolution + (of-object "GstClock") + (return-type "GstClockTime") +) + +(define-virtual get_internal_time + (of-object "GstClock") + (return-type "GstClockTime") +) + +(define-virtual wait + (of-object "GstClock") + (return-type "GstClockReturn") + (parameters + '("GstClockEntry*" "entry") + ) +) + +(define-virtual wait_jitter + (of-object "GstClock") + (return-type "GstClockReturn") + (parameters + '("GstClockEntry*" "entry") + '("GstClockTimeDiff*" "jitter") + ) +) + +(define-virtual wait_async + (of-object "GstClock") + (return-type "GstClockReturn") + (parameters + '("GstClockEntry*" "entry") + ) +) + +(define-virtual unschedule + (of-object "GstClock") + (return-type "none") + (parameters + '("GstClockEntry" "entry") + ) +) + +;; From gstdatetime.h + +(define-method get_year + (of-object "GstDateTime") + (c-name "gst_date_time_get_year") + (return-type "gint") +) + +(define-method get_month + (of-object "GstDateTime") + (c-name "gst_date_time_get_month") + (return-type "gint") +) + +(define-method get_day + (of-object "GstDateTime") + (c-name "gst_date_time_get_day") + (return-type "gint") +) + +(define-method get_hour + (of-object "GstDateTime") + (c-name "gst_date_time_get_hour") + (return-type "gint") +) + +(define-method get_minute + (of-object "GstDateTime") + (c-name "gst_date_time_get_minute") + (return-type "gint") +) + +(define-method get_second + (of-object "GstDateTime") + (c-name "gst_date_time_get_second") + (return-type "gint") +) + +(define-method get_microsecond + (of-object "GstDateTime") + (c-name "gst_date_time_get_microsecond") + (return-type "gint") +) + +(define-method get_time_zone_offset + (of-object "GstDateTime") + (c-name "gst_date_time_get_time_zone_offset") + (return-type "gfloat") +) + +(define-function date_time_new_from_unix_epoch_local_time + (c-name "gst_date_time_new_from_unix_epoch_local_time") + (return-type "GstDateTime*") + (caller-owns-return #t) + (parameters + '("gint64" "secs") + ) +) + +(define-function date_time_new_from_unix_epoch_utc + (c-name "gst_date_time_new_from_unix_epoch_utc") + (return-type "GstDateTime*") + (caller-owns-return #t) + (parameters + '("gint64" "secs") + ) +) + +(define-function date_time_new_local_time + (c-name "gst_date_time_new_local_time") + (return-type "GstDateTime*") + (caller-owns-return #t) + (parameters + '("gint" "year") + '("gint" "month") + '("gint" "day") + '("gint" "hour") + '("gint" "minute") + '("gdouble" "seconds") + ) +) + +(define-function date_time_new + (c-name "gst_date_time_new") + (is-constructor-of "GstDateTime") + (return-type "GstDateTime*") + (caller-owns-return #t) + (parameters + '("gfloat" "tzoffset") + '("gint" "year") + '("gint" "month") + '("gint" "day") + '("gint" "hour") + '("gint" "minute") + '("gdouble" "seconds") + ) +) + +(define-function date_time_new_now_local_time + (c-name "gst_date_time_new_now_local_time") + (return-type "GstDateTime*") + (caller-owns-return #t) +) + +(define-function date_time_new_now_utc + (c-name "gst_date_time_new_now_utc") + (return-type "GstDateTime*") + (caller-owns-return #t) +) + +(define-method ref + (of-object "GstDateTime") + (c-name "gst_date_time_ref") + (return-type "GstDateTime*") +) + +(define-method unref + (of-object "GstDateTime") + (c-name "gst_date_time_unref") + (return-type "none") +) + + + + +;; From ../gstreamer/gst/gstdebugutils.h + +(define-function DEBUG_BIN_TO_DOT_FILE + (c-name "GST_DEBUG_BIN_TO_DOT_FILE") + (return-type "none") + (parameters + '("GstBin*" "bin") + '("GstDebugGraphDetails" "details") + '("const-gchar*" "filename") + ) +) + +(define-function DEBUG_BIN_TO_DOT_FILE_WITH_TS + (c-name "GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS") + (return-type "none") + (parameters + '("GstBin*" "bin") + '("GstDebugGraphDetails" "details") + '("const-gchar*" "filename") + ) +) + +;; From ../gstreamer/gst/gstelement.h + +(define-method add_pad_template + (of-object "GstElementClass") + (c-name "gst_element_class_add_pad_template") + (return-type "none") + (parameters + '("GstPadTemplate*" "templ") + ) +) + +; 9 August 05 - changed to be a method on elements and not classes - wingo +(define-method get_pad_template + (of-object "GstElement") + (c-name "gst_element_get_pad_template") + (return-type "GstPadTemplate*") + (parameters + '("const-gchar*" "name") + ) +) + +; 14 Jun 06 - Changed to be a method on elements and not classes - bilboed +(define-method get_pad_template_list + (of-object "GstElement") + (c-name "gst_element_get_pad_template_list") + (return-type "GList*") +) + +(define-method set_documentation_uri + (of-object "GstElementClass") + (c-name "gst_element_class_set_documentation_uri") + (return-type "none") + (parameters + '("const-gchar*" "uri") + ) +) + +(define-method set_icon_name + (of-object "GstElementClass") + (c-name "gst_element_class_set_icon_name") + (return-type "none") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method set_details + (of-object "GstElementClass") + (c-name "gst_element_class_set_details") + (return-type "none") + (parameters + '("const-GstElementDetails*" "details") + ) +) + +(define-method set_details_simple + (of-object "GstElementClass") + (c-name "gst_element_class_set_details_simple") + (return-type "none") + (parameters + '("const-gchar*" "longname") + '("const-gchar*" "classification") + '("const-gchar*" "description") + '("const-gchar*" "author") + ) +) + +(define-function element_get_type + (c-name "gst_element_get_type") + (return-type "GType") +) + +(define-method requires_clock + (of-object "GstElement") + (c-name "gst_element_requires_clock") + (return-type "gboolean") +) + +(define-method provides_clock + (of-object "GstElement") + (c-name "gst_element_provides_clock") + (return-type "gboolean") +) + +(define-method provide_clock + (of-object "GstElement") + (c-name "gst_element_provide_clock") + (return-type "GstClock*") + (caller-owns-return #t) +) + +(define-method set_clock + (of-object "GstElement") + (c-name "gst_element_set_clock") + (return-type "gboolean") + (parameters + '("GstClock*" "clock") + ) +) + +(define-method set_base_time + (of-object "GstElement") + (c-name "gst_element_set_base_time") + (return-type "none") + (parameters + '("GstClockTime" "time") + ) +) + +(define-method get_base_time + (of-object "GstElement") + (c-name "gst_element_get_base_time") + (return-type "GstClockTime") +) + +(define-method set_start_time + (of-object "GstElement") + (c-name "gst_element_set_start_time") + (return-type "none") + (parameters + '("GstClockTime" "time") + ) +) + +(define-method get_start_time + (of-object "GstElement") + (c-name "gst_element_get_start_time") + (return-type "GstClockTime") +) + +(define-method is_indexable + (of-object "GstElement") + (c-name "gst_element_is_indexable") + (return-type "gboolean") +) + +(define-method set_index + (of-object "GstElement") + (c-name "gst_element_set_index") + (return-type "none") + (parameters + '("GstIndex*" "index") + ) +) + +(define-method get_index + (of-object "GstElement") + (c-name "gst_element_get_index") + (return-type "GstIndex*") + (caller-owns-return #t) +) + +(define-method set_bus + (of-object "GstElement") + (c-name "gst_element_set_bus") + (return-type "none") + (parameters + '("GstBus*" "bus") + ) +) + +(define-method get_bus + (of-object "GstElement") + (c-name "gst_element_get_bus") + (return-type "GstBus*") + (caller-owns-return #t) +) + +(define-method get_clock + (of-object "GstElement") + (c-name "gst_element_get_clock") + (return-type "GstClock*") + (caller-owns-return #t) +) + +(define-method add_pad + (of-object "GstElement") + (c-name "gst_element_add_pad") + (return-type "gboolean") + (parameters + '("GstPad*" "pad") + ) +) + +(define-method remove_pad + (of-object "GstElement") + (c-name "gst_element_remove_pad") + (return-type "gboolean") + (parameters + '("GstPad*" "pad") + ) +) + +(define-method no_more_pads + (of-object "GstElement") + (c-name "gst_element_no_more_pads") + (return-type "none") +) + +(define-method get_pad + (of-object "GstElement") + (c-name "gst_element_get_pad") + (return-type "GstPad*") + (caller-owns-return #t) + (parameters + '("const-gchar*" "name") + ) +) + +(define-method get_static_pad + (of-object "GstElement") + (c-name "gst_element_get_static_pad") + (return-type "GstPad*") + (caller-owns-return #t) + (parameters + '("const-gchar*" "name") + ) +) + +(define-method get_request_pad + (of-object "GstElement") + (c-name "gst_element_get_request_pad") + (return-type "GstPad*") + (caller-owns-return #t) + (parameters + '("const-gchar*" "name") + ) +) + +(define-method request_pad + (of-object "GstElement") + (c-name "gst_element_request_pad") + (return-type "GstPad*") + (caller-owns-return #t) + (parameters + '("GstPadTemplate*" "templ") + '("const-gchar*" "name") + '("const-GstCaps*" "caps") + ) +) + +(define-method release_request_pad + (of-object "GstElement") + (c-name "gst_element_release_request_pad") + (return-type "none") + (parameters + '("GstPad*" "pad") + ) +) + +(define-method pads + (of-object "GstElement") + (c-name "gst_element_iterate_pads") + (return-type "GstIterator*") +) + +(define-method src_pads + (of-object "GstElement") + (c-name "gst_element_iterate_src_pads") + (return-type "GstIterator*") +) + +(define-method sink_pads + (of-object "GstElement") + (c-name "gst_element_iterate_sink_pads") + (return-type "GstIterator*") +) + +(define-method send_event + (of-object "GstElement") + (c-name "gst_element_send_event") + (return-type "gboolean") + (parameters + '("GstEvent*" "event" (keep-refcount)) + ) +) + +(define-method seek + (of-object "GstElement") + (c-name "gst_element_seek") + (return-type "gboolean") + (parameters + '("gdouble" "rate") + '("GstFormat" "format") + '("GstSeekFlags" "flags") + '("GstSeekType" "cur_type") + '("gint64" "cur") + '("GstSeekType" "stop_type") + '("gint64" "stop") + ) +) + +(define-method get_query_types + (of-object "GstElement") + (c-name "gst_element_get_query_types") + (return-type "const-GstQueryType*") +) + +(define-method query + (of-object "GstElement") + (c-name "gst_element_query") + (return-type "gboolean") + (parameters + '("GstQuery*" "query") + ) +) + +(define-method post_message + (of-object "GstElement") + (c-name "gst_element_post_message") + (return-type "gboolean") + (parameters + '("GstMessage*" "message" (keep-refcount)) + ) +) + +(define-method message_full + (of-object "GstElement") + (c-name "gst_element_message_full") + (return-type "none") + (parameters + '("GstMessageType" "type") + '("GQuark" "domain") + '("gint" "code") + '("gchar*" "text") + '("gchar*" "debug") + '("const-gchar*" "file") + '("const-gchar*" "function") + '("gint" "line") + ) +) + +(define-method is_locked_state + (of-object "GstElement") + (c-name "gst_element_is_locked_state") + (return-type "gboolean") +) + +(define-method set_locked_state + (of-object "GstElement") + (c-name "gst_element_set_locked_state") + (return-type "gboolean") + (parameters + '("gboolean" "locked_state") + ) +) + +(define-method sync_state_with_parent + (of-object "GstElement") + (c-name "gst_element_sync_state_with_parent") + (return-type "gboolean") +) + +(define-method get_state + (of-object "GstElement") + (c-name "gst_element_get_state") + (return-type "GstStateChangeReturn") + (parameters + '("GstState*" "state") + '("GstState*" "pending") + '("GstClockTime" "timeout") + ) +) + +(define-method set_state + (of-object "GstElement") + (c-name "gst_element_set_state") + (return-type "GstStateChangeReturn") + (parameters + '("GstState" "state") + ) +) + +(define-method abort_state + (of-object "GstElement") + (c-name "gst_element_abort_state") + (return-type "none") +) + +(define-method change_state + (of-object "GstElement") + (c-name "gst_element_change_state") + (return-type "GstStateChangeReturn") + (parameters + '("GstStateChange" "transition") + ) +) + +(define-method continue_state + (of-object "GstElement") + (c-name "gst_element_continue_state") + (return-type "GstStateChangeReturn") + (parameters + '("GstStateChangeReturn" "retstate") + ) +) + +(define-method lost_state + (of-object "GstElement") + (c-name "gst_element_lost_state") + (return-type "none") +) + +(define-method lost_state_full + (of-object "GstElement") + (c-name "gst_element_lost_state_full") + (return-type "none") + (parameters + '("gboolean" "new_base_time") + ) +) + +(define-method get_factory + (of-object "GstElement") + (c-name "gst_element_get_factory") + (return-type "GstElementFactory*") +) + +(define-virtual send_event + (of-object "GstElement") + (return-type "gboolean") + (parameters + '("GstEvent*" "event") + ) +) + +(define-virtual get_query_types + (of-object "GstElement") + (return-type "const-GstQueryType*") +) + +(define-virtual query + (of-object "GstElement") + (return-type "gboolean") + (parameters + '("GstQuery*" "query") + ) +) + +(define-virtual get_state + (of-object "GstElement") + (return-type "GstStateChangeReturn") + (parameters + '("GstState*" "state") + '("GstState*" "pending") + '("GTimeVal*" "timeout") + ) +) + +(define-virtual change_state + (of-object "GstElement") + (return-type "GstStateChangeReturn") + (parameters + '("GstStateChange" "transition") + ) +) + +(define-virtual request_new_pad + (of-object "GstElement") + (return-type "GstPad*") + (parameters + '("GstPadTemplate*" "templ") + '("const-gchar*" "name") + ) +) + +(define-virtual release_pad + (of-object "GstElement") + (return-type "none") + (parameters + '("GstPad*" "pad") + ) +) + +(define-virtual provide_clock + (of-object "GstElement") + (return-type "GstClock*") +) + +(define-virtual set_clock + (of-object "GstElement") + (return-type "gboolean") + (parameters + '("GstClock*" "clock") + ) +) + +(define-virtual get_index + (of-object "GstElement") + (return-type "GstIndex*") +) + +(define-virtual set_index + (of-object "GstElement") + (return-type "none") + (parameters + '("GstIndex*" "index") + ) +) + +(define-virtual set_bus + (of-object "GstElement") + (return-type "none") + (parameters + '("GstBus*" "bus") + ) +) + +;; From ../gstreamer/gst/gstelementfactory.h + +(define-function element_factory_get_type + (c-name "gst_element_factory_get_type") + (return-type "GType") +) + +(define-function element_factory_find + (c-name "gst_element_factory_find") + (return-type "GstElementFactory*") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method get_element_type + (of-object "GstElementFactory") + (c-name "gst_element_factory_get_element_type") + (return-type "GType") +) + +(define-method get_longname + (of-object "GstElementFactory") + (c-name "gst_element_factory_get_longname") + (return-type "const-gchar*") +) + +(define-method get_klass + (of-object "GstElementFactory") + (c-name "gst_element_factory_get_klass") + (return-type "const-gchar*") +) + +(define-method get_description + (of-object "GstElementFactory") + (c-name "gst_element_factory_get_description") + (return-type "const-gchar*") +) + +(define-method get_author + (of-object "GstElementFactory") + (c-name "gst_element_factory_get_author") + (return-type "const-gchar*") +) + +(define-method get_documentation_uri + (of-object "GstElementFactory") + (c-name "gst_element_factory_get_documentation_uri") + (return-type "const-gchar*") +) + +(define-method get_icon_name + (of-object "GstElementFactory") + (c-name "gst_element_factory_get_icon_name") + (return-type "const-gchar*") +) + +(define-method get_num_pad_templates + (of-object "GstElementFactory") + (c-name "gst_element_factory_get_num_pad_templates") + (return-type "guint") +) + +(define-method get_static_pad_templates + (of-object "GstElementFactory") + (c-name "gst_element_factory_get_static_pad_templates") + (return-type "const-GList*") +) + +(define-method get_uri_type + (of-object "GstElementFactory") + (c-name "gst_element_factory_get_uri_type") + (return-type "GstURIType") +) + +(define-method get_uri_protocols + (of-object "GstElementFactory") + (c-name "gst_element_factory_get_uri_protocols") + (return-type "GStrv") +) + +(define-method has_interface + (of-object "GstElementFactory") + (c-name "gst_element_factory_has_interface") + (return-type "gboolean") + (parameters + '("const-gchar*" "interfacename") + ) +) + +(define-method create + (of-object "GstElementFactory") + (c-name "gst_element_factory_create") + (return-type "GstElement*") + (caller-owns-return #t) + (parameters + '("const-gchar*" "name" (null-ok) (default "NULL")) + ) +) + +(define-function element_factory_make + (c-name "gst_element_factory_make") + (return-type "GstElement*") + (caller-owns-return #t) + (parameters + '("const-gchar*" "factoryname") + '("const-gchar*" "name" (null-ok) (default "NULL")) + ) +) + +(define-function element_register + (c-name "gst_element_register") + (return-type "gboolean") + (parameters + '("GstPlugin*" "plugin") + '("const-gchar*" "name") + '("guint" "rank") + '("GType" "type") + ) +) +(define-method list_is_type + (of-object "GstElementFactory") + (c-name "gst_element_factory_list_is_type") + (return-type "gboolean") + (parameters + '("GstElementFactoryListType" "type") + ) +) + +(define-function element_factory_list_get_elements + (c-name "gst_element_factory_list_get_elements") + (return-type "GList*") + (parameters + '("GstElementFactoryListType" "type") + '("GstRank" "minrank") + ) +) + +(define-function element_factory_list_filter + (c-name "gst_element_factory_list_filter") + (return-type "GList*") + (parameters + '("GList*" "list") + '("const-GstCaps*" "caps") + '("GstPadDirection" "direction") + '("gboolean" "subsetonly") + ) +) + +;; From ../gstreamer/gst/gstenumtypes.h + +(define-function object_flags_get_type + (c-name "gst_object_flags_get_type") + (return-type "GType") +) + +(define-function bin_flags_get_type + (c-name "gst_bin_flags_get_type") + (return-type "GType") +) + +(define-function buffer_flag_get_type + (c-name "gst_buffer_flag_get_type") + (return-type "GType") +) + +(define-function gst_buffer_copy_flags_get_type + (c-name "gst_buffer_copy_flags_get_type") + (return-type "GType") +) + +(define-function bus_flags_get_type + (c-name "gst_bus_flags_get_type") + (return-type "GType") +) + +(define-function bus_sync_reply_get_type + (c-name "gst_bus_sync_reply_get_type") + (return-type "GType") +) + +(define-function clock_return_get_type + (c-name "gst_clock_return_get_type") + (return-type "GType") +) + +(define-function clock_entry_type_get_type + (c-name "gst_clock_entry_type_get_type") + (return-type "GType") +) + +(define-function clock_flags_get_type + (c-name "gst_clock_flags_get_type") + (return-type "GType") +) + +(define-function element_flags_get_type + (c-name "gst_element_flags_get_type") + (return-type "GType") +) + +(define-function core_error_get_type + (c-name "gst_core_error_get_type") + (return-type "GType") +) + +(define-function library_error_get_type + (c-name "gst_library_error_get_type") + (return-type "GType") +) + +(define-function resource_error_get_type + (c-name "gst_resource_error_get_type") + (return-type "GType") +) + +(define-function stream_error_get_type + (c-name "gst_stream_error_get_type") + (return-type "GType") +) + +(define-function gst_event_type_flags_get_type + (c-name "gst_event_type_flags_get_type") + (return-type "GType") +) + +(define-function event_type_get_type + (c-name "gst_event_type_get_type") + (return-type "GType") +) + +(define-function seek_type_get_type + (c-name "gst_seek_type_get_type") + (return-type "GType") +) + +(define-function seek_flags_get_type + (c-name "gst_seek_flags_get_type") + (return-type "GType") +) + +(define-function format_get_type + (c-name "gst_format_get_type") + (return-type "GType") +) + +(define-function index_certainty_get_type + (c-name "gst_index_certainty_get_type") + (return-type "GType") +) + +(define-function index_entry_type_get_type + (c-name "gst_index_entry_type_get_type") + (return-type "GType") +) + +(define-function index_lookup_method_get_type + (c-name "gst_index_lookup_method_get_type") + (return-type "GType") +) + +(define-function assoc_flags_get_type + (c-name "gst_assoc_flags_get_type") + (return-type "GType") +) + +(define-function index_resolver_method_get_type + (c-name "gst_index_resolver_method_get_type") + (return-type "GType") +) + +(define-function index_flags_get_type + (c-name "gst_index_flags_get_type") + (return-type "GType") +) + +(define-function debug_level_get_type + (c-name "gst_debug_level_get_type") + (return-type "GType") +) + +(define-function debug_color_flags_get_type + (c-name "gst_debug_color_flags_get_type") + (return-type "GType") +) + +(define-function iterator_result_get_type + (c-name "gst_iterator_result_get_type") + (return-type "GType") +) + +(define-function iterator_item_get_type + (c-name "gst_iterator_item_get_type") + (return-type "GType") +) + +(define-function message_type_get_type + (c-name "gst_message_type_get_type") + (return-type "GType") +) + +(define-function mini_object_flags_get_type + (c-name "gst_mini_object_flags_get_type") + (return-type "GType") +) + +(define-function pad_link_return_get_type + (c-name "gst_pad_link_return_get_type") + (return-type "GType") +) + +(define-function flow_return_get_type + (c-name "gst_flow_return_get_type") + (return-type "GType") +) + +(define-function activate_mode_get_type + (c-name "gst_activate_mode_get_type") + (return-type "GType") +) + +(define-function pad_direction_get_type + (c-name "gst_pad_direction_get_type") + (return-type "GType") +) + +(define-function pad_flags_get_type + (c-name "gst_pad_flags_get_type") + (return-type "GType") +) + +(define-function pad_presence_get_type + (c-name "gst_pad_presence_get_type") + (return-type "GType") +) + +(define-function pad_template_flags_get_type + (c-name "gst_pad_template_flags_get_type") + (return-type "GType") +) + +(define-function pipeline_flags_get_type + (c-name "gst_pipeline_flags_get_type") + (return-type "GType") +) + +(define-function plugin_error_get_type + (c-name "gst_plugin_error_get_type") + (return-type "GType") +) + +(define-function query_type_get_type + (c-name "gst_query_type_get_type") + (return-type "GType") +) + +(define-function tag_merge_mode_get_type + (c-name "gst_tag_merge_mode_get_type") + (return-type "GType") +) + +(define-function tag_flag_get_type + (c-name "gst_tag_flag_get_type") + (return-type "GType") +) + +(define-function task_state_get_type + (c-name "gst_task_state_get_type") + (return-type "GType") +) + +(define-function alloc_trace_flags_get_type + (c-name "gst_alloc_trace_flags_get_type") + (return-type "GType") +) + +(define-function type_find_probability_get_type + (c-name "gst_type_find_probability_get_type") + (return-type "GType") +) + +(define-function element_state_get_type + (c-name "gst_element_state_get_type") + (return-type "GType") +) + +(define-function element_state_return_get_type + (c-name "gst_element_state_return_get_type") + (return-type "GType") +) + +(define-function rank_get_type + (c-name "gst_rank_get_type") + (return-type "GType") +) + +(define-function uri_type_get_type + (c-name "gst_uri_type_get_type") + (return-type "GType") +) + +(define-function parse_error_get_type + (c-name "gst_parse_error_get_type") + (return-type "GType") +) + + + +;; From ../gstreamer/gst/gsterror.h + +(define-function g_error_get_type + (c-name "gst_g_error_get_type") + (return-type "GType") +) + +(define-function error_get_message + (c-name "gst_error_get_message") + (return-type "gchar*") + (parameters + '("GQuark" "domain") + '("gint" "code") + ) +) + +(define-function stream_error_quark + (c-name "gst_stream_error_quark") + (return-type "GQuark") +) + +(define-function core_error_quark + (c-name "gst_core_error_quark") + (return-type "GQuark") +) + +(define-function resource_error_quark + (c-name "gst_resource_error_quark") + (return-type "GQuark") +) + +(define-function library_error_quark + (c-name "gst_library_error_quark") + (return-type "GQuark") +) + +(define-function new + (c-name "g_error_new") + (is-constructor-of "GError") + (return-type "GError*") + (parameters + '("gchar*" "domain") + '("gint" "code") + '("gchar*" "message") + ) +) + +;; From ../gstreamer/gst/gstevent.h + +(define-method get_name + (of-object "GstEventType") + (c-name "gst_event_type_get_name") + (return-type "const-gchar*") +) + +(define-method to_quark + (of-object "GstEventType") + (c-name "gst_event_type_to_quark") + (return-type "GQuark") +) + +(define-method get_flags + (of-object "GstEventType") + (c-name "gst_event_type_get_flags") + (return-type "GstEventTypeFlags") +) + +(define-function event_get_type + (c-name "gst_event_get_type") + (return-type "GType") +) + +(define-function event_new_custom + (c-name "gst_event_new_custom") + (return-type "GstEvent*") + (caller-owns-return #t) + (parameters + '("GstEventType" "type") + '("GstStructure*" "structure") + ) +) + +(define-method get_structure + (of-object "GstEvent") + (c-name "gst_event_get_structure") + (return-type "const-GstStructure*") +) + +(define-method has_name + (of-object "GstEvent") + (c-name "gst_event_has_name") + (return-type "gboolean") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method get_seqnum + (of-object "GstEvent") + (c-name "gst_event_get_seqnum") + (return-type "guint32") +) + +(define-method set_seqnum + (of-object "GstEvent") + (c-name "gst_event_set_seqnum") + (return-type "none") + (parameters + '("guint32" "seqnum") + ) +) + +(define-function event_new_flush_start + (c-name "gst_event_new_flush_start") + (return-type "GstEvent*") + (caller-owns-return #t) +) + +(define-function event_new_flush_stop + (c-name "gst_event_new_flush_stop") + (return-type "GstEvent*") + (caller-owns-return #t) +) + +(define-function event_new_eos + (c-name "gst_event_new_eos") + (return-type "GstEvent*") + (caller-owns-return #t) +) + +(define-function event_new_new_segment + (c-name "gst_event_new_new_segment") + (return-type "GstEvent*") + (caller-owns-return #t) + (parameters + '("gboolean" "update") + '("gdouble" "rate") + '("GstFormat" "format") + '("gint64" "start_value") + '("gint64" "stop_value") + '("gint64" "stream_time") + ) +) + +(define-function event_new_new_segment_full + (c-name "gst_event_new_new_segment_full") + (return-type "GstEvent*") + (caller-owns-return #t) + (parameters + '("gboolean" "update") + '("gdouble" "rate") + '("gdouble" "applied_rate") + '("GstFormat" "format") + '("gint64" "start") + '("gint64" "stop") + '("gint64" "position") + ) +) + +(define-method parse_new_segment + (of-object "GstEvent") + (c-name "gst_event_parse_new_segment") + (return-type "none") + (parameters + '("gboolean*" "update") + '("gdouble*" "rate") + '("GstFormat*" "format") + '("gint64*" "start_value") + '("gint64*" "end_value") + '("gint64*" "stream_time") + ) +) + +(define-function event_new_tag + (c-name "gst_event_new_tag") + (return-type "GstEvent*") + (caller-owns-return #t) + (parameters + '("GstTagList*" "taglist") + ) +) + +(define-method parse_new_segment_full + (of-object "GstEvent") + (c-name "gst_event_parse_new_segment_full") + (return-type "none") + (parameters + '("gboolean*" "update") + '("gdouble*" "rate") + '("gdouble*" "applied_rate") + '("GstFormat*" "format") + '("gint64*" "start") + '("gint64*" "stop") + '("gint64*" "position") + ) +) + +(define-method parse_tag + (of-object "GstEvent") + (c-name "gst_event_parse_tag") + (return-type "none") + (parameters + '("GstTagList**" "taglist") + ) +) + +(define-function event_new_buffer_size + (c-name "gst_event_new_buffer_size") + (return-type "GstEvent*") + (caller-owns-return #t) + (parameters + '("GstFormat" "format") + '("gint64" "minsize") + '("gint64" "maxsize") + '("gboolean" "async") + ) +) + +(define-method parse_buffer_size + (of-object "GstEvent") + (c-name "gst_event_parse_buffer_size") + (return-type "none") + (parameters + '("GstFormat*" "format") + '("gint64*" "minsize") + '("gint64*" "maxsize") + '("gboolean*" "async") + ) +) + +(define-function event_new_qos + (c-name "gst_event_new_qos") + (return-type "GstEvent*") + (caller-owns-return #t) + (parameters + '("gdouble" "proportion") + '("GstClockTimeDiff" "diff") + '("GstClockTime" "timestamp") + ) +) + +(define-method parse_qos + (of-object "GstEvent") + (c-name "gst_event_parse_qos") + (return-type "none") + (parameters + '("gdouble*" "proportion") + '("GstClockTimeDiff*" "diff") + '("GstClockTime*" "timestamp") + ) +) + +(define-function event_new_seek + (c-name "gst_event_new_seek") + (return-type "GstEvent*") + (caller-owns-return #t) + (parameters + '("gdouble" "rate") + '("GstFormat" "format") + '("GstSeekFlags" "flags") + '("GstSeekType" "start_type") + '("gint64" "start") + '("GstSeekType" "stop_type") + '("gint64" "stop") + ) +) + +(define-method parse_seek + (of-object "GstEvent") + (c-name "gst_event_parse_seek") + (return-type "none") + (parameters + '("gdouble*" "rate") + '("GstFormat*" "format") + '("GstSeekFlags*" "flags") + '("GstSeekType*" "start_type") + '("gint64*" "start") + '("GstSeekType*" "stop_type") + '("gint64*" "stop") + ) +) + +(define-function event_new_navigation + (c-name "gst_event_new_navigation") + (return-type "GstEvent*") + (caller-owns-return #t) + (parameters + '("GstStructure*" "structure") + ) +) + + +(define-function event_new_latency + (c-name "gst_event_new_latency") + (return-type "GstEvent*") + (caller-owns-return #t) + (parameters + '("GstClockTime" "latency") + ) +) + +(define-method parse_latency + (of-object "GstEvent") + (c-name "gst_event_parse_latency") + (return-type "none") + (parameters + '("GstClockTime*" "latency") + ) +) + +(define-function event_new_step + (c-name "gst_event_new_step") + (return-type "GstEvent*") + (caller-owns-return #t) + (parameters + '("GstFormat" "format") + '("guint64" "amount") + '("gdouble" "rate") + '("gboolean" "flush") + '("gboolean" "intermediate") + ) +) + +(define-method parse_step + (of-object "GstEvent") + (c-name "gst_event_parse_step") + (return-type "none") + (parameters + '("GstFormat*" "format") + '("guint64*" "amount") + '("gdouble*" "rate") + '("gboolean*" "flush") + '("gboolean*" "intermediate") + ) +) + +;; From ../gstreamer/gst/gstfilter.h + +(define-function filter_run + (c-name "gst_filter_run") + (return-type "GList*") + (parameters + '("const-GList*" "list") + '("GstFilterFunc" "func") + '("gboolean" "first") + '("gpointer" "user_data") + ) +) + + + +;; From ../gstreamer/gst/gstformat.h + +(define-method get_name + (of-object "GstFormat") + (c-name "gst_format_get_name") + (return-type "const-gchar*") +) + +(define-method to_quark + (of-object "GstFormat") + (c-name "gst_format_to_quark") + (return-type "GQuark") +) + +(define-function format_register + (c-name "gst_format_register") + (return-type "GstFormat") + (parameters + '("const-gchar*" "nick") + '("const-gchar*" "description") + ) +) + +(define-function format_get_by_nick + (c-name "gst_format_get_by_nick") + (return-type "GstFormat") + (parameters + '("const-gchar*" "nick") + ) +) + +(define-method s_contains + (of-object "GstFormat") + (c-name "gst_formats_contains") + (return-type "gboolean") + (parameters + '("GstFormat" "format") + ) +) + +(define-method get_details + (of-object "GstFormat") + (c-name "gst_format_get_details") + (return-type "const-GstFormatDefinition*") +) + +(define-function format_iterate_definitions + (c-name "gst_format_iterate_definitions") + (return-type "GstIterator*") +) + + + +;; From ../gstreamer/gst/gstghostpad.h + +(define-function ghost_pad_get_type + (c-name "gst_ghost_pad_get_type") + (return-type "GType") +) + +(define-function ghost_pad_new + (c-name "gst_ghost_pad_new") + (is-constructor-of "GstGhostPad") + (return-type "GstPad*") + (parameters + '("const-gchar*" "name") + '("GstPad*" "target") + ) +) + +(define-function ghost_pad_new_notarget + (c-name "gst_ghost_pad_new_no_target") + (return-type "GstPad*") + (caller-owns-return #t) + (parameters + '("const-gchar*" "name") + '("GstPadDirection" "dir") + ) +) + +(define-function ghost_pad_new_from_template + (c-name "gst_ghost_pad_new_from_template") + (return-type "GstPad*") + (parameters + '("const-gchar*" "name") + '("GstPad*" "target") + '("GstPadTemplate*" "templ") + ) +) + +(define-function ghost_pad_new_no_target_from_template + (c-name "gst_ghost_pad_new_no_target_from_template") + (return-type "GstPad*") + (parameters + '("const-gchar*" "name") + '("GstPadTemplate*" "templ") + ) +) + +(define-method get_target + (of-object "GstGhostPad") + (c-name "gst_ghost_pad_get_target") + (caller-owns-return #t) + (return-type "GstPad*") +) + +(define-method set_target + (of-object "GstGhostPad") + (c-name "gst_ghost_pad_set_target") + (return-type "gboolean") + (parameters + '("GstPad*" "newtarget" (null-ok)) + ) +) + + + +;; From ../gstreamer/gst/gstindex.h + +(define-function index_get_type + (c-name "gst_index_get_type") + (return-type "GType") +) + +(define-function index_new + (c-name "gst_index_new") + (is-constructor-of "GstIndex") + (return-type "GstIndex*") +) + +(define-method commit + (of-object "GstIndex") + (c-name "gst_index_commit") + (return-type "none") + (parameters + '("gint" "id") + ) +) + +(define-method get_group + (of-object "GstIndex") + (c-name "gst_index_get_group") + (return-type "gint") +) + +(define-method new_group + (of-object "GstIndex") + (c-name "gst_index_new_group") + (return-type "gint") +) + +(define-method set_group + (of-object "GstIndex") + (c-name "gst_index_set_group") + (return-type "gboolean") + (parameters + '("gint" "groupnum") + ) +) + +(define-method set_certainty + (of-object "GstIndex") + (c-name "gst_index_set_certainty") + (return-type "none") + (parameters + '("GstIndexCertainty" "certainty") + ) +) + +(define-method get_certainty + (of-object "GstIndex") + (c-name "gst_index_get_certainty") + (return-type "GstIndexCertainty") +) + +(define-method set_filter + (of-object "GstIndex") + (c-name "gst_index_set_filter") + (return-type "none") + (parameters + '("GstIndexFilter" "filter") + '("gpointer" "user_data") + ) +) + +(define-method set_filter_full + (of-object "GstIndex") + (c-name "gst_index_set_filter_full") + (return-type "none") + (parameters + '("GstIndexFilter" "filter") + '("gpointer" "user_data") + '("GDestroyNotify" "user_data_destroy") + ) +) + +(define-method set_resolver + (of-object "GstIndex") + (c-name "gst_index_set_resolver") + (return-type "none") + (parameters + '("GstIndexResolver" "resolver") + '("gpointer" "user_data") + ) +) + +(define-method set_resolver_full + (of-object "GstIndex") + (c-name "gst_index_set_resolver_full") + (return-type "none") + (parameters + '("GstIndexResolver" "resolver") + '("gpointer" "user_data") + '("GDestroyNotify" "user_data_destroy") + ) +) + +(define-method get_writer_id + (of-object "GstIndex") + (c-name "gst_index_get_writer_id") + (return-type "gboolean") + (parameters + '("GstObject*" "writer") + '("gint*" "id") + ) +) + +(define-method add_format + (of-object "GstIndex") + (c-name "gst_index_add_format") + (return-type "GstIndexEntry*") + (parameters + '("gint" "id") + '("GstFormat" "format") + ) +) + +(define-method add_associationv + (of-object "GstIndex") + (c-name "gst_index_add_associationv") + (return-type "GstIndexEntry*") + (parameters + '("gint" "id") + '("GstAssocFlags" "flags") + '("gint" "n") + '("const-GstIndexAssociation*" "list") + ) +) + +(define-method add_association + (of-object "GstIndex") + (c-name "gst_index_add_association") + (return-type "GstIndexEntry*") + (parameters + '("gint" "id") + '("GstAssocFlags" "flags") + '("GstFormat" "format") + '("gint64" "value") + ) + (varargs #t) +) + +(define-method add_object + (of-object "GstIndex") + (c-name "gst_index_add_object") + (return-type "GstIndexEntry*") + (parameters + '("gint" "id") + '("gchar*" "key") + '("GType" "type") + '("gpointer" "object") + ) +) + +(define-method add_id + (of-object "GstIndex") + (c-name "gst_index_add_id") + (return-type "GstIndexEntry*") + (parameters + '("gint" "id") + '("gchar*" "description") + ) +) + +(define-method get_assoc_entry + (of-object "GstIndex") + (c-name "gst_index_get_assoc_entry") + (return-type "GstIndexEntry*") + (parameters + '("gint" "id") + '("GstIndexLookupMethod" "method") + '("GstAssocFlags" "flags") + '("GstFormat" "format") + '("gint64" "value") + ) +) + +(define-method get_assoc_entry_full + (of-object "GstIndex") + (c-name "gst_index_get_assoc_entry_full") + (return-type "GstIndexEntry*") + (parameters + '("gint" "id") + '("GstIndexLookupMethod" "method") + '("GstAssocFlags" "flags") + '("GstFormat" "format") + '("gint64" "value") + '("GCompareDataFunc" "func") + '("gpointer" "user_data") + ) +) + +(define-virtual add_entry + (of-object "GstIndex") + (return-type "none") + (parameters + '("GstIndexEntry*" "entry") + ) +) + +(define-virtual get_assoc_entry + (of-object "GstIndex") + (return-type "GstIndexEntry*") + (parameters + '("gint" "id") + '("GstIndexLookupMethod" "method") + '("GstAssocFlags" "flags") + '("GstFormat" "format") + '("gint64" "value") + '("GCompareDataFunc" "func") + '("gpointer" "user_data") + ) +) + + +(define-function index_entry_get_type + (c-name "gst_index_entry_get_type") + (return-type "GType") +) + +(define-method copy + (of-object "GstIndexEntry") + (c-name "gst_index_entry_copy") + (caller-owns-return #t) + (return-type "GstIndexEntry*") +) + +(define-method free + (of-object "GstIndexEntry") + (c-name "gst_index_entry_free") + (return-type "none") +) + +(define-method assoc_map + (of-object "GstIndexEntry") + (c-name "gst_index_entry_assoc_map") + (return-type "gboolean") + (parameters + '("GstFormat" "format") + '("gint64*" "value") + ) +) + +(define-method ASSOC_FORMAT + (of-object "GstIndexEntry") + (c-name "GST_INDEX_ASSOC_FORMAT") + (return-type "GstFormat") + (parameters + '("guint" "i") + ) +) + +(define-method ASSOC_VALUE + (of-object "GstIndexEntry") + (c-name "GST_INDEX_ASSOC_VALUE") + (return-type "gint64") + (parameters + '("guint" "i") + ) +) + +(define-function index_factory_get_type + (c-name "gst_index_factory_get_type") + (return-type "GType") +) + +(define-function index_factory_new + (c-name "gst_index_factory_new") + (is-constructor-of "GstIndexFactory") + (return-type "GstIndexFactory*") + (properties + '("name" (argname "name")) + '("longdesc" (argname "longdesc")) + '("type" (argname "type")) + ) +) + +(define-method destroy + (of-object "GstIndexFactory") + (c-name "gst_index_factory_destroy") + (return-type "none") +) + +(define-function index_factory_find + (c-name "gst_index_factory_find") + (return-type "GstIndexFactory*") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method create + (of-object "GstIndexFactory") + (c-name "gst_index_factory_create") + (return-type "GstIndex*") + (caller-owns-return #t) +) + +(define-function index_factory_make + (c-name "gst_index_factory_make") + (return-type "GstIndex*") + (caller-owns-return #t) + (parameters + '("const-gchar*" "name") + ) +) + + + +;; From ../gstreamer/gst/gstinfo.h + +(define-function debug_log + (c-name "gst_debug_log") + (return-type "none") + (parameters + '("GstDebugCategory*" "category") + '("GstDebugLevel" "level") + '("const-gchar*" "file") + '("const-gchar*" "function") + '("gint" "line") + '("GObject*" "object") + '("const-gchar*" "format") + ) + (varargs #t) +) + +(define-function debug_log_valist + (c-name "gst_debug_log_valist") + (return-type "none") + (parameters + '("GstDebugCategory*" "category") + '("GstDebugLevel" "level") + '("const-gchar*" "file") + '("const-gchar*" "function") + '("gint" "line") + '("GObject*" "object") + '("const-gchar*" "format") + '("va_list" "args") + ) +) + +(define-method get + (of-object "GstDebugMessage") + (c-name "gst_debug_message_get") + (return-type "const-gchar*") +) + +(define-function debug_log_default + (c-name "gst_debug_log_default") + (return-type "none") + (parameters + '("GstDebugCategory*" "category") + '("GstDebugLevel" "level") + '("const-gchar*" "file") + '("const-gchar*" "function") + '("gint" "line") + '("GObject*" "object") + '("GstDebugMessage*" "message") + '("gpointer" "unused") + ) +) + +(define-method get_name + (of-object "GstDebugLevel") + (c-name "gst_debug_level_get_name") + (return-type "const-gchar*") +) + +(define-function debug_add_log_function + (c-name "gst_debug_add_log_function") + (return-type "none") + (parameters + '("GstLogFunction" "func") + '("gpointer" "data") + ) +) + +(define-function debug_remove_log_function + (c-name "gst_debug_remove_log_function") + (return-type "guint") + (parameters + '("GstLogFunction" "func") + ) +) + +(define-function debug_remove_log_function_by_data + (c-name "gst_debug_remove_log_function_by_data") + (return-type "guint") + (parameters + '("gpointer" "data") + ) +) + +(define-function debug_set_active + (c-name "gst_debug_set_active") + (return-type "none") + (parameters + '("gboolean" "active") + ) +) + +(define-function debug_is_active + (c-name "gst_debug_is_active") + (return-type "gboolean") +) + +(define-function debug_set_colored + (c-name "gst_debug_set_colored") + (return-type "none") + (parameters + '("gboolean" "colored") + ) +) + +(define-function debug_is_colored + (c-name "gst_debug_is_colored") + (return-type "gboolean") +) + +(define-function debug_set_default_threshold + (c-name "gst_debug_set_default_threshold") + (return-type "none") + (parameters + '("GstDebugLevel" "level") + ) +) + +(define-function debug_get_default_threshold + (c-name "gst_debug_get_default_threshold") + (return-type "GstDebugLevel") +) + +(define-function debug_set_threshold_for_name + (c-name "gst_debug_set_threshold_for_name") + (return-type "none") + (parameters + '("const-gchar*" "name") + '("GstDebugLevel" "level") + ) +) + +(define-function debug_unset_threshold_for_name + (c-name "gst_debug_unset_threshold_for_name") + (return-type "none") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method free + (of-object "GstDebugCategory") + (c-name "gst_debug_category_free") + (return-type "none") +) + +(define-method set_threshold + (of-object "GstDebugCategory") + (c-name "gst_debug_category_set_threshold") + (return-type "none") + (parameters + '("GstDebugLevel" "level") + ) +) + +(define-method reset_threshold + (of-object "GstDebugCategory") + (c-name "gst_debug_category_reset_threshold") + (return-type "none") +) + +(define-method get_threshold + (of-object "GstDebugCategory") + (c-name "gst_debug_category_get_threshold") + (return-type "GstDebugLevel") +) + +(define-method get_name + (of-object "GstDebugCategory") + (c-name "gst_debug_category_get_name") + (return-type "const-gchar*") +) + +(define-method get_color + (of-object "GstDebugCategory") + (c-name "gst_debug_category_get_color") + (return-type "guint") +) + +(define-method get_description + (of-object "GstDebugCategory") + (c-name "gst_debug_category_get_description") + (return-type "const-gchar*") +) + +(define-function debug_get_all_categories + (c-name "gst_debug_get_all_categories") + (return-type "GSList*") +) + +(define-function debug_construct_term_color + (c-name "gst_debug_construct_term_color") + (return-type "gchar*") + (parameters + '("guint" "colorinfo") + ) +) + +(define-function debug_construct_win_color + (c-name "gst_debug_construct_win_color") + (return-type "gint") + (parameters + '("guint" "colorinfo") + ) +) + +(define-function debug_remove_log_function + (c-name "gst_debug_remove_log_function") + (return-type "guint") + (parameters + '("GstLogFunction" "func") + ) +) + +(define-function debug_remove_log_function_by_data + (c-name "gst_debug_remove_log_function_by_data") + (return-type "guint") + (parameters + '("gpointer" "data") + ) +) + +;; From ../gstreamer/gst/gstinterface.h + +(define-function implements_interface_get_type + (c-name "gst_implements_interface_get_type") + (return-type "GType") +) + +(define-method implements_interface + (of-object "GstElement") + (c-name "gst_element_implements_interface") + (return-type "gboolean") + (parameters + '("GType" "iface_type") + ) +) + +(define-function implements_interface_cast + (c-name "gst_implements_interface_cast") + (return-type "gpointer") + (parameters + '("gpointer" "from") + '("GType" "type") + ) +) + +(define-function implements_interface_check + (c-name "gst_implements_interface_check") + (return-type "gboolean") + (parameters + '("gpointer" "from") + '("GType" "type") + ) +) + +(define-virtual supported + (of-object "GstImplementsInterface") + (return-type "gboolean") + (parameters + '("GType" "iface_type") + ) +) + +;; From ../gstreamer/gst/gstiterator.h + +(define-function iterator_new + (c-name "gst_iterator_new") + (is-constructor-of "GstIterator") + (return-type "GstIterator*") + (parameters + '("guint" "size") + '("GType" "type") + '("GMutex*" "lock") + '("guint32*" "master_cookie") + '("GstIteratorNextFunction" "next") + '("GstIteratorItemFunction" "item") + '("GstIteratorResyncFunction" "resync") + '("GstIteratorFreeFunction" "free") + ) +) + +(define-function iterator_new_list + (c-name "gst_iterator_new_list") + (return-type "GstIterator*") + (parameters + '("GType" "type") + '("GMutex*" "lock") + '("guint32*" "master_cookie") + '("GList**" "list") + '("gpointer" "owner") + '("GstIteratorItemFunction" "item") + '("GstIteratorDisposeFunction" "free") + ) +) + +(define-method next + (of-object "GstIterator") + (c-name "gst_iterator_next") + (return-type "GstIteratorResult") + (parameters + '("gpointer*" "result") + ) +) + +(define-method resync + (of-object "GstIterator") + (c-name "gst_iterator_resync") + (return-type "none") +) + +(define-method free + (of-object "GstIterator") + (c-name "gst_iterator_free") + (return-type "none") +) + +(define-method push + (of-object "GstIterator") + (c-name "gst_iterator_push") + (return-type "none") + (parameters + '("GstIterator*" "other") + ) +) + +(define-method filter + (of-object "GstIterator") + (c-name "gst_iterator_filter") + (return-type "GstIterator*") + (parameters + '("GCompareFunc" "func") + '("gpointer" "user_data") + ) +) + +(define-method fold + (of-object "GstIterator") + (c-name "gst_iterator_fold") + (return-type "GstIteratorResult") + (parameters + '("GstIteratorFoldFunction" "func") + '("GValue*" "ret") + '("gpointer" "user_data") + ) +) + +(define-method foreach + (of-object "GstIterator") + (c-name "gst_iterator_foreach") + (return-type "GstIteratorResult") + (parameters + '("GFunc" "func") + '("gpointer" "user_data") + ) +) + +(define-method find_custom + (of-object "GstIterator") + (c-name "gst_iterator_find_custom") + (return-type "gpointer") + (parameters + '("GCompareFunc" "func") + '("gpointer" "user_data") + ) +) + +;; From ../gstreamer/gst/gstmessage.h + +(define-function message_get_type + (c-name "gst_message_get_type") + (return-type "GType") +) + +(define-method get_name + (of-object "GstMessageType") + (c-name "gst_message_type_get_name") + (return-type "const-gchar*") +) + +(define-method to_quark + (of-object "GstMessageType") + (c-name "gst_message_type_to_quark") + (return-type "GQuark") +) + +(define-method set_seqnum + (of-object "GstMessage") + (c-name "gst_message_set_seqnum") + (return-type "none") + (parameters + '("guint32" "seqnum") + ) +) + +(define-function message_new_eos + (c-name "gst_message_new_eos") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + ) +) + +(define-function message_new_error + (c-name "gst_message_new_error") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GError*" "error") + '("gchar*" "debug") + ) +) + +(define-function message_new_warning + (c-name "gst_message_new_warning") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GError*" "error") + '("gchar*" "debug") + ) +) + +(define-function message_new_info + (c-name "gst_message_new_info") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GError*" "error") + '("gchar*" "debug") + ) +) + +(define-function message_new_tag + (c-name "gst_message_new_tag") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GstTagList*" "tag_list" (keep-refcount)) + ) +) + +(define-function message_new_buffering + (c-name "gst_message_new_buffering") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("gint" "percent") + ) +) + +(define-function message_new_state_changed + (c-name "gst_message_new_state_changed") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GstState" "old_state") + '("GstState" "new_state") + '("GstState" "pending_state") + ) +) + +(define-function message_new_state_dirty + (c-name "gst_message_new_state_dirty") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + ) +) + +(define-function message_new_step_done + (c-name "gst_message_new_step_done") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GstFormat" "format") + '("guint64" "amount") + '("gdouble" "rate") + '("gboolean" "flush") + '("gboolean" "intermediate") + '("guint64" "duration") + '("gboolean" "eos") + ) +) + +(define-method parse_step_done + (of-object "GstMessage") + (c-name "gst_message_parse_step_done") + (return-type "none") + (parameters + '("GstFormat*" "format") + '("guint64*" "amount") + '("gdouble*" "rate") + '("gboolean*" "flush") + '("gboolean*" "intermediate") + '("guint64*" "duration") + '("gboolean*" "eos") + ) +) + +(define-function message_new_clock_provide + (c-name "gst_message_new_clock_provide") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GstClock*" "clock") + '("gboolean" "ready") + ) +) + +(define-function message_new_clock_lost + (c-name "gst_message_new_clock_lost") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GstClock*" "clock") + ) +) + +(define-function message_new_new_clock + (c-name "gst_message_new_new_clock") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GstClock*" "clock") + ) +) + +(define-function message_new_segment_start + (c-name "gst_message_new_segment_start") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GstFormat" "format") + '("gint64" "position") + ) +) + +(define-function message_new_segment_done + (c-name "gst_message_new_segment_done") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GstFormat" "format") + '("gint64" "position") + ) +) + +(define-function message_new_application + (c-name "gst_message_new_application") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GstStructure*" "structure" (keep-refcount)) + ) +) + +(define-function message_new_element + (c-name "gst_message_new_element") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GstStructure*" "structure" (keep-refcount)) + ) +) + +(define-function message_new_duration + (c-name "gst_message_new_duration") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GstFormat" "format") + '("gint64" "duration") + ) +) + +(define-function message_new_async_start + (c-name "gst_message_new_async_start") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("gboolean" "new_base_time") + ) +) + +(define-function message_new_async_done + (c-name "gst_message_new_async_done") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + ) +) + +(define-function message_new_latency + (c-name "gst_message_new_latency") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + ) +) + +(define-function message_new_structure_change + (c-name "gst_message_new_structure_change") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GstStructureChangeType" "type") + '("GstElement*" "owner") + '("gboolean" "busy") + ) +) + +(define-method parse_structure_change + (of-object "GstMessage") + (c-name "gst_message_parse_structure_change") + (return-type "none") + (parameters + '("GstStructureChangeType*" "type") + '("GstElement**" "owner") + '("gboolean*" "busy") + ) +) + +(define-function message_new_stream_status + (c-name "gst_message_new_stream_status") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GstStreamStatusType" "type") + '("GstElement*" "owner") + ) +) + +(define-method parse_stream_status + (of-object "GstMessage") + (c-name "gst_message_parse_stream_status") + (return-type "none") + (parameters + '("GstStreamStatusType*" "type") + '("GstElement**" "owner") + ) +) + +(define-method set_stream_status_object + (of-object "GstMessage") + (c-name "gst_message_set_stream_status_object") + (return-type "none") + (parameters + '("const-GValue*" "object") + ) +) + +(define-method get_stream_status_object + (of-object "GstMessage") + (c-name "gst_message_get_stream_status_object") + (return-type "const-GValue*") +) + +(define-function message_new_request_state + (c-name "gst_message_new_request_state") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GstState" "state") + ) +) + +(define-method parse_request_state + (of-object "GstMessage") + (c-name "gst_message_parse_request_state") + (return-type "none") + (parameters + '("GstState*" "state") + ) +) + +(define-function message_new_step_start + (c-name "gst_message_new_step_start") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("gboolean" "active") + '("GstFormat" "format") + '("guint64" "amount") + '("gdouble" "rate") + '("gboolean" "flush") + '("gboolean" "intermediate") + ) +) + +(define-method parse_step_start + (of-object "GstMessage") + (c-name "gst_message_parse_step_start") + (return-type "none") + (parameters + '("gboolean*" "active") + '("GstFormat*" "format") + '("guint64*" "amount") + '("gdouble*" "rate") + '("gboolean*" "flush") + '("gboolean*" "intermediate") + ) +) + +(define-function message_new_qos + (c-name "gst_message_new_qos") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("gboolean" "live") + '("guint64" "running_time") + '("guint64" "stream_time") + '("guint64" "timestamp") + '("guint64" "duration") + ) +) + +(define-method set_qos_values + (of-object "GstMessage") + (c-name "gst_message_set_qos_values") + (return-type "none") + (parameters + '("gint64" "jitter") + '("gdouble" "proportion") + '("gint" "quality") + ) +) + +(define-method set_qos_stats + (of-object "GstMessage") + (c-name "gst_message_set_qos_stats") + (return-type "none") + (parameters + '("GstFormat" "format") + '("guint64" "processed") + '("guint64" "dropped") + ) +) + +(define-method parse_qos + (of-object "GstMessage") + (c-name "gst_message_parse_qos") + (return-type "none") + (parameters + '("gboolean*" "live") + '("guint64*" "running_time") + '("guint64*" "stream_time") + '("guint64*" "timestamp") + '("guint64*" "duration") + ) +) + +(define-method parse_qos_values + (of-object "GstMessage") + (c-name "gst_message_parse_qos_values") + (return-type "none") + (parameters + '("gint64*" "jitter") + '("gdouble*" "proportion") + '("gint*" "quality") + ) +) + +(define-method parse_qos_stats + (of-object "GstMessage") + (c-name "gst_message_parse_qos_stats") + (return-type "none") + (parameters + '("GstFormat*" "format") + '("guint64*" "processed") + '("guint64*" "dropped") + ) +) + +(define-function message_new_custom + (c-name "gst_message_new_custom") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstMessageType" "type") + '("GstObject*" "src") + '("GstStructure*" "structure" (keep-refcount)) + ) +) + +(define-method parse_error + (of-object "GstMessage") + (c-name "gst_message_parse_error") + (return-type "none") + (parameters + '("GError**" "gerror") + '("gchar**" "debug") + ) +) + +(define-method parse_warning + (of-object "GstMessage") + (c-name "gst_message_parse_warning") + (return-type "none") + (parameters + '("GError**" "gerror") + '("gchar**" "debug") + ) +) + +(define-method parse_info + (of-object "GstMessage") + (c-name "gst_message_parse_info") + (return-type "none") + (parameters + '("GError**" "gerror") + '("gchar**" "debug") + ) +) + +(define-function message_new_tag_full + (c-name "gst_message_new_tag_full") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GstPad*" "pad") + '("GstTagList*" "tag_list" (keep-refcount)) + ) +) + +(define-method parse_tag + (of-object "GstMessage") + (c-name "gst_message_parse_tag") + (return-type "none") + (parameters + '("GstTagList**" "tag_list") + ) +) + +(define-method parse_tag_full + (of-object "GstMessage") + (c-name "gst_message_parse_tag_full") + (return-type "none") + (parameters + '("GstPad**" "pad") + '("GstTagList**" "tag_list") + ) +) + +(define-method parse_buffering + (of-object "GstMessage") + (c-name "gst_message_parse_buffering") + (return-type "none") + (parameters + '("gint*" "percent") + ) +) + +(define-method set_buffering_stats + (of-object "GstMessage") + (c-name "gst_message_set_buffering_stats") + (return-type "none") + (parameters + '("GstBufferingMode" "mode") + '("gint" "avg_in") + '("gint" "avg_out") + '("gint64" "buffering_left") + ) +) + +(define-method parse_buffering_stats + (of-object "GstMessage") + (c-name "gst_message_parse_buffering_stats") + (return-type "none") + (parameters + '("GstBufferingMode*" "mode") + '("gint*" "avg_in") + '("gint*" "avg_out") + '("gint64*" "buffering_left") + ) +) + +(define-method parse_state_changed + (of-object "GstMessage") + (c-name "gst_message_parse_state_changed") + (return-type "none") + (parameters + '("GstState*" "old_state") + '("GstState*" "new_state") + '("GstState*" "pending") + ) +) + +(define-method parse_clock_provide + (of-object "GstMessage") + (c-name "gst_message_parse_clock_provide") + (return-type "none") + (parameters + '("GstClock**" "clock") + '("gboolean*" "ready") + ) +) + +(define-method parse_clock_lost + (of-object "GstMessage") + (c-name "gst_message_parse_clock_lost") + (return-type "none") + (parameters + '("GstClock**" "clock") + ) +) + +(define-method parse_new_clock + (of-object "GstMessage") + (c-name "gst_message_parse_new_clock") + (return-type "none") + (parameters + '("GstClock**" "clock") + ) +) + +(define-method parse_segment_start + (of-object "GstMessage") + (c-name "gst_message_parse_segment_start") + (return-type "none") + (parameters + '("GstFormat*" "format") + '("gint64*" "position") + ) +) + +(define-method parse_segment_done + (of-object "GstMessage") + (c-name "gst_message_parse_segment_done") + (return-type "none") + (parameters + '("GstFormat*" "format") + '("gint64*" "position") + ) +) + +(define-method parse_duration + (of-object "GstMessage") + (c-name "gst_message_parse_duration") + (return-type "none") + (parameters + '("GstFormat*" "format") + '("gint64*" "duration") + ) +) + +(define-method parse_async_start + (of-object "GstMessage") + (c-name "gst_message_parse_async_start") + (return-type "none") + (parameters + '("gboolean*" "new_base_time") + ) +) + +(define-method get_structure + (of-object "GstMessage*") + (c-name "gst_message_get_structure") + (return-type "const-GstStructure*") +) + + + +;; From ../gstreamer/gst/gstminiobject.h + +(define-function mini_object_get_type + (c-name "gst_mini_object_get_type") + (return-type "GType") +) + +(define-function mini_object_new + (c-name "gst_mini_object_new") + (is-constructor-of "GstMiniObject") + (return-type "GstMiniObject*") + (parameters + '("GType" "type") + ) +) + +(define-method copy + (of-object "GstMiniObject") + (c-name "gst_mini_object_copy") + (return-type "GstMiniObject*") + (caller-owns-return #t) +) + +(define-method is_writable + (of-object "GstMiniObject") + (c-name "gst_mini_object_is_writable") + (return-type "gboolean") +) + +(define-method make_writable + (of-object "GstMiniObject") + (c-name "gst_mini_object_make_writable") + (return-type "GstMiniObject*") + (caller-owns-return #t) +) + +(define-method ref + (of-object "GstMiniObject") + (c-name "gst_mini_object_ref") + (return-type "GstMiniObject*") +) + +(define-method unref + (of-object "GstMiniObject") + (c-name "gst_mini_object_unref") + (return-type "none") +) + +(define-function mini_object_replace + (c-name "gst_mini_object_replace") + (return-type "none") + (parameters + '("GstMiniObject**" "olddata") + '("GstMiniObject*" "newdata") + ) +) + +(define-function param_spec_mini_object + (c-name "gst_param_spec_mini_object") + (return-type "GParamSpec*") + (parameters + '("const-char*" "name") + '("const-char*" "nick") + '("const-char*" "blurb") + '("GType" "object_type") + '("GParamFlags" "flags") + ) +) + +(define-function gst_param_spec_fraction + (c-name "gst_param_spec_fraction") + (return-type "GParamSpec*") + (parameters + '("const-gchar*" "name") + '("const-gchar*" "nick") + '("const-gchar*" "blurb") + '("gint" "min_num") + '("gint" "min_denom") + '("gint" "max_num") + '("gint" "max_denom") + '("gint" "default_num") + '("gint" "default_denom") + '("GParamFlags" "flags") + ) +) + + +(define-function value_set_mini_object + (c-name "gst_value_set_mini_object") + (return-type "none") + (parameters + '("GValue*" "value") + '("GstMiniObject*" "mini_object") + ) +) + +(define-function value_take_mini_object + (c-name "gst_value_take_mini_object") + (return-type "none") + (parameters + '("GValue*" "value") + '("GstMiniObject*" "mini_object") + ) +) + +(define-function value_get_mini_object + (c-name "gst_value_get_mini_object") + (return-type "GstMiniObject*") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function gst_value_dup_mini_object + (c-name "gst_value_dup_mini_object") + (return-type "GstMiniObject*") + (parameters + '("const-GValue*" "value") + ) +) +;; From ../gstreamer/gst/gstobject.h + +(define-function object_get_type + (c-name "gst_object_get_type") + (return-type "GType") +) + +(define-method set_name + (of-object "GstObject") + (c-name "gst_object_set_name") + (return-type "gboolean") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method get_name + (of-object "GstObject") + (c-name "gst_object_get_name") + (return-type "gchar*") +) + +(define-method set_name_prefix + (of-object "GstObject") + (c-name "gst_object_set_name_prefix") + (return-type "none") + (parameters + '("const-gchar*" "name_prefix") + ) +) + +(define-method get_name_prefix + (of-object "GstObject") + (c-name "gst_object_get_name_prefix") + (return-type "gchar*") +) + +(define-method set_parent + (of-object "GstObject") + (c-name "gst_object_set_parent") + (return-type "gboolean") + (parameters + '("GstObject*" "parent") + ) +) + +(define-method get_parent + (of-object "GstObject") + (c-name "gst_object_get_parent") + (return-type "GstObject*") + (caller-owns-return #t) +) + +(define-method unparent + (of-object "GstObject") + (c-name "gst_object_unparent") + (return-type "none") +) + +(define-method has_ancestor + (of-object "GstObject") + (c-name "gst_object_has_ancestor") + (return-type "gboolean") + (parameters + '("GstObject*" "ancestor") + ) +) + +(define-method sink + (of-object "GstObject") + (c-name "gst_object_sink") + (return-type "none") +) + +(define-method set_property + (of-object "GstObject") + (c-name "gst_object_set_property") + (return-type "none") +) + +(define-function object_default_deep_notify + (c-name "gst_object_default_deep_notify") + (return-type "none") + (parameters + '("GObject*" "object") + '("GstObject*" "orig") + '("GParamSpec*" "pspec") + '("gchar**" "excluded_props") + ) +) + +(define-function object_ref + (c-name "gst_object_ref") + (return-type "gpointer") + (parameters + '("gpointer" "object") + ) +) + +(define-function object_unref + (c-name "gst_object_unref") + (return-type "none") + (parameters + '("gpointer" "object") + ) +) + +(define-function object_replace + (c-name "gst_object_replace") + (return-type "none") + (parameters + '("GstObject**" "oldobj") + '("GstObject*" "newobj") + ) +) + +(define-method get_path_string + (of-object "GstObject") + (c-name "gst_object_get_path_string") + (return-type "gchar*") +) + +(define-function object_check_uniqueness + (c-name "gst_object_check_uniqueness") + (return-type "gboolean") + (parameters + '("GList*" "list") + '("const-gchar*" "name") + ) +) + +(define-method save_thyself + (of-object "GstObject") + (c-name "gst_object_save_thyself") + (return-type "GstXmlNodePtr") + (parameters + '("GstXmlNodePtr" "parent") + ) +) + +(define-method restore_thyself + (of-object "GstObject") + (c-name "gst_object_restore_thyself") + (return-type "none") + (parameters + '("GstXmlNodePtr" "self") + ) +) + +(define-function class_signal_connect + (c-name "gst_class_signal_connect") + (return-type "guint") + (parameters + '("GstObjectClass*" "klass") + '("const-gchar*" "name") + '("gpointer" "func") + '("gpointer" "func_data") + ) +) + +(define-function class_signal_emit_by_name + (c-name "gst_class_signal_emit_by_name") + (return-type "none") + (parameters + '("GstObject*" "object") + '("const-gchar*" "name") + '("GstXmlNodePtr" "self") + ) +) + +(define-virtual save_thyself + (of-object "GstObject") + (return-type "GstXmlNodePtr") + (parameters + '("GstXmlNodePtr" "parent") + ) +) + +(define-virtual restore_thyself + (of-object "GstObject") + (return-type "none") + (parameters + '("GstXmlNodePtr" "self") + ) +) + +;; From ../gstreamer/gst/gstpad.h + +(define-function flow_get_name + (c-name "gst_flow_get_name") + (return-type "const-gchar*") + (parameters + '("GstFlowReturn" "ret") + ) +) + +(define-function flow_to_quark + (c-name "gst_flow_to_quark") + (return-type "GQuark") + (parameters + '("GstFlowReturn" "ret") + ) +) + +(define-function pad_get_type + (c-name "gst_pad_get_type") + (return-type "GType") +) + +(define-function pad_new + (c-name "gst_pad_new") + (is-constructor-of "GstPad") + (return-type "GstPad*") + (properties + '("name" (argname "name")) + '("direction" (argname "direction")) + ) +) + +(define-function pad_new_from_template + (c-name "gst_pad_new_from_template") + (return-type "GstPad*") + (caller-owns-return #t) + (parameters + '("GstPadTemplate*" "templ") + '("const-gchar*" "name") + ) +) + +(define-function pad_new_from_static_template + (c-name "gst_pad_new_from_static_template") + (return-type "GstPad*") + (parameters + '("GstStaticPadTemplate*" "templ") + '("const-gchar*" "name") + ) +) + +(define-method get_direction + (of-object "GstPad") + (c-name "gst_pad_get_direction") + (return-type "GstPadDirection") +) + +(define-method set_active + (of-object "GstPad") + (c-name "gst_pad_set_active") + (return-type "gboolean") + (parameters + '("gboolean" "active") + ) +) + +(define-method is_active + (of-object "GstPad") + (c-name "gst_pad_is_active") + (return-type "gboolean") +) + +(define-method activate_pull + (of-object "GstPad") + (c-name "gst_pad_activate_pull") + (return-type "gboolean") + (parameters + '("gboolean" "active") + ) +) + +(define-method activate_push + (of-object "GstPad") + (c-name "gst_pad_activate_push") + (return-type "gboolean") + (parameters + '("gboolean" "active") + ) +) + +(define-method set_blocked + (of-object "GstPad") + (c-name "gst_pad_set_blocked") + (return-type "gboolean") + (parameters + '("gboolean" "blocked") + ) +) + +(define-method set_blocked_async + (of-object "GstPad") + (c-name "gst_pad_set_blocked_async") + (return-type "gboolean") + (parameters + '("gboolean" "blocked") + '("GstPadBlockCallback" "callback") + '("gpointer" "user_data") + ) +) + +(define-method is_blocked + (of-object "GstPad") + (c-name "gst_pad_is_blocked") + (return-type "gboolean") +) + +(define-method set_element_private + (of-object "GstPad") + (c-name "gst_pad_set_element_private") + (return-type "none") + (parameters + '("gpointer" "priv") + ) +) + +(define-method get_element_private + (of-object "GstPad") + (c-name "gst_pad_get_element_private") + (return-type "gpointer") +) + +(define-method get_pad_template + (of-object "GstPad") + (c-name "gst_pad_get_pad_template") + (return-type "GstPadTemplate*") +) + +(define-method set_bufferalloc_function + (of-object "GstPad") + (c-name "gst_pad_set_bufferalloc_function") + (return-type "none") + (parameters + '("GstPadBufferAllocFunction" "bufalloc") + ) +) + +(define-method alloc_buffer + (of-object "GstPad") + (c-name "gst_pad_alloc_buffer") + (return-type "GstFlowReturn") + (parameters + '("guint64" "offset") + '("gint" "size") + '("GstCaps*" "caps") + '("GstBuffer**" "buf") + ) +) + +(define-method alloc_buffer_and_set_caps + (of-object "GstPad") + (c-name "gst_pad_alloc_buffer_and_set_caps") + (return-type "GstFlowReturn") + (parameters + '("guint64" "offset") + '("gint" "size") + '("GstCaps*" "caps") + '("GstBuffer**" "buf") + ) +) + +(define-method set_activate_function + (of-object "GstPad") + (c-name "gst_pad_set_activate_function") + (return-type "none") + (parameters + '("GstPadActivateFunction" "activate") + ) +) + +(define-method set_activatepull_function + (of-object "GstPad") + (c-name "gst_pad_set_activatepull_function") + (return-type "none") + (parameters + '("GstPadActivateModeFunction" "activatepull") + ) +) + +(define-method set_activatepush_function + (of-object "GstPad") + (c-name "gst_pad_set_activatepush_function") + (return-type "none") + (parameters + '("GstPadActivateModeFunction" "activatepush") + ) +) + +(define-method set_chain_function + (of-object "GstPad") + (c-name "gst_pad_set_chain_function") + (return-type "none") + (parameters + '("GstPadChainFunction" "chain") + ) +) + +(define-method set_chain_list_function + (of-object "GstPad") + (c-name "gst_pad_set_chain_list_function") + (return-type "none") + (parameters + '("GstPadChainListFunction" "chainlist") + ) +) + +(define-method set_getrange_function + (of-object "GstPad") + (c-name "gst_pad_set_getrange_function") + (return-type "none") + (parameters + '("GstPadGetRangeFunction" "get") + ) +) + +(define-method set_checkgetrange_function + (of-object "GstPad") + (c-name "gst_pad_set_checkgetrange_function") + (return-type "none") + (parameters + '("GstPadCheckGetRangeFunction" "check") + ) +) + +(define-method set_event_function + (of-object "GstPad") + (c-name "gst_pad_set_event_function") + (return-type "none") + (parameters + '("GstPadEventFunction" "event") + ) +) + +(define-method set_link_function + (of-object "GstPad") + (c-name "gst_pad_set_link_function") + (return-type "none") + (parameters + '("GstPadLinkFunction" "link") + ) +) + +(define-method set_unlink_function + (of-object "GstPad") + (c-name "gst_pad_set_unlink_function") + (return-type "none") + (parameters + '("GstPadUnlinkFunction" "unlink") + ) +) + +(define-method link + (of-object "GstPad") + (c-name "gst_pad_link") + (return-type "GstPadLinkReturn") + (parameters + '("GstPad*" "sinkpad") + ) +) + +(define-method link_full + (of-object "GstPad") + (c-name "gst_pad_link_full") + (return-type "GstPadLinkReturn") + (parameters + '("GstPad*" "sinkpad") + '("GstPadLinkCheck" "flags") + ) +) + +(define-method unlink + (of-object "GstPad") + (c-name "gst_pad_unlink") + (return-type "gboolean") + (parameters + '("GstPad*" "sinkpad") + ) +) + +(define-method is_linked + (of-object "GstPad") + (c-name "gst_pad_is_linked") + (return-type "gboolean") +) + +(define-method get_peer + (of-object "GstPad") + (c-name "gst_pad_get_peer") + (return-type "GstPad*") + (caller-owns-return #t) +) + +(define-method set_getcaps_function + (of-object "GstPad") + (c-name "gst_pad_set_getcaps_function") + (return-type "none") + (parameters + '("GstPadGetCapsFunction" "getcaps") + ) +) + +(define-method set_acceptcaps_function + (of-object "GstPad") + (c-name "gst_pad_set_acceptcaps_function") + (return-type "none") + (parameters + '("GstPadAcceptCapsFunction" "acceptcaps") + ) +) + +(define-method set_fixatecaps_function + (of-object "GstPad") + (c-name "gst_pad_set_fixatecaps_function") + (return-type "none") + (parameters + '("GstPadFixateCapsFunction" "fixatecaps") + ) +) + +(define-method set_setcaps_function + (of-object "GstPad") + (c-name "gst_pad_set_setcaps_function") + (return-type "none") + (parameters + '("GstPadSetCapsFunction" "setcaps") + ) +) + +(define-method get_pad_template_caps + (of-object "GstPad") + (c-name "gst_pad_get_pad_template_caps") + (return-type "const-GstCaps*") +) + +(define-method get_caps_reffed + (of-object "GstPad") + (c-name "gst_pad_get_caps_reffed") + (return-type "GstCaps*") +) + +(define-method get_caps + (of-object "GstPad") + (c-name "gst_pad_get_caps") + (return-type "GstCaps*") + (caller-owns-return #t) +) + +(define-method fixate_caps + (of-object "GstPad") + (c-name "gst_pad_fixate_caps") + (return-type "none") + (parameters + '("GstCaps*" "caps") + ) +) + +(define-method accept_caps + (of-object "GstPad") + (c-name "gst_pad_accept_caps") + (return-type "gboolean") + (parameters + '("GstCaps*" "caps") + ) +) + +(define-method set_caps + (of-object "GstPad") + (c-name "gst_pad_set_caps") + (return-type "gboolean") + (parameters + '("GstCaps*" "caps") + ) +) + +(define-method peer_get_caps_reffed + (of-object "GstPad") + (c-name "gst_pad_peer_get_caps_reffed") + (return-type "GstCaps*") +) + +(define-method peer_get_caps + (of-object "GstPad") + (c-name "gst_pad_peer_get_caps") + (return-type "GstCaps*") + (caller-owns-return #t) +) + +(define-method peer_accept_caps + (of-object "GstPad") + (c-name "gst_pad_peer_accept_caps") + (return-type "gboolean") + (parameters + '("GstCaps*" "caps") + ) +) + +(define-method get_allowed_caps + (of-object "GstPad") + (c-name "gst_pad_get_allowed_caps") + (return-type "GstCaps*") + (caller-owns-return #t) +) + +(define-method get_negotiated_caps + (of-object "GstPad") + (c-name "gst_pad_get_negotiated_caps") + (return-type "GstCaps*") + (caller-owns-return #t) +) + +(define-method push + (of-object "GstPad") + (c-name "gst_pad_push") + (return-type "GstFlowReturn") + (parameters + '("GstBuffer*" "buffer" (keep-refcount)) + ) +) + +(define-method push_list + (of-object "GstPad") + (c-name "gst_pad_push_list") + (return-type "GstFlowReturn") + (parameters + '("GstBufferList*" "list" (keep-refcount)) + ) +) + +(define-method check_pull_range + (of-object "GstPad") + (c-name "gst_pad_check_pull_range") + (return-type "gboolean") +) + +(define-method pull_range + (of-object "GstPad") + (c-name "gst_pad_pull_range") + (return-type "GstFlowReturn") + (parameters + '("guint64" "offset") + '("guint" "size") + '("GstBuffer**" "buffer") + ) +) + +(define-method push_event + (of-object "GstPad") + (c-name "gst_pad_push_event") + (return-type "gboolean") + (parameters + '("GstEvent*" "event" (keep-refcount)) + ) +) + +(define-method event_default + (of-object "GstPad") + (c-name "gst_pad_event_default") + (return-type "gboolean") + (parameters + '("GstEvent*" "event") + ) +) + +(define-method chain + (of-object "GstPad") + (c-name "gst_pad_chain") + (return-type "GstFlowReturn") + (parameters + '("GstBuffer*" "buffer" (keep-refcount)) + ) +) + +(define-method chain_list + (of-object "GstPad") + (c-name "gst_pad_chain_list") + (return-type "GstFlowReturn") + (parameters + '("GstBufferList*" "list" (keep-refcount)) + ) +) + +(define-method get_range + (of-object "GstPad") + (c-name "gst_pad_get_range") + (return-type "GstFlowReturn") + (parameters + '("guint64" "offset") + '("guint" "size") + '("GstBuffer**" "buffer") + ) +) + +(define-method send_event + (of-object "GstPad") + (c-name "gst_pad_send_event") + (return-type "gboolean") + (parameters + '("GstEvent*" "event" (keep-refcount)) + ) +) + +(define-method start_task + (of-object "GstPad") + (c-name "gst_pad_start_task") + (return-type "gboolean") + (parameters + '("GstTaskFunction" "func") + '("gpointer" "data") + ) +) + +(define-method pause_task + (of-object "GstPad") + (c-name "gst_pad_pause_task") + (return-type "gboolean") +) + +(define-method stop_task + (of-object "GstPad") + (c-name "gst_pad_stop_task") + (return-type "gboolean") +) + +(define-method set_internal_link_function + (of-object "GstPad") + (c-name "gst_pad_set_internal_link_function") + (return-type "none") + (parameters + '("GstPadIntLinkFunction" "intlink") + ) +) + +(define-method get_internal_links + (of-object "GstPad") + (c-name "gst_pad_get_internal_links") + (return-type "GList*") +) + +(define-method get_internal_links_default + (of-object "GstPad") + (c-name "gst_pad_get_internal_links_default") + (return-type "GList*") +) + +(define-method set_iterate_internal_links_function + (of-object "GstPad") + (c-name "gst_pad_set_iterate_internal_links_function") + (return-type "none") + (parameters + '("GstPadIterIntLinkFunction" "iterintlink") + ) +) + +(define-method iterate_internal_links + (of-object "GstPad") + (c-name "gst_pad_iterate_internal_links") + (return-type "GstIterator*") +) + +(define-method iterate_internal_links_default + (of-object "GstPad") + (c-name "gst_pad_iterate_internal_links_default") + (return-type "GstIterator*") +) + +(define-method set_query_type_function + (of-object "GstPad") + (c-name "gst_pad_set_query_type_function") + (return-type "none") + (parameters + '("GstPadQueryTypeFunction" "type_func") + ) +) + +(define-method get_query_types + (of-object "GstPad") + (c-name "gst_pad_get_query_types") + (return-type "const-GstQueryType*") +) + +(define-method get_query_types_default + (of-object "GstPad") + (c-name "gst_pad_get_query_types_default") + (return-type "const-GstQueryType*") +) + +(define-method query + (of-object "GstPad") + (c-name "gst_pad_query") + (return-type "gboolean") + (parameters + '("GstQuery*" "query") + ) +) + +(define-method peer_query + (of-object "GstPad") + (c-name "gst_pad_peer_query") + (return-type "gboolean") + (parameters + '("GstQuery*" "query") + ) +) + +(define-method set_query_function + (of-object "GstPad") + (c-name "gst_pad_set_query_function") + (return-type "none") + (parameters + '("GstPadQueryFunction" "query") + ) +) + +(define-method query_default + (of-object "GstPad") + (c-name "gst_pad_query_default") + (return-type "gboolean") + (parameters + '("GstQuery*" "query") + ) +) + +(define-method dispatcher + (of-object "GstPad") + (c-name "gst_pad_dispatcher") + (return-type "gboolean") + (parameters + '("GstPadDispatcherFunction" "dispatch") + '("gpointer" "data") + ) +) + +(define-method add_data_probe + (of-object "GstPad") + (c-name "gst_pad_add_data_probe") + (return-type "gulong") + (parameters + '("GCallback" "handler") + '("gpointer" "data") + ) +) + +(define-method remove_data_probe + (of-object "GstPad") + (c-name "gst_pad_remove_data_probe") + (return-type "none") + (parameters + '("guint" "handler_id") + ) +) + +(define-method add_event_probe + (of-object "GstPad") + (c-name "gst_pad_add_event_probe") + (return-type "gulong") + (parameters + '("GCallback" "handler") + '("gpointer" "data") + ) +) + +(define-method remove_event_probe + (of-object "GstPad") + (c-name "gst_pad_remove_event_probe") + (return-type "none") + (parameters + '("guint" "handler_id") + ) +) + +(define-method add_buffer_probe + (of-object "GstPad") + (c-name "gst_pad_add_buffer_probe") + (return-type "gulong") + (parameters + '("GCallback" "handler") + '("gpointer" "data") + ) +) + +(define-method remove_buffer_probe + (of-object "GstPad") + (c-name "gst_pad_remove_buffer_probe") + (return-type "none") + (parameters + '("guint" "handler_id") + ) +) + +(define-method found_tags_for_pad + (of-object "GstElement") + (c-name "gst_element_found_tags_for_pad") + (return-type "none") + (parameters + '("GstPad*" "pad") + '("GstTagList*" "list") + ) +) + +(define-method found_tags + (of-object "GstElement") + (c-name "gst_element_found_tags") + (return-type "none") + (parameters + '("GstTagList*" "list") + ) +) + +(define-function parse_bin_from_description + (c-name "gst_parse_bin_from_description") + (return-type "GstElement*") + (parameters + '("const-gchar*" "bin_description") + '("gboolean" "ghost_unconnected_pads") + '("GError**" "err") + ) +) + +(define-function util_get_timestamp + (c-name "gst_util_get_timestamp") + (return-type "GstClockTime") +) + +(define-function util_array_binary_search + (c-name "gst_util_array_binary_search") + (return-type "gpointer") + (parameters + '("gpointer" "array") + '("guint" "num_elements") + '("gsize" "element_size") + '("GCompareDataFunc" "search_func") + '("GstSearchMode" "mode") + '("gconstpointer" "search_data") + '("gpointer" "user_data") + ) +) +(define-function util_greatest_common_divisor + (c-name "gst_util_greatest_common_divisor") + (return-type "gint") + (parameters + '("gint" "a") + '("gint" "b") + ) +) + +(define-function util_fraction_to_double + (c-name "gst_util_fraction_to_double") + (return-type "none") + (parameters + '("gint" "src_n") + '("gint" "src_d") + '("gdouble*" "dest") + ) +) + +(define-function util_double_to_fraction + (c-name "gst_util_double_to_fraction") + (return-type "none") + (parameters + '("gdouble" "src") + '("gint*" "dest_n") + '("gint*" "dest_d") + ) +) + +(define-function util_fraction_multiply + (c-name "gst_util_fraction_multiply") + (return-type "gboolean") + (parameters + '("gint" "a_n") + '("gint" "a_d") + '("gint" "b_n") + '("gint" "b_d") + '("gint*" "res_n") + '("gint*" "res_d") + ) +) + +(define-function util_fraction_add + (c-name "gst_util_fraction_add") + (return-type "gboolean") + (parameters + '("gint" "a_n") + '("gint" "a_d") + '("gint" "b_n") + '("gint" "b_d") + '("gint*" "res_n") + '("gint*" "res_d") + ) +) + +(define-function util_fraction_compare + (c-name "gst_util_fraction_compare") + (return-type "gint") + (parameters + '("gint" "a_n") + '("gint" "a_d") + '("gint" "b_n") + '("gint" "b_d") + ) +) + +(define-function event_new_sink_message + (c-name "gst_event_new_sink_message") + (return-type "GstEvent*") + (parameters + '("GstMessage*" "msg") + ) +) + +(define-method parse_sink_message + (of-object "GstEvent") + (c-name "gst_event_parse_sink_message") + (return-type "none") + (parameters + '("GstMessage**" "msg") + ) +) + +(define-function pad_load_and_link + (c-name "gst_pad_load_and_link") + (return-type "none") + (parameters + '("GstXmlNodePtr" "self") + '("GstObject*" "parent") + ) +) + +(define-function pad_template_get_type + (c-name "gst_pad_template_get_type") + (return-type "GType") +) + +(define-function pad_template_new + (c-name "gst_pad_template_new") + (is-constructor-of "GstPadTemplate") + (return-type "GstPadTemplate*") + (parameters + '("const-gchar*" "name_template") + '("GstPadDirection" "direction") + '("GstPadPresence" "presence") + '("GstCaps*" "caps" (keep-refcount)) + ) +) + +(define-method get + (of-object "GstStaticPadTemplate") + (c-name "gst_static_pad_template_get") + (return-type "GstPadTemplate*") + (caller-owns-return #t) +) + +(define-method get_caps + (of-object "GstStaticPadTemplate") + (c-name "gst_static_pad_template_get_caps") + (return-type "GstCaps*") + (caller-owns-return #t) +) + +(define-method get_caps + (of-object "GstPadTemplate") + (c-name "gst_pad_template_get_caps") + (return-type "GstCaps*") + (caller-owns-return #t) +) + +(define-method pad_created + (of-object "GstPadTemplate") + (c-name "gst_pad_template_pad_created") + (return-type "none") + (parameters + '("GstPad*" "pad") + ) +) + + +;; From ../gstreamer/gst/gstparse.h + +(define-function parse_error_quark + (c-name "gst_parse_error_quark") + (return-type "GQuark") +) + +(define-function gst_parse_context_new + (c-name "gst_parse_context_new") + (is-constructor-of "GstParseContext") + (return-type "GstParseContext*") +) + +(define-method get_missing_elements + (of-object "GstParseContext") + (c-name "gst_parse_context_get_missing_elements") + (return-type "GStrv") +) + +(define-method free + (of-object "GstParseContext") + (c-name "gst_parse_context_free") + (return-type "none") +) + +(define-function parse_launch + (c-name "gst_parse_launch") + (return-type "GstElement*") + (caller-owns-return #t) + (parameters + '("const-gchar*" "pipeline_description") + '("GError**" "error") + ) +) + +(define-function parse_launchv + (c-name "gst_parse_launchv") + (return-type "GstElement*") + (caller-owns-return #t) + (parameters + '("const-gchar**" "argv") + '("GError**" "error") + ) +) + +(define-function parse_launch_full + (c-name "gst_parse_launch_full") + (return-type "GstElement*") + (parameters + '("const-gchar*" "pipeline_description") + '("GstParseContext*" "context") + '("GstParseFlags" "flags") + '("GError**" "error") + ) +) + +(define-function parse_launchv_full + (c-name "gst_parse_launchv_full") + (return-type "GstElement*") + (parameters + '("const-gchar**" "argv") + '("GstParseContext*" "context") + '("GstParseFlags" "flags") + '("GError**" "error") + ) +) + + +;; From ../gstreamer/gst/gstpipeline.h + +(define-function pipeline_get_type + (c-name "gst_pipeline_get_type") + (return-type "GType") +) + +(define-function pipeline_new + (c-name "gst_pipeline_new") + (is-constructor-of "GstPipeline") + (return-type "GstElement*") + (properties + '("name" (argname "name") (optional)) + ) +) + +(define-method get_bus + (of-object "GstPipeline") + (c-name "gst_pipeline_get_bus") + (return-type "GstBus*") + (caller-owns-return #t) +) + +(define-method set_new_stream_time + (of-object "GstPipeline") + (c-name "gst_pipeline_set_new_stream_time") + (return-type "none") + (parameters + '("GstClockTime" "time") + ) +) + +(define-method get_last_stream_time + (of-object "GstPipeline") + (c-name "gst_pipeline_get_last_stream_time") + (return-type "GstClockTime") +) + +(define-method use_clock + (of-object "GstPipeline") + (c-name "gst_pipeline_use_clock") + (return-type "none") + (parameters + '("GstClock*" "clock") + ) +) + +(define-method set_clock + (of-object "GstPipeline") + (c-name "gst_pipeline_set_clock") + (return-type "gboolean") + (parameters + '("GstClock*" "clock") + ) +) + +(define-method get_clock + (of-object "GstPipeline") + (c-name "gst_pipeline_get_clock") + (return-type "GstClock*") + (caller-owns-return #t) +) + +(define-method auto_clock + (of-object "GstPipeline") + (c-name "gst_pipeline_auto_clock") + (return-type "none") +) + +(define-method set_delay + (of-object "GstPipeline") + (c-name "gst_pipeline_set_delay") + (return-type "none") + (parameters + '("GstClockTime" "delay") + ) +) + +(define-method get_delay + (of-object "GstPipeline") + (c-name "gst_pipeline_get_delay") + (return-type "GstClockTime") +) + +(define-method set_auto_flush_bus + (of-object "GstPipeline") + (c-name "gst_pipeline_set_auto_flush_bus") + (return-type "none") + (parameters + '("gboolean" "auto_flush") + ) +) + +(define-method get_auto_flush_bus + (of-object "GstPipeline") + (c-name "gst_pipeline_get_auto_flush_bus") + (return-type "gboolean") +) + + + +;; From ../gstreamer/gst/gstplugin.h + +(define-function plugin_error_quark + (c-name "gst_plugin_error_quark") + (return-type "GQuark") +) + +(define-function plugin_get_type + (c-name "gst_plugin_get_type") + (return-type "GType") +) + +(define-function plugin_register_static + (c-name "gst_plugin_register_static") + (return-type "gboolean") + (parameters + '("const-GstPluginDesc*" "desc") + ) +) + +(define-method get_name + (of-object "GstPlugin") + (c-name "gst_plugin_get_name") + (return-type "const-gchar*") +) + +(define-method get_description + (of-object "GstPlugin") + (c-name "gst_plugin_get_description") + (return-type "const-gchar*") +) + +(define-method get_filename + (of-object "GstPlugin") + (c-name "gst_plugin_get_filename") + (return-type "const-gchar*") +) + +(define-method get_version + (of-object "GstPlugin") + (c-name "gst_plugin_get_version") + (return-type "const-gchar*") +) + +(define-method get_license + (of-object "GstPlugin") + (c-name "gst_plugin_get_license") + (return-type "const-gchar*") +) + +(define-method get_source + (of-object "GstPlugin") + (c-name "gst_plugin_get_source") + (return-type "const-gchar*") +) + +(define-method get_package + (of-object "GstPlugin") + (c-name "gst_plugin_get_package") + (return-type "const-gchar*") +) + +(define-method get_origin + (of-object "GstPlugin") + (c-name "gst_plugin_get_origin") + (return-type "const-gchar*") +) + +(define-method get_cache_data + (of-object "GstPlugin") + (c-name "gst_plugin_get_cache_data") + (return-type "const-GstStructure*") +) + +(define-method set_cache_data + (of-object "GstPlugin") + (c-name "gst_plugin_set_cache_data") + (return-type "none") + (parameters + '("GstStructure*" "cache_data") + ) +) + +(define-method get_module + (of-object "GstPlugin") + (c-name "gst_plugin_get_module") + (return-type "GModule*") +) + +(define-method is_loaded + (of-object "GstPlugin") + (c-name "gst_plugin_is_loaded") + (return-type "gboolean") +) + +(define-method name_filter + (of-object "GstPlugin") + (c-name "gst_plugin_name_filter") + (return-type "gboolean") + (parameters + '("const-gchar*" "name") + ) +) + +(define-function plugin_load_file + (c-name "gst_plugin_load_file") + (return-type "GstPlugin*") + (parameters + '("const-gchar*" "filename") + '("GError**" "error") + ) +) + + +(define-method load + (of-object "GstPlugin") + (c-name "gst_plugin_load") + (return-type "GstPlugin*") +) + +(define-function plugin_load_by_name + (c-name "gst_plugin_load_by_name") + (return-type "GstPlugin*") + (parameters + '("const-gchar*" "name") + ) +) + +(define-function plugin_list_free + (c-name "gst_plugin_list_free") + (return-type "none") + (parameters + '("GList*" "list") + ) +) + + + +;; From ../gstreamer/gst/gstpluginfeature.h + +(define-function plugin_feature_get_type + (c-name "gst_plugin_feature_get_type") + (return-type "GType") +) + +(define-method load + (of-object "GstPluginFeature") + (c-name "gst_plugin_feature_load") + (return-type "GstPluginFeature*") +) + +(define-method type_name_filter + (of-object "GstPluginFeature") + (c-name "gst_plugin_feature_type_name_filter") + (return-type "gboolean") + (parameters + '("GstTypeNameData*" "data") + ) +) + +(define-method set_rank + (of-object "GstPluginFeature") + (c-name "gst_plugin_feature_set_rank") + (return-type "none") + (parameters + '("guint" "rank") + ) +) + +(define-method set_name + (of-object "GstPluginFeature") + (c-name "gst_plugin_feature_set_name") + (return-type "none") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method get_rank + (of-object "GstPluginFeature") + (c-name "gst_plugin_feature_get_rank") + (return-type "guint") +) + +(define-method get_name + (of-object "GstPluginFeature") + (c-name "gst_plugin_feature_get_name") + (return-type "const-gchar*") +) + +(define-function plugin_feature_list_free + (c-name "gst_plugin_feature_list_free") + (return-type "none") + (parameters + '("GList*" "list") + ) +) + +(define-function plugin_feature_list_copy + (c-name "gst_plugin_feature_list_copy") + (return-type "GList*") + (parameters + '("GList*" "list") + ) +) + +(define-method check_version + (of-object "GstPluginFeature") + (c-name "gst_plugin_feature_check_version") + (return-type "gboolean") + (parameters + '("guint" "min_major") + '("guint" "min_minor") + '("guint" "min_micro") + ) +) + +(define-function plugin_feature_rank_compare_func + (c-name "gst_plugin_feature_rank_compare_func") + (return-type "gint") + (parameters + '("gconstpointer" "p1") + '("gconstpointer" "p2") + ) +) + + +;; From gstpoll.h + +(define-function gst_poll_new + (c-name "gst_poll_new") + (is-constructor-of "GstPoll") + (return-type "GstPoll*") + (parameters + '("gboolean" "controllable") + ) +) + +(define-function poll_new_timer + (c-name "gst_poll_new_timer") + (caller-owns-return #t) + (return-type "GstPoll*") +) + +(define-method free + (of-object "GstPoll") + (c-name "gst_poll_free") + (return-type "none") +) + +(define-method get_read_gpollfd + (of-object "GstPoll") + (c-name "gst_poll_get_read_gpollfd") + (return-type "none") + (parameters + '("GPollFD*" "fd") + ) +) + +(define-method init + (of-object "GstPollFD") + (c-name "gst_poll_fd_init") + (return-type "none") +) + +(define-method add_fd + (of-object "GstPoll") + (c-name "gst_poll_add_fd") + (return-type "gboolean") + (parameters + '("GstPollFD*" "fd") + ) +) + +(define-method remove_fd + (of-object "GstPoll") + (c-name "gst_poll_remove_fd") + (return-type "gboolean") + (parameters + '("GstPollFD*" "fd") + ) +) + +(define-method fd_ctl_write + (of-object "GstPoll") + (c-name "gst_poll_fd_ctl_write") + (return-type "gboolean") + (parameters + '("GstPollFD*" "fd") + '("gboolean" "active") + ) +) + +(define-method fd_ctl_read + (of-object "GstPoll") + (c-name "gst_poll_fd_ctl_read") + (return-type "gboolean") + (parameters + '("GstPollFD*" "fd") + '("gboolean" "active") + ) +) + +(define-method fd_ignored + (of-object "GstPoll") + (c-name "gst_poll_fd_ignored") + (return-type "none") + (parameters + '("GstPollFD*" "fd") + ) +) + +(define-method fd_has_closed + (of-object "GstPoll") + (c-name "gst_poll_fd_has_closed") + (return-type "gboolean") + (parameters + '("GstPollFD*" "fd") + ) +) + +(define-method fd_has_error + (of-object "GstPoll") + (c-name "gst_poll_fd_has_error") + (return-type "gboolean") + (parameters + '("GstPollFD*" "fd") + ) +) + +(define-method fd_can_read + (of-object "GstPoll") + (c-name "gst_poll_fd_can_read") + (return-type "gboolean") + (parameters + '("GstPollFD*" "fd") + ) +) + +(define-method fd_can_write + (of-object "GstPoll") + (c-name "gst_poll_fd_can_write") + (return-type "gboolean") + (parameters + '("GstPollFD*" "fd") + ) +) + +(define-method wait + (of-object "GstPoll") + (c-name "gst_poll_wait") + (return-type "gint") + (parameters + '("GstClockTime" "timeout") + ) +) + +(define-method set_controllable + (of-object "GstPoll") + (c-name "gst_poll_set_controllable") + (return-type "gboolean") + (parameters + '("gboolean" "controllable") + ) +) + +(define-method restart + (of-object "GstPoll") + (c-name "gst_poll_restart") + (return-type "none") +) + +(define-method set_flushing + (of-object "GstPoll") + (c-name "gst_poll_set_flushing") + (return-type "none") + (parameters + '("gboolean" "flushing") + ) +) + +(define-method write_control + (of-object "GstPoll") + (c-name "gst_poll_write_control") + (return-type "gboolean") +) + +(define-method read_control + (of-object "GstPoll") + (c-name "gst_poll_read_control") + (return-type "gboolean") +) + +;; From gstpreset.h + +(define-function gst_preset_get_type + (c-name "gst_preset_get_type") + (return-type "GType") +) + +(define-method get_preset_names + (of-object "GstPreset") + (c-name "gst_preset_get_preset_names") + (return-type "GStrv") +) + +(define-method get_property_names + (of-object "GstPreset") + (c-name "gst_preset_get_property_names") + (return-type "GStrv") +) + +(define-method load_preset + (of-object "GstPreset") + (c-name "gst_preset_load_preset") + (return-type "gboolean") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method save_preset + (of-object "GstPreset") + (c-name "gst_preset_save_preset") + (return-type "gboolean") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method rename_preset + (of-object "GstPreset") + (c-name "gst_preset_rename_preset") + (return-type "gboolean") + (parameters + '("const-gchar*" "old_name") + '("const-gchar*" "new_name") + ) +) + +(define-method delete_preset + (of-object "GstPreset") + (c-name "gst_preset_delete_preset") + (return-type "gboolean") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method set_meta + (of-object "GstPreset") + (c-name "gst_preset_set_meta") + (return-type "gboolean") + (parameters + '("const-gchar*" "name") + '("const-gchar*" "tag") + '("const-gchar*" "value") + ) +) + +(define-method get_meta + (of-object "GstPreset") + (c-name "gst_preset_get_meta") + (return-type "gboolean") + (parameters + '("const-gchar*" "name") + '("const-gchar*" "tag") + '("gchar**" "value") + ) +) + + +;; From ../gstreamer/gst/gstquery.h + +(define-method get_name + (of-object "GstQueryType") + (c-name "gst_query_type_get_name") + (return-type "const-gchar*") +) + +(define-method to_quark + (of-object "GstQueryType") + (c-name "gst_query_type_to_quark") + (return-type "GQuark") +) + +(define-function query_get_type + (c-name "gst_query_get_type") + (return-type "GType") +) + +(define-function query_type_register + (c-name "gst_query_type_register") + (return-type "GstQueryType") + (parameters + '("const-gchar*" "nick") + '("const-gchar*" "description") + ) +) + +(define-function query_type_get_by_nick + (c-name "gst_query_type_get_by_nick") + (return-type "GstQueryType") + (parameters + '("const-gchar*" "nick") + ) +) + +(define-method s_contains + (of-object "GstQueryType") + (c-name "gst_query_types_contains") + (return-type "gboolean") + (parameters + '("GstQueryType" "type") + ) +) + +(define-method get_details + (of-object "GstQueryType") + (c-name "gst_query_type_get_details") + (return-type "const-GstQueryTypeDefinition*") +) + +(define-function query_type_iterate_definitions + (c-name "gst_query_type_iterate_definitions") + (return-type "GstIterator*") +) + +(define-function query_new_position + (c-name "gst_query_new_position") + (return-type "GstQuery*") + (caller-owns-return #t) + (parameters + '("GstFormat" "format") + ) +) + +(define-method set_position + (of-object "GstQuery") + (c-name "gst_query_set_position") + (return-type "none") + (parameters + '("GstFormat" "format") + '("gint64" "cur") + ) +) + +(define-method parse_position + (of-object "GstQuery") + (c-name "gst_query_parse_position") + (return-type "none") + (parameters + '("GstFormat*" "format") + '("gint64*" "cur") + ) +) + +(define-function query_new_duration + (c-name "gst_query_new_duration") + (return-type "GstQuery*") + (caller-owns-return #t) + (parameters + '("GstFormat" "format") + ) +) + +(define-method set_duration + (of-object "GstQuery") + (c-name "gst_query_set_duration") + (return-type "none") + (parameters + '("GstFormat" "format") + '("gint64" "duration") + ) +) + +(define-method parse_duration + (of-object "GstQuery") + (c-name "gst_query_parse_duration") + (return-type "none") + (parameters + '("GstFormat*" "format") + '("gint64*" "duration") + ) +) + +(define-function query_new_latency + (c-name "gst_query_new_latency") + (caller-owns-return #t) + (return-type "GstQuery*") +) + +(define-method set_latency + (of-object "GstQuery") + (c-name "gst_query_set_latency") + (return-type "none") + (parameters + '("gboolean" "live") + '("GstClockTime" "min_latency") + '("GstClockTime" "max_latency") + ) +) + +(define-method parse_latency + (of-object "GstQuery") + (c-name "gst_query_parse_latency") + (return-type "none") + (parameters + '("gboolean*" "live") + '("GstClockTime*" "min_latency") + '("GstClockTime*" "max_latency") + ) +) + +(define-function query_new_convert + (c-name "gst_query_new_convert") + (return-type "GstQuery*") + (caller-owns-return #t) + (parameters + '("GstFormat" "src_fmt") + '("gint64" "value") + '("GstFormat" "dest_fmt") + ) +) + +(define-method set_convert + (of-object "GstQuery") + (c-name "gst_query_set_convert") + (return-type "none") + (parameters + '("GstFormat" "src_format") + '("gint64" "src_value") + '("GstFormat" "dest_format") + '("gint64" "dest_value") + ) +) + +(define-method parse_convert + (of-object "GstQuery") + (c-name "gst_query_parse_convert") + (return-type "none") + (parameters + '("GstFormat*" "src_format") + '("gint64*" "src_value") + '("GstFormat*" "dest_format") + '("gint64*" "dest_value") + ) +) + +(define-function query_new_segment + (c-name "gst_query_new_segment") + (return-type "GstQuery*") + (caller-owns-return #t) + (parameters + '("GstFormat" "format") + ) +) + +(define-method set_segment + (of-object "GstQuery") + (c-name "gst_query_set_segment") + (return-type "none") + (parameters + '("gdouble" "rate") + '("GstFormat" "format") + '("gint64" "start_value") + '("gint64" "stop_value") + ) +) + +(define-method parse_segment + (of-object "GstQuery") + (c-name "gst_query_parse_segment") + (return-type "none") + (parameters + '("gdouble*" "rate") + '("GstFormat*" "format") + '("gint64*" "start_value") + '("gint64*" "stop_value") + ) +) + +(define-function query_new_application + (c-name "gst_query_new_application") + (return-type "GstQuery*") + (caller-owns-return #t) + (parameters + '("GstQueryType" "type") + '("GstStructure*" "structure") + ) +) + +(define-method get_structure + (of-object "GstQuery") + (c-name "gst_query_get_structure") + (return-type "GstStructure*") +) + + +(define-function query_new_seeking + (c-name "gst_query_new_seeking") + (return-type "GstQuery*") + (caller-owns-return #t) + (parameters + '("GstFormat" "format") + ) +) + +(define-method set_seeking + (of-object "GstQuery") + (c-name "gst_query_set_seeking") + (return-type "none") + (parameters + '("GstFormat" "format") + '("gboolean" "seekable") + '("gint64" "segment_start") + '("gint64" "segment_end") + ) +) + +(define-method parse_seeking + (of-object "GstQuery") + (c-name "gst_query_parse_seeking") + (return-type "none") + (parameters + '("GstFormat*" "format") + '("gboolean*" "seekable") + '("gint64*" "segment_start") + '("gint64*" "segment_end") + ) +) + +(define-function query_new_formats + (c-name "gst_query_new_formats") + (caller-owns-return #t) + (return-type "GstQuery*") +) + +(define-method set_formats + (of-object "GstQuery") + (c-name "gst_query_set_formats") + (return-type "none") + (parameters + '("gint" "n_formats") + ) + (varargs #t) +) + +(define-method set_formatsv + (of-object "GstQuery") + (c-name "gst_query_set_formatsv") + (return-type "none") + (parameters + '("gint" "n_formats") + '("GstFormat*" "formats") + ) +) + +(define-method parse_formats_length + (of-object "GstQuery") + (c-name "gst_query_parse_formats_length") + (return-type "none") + (parameters + '("guint*" "n_formats") + ) +) + +(define-method parse_formats_nth + (of-object "GstQuery") + (c-name "gst_query_parse_formats_nth") + (return-type "none") + (parameters + '("guint" "nth") + '("GstFormat*" "format") + ) +) + +(define-function query_new_buffering + (c-name "gst_query_new_buffering") + (return-type "GstQuery*") + (caller-owns-return #t) + (parameters + '("GstFormat" "format") + ) +) + +(define-method set_buffering_percent + (of-object "GstQuery") + (c-name "gst_query_set_buffering_percent") + (return-type "none") + (parameters + '("gboolean" "busy") + '("gint" "percent") + ) +) + +(define-method parse_buffering_percent + (of-object "GstQuery") + (c-name "gst_query_parse_buffering_percent") + (return-type "none") + (parameters + '("gboolean*" "busy") + '("gint*" "percent") + ) +) + +(define-method set_buffering_stats + (of-object "GstQuery") + (c-name "gst_query_set_buffering_stats") + (return-type "none") + (parameters + '("GstBufferingMode" "mode") + '("gint" "avg_in") + '("gint" "avg_out") + '("gint64" "buffering_left") + ) +) + +(define-method parse_buffering_stats + (of-object "GstQuery") + (c-name "gst_query_parse_buffering_stats") + (return-type "none") + (parameters + '("GstBufferingMode*" "mode") + '("gint*" "avg_in") + '("gint*" "avg_out") + '("gint64*" "buffering_left") + ) +) + +(define-method set_buffering_range + (of-object "GstQuery") + (c-name "gst_query_set_buffering_range") + (return-type "none") + (parameters + '("GstFormat" "format") + '("gint64" "start") + '("gint64" "stop") + '("gint64" "estimated_total") + ) +) + +(define-method parse_buffering_range + (of-object "GstQuery") + (c-name "gst_query_parse_buffering_range") + (return-type "none") + (parameters + '("GstFormat*" "format") + '("gint64*" "start") + '("gint64*" "stop") + '("gint64*" "estimated_total") + ) +) + +(define-method add_buffering_range + (of-object "GstQuery") + (c-name "gst_query_add_buffering_range") + (return-type "gboolean") + (parameters + '("gint64" "start") + '("gint64" "stop") + ) +) + +(define-method get_n_buffering_ranges + (of-object "GstQuery") + (c-name "gst_query_get_n_buffering_ranges") + (return-type "guint") +) + +(define-method parse_nth_buffering_range + (of-object "GstQuery") + (c-name "gst_query_parse_nth_buffering_range") + (return-type "gboolean") + (parameters + '("guint" "index") + '("gint64*" "start") + '("gint64*" "stop") + ) +) + +(define-function query_new_uri + (c-name "gst_query_new_uri") + (caller-owns-return #t) + (return-type "GstQuery*") +) + +(define-method parse_uri + (of-object "GstQuery") + (c-name "gst_query_parse_uri") + (return-type "none") + (parameters + '("gchar**" "uri") + ) +) + +(define-method set_uri + (of-object "GstQuery") + (c-name "gst_query_set_uri") + (return-type "none") + (parameters + '("const-gchar*" "uri") + ) +) + + +;; From ../gstreamer/gst/gstregistry.h + +(define-function registry_get_type + (c-name "gst_registry_get_type") + (return-type "GType") +) + +(define-function registry_get_default + (c-name "gst_registry_get_default") + (return-type "GstRegistry*") +) + +(define-method scan_path + (of-object "GstRegistry") + (c-name "gst_registry_scan_path") + (return-type "none") + (parameters + '("const-gchar*" "path") + ) +) + +(define-method add_path + (of-object "GstRegistry") + (c-name "gst_registry_add_path") + (return-type "none") + (parameters + '("const-gchar*" "path") + ) +) + +(define-method get_path_list + (of-object "GstRegistry") + (c-name "gst_registry_get_path_list") + (return-type "GList*") +) + +(define-method add_plugin + (of-object "GstRegistry") + (c-name "gst_registry_add_plugin") + (return-type "gboolean") + (parameters + '("GstPlugin*" "plugin") + ) +) + +(define-method remove_plugin + (of-object "GstRegistry") + (c-name "gst_registry_remove_plugin") + (return-type "none") + (parameters + '("GstPlugin*" "plugin") + ) +) + +(define-method get_plugin_list + (of-object "GstRegistry") + (c-name "gst_registry_get_plugin_list") + (return-type "GList*") +) + +(define-method plugin_filter + (of-object "GstRegistry") + (c-name "gst_registry_plugin_filter") + (return-type "GList*") + (parameters + '("GstPluginFilter" "filter") + '("gboolean" "first") + '("gpointer" "user_data") + ) +) + +(define-method find_plugin + (of-object "GstRegistry") + (c-name "gst_registry_find_plugin") + (return-type "GstPlugin*") + (caller-owns-return #t) + (parameters + '("const-gchar*" "name") + ) +) + +(define-method feature_filter + (of-object "GstRegistry") + (c-name "gst_registry_feature_filter") + (return-type "GList*") + (parameters + '("GstPluginFeatureFilter" "filter") + '("gboolean" "first") + '("gpointer" "user_data") + ) +) + +(define-method get_feature_list + (of-object "GstRegistry") + (c-name "gst_registry_get_feature_list") + (return-type "GList*") + (parameters + '("GType" "type") + ) +) + +(define-method get_feature_list_by_plugin + (of-object "GstRegistry") + (c-name "gst_registry_get_feature_list_by_plugin") + (return-type "GList*") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method get_feature_list_cookie + (of-object "GstRegistry") + (c-name "gst_registry_get_feature_list_cookie") + (return-type "guint32") +) + +(define-method add_feature + (of-object "GstRegistry") + (c-name "gst_registry_add_feature") + (return-type "gboolean") + (parameters + '("GstPluginFeature*" "feature") + ) +) + +(define-method remove_feature + (of-object "GstRegistry") + (c-name "gst_registry_remove_feature") + (return-type "none") + (parameters + '("GstPluginFeature*" "feature") + ) +) + + +(define-method find_feature + (of-object "GstRegistry") + (c-name "gst_registry_find_feature") + (return-type "GstPluginFeature*") + (caller-owns-return #t) + (parameters + '("const-gchar*" "name") + '("GType" "type") + ) +) + +(define-method lookup_feature + (of-object "GstRegistry") + (c-name "gst_registry_lookup_feature") + (return-type "GstPluginFeature*") + (caller-owns-return #t) + (parameters + '("const-char*" "name") + ) +) + +(define-method lookup + (of-object "GstRegistry") + (c-name "gst_registry_lookup") + (return-type "GstPlugin*") + (caller-owns-return #t) + (parameters + '("const-char*" "filename") + ) +) + +(define-method xml_read_cache + (of-object "GstRegistry") + (c-name "gst_registry_xml_read_cache") + (return-type "gboolean") + (parameters + '("const-char*" "location") + ) +) + +(define-method xml_write_cache + (of-object "GstRegistry") + (c-name "gst_registry_xml_write_cache") + (return-type "gboolean") + (parameters + '("const-char*" "location") + ) +) + +(define-function default_registry_check_feature_version + (c-name "gst_default_registry_check_feature_version") + (return-type "gboolean") + (parameters + '("const-gchar*" "feature_name") + '("guint" "min_major") + '("guint" "min_minor") + '("guint" "min_micro") + ) +) + +;; From ../gstreamer/gst/gstsegment.h + +(define-function gst_segment_get_type + (c-name "gst_segment_get_type") + (return-type "GType") +) + +(define-function gst_segment_new + (c-name "gst_segment_new") + (is-constructor-of "GstSegment") + (return-type "GstSegment*") +) + +(define-method free + (of-object "GstSegment") + (c-name "gst_segment_free") + (return-type "none") +) + +(define-method init + (of-object "GstSegment") + (c-name "gst_segment_init") + (return-type "none") + (parameters + '("GstFormat" "format") + ) +) + +(define-method set_duration + (of-object "GstSegment") + (c-name "gst_segment_set_duration") + (return-type "none") + (parameters + '("GstFormat" "format") + '("gint64" "duration") + ) +) + +(define-method set_last_stop + (of-object "GstSegment") + (c-name "gst_segment_set_last_stop") + (return-type "none") + (parameters + '("GstFormat" "format") + '("gint64" "position") + ) +) + +(define-method set_seek + (of-object "GstSegment") + (c-name "gst_segment_set_seek") + (return-type "none") + (parameters + '("gdouble" "rate") + '("GstFormat" "format") + '("GstSeekFlags" "flags") + '("GstSeekType" "start_type") + '("gint64" "start") + '("GstSeekType" "stop_type") + '("gint64" "stop") + '("gboolean*" "update") + ) +) + +(define-method set_newsegment + (of-object "GstSegment") + (c-name "gst_segment_set_newsegment") + (return-type "none") + (parameters + '("gboolean" "update") + '("gdouble" "rate") + '("GstFormat" "format") + '("gint64" "start") + '("gint64" "stop") + '("gint64" "time") + ) +) + +(define-method set_newsegment_full + (of-object "GstSegment") + (c-name "gst_segment_set_newsegment_full") + (return-type "none") + (parameters + '("gboolean" "update") + '("gdouble" "rate") + '("gdouble" "applied_rate") + '("GstFormat" "format") + '("gint64" "start") + '("gint64" "stop") + '("gint64" "time") + ) +) + +(define-method to_stream_time + (of-object "GstSegment") + (c-name "gst_segment_to_stream_time") + (return-type "gint64") + (parameters + '("GstFormat" "format") + '("gint64" "position") + ) +) + +(define-method to_running_time + (of-object "GstSegment") + (c-name "gst_segment_to_running_time") + (return-type "gint64") + (parameters + '("GstFormat" "format") + '("gint64" "position") + ) +) + +(define-method to_position + (of-object "GstSegment") + (c-name "gst_segment_to_position") + (return-type "gint64") + (parameters + '("GstFormat" "format") + '("gint64" "running_time") + ) +) + +(define-method clip + (of-object "GstSegment") + (c-name "gst_segment_clip") + (return-type "gboolean") + (parameters + '("GstFormat" "format") + '("gint64" "start") + '("gint64" "stop") + '("gint64*" "clip_start") + '("gint64*" "clip_stop") + ) +) + +(define-method set_running_time + (of-object "GstSegment") + (c-name "gst_segment_set_running_time") + (return-type "gboolean") + (parameters + '("GstFormat" "format") + '("gint64" "running_time") + ) +) + + + +;; From ../gstreamer/gst/gststructure.h + +(define-function structure_get_type + (c-name "gst_structure_get_type") + (return-type "GType") +) + +(define-function structure_empty_new + (c-name "gst_structure_empty_new") + (is-constructor-of "GstStructureEmpty") + (return-type "GstStructure*") + (parameters + '("const-gchar*" "name") + ) +) + +(define-function structure_id_empty_new + (c-name "gst_structure_id_empty_new") + (is-constructor-of "GstStructureIdEmpty") + (return-type "GstStructure*") + (parameters + '("GQuark" "quark") + ) +) + +(define-function structure_new + (c-name "gst_structure_new") + (is-constructor-of "GstStructure") + (return-type "GstStructure*") + (parameters + '("const-gchar*" "name") + '("const-gchar*" "firstfield") + ) + (varargs #t) +) + +(define-function structure_new_valist + (c-name "gst_structure_new_valist") + (return-type "GstStructure*") + (caller-owns-return #t) + (parameters + '("const-gchar*" "name") + '("const-gchar*" "firstfield") + '("va_list" "varargs") + ) +) + +(define-function gst_structure_id_new + (c-name "gst_structure_id_new") + (is-constructor-of "GstStructureId") + (return-type "GstStructure*") + (parameters + '("GQuark" "name_quark") + '("GQuark" "field_quark") + ) + (varargs #t) +) + +(define-method copy + (of-object "GstStructure") + (c-name "gst_structure_copy") + (return-type "GstStructure*") + (caller-owns-return #t) +) + +(define-method set_parent_refcount + (of-object "GstStructure") + (c-name "gst_structure_set_parent_refcount") + (return-type "none") + (parameters + '("gint*" "refcount") + ) +) + +(define-method free + (of-object "GstStructure") + (c-name "gst_structure_free") + (return-type "none") +) + +(define-method get_name + (of-object "GstStructure") + (c-name "gst_structure_get_name") + (return-type "const-gchar*") +) + +(define-method get_name_id + (of-object "GstStructure") + (c-name "gst_structure_get_name_id") + (return-type "GQuark") +) + +(define-method has_name + (of-object "GstStructure") + (c-name "gst_structure_has_name") + (return-type "gboolean") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method set_name + (of-object "GstStructure") + (c-name "gst_structure_set_name") + (return-type "none") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method id_set_value + (of-object "GstStructure") + (c-name "gst_structure_id_set_value") + (return-type "none") + (parameters + '("GQuark" "field") + '("const-GValue*" "value") + ) +) + +(define-method set_value + (of-object "GstStructure") + (c-name "gst_structure_set_value") + (return-type "none") + (parameters + '("const-gchar*" "fieldname") + '("const-GValue*" "value") + ) +) + +(define-method id_take_value + (of-object "GstStructure") + (c-name "gst_structure_id_take_value") + (return-type "none") + (parameters + '("GQuark" "field") + '("GValue*" "value") + ) +) + +(define-method take_value + (of-object "GstStructure") + (c-name "gst_structure_take_value") + (return-type "none") + (parameters + '("const-gchar*" "fieldname") + '("GValue*" "value") + ) +) + +(define-method set + (of-object "GstStructure") + (c-name "gst_structure_set") + (return-type "none") + (parameters + '("const-gchar*" "fieldname") + ) + (varargs #t) +) + +(define-method set_valist + (of-object "GstStructure") + (c-name "gst_structure_set_valist") + (return-type "none") + (parameters + '("const-gchar*" "fieldname") + '("va_list" "varargs") + ) +) + +(define-method id_set + (of-object "GstStructure") + (c-name "gst_structure_id_set") + (return-type "none") + (parameters + '("GQuark" "fieldname") + ) + (varargs #t) +) + +(define-method id_set_valist + (of-object "GstStructure") + (c-name "gst_structure_id_set_valist") + (return-type "none") + (parameters + '("GQuark" "fieldname") + '("va_list" "varargs") + ) +) + +(define-method get_valist + (of-object "GstStructure") + (c-name "gst_structure_get_valist") + (return-type "gboolean") + (parameters + '("const-char*" "first_fieldname") + '("va_list" "args") + ) +) + +(define-method get + (of-object "GstStructure") + (c-name "gst_structure_get") + (return-type "gboolean") + (parameters + '("const-char*" "first_fieldname") + ) + (varargs #t) +) + +(define-method id_get_valist + (of-object "GstStructure") + (c-name "gst_structure_id_get_valist") + (return-type "gboolean") + (parameters + '("GQuark" "first_field_id") + '("va_list" "args") + ) +) + +(define-method id_get + (of-object "GstStructure") + (c-name "gst_structure_id_get") + (return-type "gboolean") + (parameters + '("GQuark" "first_field_id") + ) + (varargs #t) +) + +(define-method id_get_value + (of-object "GstStructure") + (c-name "gst_structure_id_get_value") + (return-type "const-GValue*") + (parameters + '("GQuark" "field") + ) +) + +(define-method get_value + (of-object "GstStructure") + (c-name "gst_structure_get_value") + (return-type "const-GValue*") + (parameters + '("const-gchar*" "fieldname") + ) +) + +(define-method remove_field + (of-object "GstStructure") + (c-name "gst_structure_remove_field") + (return-type "none") + (parameters + '("const-gchar*" "fieldname") + ) +) + +(define-method remove_fields + (of-object "GstStructure") + (c-name "gst_structure_remove_fields") + (return-type "none") + (parameters + '("const-gchar*" "fieldname") + ) + (varargs #t) +) + +(define-method remove_fields_valist + (of-object "GstStructure") + (c-name "gst_structure_remove_fields_valist") + (return-type "none") + (parameters + '("const-gchar*" "fieldname") + '("va_list" "varargs") + ) +) + +(define-method remove_all_fields + (of-object "GstStructure") + (c-name "gst_structure_remove_all_fields") + (return-type "none") +) + +(define-method get_field_type + (of-object "GstStructure") + (c-name "gst_structure_get_field_type") + (return-type "GType") + (parameters + '("const-gchar*" "fieldname") + ) +) + +(define-method foreach + (of-object "GstStructure") + (c-name "gst_structure_foreach") + (return-type "gboolean") + (parameters + '("GstStructureForeachFunc" "func") + '("gpointer" "user_data") + ) +) + +(define-method map_in_place + (of-object "GstStructure") + (c-name "gst_structure_map_in_place") + (return-type "gboolean") + (parameters + '("GstStructureMapFunc" "func") + '("gpointer" "user_data") + ) +) + +(define-method n_fields + (of-object "GstStructure") + (c-name "gst_structure_n_fields") + (return-type "gint") +) + +(define-method nth_field_name + (of-object "GstStructure") + (c-name "gst_structure_nth_field_name") + (return-type "const-gchar*") + (parameters + '("guint" "index") + ) +) + +(define-method id_has_field + (of-object "GstStructure") + (c-name "gst_structure_id_has_field") + (return-type "gboolean") + (parameters + '("GQuark" "field") + ) +) + +(define-method id_has_field_typed + (of-object "GstStructure") + (c-name "gst_structure_id_has_field_typed") + (return-type "gboolean") + (parameters + '("GQuark" "field") + '("GType" "type") + ) +) + +(define-method has_field + (of-object "GstStructure") + (c-name "gst_structure_has_field") + (return-type "gboolean") + (parameters + '("const-gchar*" "fieldname") + ) +) + +(define-method has_field_typed + (of-object "GstStructure") + (c-name "gst_structure_has_field_typed") + (return-type "gboolean") + (parameters + '("const-gchar*" "fieldname") + '("GType" "type") + ) +) + +(define-method keys + (of-object "GstStructure") + (c-name "gst_structure_keys") + (return-type "GList*") +) + + +(define-method get_boolean + (of-object "GstStructure") + (c-name "gst_structure_get_boolean") + (return-type "gboolean") + (parameters + '("const-gchar*" "fieldname") + '("gboolean*" "value") + ) +) + +(define-method get_int + (of-object "GstStructure") + (c-name "gst_structure_get_int") + (return-type "gboolean") + (parameters + '("const-gchar*" "fieldname") + '("gint*" "value") + ) +) + +(define-method get_uint + (of-object "GstStructure") + (c-name "gst_structure_get_uint") + (return-type "gboolean") + (parameters + '("const-gchar*" "fieldname") + '("guint*" "value") + ) +) + +(define-method get_fourcc + (of-object "GstStructure") + (c-name "gst_structure_get_fourcc") + (return-type "gboolean") + (parameters + '("const-gchar*" "fieldname") + '("guint32*" "value") + ) +) + +(define-method get_double + (of-object "GstStructure") + (c-name "gst_structure_get_double") + (return-type "gboolean") + (parameters + '("const-gchar*" "fieldname") + '("gdouble*" "value") + ) +) + +(define-method get_date + (of-object "GstStructure") + (c-name "gst_structure_get_date") + (return-type "gboolean") + (parameters + '("const-gchar*" "fieldname") + '("GDate**" "value") + ) +) + +(define-method get_clock_time + (of-object "GstStructure") + (c-name "gst_structure_get_clock_time") + (return-type "gboolean") + (parameters + '("const-gchar*" "fieldname") + '("GstClockTime*" "value") + ) +) + +(define-method get_string + (of-object "GstStructure") + (c-name "gst_structure_get_string") + (return-type "const-gchar*") + (parameters + '("const-gchar*" "fieldname") + ) +) + +(define-method get_enum + (of-object "GstStructure") + (c-name "gst_structure_get_enum") + (return-type "gboolean") + (parameters + '("const-gchar*" "fieldname") + '("GType" "enumtype") + '("gint*" "value") + ) +) + +(define-method get_fraction + (of-object "GstStructure") + (c-name "gst_structure_get_fraction") + (return-type "gboolean") + (parameters + '("const-gchar*" "fieldname") + '("gint*" "value_numerator") + '("gint*" "value_denominator") + ) +) + +(define-method to_string + (of-object "GstStructure") + (c-name "gst_structure_to_string") + (return-type "gchar*") +) + +(define-function structure_from_string + (c-name "gst_structure_from_string") + (return-type "GstStructure*") + (caller-owns-return #t) + (parameters + '("const-gchar*" "string") + '("gchar**" "end") + ) +) + +(define-method fixate_field_nearest_int + (of-object "GstStructure") + (c-name "gst_structure_fixate_field_nearest_int") + (return-type "gboolean") + (parameters + '("const-char*" "field_name") + '("int" "target") + ) +) + +(define-method fixate_field_nearest_double + (of-object "GstStructure") + (c-name "gst_structure_fixate_field_nearest_double") + (return-type "gboolean") + (parameters + '("const-char*" "field_name") + '("double" "target") + ) +) + +(define-method fixate_field_boolean + (of-object "GstStructure") + (c-name "gst_structure_fixate_field_boolean") + (return-type "gboolean") + (parameters + '("const-char*" "field_name") + '("gboolean" "target") + ) +) + +(define-method fixate_field_string + (of-object "GstStructure") + (c-name "gst_structure_fixate_field_string") + (return-type "gboolean") + (parameters + '("const-char*" "field_name") + '("const-gchar*" "target") + ) +) + +(define-method fixate_field_nearest_fraction + (of-object "GstStructure") + (c-name "gst_structure_fixate_field_nearest_fraction") + (return-type "gboolean") + (parameters + '("const-char*" "field_name") + '("const-gint" "target_numerator") + '("const-gint" "target_denominator") + ) +) + + +;; From ../gstreamer/gst/gstsystemclock.h + +(define-function system_clock_get_type + (c-name "gst_system_clock_get_type") + (return-type "GType") +) + +(define-function system_clock_obtain + (c-name "gst_system_clock_obtain") + (return-type "GstClock*") + (caller-owns-return #t) +) + + + +;; From ../gstreamer/gst/gsttag.h + +(define-function tag_list_get_type + (c-name "gst_tag_list_get_type") + (return-type "GType") +) + +(define-function tag_register + (c-name "gst_tag_register") + (return-type "none") + (parameters + '("const-gchar*" "name") + '("GstTagFlag" "flag") + '("GType" "type") + '("const-gchar*" "nick") + '("const-gchar*" "blurb") + '("GstTagMergeFunc" "func") + ) +) + +(define-function tag_merge_use_first + (c-name "gst_tag_merge_use_first") + (return-type "none") + (parameters + '("GValue*" "dest") + '("const-GValue*" "src") + ) +) + +(define-function tag_merge_strings_with_comma + (c-name "gst_tag_merge_strings_with_comma") + (return-type "none") + (parameters + '("GValue*" "dest") + '("const-GValue*" "src") + ) +) + +(define-function tag_exists + (c-name "gst_tag_exists") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + ) +) + +(define-function tag_get_tag_type + (c-name "gst_tag_get_tag_type") + (return-type "GType") + (parameters + '("const-gchar*" "tag") + ) +) + +(define-function tag_get_nick + (c-name "gst_tag_get_nick") + (return-type "const-gchar*") + (parameters + '("const-gchar*" "tag") + ) +) + +(define-function tag_get_description + (c-name "gst_tag_get_description") + (return-type "const-gchar*") + (parameters + '("const-gchar*" "tag") + ) +) + +(define-function tag_get_flag + (c-name "gst_tag_get_flag") + (return-type "GstTagFlag") + (parameters + '("const-gchar*" "tag") + ) +) + +(define-function tag_is_fixed + (c-name "gst_tag_is_fixed") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + ) +) + +(define-function tag_list_new + (c-name "gst_tag_list_new") + (is-constructor-of "GstTagList") + (return-type "GstTagList*") +) + +(define-function is_tag_list + (c-name "gst_is_tag_list") + (return-type "gboolean") + (parameters + '("gconstpointer" "p") + ) +) + +(define-method copy + (of-object "GstTagList") + (c-name "gst_tag_list_copy") + (return-type "GstTagList*") + (caller-owns-return #t) +) + +(define-method is_empty + (of-object "GstTagList") + (c-name "gst_tag_list_is_empty") + (return-type "gboolean") +) + +(define-method insert + (of-object "GstTagList") + (c-name "gst_tag_list_insert") + (return-type "none") + (parameters + '("const-GstTagList*" "from") + '("GstTagMergeMode" "mode") + ) +) + +(define-method merge + (of-object "GstTagList") + (c-name "gst_tag_list_merge") + (return-type "GstTagList*") + (caller-owns-return #t) + (parameters + '("const-GstTagList*" "list2") + '("GstTagMergeMode" "mode") + ) +) + +(define-method free + (of-object "GstTagList") + (c-name "gst_tag_list_free") + (return-type "none") +) + +(define-method get_tag_size + (of-object "GstTagList") + (c-name "gst_tag_list_get_tag_size") + (return-type "guint") + (parameters + '("const-gchar*" "tag") + ) +) + +(define-method add + (of-object "GstTagList") + (c-name "gst_tag_list_add") + (return-type "none") + (parameters + '("GstTagMergeMode" "mode") + '("const-gchar*" "tag") + ) + (varargs #t) +) + +(define-method add_values + (of-object "GstTagList") + (c-name "gst_tag_list_add_values") + (return-type "none") + (parameters + '("GstTagMergeMode" "mode") + '("const-gchar*" "tag") + ) + (varargs #t) +) + +(define-method add_valist + (of-object "GstTagList") + (c-name "gst_tag_list_add_valist") + (return-type "none") + (parameters + '("GstTagMergeMode" "mode") + '("const-gchar*" "tag") + '("va_list" "var_args") + ) +) + +(define-method add_valist_values + (of-object "GstTagList") + (c-name "gst_tag_list_add_valist_values") + (return-type "none") + (parameters + '("GstTagMergeMode" "mode") + '("const-gchar*" "tag") + '("va_list" "var_args") + ) +) + +(define-method add_value + (of-object "GstTagList") + (c-name "gst_tag_list_add_value") + (return-type "none") + (parameters + '("GstTagMergeMode" "mode") + '("const-gchar*" "tag") + '("const-GValue*" "value") + ) +) + +(define-method remove_tag + (of-object "GstTagList") + (c-name "gst_tag_list_remove_tag") + (return-type "none") + (parameters + '("const-gchar*" "tag") + ) +) + +(define-method foreach + (of-object "GstTagList") + (c-name "gst_tag_list_foreach") + (return-type "none") + (parameters + '("GstTagForeachFunc" "func") + '("gpointer" "user_data") + ) +) + +(define-method get_value_index + (of-object "GstTagList") + (c-name "gst_tag_list_get_value_index") + (return-type "const-GValue*") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + ) +) + +(define-function tag_list_copy_value + (c-name "gst_tag_list_copy_value") + (return-type "gboolean") + (parameters + '("GValue*" "dest") + '("const-GstTagList*" "list") + '("const-gchar*" "tag") + ) +) + +(define-method get_char + (of-object "GstTagList") + (c-name "gst_tag_list_get_char") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("gchar*" "value") + ) +) + +(define-method get_char_index + (of-object "GstTagList") + (c-name "gst_tag_list_get_char_index") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + '("gchar*" "value") + ) +) + +(define-method get_uchar + (of-object "GstTagList") + (c-name "gst_tag_list_get_uchar") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guchar*" "value") + ) +) + +(define-method get_uchar_index + (of-object "GstTagList") + (c-name "gst_tag_list_get_uchar_index") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + '("guchar*" "value") + ) +) + +(define-method get_boolean + (of-object "GstTagList") + (c-name "gst_tag_list_get_boolean") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("gboolean*" "value") + ) +) + +(define-method get_boolean_index + (of-object "GstTagList") + (c-name "gst_tag_list_get_boolean_index") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + '("gboolean*" "value") + ) +) + +(define-method get_int + (of-object "GstTagList") + (c-name "gst_tag_list_get_int") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("gint*" "value") + ) +) + +(define-method get_int_index + (of-object "GstTagList") + (c-name "gst_tag_list_get_int_index") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + '("gint*" "value") + ) +) + +(define-method get_uint + (of-object "GstTagList") + (c-name "gst_tag_list_get_uint") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint*" "value") + ) +) + +(define-method get_uint_index + (of-object "GstTagList") + (c-name "gst_tag_list_get_uint_index") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + '("guint*" "value") + ) +) + +(define-method get_long + (of-object "GstTagList") + (c-name "gst_tag_list_get_long") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("glong*" "value") + ) +) + +(define-method get_long_index + (of-object "GstTagList") + (c-name "gst_tag_list_get_long_index") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + '("glong*" "value") + ) +) + +(define-method get_ulong + (of-object "GstTagList") + (c-name "gst_tag_list_get_ulong") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("gulong*" "value") + ) +) + +(define-method get_ulong_index + (of-object "GstTagList") + (c-name "gst_tag_list_get_ulong_index") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + '("gulong*" "value") + ) +) + +(define-method get_int64 + (of-object "GstTagList") + (c-name "gst_tag_list_get_int64") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("gint64*" "value") + ) +) + +(define-method get_int64_index + (of-object "GstTagList") + (c-name "gst_tag_list_get_int64_index") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + '("gint64*" "value") + ) +) + +(define-method get_uint64 + (of-object "GstTagList") + (c-name "gst_tag_list_get_uint64") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint64*" "value") + ) +) + +(define-method get_uint64_index + (of-object "GstTagList") + (c-name "gst_tag_list_get_uint64_index") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + '("guint64*" "value") + ) +) + +(define-method get_float + (of-object "GstTagList") + (c-name "gst_tag_list_get_float") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("gfloat*" "value") + ) +) + +(define-method get_float_index + (of-object "GstTagList") + (c-name "gst_tag_list_get_float_index") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + '("gfloat*" "value") + ) +) + +(define-method get_double + (of-object "GstTagList") + (c-name "gst_tag_list_get_double") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("gdouble*" "value") + ) +) + +(define-method get_double_index + (of-object "GstTagList") + (c-name "gst_tag_list_get_double_index") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + '("gdouble*" "value") + ) +) + +(define-method get_string + (of-object "GstTagList") + (c-name "gst_tag_list_get_string") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("gchar**" "value") + ) +) + +(define-method get_string_index + (of-object "GstTagList") + (c-name "gst_tag_list_get_string_index") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + '("gchar**" "value") + ) +) + +(define-method peek_string_index + (of-object "GstTagList") + (c-name "gst_tag_list_peek_string_index") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + '("const-gchar**" "value") + ) +) + +(define-method get_pointer + (of-object "GstTagList") + (c-name "gst_tag_list_get_pointer") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("gpointer*" "value") + ) +) + +(define-method get_pointer_index + (of-object "GstTagList") + (c-name "gst_tag_list_get_pointer_index") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + '("gpointer*" "value") + ) +) + +(define-method get_date + (of-object "GstTagList") + (c-name "gst_tag_list_get_date") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("GDate**" "value") + ) +) + +(define-method get_date_index + (of-object "GstTagList") + (c-name "gst_tag_list_get_date_index") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + '("GDate**" "value") + ) +) + +(define-method get_buffer + (of-object "GstTagList") + (c-name "gst_tag_list_get_buffer") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("GstBuffer**" "value") + ) +) + +(define-method get_buffer_index + (of-object "GstTagList") + (c-name "gst_tag_list_get_buffer_index") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + '("GstBuffer**" "value") + ) +) + +;; From ../gstreamer/gst/gsttaginterface.h + +(define-function tag_setter_get_type + (c-name "gst_tag_setter_get_type") + (return-type "GType") +) + +(define-method reset_tags + (of-object "GstTagSetter") + (c-name "gst_tag_setter_reset_tags") + (return-type "none") +) + +(define-method merge_tags + (of-object "GstTagSetter") + (c-name "gst_tag_setter_merge_tags") + (return-type "none") + (parameters + '("const-GstTagList*" "list") + '("GstTagMergeMode" "mode") + ) +) + +(define-method add_tags + (of-object "GstTagSetter") + (c-name "gst_tag_setter_add_tags") + (return-type "none") + (parameters + '("GstTagMergeMode" "mode") + '("const-gchar*" "tag") + ) + (varargs #t) +) + +(define-method add_tag_values + (of-object "GstTagSetter") + (c-name "gst_tag_setter_add_tag_values") + (return-type "none") + (parameters + '("GstTagMergeMode" "mode") + '("const-gchar*" "tag") + ) + (varargs #t) +) + +(define-method add_tag_valist + (of-object "GstTagSetter") + (c-name "gst_tag_setter_add_tag_valist") + (return-type "none") + (parameters + '("GstTagMergeMode" "mode") + '("const-gchar*" "tag") + '("va_list" "var_args") + ) +) + +(define-method add_tag_valist_values + (of-object "GstTagSetter") + (c-name "gst_tag_setter_add_tag_valist_values") + (return-type "none") + (parameters + '("GstTagMergeMode" "mode") + '("const-gchar*" "tag") + '("va_list" "var_args") + ) +) + +(define-method add_tag_value + (of-object "GstTagSetter") + (c-name "gst_tag_setter_add_tag_value") + (return-type "none") + (parameters + '("GstTagMergeMode" "mode") + '("const-gchar*" "tag") + '("const-GValue*" "value") + ) +) + +(define-method get_tag_list + (of-object "GstTagSetter") + (c-name "gst_tag_setter_get_tag_list") + (return-type "const-GstTagList*") +) + +(define-method set_tag_merge_mode + (of-object "GstTagSetter") + (c-name "gst_tag_setter_set_tag_merge_mode") + (return-type "none") + (parameters + '("GstTagMergeMode" "mode") + ) +) + +(define-method get_tag_merge_mode + (of-object "GstTagSetter") + (c-name "gst_tag_setter_get_tag_merge_mode") + (return-type "GstTagMergeMode") +) + + + +;; From ../gstreamer/gst/gsttask.h + +(define-function task_get_type + (c-name "gst_task_get_type") + (return-type "GType") +) + +(define-function task_create + (c-name "gst_task_create") + (return-type "GstTask*") + (parameters + '("GstTaskFunction" "func") + '("gpointer" "data") + ) +) + +(define-method set_lock + (of-object "GstTask") + (c-name "gst_task_set_lock") + (return-type "none") + (parameters + '("GStaticRecMutex*" "mutex") + ) +) + +(define-method set_priority + (of-object "GstTask") + (c-name "gst_task_set_priority") + (return-type "none") + (parameters + '("GThreadPriority" "priority") + ) +) + +(define-method get_pool + (of-object "GstTask") + (c-name "gst_task_get_pool") + (return-type "GstTaskPool*") +) + +(define-method set_pool + (of-object "GstTask") + (c-name "gst_task_set_pool") + (return-type "none") + (parameters + '("GstTaskPool*" "pool") + ) +) + +(define-method set_thread_callbacks + (of-object "GstTask") + (c-name "gst_task_set_thread_callbacks") + (return-type "none") + (parameters + '("GstTaskThreadCallbacks*" "callbacks") + '("gpointer" "user_data") + '("GDestroyNotify" "notify") + ) +) + +(define-method get_state + (of-object "GstTask") + (c-name "gst_task_get_state") + (return-type "GstTaskState") +) + +(define-method set_state + (of-object "GstTask") + (c-name "gst_task_set_state") + (return-type "gboolean") + (parameters + '("GstTaskState" "state") + ) +) + +(define-method start + (of-object "GstTask") + (c-name "gst_task_start") + (return-type "gboolean") +) + +(define-method stop + (of-object "GstTask") + (c-name "gst_task_stop") + (return-type "gboolean") +) + +(define-method pause + (of-object "GstTask") + (c-name "gst_task_pause") + (return-type "gboolean") +) + +;; From gsttaskpool.h + +(define-function gst_task_pool_get_type + (c-name "gst_task_pool_get_type") + (return-type "GType") +) + +(define-function gst_task_pool_new + (c-name "gst_task_pool_new") + (is-constructor-of "GstTaskPool") + (return-type "GstTaskPool*") +) + +(define-method prepare + (of-object "GstTaskPool") + (c-name "gst_task_pool_prepare") + (return-type "none") + (parameters + '("GError**" "error") + ) +) + +(define-method push + (of-object "GstTaskPool") + (c-name "gst_task_pool_push") + (return-type "gpointer") + (parameters + '("GstTaskPoolFunction" "func") + '("gpointer" "user_data") + '("GError**" "error") + ) +) + +(define-method join + (of-object "GstTaskPool") + (c-name "gst_task_pool_join") + (return-type "none") + (parameters + '("gpointer" "id") + ) +) + +(define-method cleanup + (of-object "GstTaskPool") + (c-name "gst_task_pool_cleanup") + (return-type "none") +) + +;; From ../gstreamer/gst/gsttrace.h + +(define-function trace_new + (c-name "gst_trace_new") + (is-constructor-of "GstTrace") + (return-type "GstTrace*") + (parameters + '("gchar*" "filename") + '("gint" "size") + ) +) + +(define-method destroy + (of-object "GstTrace") + (c-name "gst_trace_destroy") + (return-type "none") +) + +(define-method flush + (of-object "GstTrace") + (c-name "gst_trace_flush") + (return-type "none") +) + +(define-method text_flush + (of-object "GstTrace") + (c-name "gst_trace_text_flush") + (return-type "none") +) + +(define-method set_default + (of-object "GstTrace") + (c-name "gst_trace_set_default") + (return-type "none") +) + +(define-function trace_read_tsc + (c-name "gst_trace_read_tsc") + (return-type "none") + (parameters + '("gint64*" "dst") + ) +) + +(define-function alloc_trace_available + (c-name "gst_alloc_trace_available") + (return-type "gboolean") +) + +(define-function alloc_trace_list + (c-name "gst_alloc_trace_list") + (return-type "const-GList*") +) + +(define-function alloc_trace_live_all + (c-name "gst_alloc_trace_live_all") + (return-type "int") +) + +(define-function alloc_trace_print_all + (c-name "gst_alloc_trace_print_all") + (return-type "none") +) + +(define-function alloc_trace_print_live + (c-name "gst_alloc_trace_print_live") + (return-type "none") +) + +(define-function alloc_trace_set_flags_all + (c-name "gst_alloc_trace_set_flags_all") + (return-type "none") + (parameters + '("GstAllocTraceFlags" "flags") + ) +) + +(define-function alloc_trace_get + (c-name "gst_alloc_trace_get") + (return-type "GstAllocTrace*") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method print + (of-object "GstAllocTrace") + (c-name "gst_alloc_trace_print") + (return-type "none") +) + +(define-method set_flags + (of-object "GstAllocTrace") + (c-name "gst_alloc_trace_set_flags") + (return-type "none") + (parameters + '("GstAllocTraceFlags" "flags") + ) +) + + + +;; From ../gstreamer/gst/gsttypefind.h + +(define-function type_find_new + (c-name "gst_type_find_new") + (return-type "GstTypeFind*") +) + +(define-method peek + (of-object "GstTypeFind") + (c-name "gst_type_find_peek") + (return-type "guint8*") + (parameters + '("gint64" "offset") + '("guint" "size") + ) +) + +(define-method suggest + (of-object "GstTypeFind") + (c-name "gst_type_find_suggest") + (return-type "none") + (parameters + '("guint" "probability") + '("const-GstCaps*" "caps") + ) +) + +(define-method suggest_simple + (of-object "GstTypeFind") + (c-name "gst_type_find_suggest_simple") + (return-type "none") + (parameters + '("guint" "probability") + '("const-char*" "media_type") + '("const-char*" "fieldname") + ) + (varargs #t) +) + +(define-method get_length + (of-object "GstTypeFind") + (c-name "gst_type_find_get_length") + (return-type "guint64") +) + +(define-function type_find_register + (c-name "gst_type_find_register") + (return-type "gboolean") + (parameters + '("GstPlugin*" "plugin") + '("const-gchar*" "name") + '("guint" "rank") + '("GstTypeFindFunction" "func") + '("gchar**" "extensions") + '("const-GstCaps*" "possible_caps") + '("gpointer" "data") + '("GDestroyNotify" "data_notify") + ) +) + +(define-function type_find_factory_get_type + (c-name "gst_type_find_factory_get_type") + (return-type "GType") +) + +(define-function type_find_factory_get_list + (c-name "gst_type_find_factory_get_list") + (return-type "GList*") +) + +(define-method get_extensions + (of-object "GstTypeFindFactory") + (c-name "gst_type_find_factory_get_extensions") + (return-type "GStrv") +) + +(define-method get_caps + (of-object "GstTypeFindFactory") + (c-name "gst_type_find_factory_get_caps") + (return-type "GstCaps*") +) + +(define-method call_function + (of-object "GstTypeFindFactory") + (c-name "gst_type_find_factory_call_function") + (return-type "none") + (parameters + '("GstTypeFind*" "find") + ) +) + + +;; From ../gstreamer/gst/gsturi.h + +(define-function uri_protocol_is_valid + (c-name "gst_uri_protocol_is_valid") + (return-type "gboolean") + (parameters + '("const-gchar*" "protocol") + ) +) + +(define-function uri_protocol_is_supported + (c-name "gst_uri_protocol_is_supported") + (return-type "gboolean") + (parameters + '("GstURIType" "type") + '("const-gchar*" "protocol") + ) +) + +(define-function uri_is_valid + (c-name "gst_uri_is_valid") + (return-type "gboolean") + (parameters + '("const-gchar*" "uri") + ) +) + +(define-function uri_get_protocol + (c-name "gst_uri_get_protocol") + (return-type "gchar*") + (parameters + '("const-gchar*" "uri") + ) +) + +(define-function uri_has_protocol + (c-name "gst_uri_has_protocol") + (return-type "gboolean") + (parameters + '("const-gchar*" "uri") + '("const-gchar*" "protocol") + ) +) + +(define-function uri_get_location + (c-name "gst_uri_get_location") + (return-type "gchar*") + (parameters + '("const-gchar*" "uri") + ) +) + +(define-function uri_construct + (c-name "gst_uri_construct") + (return-type "gchar*") + (parameters + '("const-gchar*" "protocol") + '("const-gchar*" "location") + ) +) + +(define-function element_make_from_uri + (c-name "gst_element_make_from_uri") + (return-type "GstElement*") + (parameters + '("GstURIType" "type") + '("const-gchar*" "uri") + '("const-gchar*" "elementname" (null-ok) (default "NULL")) + ) +) + +(define-function uri_handler_get_type + (c-name "gst_uri_handler_get_type") + (return-type "GType") +) + +(define-method get_uri_type + (of-object "GstURIHandler") + (c-name "gst_uri_handler_get_uri_type") + (return-type "GstURIType") +) + +(define-method get_protocols + (of-object "GstURIHandler") + (c-name "gst_uri_handler_get_protocols") + (return-type "GStrv") +) + +(define-method get_uri + (of-object "GstURIHandler") + (c-name "gst_uri_handler_get_uri") + (return-type "const-gchar*") +) + +(define-method set_uri + (of-object "GstURIHandler") + (c-name "gst_uri_handler_set_uri") + (return-type "gboolean") + (parameters + '("const-gchar*" "uri") + ) +) + +(define-method new_uri + (of-object "GstURIHandler") + (c-name "gst_uri_handler_new_uri") + (return-type "none") + (parameters + '("const-gchar*" "uri") + ) +) + +(define-virtual get_type_full + (of-object "GstURIHandler") + (parameters + '("GType" "type") + ) + (return-type "guint") +) + +(define-virtual get_protocols_full + (of-object "GstURIHandler") + (parameters + '("GType" "type") + ) + (return-type "GStrv") +) + +(define-virtual get_uri + (of-object "GstURIHandler") + (return-type "const-gchar*") +) + +(define-virtual set_uri + (of-object "GstURIHandler") + (return-type "gboolean") + (parameters + '("const-gchar*" "uri") + ) +) + +;; From ../gstreamer/gst/gstutils.h + +(define-function util_set_value_from_string + (c-name "gst_util_set_value_from_string") + (return-type "none") + (parameters + '("GValue*" "value") + '("const-gchar*" "value_str") + ) +) + +(define-function util_set_object_arg + (c-name "gst_util_set_object_arg") + (return-type "none") + (parameters + '("GObject*" "object") + '("const-gchar*" "name") + '("const-gchar*" "value") + ) +) + +(define-function util_dump_mem + (c-name "gst_util_dump_mem") + (return-type "none") + (parameters + '("const-guchar*" "mem") + '("guint" "size") + ) +) + +(define-function util_gdouble_to_guint64 + (c-name "gst_util_gdouble_to_guint64") + (return-type "guint64") + (parameters + '("gdouble" "value") + ) +) + +(define-function util_guint64_to_gdouble + (c-name "gst_util_guint64_to_gdouble") + (return-type "gdouble") + (parameters + '("guint64" "value") + ) +) + +(define-function util_uint64_scale + (c-name "gst_util_uint64_scale") + (return-type "guint64") + (parameters + '("guint64" "val") + '("guint64" "num") + '("guint64" "denom") + ) +) + +(define-function util_uint64_scale_round + (c-name "gst_util_uint64_scale_round") + (return-type "guint64") + (parameters + '("guint64" "val") + '("guint64" "num") + '("guint64" "denom") + ) +) + +(define-function util_uint64_scale_ceil + (c-name "gst_util_uint64_scale_ceil") + (return-type "guint64") + (parameters + '("guint64" "val") + '("guint64" "num") + '("guint64" "denom") + ) +) + +(define-function util_uint64_scale_int + (c-name "gst_util_uint64_scale_int") + (return-type "guint64") + (parameters + '("guint64" "val") + '("gint" "num") + '("gint" "denom") + ) +) + +(define-function util_uint64_scale_int_round + (c-name "gst_util_uint64_scale_int_round") + (return-type "guint64") + (parameters + '("guint64" "val") + '("gint" "num") + '("gint" "denom") + ) +) + +(define-function util_uint64_scale_int_ceil + (c-name "gst_util_uint64_scale_int_ceil") + (return-type "guint64") + (parameters + '("guint64" "val") + '("gint" "num") + '("gint" "denom") + ) +) + +(define-function util_seqnum_next + (c-name "gst_util_seqnum_next") + (return-type "guint32") +) + +(define-function util_seqnum_compare + (c-name "gst_util_seqnum_compare") + (return-type "gint32") + (parameters + '("guint32" "s1") + '("guint32" "s2") + ) +) + +(define-function print_pad_caps + (c-name "gst_print_pad_caps") + (return-type "none") + (parameters + '("GString*" "buf") + '("gint" "indent") + '("GstPad*" "pad") + ) +) + +(define-function print_element_args + (c-name "gst_print_element_args") + (return-type "none") + (parameters + '("GString*" "buf") + '("gint" "indent") + '("GstElement*" "element") + ) +) + +(define-method default_error + (of-object "GstObject") + (c-name "gst_object_default_error") + (return-type "none") + (parameters + '("GError*" "error") + '("gchar*" "debug") + ) +) + +(define-method create_all_pads + (of-object "GstElement") + (c-name "gst_element_create_all_pads") + (return-type "none") +) + +(define-method get_compatible_pad + (of-object "GstElement") + (c-name "gst_element_get_compatible_pad") + (return-type "GstPad*") + (parameters + '("GstPad*" "pad") + '("const-GstCaps*" "caps" (null-ok) (default "NULL")) + ) +) + +(define-method get_compatible_pad_template + (of-object "GstElement") + (c-name "gst_element_get_compatible_pad_template") + (return-type "GstPadTemplate*") + (parameters + '("GstPadTemplate*" "compattempl") + ) +) + +(define-method get_name + (of-object "GstState") + (c-name "gst_element_state_get_name") + (return-type "const-gchar*") +) + +(define-function element_state_get_name + (c-name "gst_element_state_get_name") + (parameters + '("GstState" "state") + ) + (return-type "const-gchar*") +) + +(define-function state_change_return_get_name + (c-name "gst_element_state_change_return_get_name") + (return-type "const-gchar*") + (parameters + '("GstStateChangeReturn" "state_ret") + ) +) + +(define-method link + (of-object "GstElement") + (c-name "gst_element_link") + (return-type "gboolean") + (parameters + '("GstElement*" "dest") + ) +) + +(define-function element_link_many + (c-name "gst_element_link_many") + (return-type "gboolean") + (parameters + '("GstElement*" "element_1") + '("GstElement*" "element_2") + ) + (varargs #t) +) + +(define-method unlink + (of-object "GstElement") + (c-name "gst_element_unlink") + (return-type "none") + (parameters + '("GstElement*" "dest") + ) +) + +(define-method link_filtered + (of-object "GstElement") + (c-name "gst_element_link_filtered") + (return-type "gboolean") + (parameters + '("GstElement*" "dest") + '("GstCaps*" "filter") + ) +) + +(define-function element_unlink_many + (c-name "gst_element_unlink_many") + (return-type "none") + (parameters + '("GstElement*" "element_1") + '("GstElement*" "element_2") + ) + (varargs #t) +) + +(define-method link_pads + (of-object "GstElement") + (c-name "gst_element_link_pads") + (return-type "gboolean") + (parameters + '("const-gchar*" "srcpadname") + '("GstElement*" "dest") + '("const-gchar*" "destpadname") + ) +) + +(define-method link_pads_full + (of-object "GstElement") + (c-name "gst_element_link_pads_full") + (return-type "gboolean") + (parameters + '("const-gchar*" "srcpadname") + '("GstElement*" "dest") + '("const-gchar*" "destpadname") + '("GstPadLinkCheck" "flags") + ) +) + +(define-method unlink_pads + (of-object "GstElement") + (c-name "gst_element_unlink_pads") + (return-type "none") + (parameters + '("const-gchar*" "srcpadname") + '("GstElement*" "dest") + '("const-gchar*" "destpadname") + ) +) + +(define-method link_pads_filtered + (of-object "GstElement") + (c-name "gst_element_link_pads_filtered") + (return-type "gboolean") + (parameters + '("const-gchar*" "srcpadname") + '("GstElement*" "dest") + '("const-gchar*" "destpadname") + '("GstCaps*" "filter") + ) +) + +(define-method seek_simple + (of-object "GstElement") + (c-name "gst_element_seek_simple") + (return-type "gboolean") + (parameters + '("GstFormat" "format") + '("GstSeekFlags" "seek_flags") + '("gint64" "seek_pos") + ) +) + +(define-method can_src_caps + (of-object "GstElementFactory") + (c-name "gst_element_factory_can_src_caps") + (return-type "gboolean") + (parameters + '("const-GstCaps*" "caps") + ) +) + +(define-method can_sink_caps + (of-object "GstElementFactory") + (c-name "gst_element_factory_can_sink_caps") + (return-type "gboolean") + (parameters + '("const-GstCaps*" "caps") + ) +) + + +(define-method query_position + (of-object "GstElement") + (c-name "gst_element_query_position") + (return-type "gboolean") + (parameters + '("GstFormat*" "format") + '("gint64*" "cur") + ) +) + +(define-method query_duration + (of-object "GstElement") + (c-name "gst_element_query_duration") + (return-type "gboolean") + (parameters + '("GstFormat*" "format") + '("gint64*" "duration") + ) +) + +(define-method query_convert + (of-object "GstElement") + (c-name "gst_element_query_convert") + (return-type "gboolean") + (parameters + '("GstFormat" "src_format") + '("gint64" "src_val") + '("GstFormat*" "dest_fmt") + '("gint64*" "dest_val") + ) +) + +(define-method install_std_props + (of-object "GstElementClass") + (c-name "gst_element_class_install_std_props") + (return-type "none") + (parameters + '("const-gchar*" "first_name") + ) + (varargs #t) +) + +(define-method can_link + (of-object "GstPad") + (c-name "gst_pad_can_link") + (return-type "gboolean") + (parameters + '("GstPad*" "sinkpad") + ) +) + +(define-method use_fixed_caps + (of-object "GstPad") + (c-name "gst_pad_use_fixed_caps") + (return-type "none") +) + +(define-method get_fixed_caps_func + (of-object "GstPad") + (c-name "gst_pad_get_fixed_caps_func") + (return-type "GstCaps*") + (caller-owns-return #t) +) + +(define-method proxy_getcaps + (of-object "GstPad") + (c-name "gst_pad_proxy_getcaps") + (return-type "GstCaps*") + (caller-owns-return #t) +) + +(define-method proxy_setcaps + (of-object "GstPad") + (c-name "gst_pad_proxy_setcaps") + (return-type "gboolean") + (parameters + '("GstCaps*" "caps") + ) +) + +(define-method get_parent_element + (of-object "GstPad") + (c-name "gst_pad_get_parent_element") + (return-type "GstElement*") + (caller-owns-return #t) +) + +(define-method query_position + (of-object "GstPad") + (c-name "gst_pad_query_position") + (return-type "gboolean") + (parameters + '("GstFormat*" "format") + '("gint64*" "cur") + ) +) + +(define-method query_duration + (of-object "GstPad") + (c-name "gst_pad_query_duration") + (return-type "gboolean") + (parameters + '("GstFormat*" "format") + '("gint64*" "duration") + ) +) + +(define-method query_convert + (of-object "GstPad") + (c-name "gst_pad_query_convert") + (return-type "gboolean") + (parameters + '("GstFormat" "src_format") + '("gint64" "src_val") + '("GstFormat*" "dest_fmt") + '("gint64*" "dest_val") + ) +) + +(define-method query_peer_position + (of-object "GstPad") + (c-name "gst_pad_query_peer_position") + (return-type "gboolean") + (parameters + '("GstFormat*" "format") + '("gint64*" "cur") + ) +) + +(define-method query_peer_duration + (of-object "GstPad") + (c-name "gst_pad_query_peer_duration") + (return-type "gboolean") + (parameters + '("GstFormat*" "format") + '("gint64*" "duration") + ) +) + +(define-method query_peer_convert + (of-object "GstPad") + (c-name "gst_pad_query_peer_convert") + (return-type "gboolean") + (parameters + '("GstFormat" "src_format") + '("gint64" "src_val") + '("GstFormat*" "dest_format") + '("gint64*" "dest_val") + ) +) + +(define-method remove_many + (of-object "GstBin") + (c-name "gst_bin_remove_many") + (return-type "none") + (parameters + '("GstElement*" "element_1") + ) + (varargs #t) +) + +(define-method find_unlinked_pad + (of-object "GstBin") + (c-name "gst_bin_find_unlinked_pad") + (return-type "GstPad*") + (parameters + '("GstPadDirection" "direction") + ) +) + +(define-method find_unconnected_pad + (of-object "GstBin") + (c-name "gst_bin_find_unconnected_pad") + (return-type "GstPad*") + (parameters + '("GstPadDirection" "direction") + ) +) + +(define-method merge + (of-object "GstBuffer") + (c-name "gst_buffer_merge") + (return-type "GstBuffer*") + (caller-owns-return #t) + (parameters + '("GstBuffer*" "buf2") + ) +) + +(define-method join + (of-object "GstBuffer") + (c-name "gst_buffer_join") + (return-type "GstBuffer*") + (caller-owns-return #t) + (parameters + '("GstBuffer*" "buf2") + ) +) + +(define-method stamp + (of-object "GstBuffer") + (c-name "gst_buffer_stamp") + (return-type "none") + (parameters + '("const-GstBuffer*" "src") + ) +) + +(define-function atomic_int_set + (c-name "gst_atomic_int_set") + (return-type "none") + (parameters + '("gint*" "atomic_int") + '("gint" "value") + ) +) + +(define-function TIME_ARGS + (c-name "GST_TIME_ARGS") + (return-type "gchar*") + (parameters + '("GstClockTime" "time") + ) +) + +;; From ../gstreamer/gst/gstvalue.h + +(define-function value_register + (c-name "gst_value_register") + (return-type "none") + (parameters + '("const-GstValueTable*" "table") + ) +) + +(define-function value_init_and_copy + (c-name "gst_value_init_and_copy") + (return-type "none") + (parameters + '("GValue*" "dest") + '("const-GValue*" "src") + ) +) + +(define-function value_serialize + (c-name "gst_value_serialize") + (return-type "gchar*") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function value_deserialize + (c-name "gst_value_deserialize") + (return-type "gboolean") + (parameters + '("GValue*" "dest") + '("const-gchar*" "src") + ) +) + +(define-function value_list_append_value + (c-name "gst_value_list_append_value") + (return-type "none") + (parameters + '("GValue*" "value") + '("const-GValue*" "append_value") + ) +) + +(define-function value_list_prepend_value + (c-name "gst_value_list_prepend_value") + (return-type "none") + (parameters + '("GValue*" "value") + '("const-GValue*" "prepend_value") + ) +) + +(define-function value_list_concat + (c-name "gst_value_list_concat") + (return-type "none") + (parameters + '("GValue*" "dest") + '("const-GValue*" "value1") + '("const-GValue*" "value2") + ) +) + +(define-function value_list_merge + (c-name "gst_value_list_merge") + (return-type "none") + (parameters + '("GValue*" "dest") + '("const-GValue*" "value1") + '("const-GValue*" "value2") + ) +) + +(define-function value_list_get_size + (c-name "gst_value_list_get_size") + (return-type "guint") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function value_list_get_value + (c-name "gst_value_list_get_value") + (return-type "const-GValue*") + (parameters + '("const-GValue*" "value") + '("guint" "index") + ) +) + +(define-function value_array_append_value + (c-name "gst_value_array_append_value") + (return-type "none") + (parameters + '("GValue*" "value") + '("const-GValue*" "append_value") + ) +) + +(define-function value_array_prepend_value + (c-name "gst_value_array_prepend_value") + (return-type "none") + (parameters + '("GValue*" "value") + '("const-GValue*" "prepend_value") + ) +) + +(define-function value_array_get_size + (c-name "gst_value_array_get_size") + (return-type "guint") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function value_array_get_value + (c-name "gst_value_array_get_value") + (return-type "const-GValue*") + (parameters + '("const-GValue*" "value") + '("guint" "index") + ) +) + +(define-function value_set_fourcc + (c-name "gst_value_set_fourcc") + (return-type "none") + (parameters + '("GValue*" "value") + '("guint32" "fourcc") + ) +) + +(define-function value_get_fourcc + (c-name "gst_value_get_fourcc") + (return-type "guint32") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function value_set_int_range + (c-name "gst_value_set_int_range") + (return-type "none") + (parameters + '("GValue*" "value") + '("gint" "start") + '("gint" "end") + ) +) + +(define-function value_get_int_range_min + (c-name "gst_value_get_int_range_min") + (return-type "gint") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function value_get_int_range_max + (c-name "gst_value_get_int_range_max") + (return-type "gint") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function value_set_int64_range + (c-name "gst_value_set_int64_range") + (return-type "none") + (parameters + '("GValue*" "value") + '("gint64" "start") + '("gint64" "end") + ) +) + +(define-function value_get_int64_range_min + (c-name "gst_value_get_int64_range_min") + (return-type "gint64") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function value_get_int64_range_max + (c-name "gst_value_get_int64_range_max") + (return-type "gint64") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function value_set_double_range + (c-name "gst_value_set_double_range") + (return-type "none") + (parameters + '("GValue*" "value") + '("gdouble" "start") + '("gdouble" "end") + ) +) + +(define-function value_get_double_range_min + (c-name "gst_value_get_double_range_min") + (return-type "gdouble") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function value_get_double_range_max + (c-name "gst_value_get_double_range_max") + (return-type "gdouble") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function value_get_caps + (c-name "gst_value_get_caps") + (return-type "const-GstCaps*") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function value_set_caps + (c-name "gst_value_set_caps") + (return-type "none") + (parameters + '("GValue*" "value") + '("const-GstCaps*" "caps") + ) +) + +(define-function value_set_fraction + (c-name "gst_value_set_fraction") + (return-type "none") + (parameters + '("GValue*" "value") + '("gint" "numerator") + '("gint" "denominator") + ) +) + +(define-function value_get_fraction_numerator + (c-name "gst_value_get_fraction_numerator") + (return-type "gint") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function value_get_fraction_denominator + (c-name "gst_value_get_fraction_denominator") + (return-type "gint") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function value_fraction_multiply + (c-name "gst_value_fraction_multiply") + (return-type "gboolean") + (parameters + '("GValue*" "product") + '("const-GValue*" "factor1") + '("const-GValue*" "factor2") + ) +) + +(define-function gst_value_fraction_subtract + (c-name "gst_value_fraction_subtract") + (return-type "gboolean") + (parameters + '("GValue*" "dest") + '("const-GValue*" "minuend") + '("const-GValue*" "subtrahend") + ) +) + +(define-function gst_value_set_fraction_range + (c-name "gst_value_set_fraction_range") + (return-type "none") + (parameters + '("GValue*" "value") + '("const-GValue*" "start") + '("const-GValue*" "end") + ) +) + +(define-function gst_value_set_fraction_range_full + (c-name "gst_value_set_fraction_range_full") + (return-type "none") + (parameters + '("GValue*" "value") + '("gint" "numerator_start") + '("gint" "denominator_start") + '("gint" "numerator_end") + '("gint" "denominator_end") + ) +) + +(define-function gst_value_get_fraction_range_min + (c-name "gst_value_get_fraction_range_min") + (return-type "const-GValue*") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function gst_value_get_fraction_range_max + (c-name "gst_value_get_fraction_range_max") + (return-type "const-GValue*") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function value_get_date + (c-name "gst_value_get_date") + (return-type "const-GDate*") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function value_set_date + (c-name "gst_value_set_date") + (return-type "none") + (parameters + '("GValue*" "value") + '("const-GDate*" "date") + ) +) + +(define-function value_compare + (c-name "gst_value_compare") + (return-type "gint") + (parameters + '("const-GValue*" "value1") + '("const-GValue*" "value2") + ) +) + +(define-function value_can_compare + (c-name "gst_value_can_compare") + (return-type "gboolean") + (parameters + '("const-GValue*" "value1") + '("const-GValue*" "value2") + ) +) + +(define-function value_union + (c-name "gst_value_union") + (return-type "gboolean") + (parameters + '("GValue*" "dest") + '("const-GValue*" "value1") + '("const-GValue*" "value2") + ) +) + +(define-function value_can_union + (c-name "gst_value_can_union") + (return-type "gboolean") + (parameters + '("const-GValue*" "value1") + '("const-GValue*" "value2") + ) +) + +(define-function value_register_union_func + (c-name "gst_value_register_union_func") + (return-type "none") + (parameters + '("GType" "type1") + '("GType" "type2") + '("GstValueUnionFunc" "func") + ) +) + +(define-function value_intersect + (c-name "gst_value_intersect") + (return-type "gboolean") + (parameters + '("GValue*" "dest") + '("const-GValue*" "value1") + '("const-GValue*" "value2") + ) +) + +(define-function value_can_intersect + (c-name "gst_value_can_intersect") + (return-type "gboolean") + (parameters + '("const-GValue*" "value1") + '("const-GValue*" "value2") + ) +) + +(define-function value_register_intersect_func + (c-name "gst_value_register_intersect_func") + (return-type "none") + (parameters + '("GType" "type1") + '("GType" "type2") + '("GstValueIntersectFunc" "func") + ) +) + +(define-function value_subtract + (c-name "gst_value_subtract") + (return-type "gboolean") + (parameters + '("GValue*" "dest") + '("const-GValue*" "minuend") + '("const-GValue*" "subtrahend") + ) +) + +(define-function value_can_subtract + (c-name "gst_value_can_subtract") + (return-type "gboolean") + (parameters + '("const-GValue*" "minuend") + '("const-GValue*" "subtrahend") + ) +) + +(define-function value_register_subtract_func + (c-name "gst_value_register_subtract_func") + (return-type "none") + (parameters + '("GType" "minuend_type") + '("GType" "subtrahend_type") + '("GstValueSubtractFunc" "func") + ) +) + +(define-function value_is_fixed + (c-name "gst_value_is_fixed") + (return-type "gboolean") + (parameters + '("const-GValue*" "value") + ) +) + + +;; From ../gstreamer/gst/gstxml.h + +(define-function xml_get_type + (c-name "gst_xml_get_type") + (return-type "GType") +) + +(define-function xml_write + (c-name "gst_xml_write") + (return-type "xmlDocPtr") + (parameters + '("GstElement*" "element") + ) +) + +(define-function xml_write_file + (c-name "gst_xml_write_file") + (return-type "gint") + (parameters + '("GstElement*" "element") + '("FILE*" "out") + ) +) + +(define-function xml_new + (c-name "gst_xml_new") + (is-constructor-of "GstXML") + (return-type "GstXML*") +) + +(define-method parse_doc + (of-object "GstXML") + (c-name "gst_xml_parse_doc") + (return-type "gboolean") + (parameters + '("xmlDocPtr" "doc") + '("const-guchar*" "root") + ) +) + +(define-method parse_file + (of-object "GstXML") + (c-name "gst_xml_parse_file") + (return-type "gboolean") + (parameters + '("const-guchar*" "fname") + '("const-guchar*" "root") + ) +) + +(define-method parse_memory + (of-object "GstXML") + (c-name "gst_xml_parse_memory") + (return-type "gboolean") + (parameters + '("guchar*" "buffer") + '("guint" "size") + '("const-gchar*" "root") + ) +) + +(define-method get_element + (of-object "GstXML") + (c-name "gst_xml_get_element") + (return-type "GstElement*") + (parameters + '("const-guchar*" "name") + ) +) + +(define-method get_topelements + (of-object "GstXML") + (c-name "gst_xml_get_topelements") + (return-type "GList*") +) + +(define-function xml_make_element + (c-name "gst_xml_make_element") + (return-type "GstElement*") + (parameters + '("xmlNodePtr" "cur") + '("GstObject*" "parent") + ) +) + + +;; From ../gstreamer/gst/net/gstnetclientclock.h + +(define-function net_client_clock_new + (c-name "gst_net_client_clock_new") + (is-constructor-of "GstNetClientClock") + (return-type "GstClock*") + (parameters + '("gchar*" "name" (null-ok) (default "NULL")) + '("gchar*" "remote_address" (default "127.0.0.1")) + '("gint" "remote_port") + '("GstClockTime" "base_time" (default 0)) + ) +) + + +;; From ../gstreamer/gst/net/gstnettimeprovider.h + +(define-function net_time_provider_new + (c-name "gst_net_time_provider_new") + (is-constructor-of "GstNetTimeProvider") + (return-type "GstNetTimeProvider*") + (parameters + '("GstClock*" "clock") + '("gchar*" "address" (null-ok) (default "NULL")) + '("gint" "port" (default 0)) + ) +) diff --git a/gst/gst.override b/gst/gst.override new file mode 100644 index 0000000..f1ee02e --- /dev/null +++ b/gst/gst.override @@ -0,0 +1,1748 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2002 David I. Lehn + * Copyright (C) 2004 Johan Dahlin + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: David I. Lehn + */ +%% +headers +/* define this for all source files that don't run init_pygobject() + * before including pygobject.h */ +#define NO_IMPORT_PYGOBJECT + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include "common.h" + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "pygst-private.h" +#include "pygstvalue.h" +#include "pygstminiobject.h" +#include "pygstexception.h" + +/* These headers have been included directly to get around multiple + * GetAttrString calls */ +#include +#include + +/* Boonky define that allows for backwards compatibility with Python 2.4 */ +#if PY_VERSION_HEX < 0x02050000 +#define Py_ssize_t int +#endif + +GST_DEBUG_CATEGORY_EXTERN (python_debug); +GST_DEBUG_CATEGORY_EXTERN (pygst_debug); +#define GST_CAT_DEFAULT pygst_debug + +/* This function checks if a former Python code threw an exception and if + * so, transforms this exception into an error on the given GstElement. + * This allows code run on the element to just raise an exception instead of + * returning GStreamer specific return values. + * The exception is cleared afterwards. + */ +gboolean +_pygst_element_check_error (GstElement *element) +{ + PyObject *type, *value, *traceback, *lineno, *msg, *typemsg; + PyFrameObject *frame; + + if (!PyErr_Occurred()) + return FALSE; + + PyErr_Fetch (&type, &value, &traceback); + if (traceback) { + frame = (PyFrameObject *) PyObject_GetAttrString (traceback, "tb_frame"); + lineno = PyObject_GetAttrString (traceback, "tb_lineno"); + } else { + frame = NULL; + lineno = NULL; + } + msg = PyObject_Str (value); + typemsg = PyObject_Str (type); + if (msg && PyString_Check (msg)) { + gst_element_message_full (element, GST_MESSAGE_ERROR, + GST_LIBRARY_ERROR, + GST_LIBRARY_ERROR_FAILED, + g_strdup (PyString_AsString (msg)), + typemsg ? g_strconcat (PyString_AsString (typemsg), + ": ", PyString_AsString (msg), NULL) + : g_strdup (PyString_AsString (msg)), + frame ? PyString_AsString(frame->f_code->co_filename) : "???", + frame ? PyString_AsString(frame->f_code->co_name) : "???", + lineno ? PyInt_AsLong (lineno) : 0); + } else { + gst_element_message_full (element, GST_MESSAGE_ERROR, + GST_LIBRARY_ERROR, + GST_LIBRARY_ERROR_TOO_LAZY, + NULL, NULL, + frame ? PyString_AsString(frame->f_code->co_filename) : "???", + frame ? PyString_AsString(frame->f_code->co_name) : "???", + lineno ? PyInt_AsLong (lineno) : 0); + } + + PyErr_Clear (); + Py_XDECREF (frame); + Py_XDECREF (lineno); + Py_DECREF (msg); + Py_DECREF (typemsg); + + return TRUE; +} + +PyTypeObject PyGstPadTemplate_Type; +static int +add_templates (gpointer gclass, PyObject *templates) +{ + gint i, len; + PyGObject *templ; + + GST_DEBUG ("Adding templates to gclass %p", gclass); + if (pygobject_check(templates, &PyGstPadTemplate_Type)) { + gst_element_class_add_pad_template (gclass, GST_PAD_TEMPLATE (pygobject_get (templates))); + return 0; + } + + if (!PyTuple_Check(templates)) { + PyErr_SetString(PyExc_TypeError, "__gsttemplates__ attribute neither a tuple nor a GstPadTemplate!"); + return -1; + } + len = PyTuple_Size(templates); + if (len == 0) + return 0; + + for (i = 0; i < len; i++) { + templ = (PyGObject*) PyTuple_GetItem(templates, i); + if (!pygobject_check(templ, &PyGstPadTemplate_Type)) { + PyErr_SetString(PyExc_TypeError, "entries for __gsttemplates__ must be of type GstPadTemplate"); + return -1; + } + } + + for (i = 0; i < len; i++) { + templ = (PyGObject*) PyTuple_GetItem(templates, i); + gst_element_class_add_pad_template (gclass, GST_PAD_TEMPLATE (templ->obj)); + } + return 0; +} + +static int +_pygst_element_set_details (gpointer gclass, PyObject *details) +{ + GstElementDetails gstdetails = { 0, }; + + if (!PyTuple_Check (details)) { + PyErr_SetString(PyExc_TypeError, "__gstdetails__ must be a tuple"); + return -1; + } + if (PyTuple_Size (details) != 4) { + PyErr_SetString(PyExc_TypeError, "__gstdetails__ must contain 4 elements"); + return -1; + } + if (!PyArg_ParseTuple (details, "ssss", &gstdetails.longname, &gstdetails.klass, + &gstdetails.description, &gstdetails.author)) { + PyErr_SetString (PyExc_TypeError, "__gstdetails__ must contain 4 strings"); + return -1; + } + GST_DEBUG ("setting details on gclass %p from __gstdetails__, longname %s", gclass, gstdetails.longname); + gst_element_class_set_details (gclass, &gstdetails); + return 0; +} + +static int +_pygst_element_init (gpointer gclass, PyTypeObject *pyclass) +{ + PyObject *templates, *details; + + GST_DEBUG ("_pygst_element_init for gclass %p", gclass); + templates = PyDict_GetItemString(pyclass->tp_dict, "__gsttemplates__"); + if (templates) { + if (add_templates(gclass, templates) != 0) + return -1; + } else { + PyErr_Clear(); + } + details = PyDict_GetItemString(pyclass->tp_dict, "__gstdetails__"); + if (details) { + if (_pygst_element_set_details (gclass, details) != 0) + return -1; + PyDict_DelItemString(pyclass->tp_dict, "__gstdetails__"); + } else { + PyErr_Clear(); + } + + return 0; +} + +static PyObject * +pygst_debug_log (PyObject *pyobject, PyObject *string, GstDebugLevel level, + gboolean isgstobject) +{ +#ifndef GST_DISABLE_GST_DEBUG + gchar *str; + gchar *function; + gchar *filename; + int lineno; + PyFrameObject *frame; + GObject *object = NULL; + + if (!PyArg_ParseTuple(string, "s:gst.debug_log", &str)) { + PyErr_SetString(PyExc_TypeError, "Need a string!"); + return NULL; + } + + frame = PyEval_GetFrame(); + function = PyString_AsString(frame->f_code->co_name); + filename = g_path_get_basename(PyString_AsString(frame->f_code->co_filename)); + lineno = PyCode_Addr2Line(frame->f_code, frame->f_lasti); + /* gst_debug_log : category, level, file, function, line, object, format, va_list */ + if (isgstobject) + object = G_OBJECT (pygobject_get (pyobject)); + gst_debug_log (python_debug, level, filename, function, lineno, object, "%s", str); + if (filename) + g_free(filename); +#endif + Py_INCREF (Py_None); + return Py_None; +} + +GType +gst_tag_get_tag_type (const gchar * tag) +{ + return gst_tag_get_type (tag); +} + +%% +include + gstbin.override + gstbuffer.override + gstbus.override + gstcaps.override + gstelement.override + gstelementfactory.override + gstevent.override + gstmessage.override + gstobject.override + gstpad.override + gstquery.override + gststructure.override + gsttaglist.override + gstlibs.override + gstbase.override + gstversion.override +%% +init +{ + pyg_register_class_init (GST_TYPE_ELEMENT, _pygst_element_init); + if (!pygst_value_init()) + return; + gst_controller_init(NULL, NULL); +} +%% +modulename gst +%% +import gobject.GObject as PyGObject_Type +%% +ignore-glob + _* + *_copy + *_error_quark + *_free + *_get_type + *_private + *_thyself + *_valist + *_ref + *_unref + *_deinit + gst_class_* + gst_init* + gst_interface_* + gst_value_* + gst_param_spec_* +%% +ignore + gst_alloc_trace_list + gst_alloc_trace_get + gst_error_get_message + gst_parse_launchv + gst_trace_read_tsc + gst_debug_log_default + gst_iterator_new_list + gst_task_set_lock + gst_clock_id_compare_func + gst_print_pad_caps + gst_util_set_value_from_string + gst_print_element_args + gst_atomic_int_set + gst_caps_replace + gst_mini_object_replace + gst_filter_run + gst_flow_to_quark + gst_implements_interface_cast + gst_implements_interface_check + gst_plugin_get_module + gst_object_sink + gst_version +%% +override-slot GstPluginFeature.tp_repr +static PyObject * +_wrap_gst_plugin_feature_tp_repr(PyObject *self) +{ + gchar *repr; + PyObject *ret; + GstPluginFeature *feature = GST_PLUGIN_FEATURE (pygobject_get (self)); + + repr = g_strdup_printf ("<%s %s @ 0x%lx>", + self->ob_type->tp_name, gst_plugin_feature_get_name (feature), + (long) self); + ret = PyString_FromString(repr); + g_free (repr); + return ret; +} +%% +override-slot GstPluginFeature.tp_str +static PyObject * +_wrap_gst_plugin_feature_tp_str(PyObject *self) +{ + gchar *repr; + PyObject *ret; + GstPluginFeature *feature = GST_PLUGIN_FEATURE (pygobject_get (self)); + + repr = g_strdup_printf ("<%s %s (%d)>", + self->ob_type->tp_name, gst_plugin_feature_get_name (feature), + gst_plugin_feature_get_rank (feature)); + ret = PyString_FromString(repr); + g_free (repr); + return ret; +} + +%% +override gst_type_find_factory_get_caps noargs +static PyObject * +_wrap_gst_type_find_factory_get_caps(PyGObject *self) +{ + GstCaps *ret = (GstCaps*)gst_type_find_factory_get_caps(GST_TYPE_FIND_FACTORY(self->obj)); + return pyg_boxed_new(GST_TYPE_CAPS, ret, TRUE, TRUE); +} +%% +override-attr GError.domain +static PyObject * +_wrap_gst_g_error__get_domain(PyGObject *self, void *closure) +{ + return PyString_FromString(g_quark_to_string(((GError*)self->obj)->domain)); +} +%% +override-slot GError.tp_str +static PyObject * +_wrap_gst_g_error_tp_str(PyGObject *self) +{ + GError *error = (GError*)self->obj; + return PyString_FromString(gst_error_get_message (error->domain, + error->code)); +} +%% +override-attr GstDate.day +static PyObject * +_wrap_gst_date__get_day(PyGObject *self, void *closure) +{ + return PyInt_FromLong(g_date_get_day((GDate*)self->obj)); +} + +static int +_wrap_gst_date__set_day(PyGObject *self, PyObject *value, void *closure) +{ + GDate *date = (GDate *) self->obj; + + if (!(PyInt_Check(value))) + return -1; + + g_date_set_day(date, (int) PyInt_AsLong(value)); + return 0; +} +%% +override-attr GstDate.month +static PyObject * +_wrap_gst_date__get_month(PyGObject *self, void *closure) +{ + return PyInt_FromLong(g_date_get_month((GDate*)self->obj)); +} +static int +_wrap_gst_date__set_month(PyGObject *self, PyObject *value, void *closure) +{ + GDate *date = (GDate *) self->obj; + + if (!(PyInt_Check(value))) + return -1; + + g_date_set_month(date, (int) PyInt_AsLong(value)); + return 0; +} +%% +override-attr GstDate.year +static PyObject * +_wrap_gst_date__get_year(PyGObject *self, void *closure) +{ + return PyInt_FromLong(g_date_get_year((GDate*)self->obj)); +} +static int +_wrap_gst_date__set_year(PyGObject *self, PyObject *value, void *closure) +{ + GDate *date = (GDate *) self->obj; + + if (!(PyInt_Check(value))) + return -1; + + g_date_set_year(date, (int) PyInt_AsLong(value)); + return 0; +} +%% +override-slot GstDate.tp_repr +static PyObject * +_wrap_gst_date_tp_repr(PyGObject *self) +{ + GDate *date = (GDate *) self->obj; + + return PyString_FromFormat ("", + g_date_get_day(date), + g_date_get_month(date), + g_date_get_year(date)); +} +%% +override gst_registry_get_path_list +static PyObject * +_wrap_gst_registry_get_path_list (PyGObject *self) +{ + GstRegistry *registry; + GList *l, *paths; + PyObject *list; + gint i; + + registry = GST_REGISTRY (self->obj); + + paths = gst_registry_get_path_list (registry); + + list = PyList_New (g_list_length(paths)); + for (l = paths, i = 0; l; l = l->next, ++i) { + gchar *path = (gchar *) l->data; + PyList_SetItem (list, i, PyString_FromString(path)); + } + g_list_free (paths); + + return list; +} + +%% +override gst_registry_get_plugin_list +static PyObject * +_wrap_gst_registry_get_plugin_list (PyGObject *self) +{ + GstRegistry *registry; + GList *l, *plugins; + PyObject *list; + gint i; + + registry = GST_REGISTRY (self->obj); + + plugins = gst_registry_get_plugin_list (registry); + + list = PyList_New (g_list_length(plugins)); + for (l = plugins, i = 0; l; l = l->next, ++i) { + GstPlugin *plugin = (GstPlugin *) l->data; + PyObject *object = pygobject_new (G_OBJECT (plugin)); + gst_object_unref (plugin); + + PyList_SetItem (list, i, object); + } + g_list_free (plugins); + + return list; +} + +%% +override gst_registry_get_feature_list kwargs +static PyObject * +_wrap_gst_registry_get_feature_list (PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "type", NULL }; + PyObject *py_type = NULL; + GType type; + + GstRegistry *registry; + GList *l, *features; + PyObject *list; + gint i; + + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O:GstRegistry.get_feature_list", kwlist, &py_type)) + return NULL; + if ((type = pyg_type_from_object(py_type)) == 0) + return NULL; + + registry = GST_REGISTRY (self->obj); + + pyg_begin_allow_threads; + features = gst_registry_get_feature_list (registry, type); + pyg_end_allow_threads; + + list = PyList_New (g_list_length(features)); + for (l = features, i = 0; l; l = l->next, ++i) { + GstPluginFeature *feature = (GstPluginFeature *) l->data; + PyList_SetItem (list, i, pygobject_new (G_OBJECT (feature))); + gst_object_unref (feature); + } + g_list_free (features); + + return list; +} + +%% +override gst_registry_get_feature_list_by_plugin kwargs +static PyObject * +_wrap_gst_registry_get_feature_list_by_plugin (PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "name", NULL }; + gchar * name = NULL; + + GstRegistry *registry; + GList *l, *features; + PyObject *list; + gint i; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "s:GstRegistry.get_feature_list_by_plugin", kwlist, &name)) + return NULL; + + registry = GST_REGISTRY (self->obj); + + pyg_begin_allow_threads; + features = gst_registry_get_feature_list_by_plugin (registry, name); + pyg_end_allow_threads; + + list = PyList_New (g_list_length(features)); + for (l = features, i = 0; l; l = l->next, ++i) { + GstPluginFeature *feature = (GstPluginFeature *) l->data; + PyList_SetItem (list, i, pygobject_new (G_OBJECT (feature))); + } + g_list_free (features); + + return list; +} + +%% +new-constructor GST_TYPE_XML +%% +override gst_xml_new noargs + +extern PyObject * libxml_xmlDocPtrWrap(xmlDocPtr doc); +extern PyObject * libxml_xmlNodePtrWrap(xmlNodePtr node); + +/* libxml2 available check */ +static PyObject * +_gst_get_libxml2_module(void) +{ + PyObject *xml = NULL; + + xml = PyImport_ImportModule("libxml2"); + if (!xml) { + PyErr_Clear(); + PyErr_SetString(PyExc_RuntimeError,"libxml2 bindings required"); + return NULL; + } + + return xml; + } + +static int +_wrap_gst_xml_new(PyGObject *self) +{ + PyObject *xml = _gst_get_libxml2_module(); + + if(!xml) + return -1; + + self->obj = (GObject *)gst_xml_new(); + + if (!self->obj) { + PyErr_SetString(PyExc_RuntimeError, "could not create GstXML object"); + return -1; + } + + pygobject_register_wrapper((PyObject *)self); + + return 0; +} +%% +override gst_xml_get_topelements noargs +static PyObject * +_wrap_gst_xml_get_topelements(PyGObject *self) +{ + GList *l, *xml_elements; + PyObject *py_list; + gint i; + + xml_elements = gst_xml_get_topelements(GST_XML(self->obj)); + py_list = PyList_New(g_list_length(xml_elements)); + for (l = xml_elements, i = 0; l; l = l->next, ++i) { + GstElement *element = (GstElement*)l->data; + PyList_SetItem(py_list, i, pygobject_new(G_OBJECT(element))); + } + + return py_list; +} +%% +override gst_xml_parse_memory kwargs +static PyObject * +_wrap_gst_xml_parse_memory(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "buffer", "root", NULL }; + int buffer_len, ret; + char *root = NULL; + guchar *buffer; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "s#|s:GstXML.parse_memory", + kwlist, &buffer, &buffer_len, &root)) + return NULL; + + ret = gst_xml_parse_memory(GST_XML(self->obj), + buffer, buffer_len, root); + + return PyBool_FromLong(ret); +} +%% +override gst_tag_setter_get_tag_list noargs +static PyObject * +_wrap_gst_tag_setter_get_tag_list(PyGObject *self) +{ + GstTagList *ret; + + ret = (GstTagList*)gst_tag_setter_get_tag_list(GST_TAG_SETTER(self->obj)); + /* pyg_boxed_new handles NULL checking */ + return pyg_boxed_new(GST_TYPE_TAG_LIST, ret, TRUE, TRUE); +} +%% +override gst_element_register kwargs + +static GstPlugin * +_pygst_get_plugin(void) +{ + PyObject *dict = NULL, *module = NULL, *pyplugin = NULL; + GstPlugin *ret; + + if (!(module = PyImport_ImportModule ("gst"))) + goto err; + if (!(dict = PyModule_GetDict (module))) + goto err; + if (!(pyplugin = PyDict_GetItemString (dict, "__plugin__"))) + goto err; + ret = pyg_boxed_get (pyplugin, GstPlugin); + + Py_DECREF (module); + return ret; + +err: + Py_XDECREF (module); + PyErr_Clear (); + return NULL; +} + +static PyObject * +_wrap_gst_element_register(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "type", "elementname", "rank", NULL }; + PyObject *py_type = NULL; + guint rank = GST_RANK_NONE; + char *elementname = NULL; + int ret; + GType type; + + /* FIXME: can we make the name optional, too? Anyone know a good default? */ + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Os|I:element_register", kwlist, + &py_type, &elementname, &rank)) + return NULL; + if ((type = pyg_type_from_object(py_type)) == 0) + return NULL; + + ret = gst_element_register(_pygst_get_plugin(), elementname, rank, type); + return PyBool_FromLong(ret); +} +%% +override-attr GError.domain +static PyObject * +_wrap_gst_g_error__get_domain(PyGObject *self, void *closure) +{ + return PyString_FromString(g_quark_to_string(((GError*)self->obj)->domain)); +} +%% +override-slot GError.tp_str +static PyObject * +_wrap_gst_g_error_tp_str(PyGObject *self) +{ + GError *error = (GError*)self->obj; + return PyString_FromString(gst_error_get_message (error->domain, + error->code)); +} +%% +override gst_flow_get_name kwargs +static PyObject * +_wrap_gst_flow_get_name(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "ret", NULL }; + PyObject *py_ret = NULL; + const gchar *ret; + GstFlowReturn flow; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:gst_flow_get_name", kwlist, &py_ret)) + return NULL; + if (pyg_enum_get_value(GST_TYPE_FLOW_RETURN, py_ret, (gint *)&flow)) + return NULL; + if ((ret = gst_flow_get_name(flow))) { + return PyString_FromString(ret); + } + Py_INCREF(Py_None); + return Py_None; +} + +%% +override gst_debug_log args +static PyObject * +_wrap_gst_debug_log (PyObject *whatever, PyObject *string) +{ +#ifndef GST_DISABLE_GST_DEBUG + gchar *filename; + gchar *func; + gint lineno; + gchar *message; + + PyObject *py_level = NULL; + GstDebugLevel level; + + if (!PyArg_ParseTuple(string, "Ossis:gst.debug_log", &py_level, &filename, &func, &lineno, &message)) { + return NULL; + } + if (pyg_enum_get_value(GST_TYPE_DEBUG_LEVEL, py_level, (gint *)&level)) { + return NULL; + } + + /* gst_debug_log : category, level, file, function, line, object, format, va_list */ + gst_debug_log (python_debug, level, filename, func, lineno, NULL, "%s", message); +#endif + Py_INCREF (Py_None); + return Py_None; +} +%% +override gst_log args +static PyObject * +_wrap_gst_log (PyObject *whatever, PyObject *string) +{ + return pygst_debug_log (whatever, string, GST_LEVEL_LOG, FALSE); +} +%% +override gst_debug args +static PyObject * +_wrap_gst_debug (PyObject *whatever, PyObject *string) +{ + return pygst_debug_log (whatever, string, GST_LEVEL_DEBUG, FALSE); +} +%% +override gst_info args +static PyObject * +_wrap_gst_info (PyObject *whatever, PyObject *string) +{ + return pygst_debug_log (whatever, string, GST_LEVEL_INFO, FALSE); +} +%% +override gst_warning args +static PyObject * +_wrap_gst_warning (PyObject *whatever, PyObject *string) +{ + return pygst_debug_log (whatever, string, GST_LEVEL_WARNING, FALSE); +} +%% +override gst_error args +static PyObject * +_wrap_gst_error (PyObject *whatever, PyObject *string) +{ + return pygst_debug_log (whatever, string, GST_LEVEL_ERROR, FALSE); +} +%% +override gst_fixme args +static PyObject * +_wrap_gst_fixme (PyObject *whatever, PyObject *string) +{ + return pygst_debug_log (whatever, string, GST_LEVEL_FIXME, FALSE); +} +%% +override gst_memdump args +static PyObject * +_wrap_gst_memdump (PyObject *whatever, PyObject *string) +{ + return pygst_debug_log (whatever, string, GST_LEVEL_MEMDUMP, FALSE); +} + +%% +override gst_object_log args +static PyObject * +_wrap_gst_object_log (PyObject *whatever, PyObject *string) +{ + return pygst_debug_log (whatever, string, GST_LEVEL_LOG, TRUE); +} +%% +override gst_object_debug args +static PyObject * +_wrap_gst_object_debug (PyObject *whatever, PyObject *string) +{ + return pygst_debug_log (whatever, string, GST_LEVEL_DEBUG, TRUE); +} +%% +override gst_object_info args +static PyObject * +_wrap_gst_object_info (PyObject *whatever, PyObject *string) +{ + return pygst_debug_log (whatever, string, GST_LEVEL_INFO, TRUE); +} +%% +override gst_object_warning args +static PyObject * +_wrap_gst_object_warning (PyObject *whatever, PyObject *string) +{ + return pygst_debug_log (whatever, string, GST_LEVEL_WARNING, TRUE); +} +%% +override gst_object_error args +static PyObject * +_wrap_gst_object_error (PyObject *whatever, PyObject *string) +{ + return pygst_debug_log (whatever, string, GST_LEVEL_ERROR, TRUE); +} +%% +override gst_object_fixme args +static PyObject * +_wrap_gst_object_fixme (PyObject *whatever, PyObject *string) +{ + return pygst_debug_log (whatever, string, GST_LEVEL_FIXME, TRUE); +} +%% +override gst_object_memdump args +static PyObject * +_wrap_gst_object_memdump (PyObject *whatever, PyObject *string) +{ + return pygst_debug_log (whatever, string, GST_LEVEL_MEMDUMP, TRUE); +} +%% +override GST_TIME_ARGS kwargs +static PyObject * +_wrap_GST_TIME_ARGS(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "time", NULL }; + PyObject *py_time = NULL; + PyObject *string; + gchar *ret; + guint64 time; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:time_to_string", kwlist, &py_time)) + return NULL; + time = PyInt_AsUnsignedLongLongMask(py_time); + if (PyErr_Occurred ()) + return NULL; + + if (GST_CLOCK_TIME_IS_VALID (time)) + ret = g_strdup_printf("%"GST_TIME_FORMAT, GST_TIME_ARGS(time)); + else + ret = g_strdup ("CLOCK_TIME_NONE"); + + if (!ret) { + Py_INCREF(Py_None); + return Py_None; + } + + if (!(string = PyString_FromString(ret))) { + g_free(ret); + return NULL; + } + g_free(ret); + return string; +} +%% +override gst_type_find_factory_get_list noargs +static PyObject * +_wrap_gst_type_find_factory_get_list (PyObject *self) +{ + GList *l, *list; + PyObject *py_list; + int i = 0; + + list = gst_type_find_factory_get_list (); + + py_list = PyList_New(g_list_length(list)); + for (l = list; l ; l = g_list_next(l), i++) { + GstTypeFindFactory *fact = (GstTypeFindFactory*) l->data; + + PyList_SetItem(py_list, i, + pygobject_new (G_OBJECT (fact))); + } + g_list_free (list); + + return py_list; +} +%% +override gst_get_gst_version noargs +static PyObject * +_wrap_gst_get_gst_version (PyObject *self) +{ + guint major, minor, micro, nano; + PyObject *py_tuple; + + gst_version (&major, &minor, µ, &nano); + py_tuple = PyTuple_New(4); + PyTuple_SetItem(py_tuple, 0, PyInt_FromLong(major)); + PyTuple_SetItem(py_tuple, 1, PyInt_FromLong(minor)); + PyTuple_SetItem(py_tuple, 2, PyInt_FromLong(micro)); + PyTuple_SetItem(py_tuple, 3, PyInt_FromLong(nano)); + + return py_tuple; +} +%% +override gst_get_pygst_version noargs +static PyObject * +_wrap_gst_get_pygst_version (PyObject *self) +{ + PyObject *py_tuple; + + py_tuple = Py_BuildValue ("(iiii)", PYGST_MAJOR_VERSION, PYGST_MINOR_VERSION, + PYGST_MICRO_VERSION, PYGST_NANO_VERSION); + + return py_tuple; +} +%% +override gst_clock_get_calibration noargs +static PyObject * +_wrap_gst_clock_get_calibration (PyGObject * self) +{ + PyObject *ret; + GstClockTime internal; + GstClockTime external; + GstClockTime rate_num; + GstClockTime rate_denom; + + gst_clock_get_calibration (GST_CLOCK (self->obj), + &internal, + &external, + &rate_num, + &rate_denom); + + ret = PyTuple_New(4); + PyTuple_SetItem(ret, 0, PyLong_FromUnsignedLongLong(internal)); + PyTuple_SetItem(ret, 1, PyLong_FromUnsignedLongLong(external)); + PyTuple_SetItem(ret, 2, PyLong_FromUnsignedLongLong(rate_num)); + PyTuple_SetItem(ret, 3, PyLong_FromUnsignedLongLong(rate_denom)); + + return ret; +} +%% +override gst_clock_add_observation kwargs +static PyObject * +_wrap_gst_clock_add_observation (PyGObject *self, PyObject * args, PyObject * kwargs) +{ + static char *kwlist[] = { "slave", "master", NULL}; + GstClockTime master, slave; + gdouble squared = 1.0; + PyObject *py_ret; + gboolean ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "KK:GstClock.add_observation", + kwlist, &master, &slave)) + return NULL; + + ret = gst_clock_add_observation (GST_CLOCK (self->obj), master, slave, + &squared); + + py_ret = PyList_New(2); + PyList_SetItem(py_ret, 0, PyBool_FromLong(ret)); + PyList_SetItem(py_ret, 1, PyFloat_FromDouble(squared)); + return py_ret; +} + +%% +override gst_type_find_helper_for_buffer kwargs +static PyObject * +_wrap_gst_type_find_helper_for_buffer (PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "object", "buffer", NULL }; + PyGObject *py_object; + PyGstMiniObject *py_buffer; + PyObject *py_ret; + GstTypeFindProbability prob = 0; + GstCaps *caps = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!:type_find_helper_for_buffer", + kwlist, &PyGstObject_Type, &py_object, + &PyGstBuffer_Type, &py_buffer)) + return NULL; + + caps = gst_type_find_helper_for_buffer (GST_OBJECT (py_object->obj), + GST_BUFFER (py_buffer->obj), + &prob); + py_ret = PyTuple_New(2); + if (caps) + PyTuple_SetItem(py_ret, 0, pyg_boxed_new (GST_TYPE_CAPS, caps, FALSE, TRUE)); + else { + Py_INCREF(Py_None); + PyTuple_SetItem(py_ret, 0, Py_None); + } + + if (prob) + PyTuple_SetItem(py_ret, 1, pyg_enum_from_gtype(GST_TYPE_TYPE_FIND_PROBABILITY, prob)); + else { + Py_INCREF(Py_None); + PyTuple_SetItem(py_ret, 1, Py_None); + } + + return py_ret; +} +%% +override gst_type_find_new kwargs + +static guint8 * +gst_type_find_peek_handler (gpointer data, gint64 offset, guint size) +{ + PyGILState_STATE state; + guint8 * ret = NULL; + PyObject *py_data; + PyObject *callback, *args; + PyObject *py_ret; + + GST_DEBUG ("mkay"); + + g_return_val_if_fail (data != NULL, NULL); + py_data = (PyObject *) data; + g_assert (PyTuple_Check (py_data)); + + state = pyg_gil_state_ensure (); + + /* Figure out the callback and create the arguments */ + if (!(callback = PyTuple_GetItem(py_data, 1))) + goto beach; + + args = Py_BuildValue ("(OLI)", + PyTuple_GetItem(py_data, 0), + offset, size); + if (!args) + goto beach; + + /* Call python method */ + py_ret = PyObject_CallObject (callback, args); + + /* transform return value (a string) */ + if (!py_ret) { + Py_DECREF (args); + goto beach; + } + if (!PyString_Check(py_ret)) { + Py_DECREF (py_ret); + Py_DECREF (args); + goto beach; + } else { + gchar *str; + Py_ssize_t len; + + if ((PyString_AsStringAndSize(py_ret, &str, &len)) == -1) { + Py_DECREF (py_ret); + Py_DECREF (args); + goto beach; + } + GST_DEBUG ("got string of len %"G_GSSIZE_FORMAT, len); + if (len) + ret = g_memdup((gconstpointer) str, (guint) len); + } + Py_DECREF (py_ret); + Py_DECREF (args); + + beach: + pyg_gil_state_release (state); + return ret; +} + +static void +gst_type_find_suggest_handler (gpointer data, guint probability, const GstCaps * caps) +{ + PyGILState_STATE state; + PyObject *py_data; + PyObject *callback, *args; + + GST_DEBUG ("mkay"); + + if (!data) + return; + py_data = (PyObject *) data; + g_assert (PyTuple_Check (py_data)); + + state = pyg_gil_state_ensure (); + + /* Figure out the callback and create the arguments */ + if (!(callback = PyTuple_GetItem(py_data, 2))) + goto beach; + + args = Py_BuildValue ("(OIN)", + PyTuple_GetItem(py_data, 0), + probability, pyg_boxed_new (GST_TYPE_CAPS, (GstCaps*) caps, TRUE, TRUE)); + if (!args) + goto beach; + + /* Call python method */ + PyObject_CallObject (callback, args); + + Py_DECREF (args); + + beach: + pyg_gil_state_release (state); + return; +} + +static guint64 +gst_type_find_get_length_handler (gpointer data) +{ + guint64 ret = 0; + + /* Call python method */ + return ret; +} + +static PyObject * +_wrap_gst_type_find_new (PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "data", "peekfunction", "suggestfunction", "getlengthfunction", NULL }; + PyObject *py_data; + gpointer data; + PyObject *peekfunction; + PyObject *suggestfunction; + PyObject *getlengthfunction = NULL; + PyObject *pytypefind = NULL; + GstTypeFind *typefind = NULL; + + GST_DEBUG ("poeut"); + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OOO|O:type_find_new", + kwlist, &py_data, &peekfunction, + &suggestfunction, &getlengthfunction)) { + PyErr_SetString (PyExc_TypeError, "Error parsing values ..."); + return NULL; + } + + if (!PyCallable_Check(peekfunction)) { + PyErr_SetString (PyExc_TypeError, "peekfunction is not callable"); + return NULL; + } + if (!PyCallable_Check(suggestfunction)) { + PyErr_SetString (PyExc_TypeError, "suggestfunction is not callable"); + return NULL; + } + if (getlengthfunction && (!PyCallable_Check(suggestfunction))) { + PyErr_SetString (PyExc_TypeError, "getlengthfunction is not callable"); + return NULL; + } + + /* Create a python list to put in typefind->data */ + if (getlengthfunction) + data = Py_BuildValue("(OOOO)", py_data, peekfunction, suggestfunction, getlengthfunction); + else + data = Py_BuildValue("(OOO)", py_data, peekfunction, suggestfunction); + + typefind = g_new0(GstTypeFind, 1); + typefind->peek = gst_type_find_peek_handler; + typefind->suggest = gst_type_find_suggest_handler; + typefind->data = data; + if (getlengthfunction) + typefind->get_length = gst_type_find_get_length_handler; + + pytypefind = pyg_pointer_new (GST_TYPE_TYPE_FIND, typefind); + + if (!pytypefind) { + PyErr_SetString (PyExc_TypeError, "pyg_pointer_new failed"); + } + + GST_DEBUG ("poeut : %p", pytypefind); + + return pytypefind; +} + +%% +override gst_type_find_register args + +static void +type_find_function (GstTypeFind *find, gpointer user_data) +{ + PyGILState_STATE state; + PyObject *data; + PyObject *callback, *args, *old_args; + PyObject *typefind; + + state = pyg_gil_state_ensure (); + + typefind = pyg_pointer_new(GST_TYPE_TYPE_FIND, find); + + data = (PyObject *) user_data; + callback = PyTuple_GET_ITEM(data, 0); + args = Py_BuildValue("(O)", typefind); + if (PyTuple_GET_SIZE(data) > 1) { + old_args = args; + args = PySequence_Concat(args, PyTuple_GET_ITEM(data, 1)); + Py_DECREF(old_args); + } + + PyObject_CallObject(callback, args); + + Py_DECREF(args); + Py_DECREF(typefind); + + pyg_gil_state_release (state); + + return; +} + +static void +type_find_function_data_destroy_notify(gpointer data) +{ + Py_DECREF((PyObject *) data); +} + +static PyObject * +_wrap_gst_type_find_register (PyObject *self, PyObject *args) +{ + guint rank; + PyObject *required_args; + PyObject *function; + PyObject *function_args = NULL; + PyObject *py_extensions = NULL, *ext; + PyObject *py_possible_caps = NULL; + PyObject *py_res = NULL; + gchar *name; + gpointer *data = NULL; + GStrv extensions = NULL; + guint i, n_extensions; + GstCaps *possible_caps = NULL; + gboolean res = FALSE; + + if (PyTuple_GET_SIZE(args) > 5) { + required_args = PyTuple_GetSlice(args, 0, 5); + function_args = PyTuple_GetSlice(args, 5, PyTuple_GET_SIZE(args)); + } else { + required_args = args; + } + + if (!PyArg_ParseTuple(required_args, "siO|OO:type_find_register", + &name, &rank, &function, &py_extensions, &py_possible_caps)) { + goto out; + } + + if (!PyCallable_Check(function)) { + PyErr_SetString (PyExc_TypeError, "function is not a callable"); + goto out; + } + + if (py_extensions) { + n_extensions = PySequence_Size(py_extensions); + if (n_extensions == -1) { + goto out; + } + + if (n_extensions > 0) { + extensions = (char **) g_malloc(sizeof(char *) * n_extensions + 1); + for(i = 0; i < n_extensions; ++i) { + ext = PySequence_GetItem(py_extensions, i); + + if (!PyString_Check(ext)) { + PyErr_SetString(PyExc_TypeError, "extension is not a string"); + goto out; + } + + extensions[i] = g_strdup(PyString_AS_STRING(ext)); + } + + extensions[n_extensions] = NULL; + } + } + + if (py_possible_caps) + possible_caps = pygst_caps_from_pyobject(py_possible_caps, NULL); + + if (function_args) + data = (gpointer) Py_BuildValue("(OO)", function, function_args); + else + data = (gpointer) Py_BuildValue("(O)", function); + + pyg_begin_allow_threads; + res = gst_type_find_register(NULL, name, rank, + type_find_function, extensions, possible_caps, + data, type_find_function_data_destroy_notify); + pyg_end_allow_threads; + + py_res = PyBool_FromLong(res); + +out: + if (required_args != args) { + Py_DECREF(required_args); + } + + Py_XDECREF(function_args); + + if (extensions) + g_strfreev(extensions); + + if (possible_caps) + gst_caps_unref(possible_caps); + + if (res == FALSE && data) { + Py_DECREF((PyObject *) data); + } + + return py_res; +} + +%% +override gst_type_find_peek kwargs +static PyObject * +_wrap_gst_type_find_peek (PyObject * self, PyObject * args, PyObject * kwargs) +{ + static char *kwlist[] = { "offset", "size", NULL }; + gint64 offset; + guint size; + GstTypeFind *typefind; + guint8 *data; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"LI:GstTypeFind.peek", + kwlist, &offset, &size)) + return NULL; + + typefind = pyg_pointer_get(self, GstTypeFind); + pyg_begin_allow_threads; + data = gst_type_find_peek(typefind, offset, size); + pyg_end_allow_threads; + + if (data == NULL) + /* return the empty string */ + return PyString_FromStringAndSize(NULL, 0); + + return PyString_FromStringAndSize((char *) data, size); +} + +%% +override gst_segment_set_seek kwargs +static PyObject * +_wrap_gst_segment_set_seek (PyObject * self, PyObject * args, PyObject * kwargs) +{ + static char *kwlist[] = { "rate", "format", "flags", "start_type", "start", + "stop_type", "stop", NULL }; + GstSeekType start_type, stop_type; + PyObject *py_format = NULL, *py_flags = NULL, *py_start_type = NULL; + PyObject *py_stop_type = NULL, *py_ret; + double rate; + GstFormat format; + gint64 start, stop; + GstSeekFlags flags; + gboolean update = FALSE; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"dOOOLOL:GstSegment.set_seek", + kwlist, &rate, &py_format, &py_flags, + &py_start_type, &start, &py_stop_type, + &stop)) + return NULL; + if (pyg_enum_get_value(GST_TYPE_FORMAT, py_format, (gint *)&format)) + return NULL; + if (pyg_flags_get_value(GST_TYPE_SEEK_FLAGS, py_flags, (gint *)&flags)) + return NULL; + if (pyg_enum_get_value(GST_TYPE_SEEK_TYPE, py_start_type, (gint *)&start_type)) + return NULL; + if (pyg_enum_get_value(GST_TYPE_SEEK_TYPE, py_stop_type, (gint *)&stop_type)) + return NULL; + pyg_begin_allow_threads; + gst_segment_set_seek(pyg_boxed_get(self, GstSegment), rate, format, flags, + start_type, start, stop_type, stop, &update); + pyg_end_allow_threads; + py_ret = PyBool_FromLong(update); + return py_ret; +} +%% +override gst_segment_clip kwargs +static PyObject * +_wrap_gst_segment_clip (PyObject * self, PyObject * args, PyObject * kwargs) +{ + static char *kwlist[] = { "format", "start", "stop", NULL}; + GstFormat format; + gint64 start, stop; + gint64 cstart = -1; + gint64 cstop = -1; + gboolean ret; + PyObject *py_ret, *py_format; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OLL:GstSegment.clip", + kwlist, &py_format, &start, &stop)) + return NULL; + if (pyg_enum_get_value(GST_TYPE_FORMAT, py_format, (gint *)&format)) + return NULL; + pyg_begin_allow_threads; + ret = gst_segment_clip (pyg_boxed_get(self, GstSegment), format, start, stop, + &cstart, &cstop); + pyg_end_allow_threads; + + /* Returns gboolean ret, gint64 clip_start, gint64 clip_stop */ + py_ret = PyList_New(3); + PyList_SetItem(py_ret, 0, PyBool_FromLong(ret)); + PyList_SetItem(py_ret, 1, PyLong_FromLongLong(cstart)); + PyList_SetItem(py_ret, 2, PyLong_FromLongLong(cstop)); + + return py_ret; +} + +%% +override GstURIHandler__proxy_do_get_type_full +static GstURIType +_wrap_GstURIHandler__proxy_do_get_type_full (GType type) +{ + PyGILState_STATE __py_state; + PyTypeObject *py_class; + PyObject *py_method; + PyObject *py_retval; + guint retval; + + __py_state = pyg_gil_state_ensure(); + py_class = pygobject_lookup_class (type); + if (py_class == NULL) { + pyg_gil_state_release (__py_state); + return GST_URI_UNKNOWN; + } + + py_method = PyObject_GetAttrString((PyObject *) py_class, "do_get_type_full"); + Py_DECREF (py_class); + if (!py_method) { + if (PyErr_Occurred()) + PyErr_Print(); + pyg_gil_state_release(__py_state); + return GST_URI_UNKNOWN; + } + + py_retval = PyObject_CallObject(py_method, NULL); + Py_DECREF (py_method); + if (!py_retval) { + if (PyErr_Occurred()) + PyErr_Print(); + pyg_gil_state_release(__py_state); + return GST_URI_UNKNOWN; + } + + retval = PyLong_AsLong (py_retval); + Py_DECREF(py_retval); + pyg_gil_state_release(__py_state); + + return retval; +} + +%% +override GstURIHandler__proxy_do_get_protocols_full +static gchar ** +_wrap_GstURIHandler__proxy_do_get_protocols_full (GType type) +{ + PyGILState_STATE __py_state; + PyTypeObject *py_class; + PyObject *py_method; + PyObject *py_retval; + Py_ssize_t ret_size, i; + gchar **retval; + + __py_state = pyg_gil_state_ensure(); + py_class = pygobject_lookup_class (type); + if (py_class == NULL) { + pyg_gil_state_release (__py_state); + return NULL; + } + + py_method = PyObject_GetAttrString((PyObject *) py_class, "do_get_protocols_full"); + Py_DECREF (py_class); + if (!py_method) { + if (PyErr_Occurred()) + PyErr_Print(); + pyg_gil_state_release(__py_state); + return NULL; + } + + py_retval = PyObject_CallObject(py_method, NULL); + Py_DECREF (py_method); + if (!py_retval) { + if (PyErr_Occurred()) + PyErr_Print(); + pyg_gil_state_release(__py_state); + return NULL; + } + + if (!PySequence_Check (py_retval)) { + PyErr_SetString (PyExc_TypeError, "GstURIHandler.do_get_protocols_full " + "must return a sequence of strings"); + Py_DECREF (py_retval); + return NULL; + } + + ret_size = PySequence_Size (py_retval); + if (ret_size == -1) { + Py_DECREF (py_retval); + pyg_gil_state_release(__py_state); + return NULL; + } + + retval = g_new (gchar *, ret_size + 1); + retval[ret_size] = NULL; + for (i = 0; i < PySequence_Size (py_retval); ++i) { + PyObject *item = PySequence_GetItem (py_retval, i); + if (!item) { + if (PyErr_Occurred ()) + PyErr_Print (); + g_strfreev (retval); + Py_DECREF (py_retval); + pyg_gil_state_release(__py_state); + return NULL; + } + + if (!PyString_Check (item)) { + PyErr_SetString (PyExc_TypeError, "GstURIHandler.do_get_protocols_full " + "must return a sequence of strings"); + Py_DECREF (item); + g_strfreev (retval); + Py_DECREF (py_retval); + pyg_gil_state_release(__py_state); + return NULL; + } + + retval [i] = PyString_AsString (item); + if (!retval [i]) { + if (PyErr_Occurred ()) + PyErr_Print (); + g_strfreev (retval); + Py_DECREF (item); + Py_DECREF (py_retval); + pyg_gil_state_release(__py_state); + return NULL; + } + + Py_DECREF (item); + } + + Py_DECREF(py_retval); + pyg_gil_state_release(__py_state); + + return retval; +} +%% +override GstURIHandler__do_get_type_full +static PyObject * +_wrap_GstURIHandler__do_get_type_full(PyObject *cls, PyObject *args, PyObject *kwargs) +{ + GstURIHandlerInterface *iface; + static char *kwlist[] = { "self", "type", NULL }; + PyGObject *self; + PyObject *py_type = NULL; + GType type; + guint ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O!O:GstURIHandler.get_type_full", kwlist, &PyGstURIHandler_Type, &self, &py_type)) + return NULL; + if ((type = pyg_type_from_object(py_type)) == 0) + return NULL; + iface = g_type_interface_peek(g_type_class_peek(pyg_type_from_object(cls)), GST_TYPE_URI_HANDLER); + if (iface->get_type_full) + ret = iface->get_type_full(type); + else { + PyErr_SetString(PyExc_NotImplementedError, "interface method GstURIHandler.get_type_full not implemented"); + return NULL; + } + return PyLong_FromUnsignedLong(ret); +} +%% +override GstURIHandler__do_get_protocols_full +static PyObject * +_wrap_GstURIHandler__do_get_protocols_full(PyObject *cls, PyObject *args, PyObject *kwargs) +{ + GstURIHandlerInterface *iface; + static char *kwlist[] = { "self", "type", NULL }; + PyGObject *self; + PyObject *py_type = NULL; + GType type; + gchar **ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O!O:GstURIHandler.get_protocols_full", kwlist, &PyGstURIHandler_Type, &self, &py_type)) + return NULL; + if ((type = pyg_type_from_object(py_type)) == 0) + return NULL; + iface = g_type_interface_peek(g_type_class_peek(pyg_type_from_object(cls)), GST_TYPE_URI_HANDLER); + if (iface->get_protocols_full) + ret = iface->get_protocols_full(type); + else { + PyErr_SetString(PyExc_NotImplementedError, "interface method GstURIHandler.get_protocols_full not implemented"); + return NULL; + } + if (ret) { + guint size = g_strv_length(ret); + PyObject *py_ret = PyTuple_New(size); + gint i; + for (i = 0; i < size; i++) + PyTuple_SetItem(py_ret, i, + PyString_FromString(ret[i])); + return py_ret; + } + return PyTuple_New (0); + +} + +%% +override g_error_new kwargs +static int +_wrap_g_error_new(PyGBoxed *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "domain", "code", "message", NULL }; + int code; + gchar *message; + gchar *domain; + GQuark domainq; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"sis:GError.__init__", kwlist, &domain, &code, &message)) + return -1; + domainq = g_quark_from_string(domain); + + self->gtype = GST_TYPE_G_ERROR; + self->free_on_dealloc = FALSE; + self->boxed = g_error_new(domainq, code, "%s", message); + + if (!self->boxed) { + PyErr_SetString(PyExc_RuntimeError, "could not create GError object"); + return -1; + } + self->free_on_dealloc = TRUE; + return 0; +} +%% +override-attr GstIndexEntry.NASSOCS +static PyObject * +_wrap_gst_index_entry__get_NASSOCS(PyObject *self, void *closure) +{ + GstIndexEntry *entry; + + g_assert (self); + entry = (GstIndexEntry*) pyg_boxed_get(self, GstIndexEntry); + g_assert (entry); + + if (entry->type != GST_INDEX_ENTRY_ASSOCIATION) { + PyErr_SetString(PyExc_RuntimeError, "IndexEntry is not an AssociationEntry"); + return NULL; + } + return PyInt_FromLong(GST_INDEX_NASSOCS(entry)); +} +%% +override-attr GstIndexEntry.ASSOC_FLAGS +static PyObject * +_wrap_gst_index_entry__get_ASSOC_FLAGS(PyObject *self, void *closure) +{ + GstIndexEntry *entry; + + g_assert (self); + entry = (GstIndexEntry*) pyg_boxed_get(self, GstIndexEntry); + g_assert (entry); + + if (entry->type != GST_INDEX_ENTRY_ASSOCIATION) { + PyErr_SetString(PyExc_RuntimeError, "IndexEntry is not an AssociationEntry"); + return NULL; + } + return pyg_flags_from_gtype(GST_TYPE_ASSOC_FLAGS, + GST_INDEX_ASSOC_FLAGS (entry)); +} +%% +override-attr GstIndexEntry.ID_DESCRIPTION +static PyObject * +_wrap_gst_index_entry__get_ID_DESCRIPTION(PyObject *self, void *closure) +{ + GstIndexEntry *entry; + + g_assert (self); + entry = (GstIndexEntry*) pyg_boxed_get(self, GstIndexEntry); + g_assert (entry); + + if (entry->type != GST_INDEX_ENTRY_ID) { + PyErr_SetString(PyExc_RuntimeError, "IndexEntry is not an ID Entry"); + return NULL; + } + if (GST_INDEX_ID_DESCRIPTION (entry)) + return PyString_FromString(GST_INDEX_ID_DESCRIPTION (entry)); + Py_INCREF(Py_None); + return Py_None; +} +%% +override-attr GstIndexEntry.FORMAT_FORMAT +static PyObject * +_wrap_gst_index_entry__get_FORMAT_FORMAT(PyObject *self, void *closure) +{ + GstIndexEntry *entry; + + g_assert (self); + entry = (GstIndexEntry*) pyg_boxed_get(self, GstIndexEntry); + g_assert (entry); + + if (entry->type != GST_INDEX_ENTRY_FORMAT) { + PyErr_SetString(PyExc_RuntimeError, "IndexEntry is not a FORMAT Entry"); + return NULL; + } + return pyg_enum_from_gtype (GST_TYPE_FORMAT, GST_INDEX_FORMAT_FORMAT (entry)); +} +%% +override-attr GstIndexEntry.FORMAT_KEY +static PyObject * +_wrap_gst_index_entry__get_FORMAT_KEY(PyObject *self, void *closure) +{ + GstIndexEntry *entry; + + g_assert (self); + entry = (GstIndexEntry*) pyg_boxed_get(self, GstIndexEntry); + g_assert (entry); + + if (entry->type != GST_INDEX_ENTRY_FORMAT) { + PyErr_SetString(PyExc_RuntimeError, "IndexEntry is not a FORMAT Entry"); + return NULL; + } + if (GST_INDEX_FORMAT_KEY (entry)) + return PyString_FromString(GST_INDEX_FORMAT_KEY (entry)); + Py_INCREF(Py_None); + return Py_None; +} diff --git a/gst/gstbase.override b/gst/gstbase.override new file mode 100644 index 0000000..a523cd2 --- /dev/null +++ b/gst/gstbase.override @@ -0,0 +1,905 @@ +/* -*- Mode: C; ; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2006 Edward Hervey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Johan Dahlin + */ + +%% +override GstBaseSrc__proxy_do_create +static GstFlowReturn +_wrap_GstBaseSrc__proxy_do_create (GstBaseSrc * self, + guint64 offset, + guint size, + GstBuffer ** buf) +{ + PyGILState_STATE __py_state; + PyObject *py_self; + GstFlowReturn retval = GST_FLOW_ERROR; + PyObject *py_ret; + PyObject *py_flow; + PyObject *py_buffer; + PyObject *py_args; + PyObject *py_method; + + __py_state = pyg_gil_state_ensure(); + py_self = pygobject_new((GObject *) self); + if (!py_self) { + if (PyErr_Occurred()) + PyErr_Print(); + goto beach; + } + + py_args = PyTuple_New(2); + PyTuple_SET_ITEM(py_args, 0, PyLong_FromUnsignedLongLong(offset)); + PyTuple_SET_ITEM(py_args, 1, PyInt_FromLong(size)); + + py_method = PyObject_GetAttrString(py_self, "do_create"); + + if (!py_method) { + if (PyErr_Occurred()) + PyErr_Print(); + Py_DECREF(py_args); + Py_DECREF(py_self); + goto beach; + } + + py_ret = PyObject_CallObject(py_method, py_args); + if (!py_ret) { + if (PyErr_Occurred()) + PyErr_Print(); + Py_DECREF(py_method); + Py_DECREF(py_args); + Py_DECREF(py_self); + goto beach; + } + + /* process the python return value */ + /* Should be a list containing the gst.FlowReturn and the gst.Buffer */ + if (PyTuple_Check(py_ret)) { + /* gst.FlowReturn */ + py_flow = PyTuple_GetItem(py_ret, 0); + + if (!py_flow) { + if (PyErr_Occurred()) + PyErr_Print(); + Py_DECREF(py_ret); + Py_DECREF(py_method); + Py_DECREF(py_args); + Py_DECREF(py_self); + goto beach; + } + + if (py_flow == Py_None) { + GST_ERROR ("None return flow is not valid"); + goto beach; + } + + GST_DEBUG ("py_flow:%p", py_flow); + + if (pyg_enum_get_value(GST_TYPE_FLOW_RETURN, py_flow, (gint*) &retval)) { + if (PyErr_Occurred()) + PyErr_Print(); + Py_DECREF(py_ret); + Py_DECREF(py_flow); + Py_DECREF(py_method); + Py_DECREF(py_args); + Py_DECREF(py_self); + retval = GST_FLOW_ERROR; + goto beach; + } + + py_buffer = PyTuple_GetItem(py_ret, 1); + if (!py_buffer) { + if (PyErr_Occurred()) + PyErr_Print(); + Py_DECREF(py_ret); + Py_DECREF(py_method); + Py_DECREF(py_args); + Py_DECREF(py_self); + goto beach; + } + + if (pygstminiobject_check(py_buffer, &PyGstBuffer_Type)) { + *buf = GST_BUFFER (pygstminiobject_get (py_buffer)); + gst_buffer_ref (*buf); + } else { + *buf = NULL; + } + } + + Py_DECREF(py_ret); + Py_DECREF(py_method); + Py_DECREF(py_args); + Py_DECREF(py_self); + + beach: + pyg_gil_state_release(__py_state); + + return retval; +} +%% +override GstBaseSrc__do_create kwargs +static PyObject * +_wrap_GstBaseSrc__do_create (PyObject *cls, PyObject *args, PyObject *kwargs) +{ + gpointer klass; + static char *kwlist[] = { "self", "offset", "size", NULL }; + PyGObject *self; + guint64 offset; + guint size; + PyObject *py_ret; + GstFlowReturn flow; + GstBuffer *buffer = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!KI:GstBaseSrc.create", + kwlist, &PyGstBaseSrc_Type, &self, &offset, &size)) + return NULL; + + klass = g_type_class_ref(pyg_type_from_object(cls)); + if (GST_BASE_SRC_CLASS(klass)->create) { + pyg_begin_allow_threads; + flow = GST_BASE_SRC_CLASS(klass)->create(GST_BASE_SRC(self->obj), offset, size, &buffer); + pyg_end_allow_threads; + } else { + PyErr_SetString(PyExc_NotImplementedError, "virtual method GstBaseSrc.set_caps not implemented"); + g_type_class_unref(klass); + return NULL; + } + g_type_class_unref(klass); + + /* We now need to return a tuple with (flow, buffer) */ + if (buffer) + py_ret = PyTuple_New(2); + else + py_ret = PyTuple_New(1); + + PyTuple_SET_ITEM(py_ret, 0, pyg_enum_from_gtype(GST_TYPE_FLOW_RETURN, flow)); + + if (buffer) + PyTuple_SET_ITEM(py_ret, 1, pygstminiobject_new(GST_MINI_OBJECT (buffer))); + + return py_ret; +} +%% +override GstBaseSrc__proxy_do_get_size +static gboolean +_wrap_GstBaseSrc__proxy_do_get_size (GstBaseSrc * self, + guint64 * size) +{ + PyGILState_STATE __py_state; + PyObject *py_self; + gboolean ret = FALSE; + PyObject *py_method; + PyObject *py_ret; + + __py_state = pyg_gil_state_ensure(); + py_self = pygobject_new((GObject *) self); + if (!py_self) { + if (PyErr_Occurred()) + PyErr_Print(); + goto beach; + } + + py_method = PyObject_GetAttrString(py_self, "do_get_size"); + + if (!py_method) { + if (PyErr_Occurred()) + PyErr_Print(); + Py_DECREF(py_self); + goto beach; + } + + py_ret = PyObject_CallObject(py_method, NULL); + if (!py_ret) { + if (PyErr_Occurred()) + PyErr_Print(); + Py_DECREF(py_method); + Py_DECREF(py_self); + goto beach; + } + + /* + If the method returned a numeric, the return value will be TRUE. + For ANY other case, we don't set size and the return value is FALSE. + */ + + if (PyLong_Check(py_ret)) { + *size = PyLong_AsUnsignedLongLongMask(py_ret); + ret = TRUE; + } + + Py_DECREF(py_method); + Py_DECREF(py_self); + Py_DECREF(py_ret); + + beach: + pyg_gil_state_release(__py_state); + + return ret; +} +%% +override GstBaseSrc__do_get_size kwargs +static PyObject * +_wrap_GstBaseSrc__do_get_size (PyObject *cls, PyObject *args, PyObject *kwargs) +{ + gpointer klass; + static char *kwlist[] = { "self", NULL }; + PyGObject *self; + gboolean ret; + guint64 size = 0; + PyObject *py_ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!:GstBaseSrc.get_size", + kwlist, &PyGstBaseSrc_Type, &self)) + return NULL; + klass = g_type_class_ref(pyg_type_from_object(cls)); + if (GST_BASE_SRC_CLASS(klass)->get_size) { + pyg_begin_allow_threads; + ret = GST_BASE_SRC_CLASS(klass)->get_size(GST_BASE_SRC(self->obj), &size); + pyg_end_allow_threads; + } else { + PyErr_SetString(PyExc_NotImplementedError, "virtual method GstBaseSrc.get_size not implemented"); + g_type_class_unref(klass); + return NULL; + } + g_type_class_unref(klass); + + py_ret = PyLong_FromUnsignedLongLong(size); + + return py_ret; +} +%% +override GstBaseSrc__proxy_do_get_times +static void +_wrap_GstBaseSrc__proxy_do_get_times (GstBaseSrc * self, + GstBuffer *buffer, + GstClockTime * start, + GstClockTime * end) +{ + PyGILState_STATE __py_state; + PyObject *py_args; + PyObject *py_self; + PyObject *py_method; + PyObject *py_ret; + + __py_state = pyg_gil_state_ensure(); + + py_self = pygobject_new((GObject *) self); + if (!py_self) { + if (PyErr_Occurred()) + PyErr_Print(); + return; + } + + py_args = Py_BuildValue ("(N)", + pygstminiobject_new((GstMiniObject *)buffer)); + + py_method = PyObject_GetAttrString(py_self, "do_get_times"); + + Py_DECREF(py_self); + + if (!py_method) { + if (PyErr_Occurred()) + PyErr_Print(); + goto beach; + } + + py_ret = PyObject_CallObject(py_method, py_args); + + Py_DECREF(py_method); + + if (!py_ret) { + if (PyErr_Occurred()) + PyErr_Print(); + goto beach; + } + + /* + If the method returned a numeric, the return value will be TRUE. + For ANY other case, we don't set size and the return value is FALSE. + */ + + if ((PyTuple_Check(py_ret)) && (PyTuple_Size (py_ret) == 2)) + PyArg_ParseTuple (py_ret, "KK", start, end); + + Py_DECREF (py_ret); + beach: + Py_DECREF (py_args); + pyg_gil_state_release(__py_state); + return; +} +%% +override GstBaseSrc__do_get_times kwargs +static PyObject * +_wrap_GstBaseSrc__do_get_times (PyObject *cls, PyObject *args, PyObject *kwargs) +{ + gpointer klass; + static char *kwlist[] = { "self", "buffer", NULL }; + PyGObject *self; + PyGstMiniObject *py_buffer; + GstClockTime start = 0; + GstClockTime end = 0; + PyObject *py_ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!:GstBaseSrc.get_times", + kwlist, &PyGstBaseSrc_Type, &self, + &PyGstBuffer_Type, &py_buffer)) + return NULL; + klass = g_type_class_ref(pyg_type_from_object(cls)); + if (GST_BASE_SRC_CLASS(klass)->get_times) { + pyg_begin_allow_threads; + GST_BASE_SRC_CLASS(klass)->get_times(GST_BASE_SRC(self->obj), + GST_BUFFER(py_buffer->obj), + &start, &end); + pyg_end_allow_threads; + } else { + PyErr_SetString(PyExc_NotImplementedError, "virtual method GstBaseSrc.get_times not implemented"); + g_type_class_unref(klass); + return NULL; + } + g_type_class_unref(klass); + + py_ret = PyTuple_New(2); + PyTuple_SetItem(py_ret, 0, PyLong_FromUnsignedLongLong(start)); + PyTuple_SetItem(py_ret, 1, PyLong_FromUnsignedLongLong(end)); + + return py_ret; +} +%% +override GstPushSrc__proxy_do_create +static GstFlowReturn +_wrap_GstPushSrc__proxy_do_create (GstPushSrc * self, + GstBuffer **buffer) +{ + PyGILState_STATE __py_state; + PyObject *py_self; + PyObject *py_method; + PyObject *py_ret; + PyGstMiniObject *py_buffer; + PyObject *py_flow; + GstFlowReturn ret = GST_FLOW_OK; + + __py_state = pyg_gil_state_ensure(); + + py_self = pygobject_new((GObject *) self); + if (!py_self) { + if (PyErr_Occurred()) + PyErr_Print(); + goto beach; + } + + py_method = PyObject_GetAttrString(py_self, "do_create"); + + Py_DECREF(py_self); + + if (!py_method) { + if (PyErr_Occurred()) + PyErr_Print(); + goto beach; + } + + py_ret = PyObject_CallObject(py_method, NULL); + + Py_DECREF(py_method); + + if (!py_ret) { + if (PyErr_Occurred()) + PyErr_Print(); + goto beach; + } + + /* + If the method returned a numeric, the return value will be TRUE. + For ANY other case, we don't set size and the return value is FALSE. + */ + + if ((PyTuple_Check(py_ret)) && (PyTuple_Size (py_ret) == 2)) { + PyArg_ParseTuple (py_ret, "O!O!", &PyGEnum_Type, &py_flow, + &PyGstBuffer_Type, &py_buffer); + *buffer = GST_BUFFER (((PyGstMiniObject*) self)->obj); + gst_buffer_ref (*buffer); + pyg_enum_get_value(GST_TYPE_FLOW_RETURN, py_flow, (gint*)&ret); + } + + Py_DECREF (py_ret); + beach: + pyg_gil_state_release(__py_state); + return ret; +} +%% +override GstPushSrc__do_create kwargs +static PyObject * +_wrap_GstPushSrc__do_create (PyObject *cls, PyObject *args, PyObject *kwargs) +{ + gpointer klass; + static char *kwlist[] = { "self", NULL }; + PyGObject *self; + GstBuffer *buffer; + GstFlowReturn flow; + PyObject *py_ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!:GstPushSrc.create", + kwlist, &PyGstPushSrc_Type, &self)) + return NULL; + klass = g_type_class_ref(pyg_type_from_object(cls)); + if (GST_PUSH_SRC_CLASS(klass)->create) { + pyg_begin_allow_threads; + flow = GST_PUSH_SRC_CLASS(klass)->create(GST_PUSH_SRC(self->obj), + (GstBuffer**) &buffer); + pyg_end_allow_threads; + } else { + PyErr_SetString(PyExc_NotImplementedError, "virtual method GstPushSrc.create not implemented"); + g_type_class_unref(klass); + return NULL; + } + g_type_class_unref(klass); + + py_ret = PyTuple_New(2); + PyList_SetItem(py_ret, 0, pyg_enum_from_gtype(GST_TYPE_FLOW_RETURN, flow)); + PyList_SetItem(py_ret, 1, pygstminiobject_new(GST_MINI_OBJECT(buffer))); + + return py_ret; +} +%% +override GstBaseTransform__proxy_do_get_unit_size +static gboolean +_wrap_GstBaseTransform__proxy_do_get_unit_size (GstBaseTransform * self, + GstCaps * caps, + guint * size) +{ + PyGILState_STATE __py_state; + PyObject *py_self; + PyObject *py_caps; + gboolean ret = FALSE; + PyObject *py_args; + PyObject *py_method; + PyObject *py_ret; + + __py_state = pyg_gil_state_ensure(); + py_self = pygobject_new((GObject *) self); + if (!py_self) { + if (PyErr_Occurred()) + PyErr_Print(); + goto beach; + } + + if (caps) + py_caps = pyg_boxed_new(GST_TYPE_CAPS, caps, FALSE, FALSE); // should copyval be TRUE instead? + else { + Py_INCREF (Py_None); + py_caps = Py_None; + } + + py_args = PyTuple_New(1); + PyTuple_SET_ITEM(py_args, 0, py_caps); + + py_method = PyObject_GetAttrString(py_self, "do_get_unit_size"); + + if (!py_method) { + if (PyErr_Occurred()) + PyErr_Print(); + Py_DECREF(py_args); + Py_DECREF(py_self); + goto beach; + } + + py_ret = PyObject_CallObject(py_method, py_args); + if (!py_ret) { + if (PyErr_Occurred()) + PyErr_Print(); + Py_DECREF(py_method); + Py_DECREF(py_args); + Py_DECREF(py_self); + goto beach; + } + + /* + If the method returned a numeric, the return value will be TRUE. + For ANY other case, we don't set size and the return value is FALSE. + */ + + if (PyInt_Check(py_ret)) { + *size = PyInt_AsLong(py_ret); + ret = TRUE; + } + + Py_DECREF(py_method); + Py_DECREF(py_args); + Py_DECREF(py_self); + Py_DECREF(py_ret); + + beach: + pyg_gil_state_release(__py_state); + return ret; +} +%% +override GstBaseTransform__do_get_unit_size kwargs +static PyObject * +_wrap_GstBaseTransform__do_get_unit_size (PyObject *cls, PyObject *args, PyObject *kwargs) +{ + gpointer klass; + static char *kwlist[] = { "self", "caps", NULL }; + PyGObject *self; + PyGObject *caps; + gboolean ret; + guint size = 0; + PyObject *py_ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!:GstBaseTransform.get_unit_size", + kwlist, &PyGstBaseTransform_Type, &self, &PyGstCaps_Type, &caps)) + return NULL; + klass = g_type_class_ref(pyg_type_from_object(cls)); + if (GST_BASE_TRANSFORM_CLASS(klass)->get_unit_size) { + pyg_begin_allow_threads; + ret = GST_BASE_TRANSFORM_CLASS(klass)->get_unit_size(GST_BASE_TRANSFORM(self->obj), GST_CAPS(caps->obj), &size); + pyg_end_allow_threads; + } else { + PyErr_SetString(PyExc_NotImplementedError, "virtual method GstBaseTransform.get_unit_size not implemented"); + g_type_class_unref(klass); + return NULL; + } + g_type_class_unref(klass); + + py_ret = PyLong_FromUnsignedLongLong(size); + + return py_ret; +} +%% +override GstBaseTransform__proxy_do_transform_size +static gboolean +_wrap_GstBaseTransform__proxy_do_transform_size (GstBaseTransform * self, + GstPadDirection direction, + GstCaps * caps, + guint size, + GstCaps * othercaps, + guint * othersize) +{ + PyGILState_STATE __py_state; + PyObject *py_self = NULL; + PyObject *py_direction = NULL; + PyObject *py_caps = NULL; + PyObject *py_size = NULL; + PyObject *py_othercaps = NULL; + PyObject *py_args = NULL; + PyObject *py_method = NULL; + PyObject *py_ret = NULL; + gboolean ret = FALSE; + + __py_state = pyg_gil_state_ensure(); + py_self = pygobject_new((GObject *) self); + if (!py_self) { + if (PyErr_Occurred()) + PyErr_Print(); + goto beach; + } + + py_direction = pyg_enum_from_gtype(GST_TYPE_PAD_DIRECTION, direction); + + if (caps) + py_caps = pyg_boxed_new(GST_TYPE_CAPS, caps, FALSE, FALSE); // should copyval be TRUE instead? + else { + Py_INCREF (Py_None); + py_caps = Py_None; + } + + py_size = PyInt_FromLong(size); + + if (othercaps) + py_othercaps = pyg_boxed_new(GST_TYPE_CAPS, caps, FALSE, FALSE); // should copyval be TRUE instead? + else { + Py_INCREF (Py_None); + py_othercaps = Py_None; + } + + py_args = PyTuple_New(4); + PyTuple_SET_ITEM(py_args, 0, py_direction); + PyTuple_SET_ITEM(py_args, 1, py_caps); + PyTuple_SET_ITEM(py_args, 2, py_size); + PyTuple_SET_ITEM(py_args, 3, py_othercaps); + + py_method = PyObject_GetAttrString(py_self, "do_transform_size"); + if (!py_method) { + if (PyErr_Occurred()) + PyErr_Print(); + goto beach; + } + + py_ret = PyObject_CallObject(py_method, py_args); + if (!py_ret) { + if (PyErr_Occurred()) + PyErr_Print(); + goto beach; + } + + if (PyInt_Check(py_ret)) { + *othersize = PyInt_AsLong(py_ret); + ret = TRUE; + } + +beach: + Py_XDECREF(py_self); + Py_XDECREF(py_args); + Py_XDECREF(py_method); + Py_XDECREF(py_ret); + + pyg_gil_state_release(__py_state); + return ret; +} +%% +override GstBaseTransform__do_transform_size kwargs +static PyObject * +_wrap_GstBaseTransform__do_transform_size (PyObject *cls, PyObject *args, PyObject *kwargs) +{ + gpointer klass; + static char *kwlist[] = { "self", "direction", "caps", "size", "othercaps", NULL }; + PyGObject *self; + PyGObject *py_direction; + PyGObject *py_caps; + PyGObject *py_othercaps; + gboolean ret; + GstPadDirection direction; + guint size = 0; + guint othersize = 0; + PyObject *py_ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!O!iO!:GstBaseTransform.get_unit_size", + kwlist, &PyGstBaseTransform_Type, &self, &PyGEnum_Type, &py_direction, + &PyGstCaps_Type, &py_caps, &size, &PyGstCaps_Type, &py_othercaps)) + return NULL; + + pyg_enum_get_value(GST_TYPE_PAD_DIRECTION, + (PyObject *) py_direction, (gint *) &direction); + + klass = g_type_class_ref(pyg_type_from_object(cls)); + if (GST_BASE_TRANSFORM_CLASS(klass)->transform_size) { + pyg_begin_allow_threads; + ret = GST_BASE_TRANSFORM_CLASS(klass)->transform_size(GST_BASE_TRANSFORM(self->obj), + direction, GST_CAPS(py_caps->obj), size, + GST_CAPS(py_othercaps->obj), &othersize); + pyg_end_allow_threads; + } else { + PyErr_SetString(PyExc_NotImplementedError, "virtual method GstBaseTransform.transform_size not implemented"); + g_type_class_unref(klass); + return NULL; + } + g_type_class_unref(klass); + + py_ret = PyLong_FromUnsignedLongLong(othersize); + return py_ret; +} +%% +override GstBaseSink__proxy_do_get_times +static void +_wrap_GstBaseSink__proxy_do_get_times (GstBaseSink * self, + GstBuffer *buffer, + GstClockTime * start, + GstClockTime * end) +{ + PyGILState_STATE __py_state; + PyObject *py_args; + PyObject *py_self; + PyObject *py_method; + PyObject *py_ret; + + __py_state = pyg_gil_state_ensure(); + + py_self = pygobject_new((GObject *) self); + if (!py_self) { + if (PyErr_Occurred()) + PyErr_Print(); + pyg_gil_state_release(__py_state); + return; + } + + py_args = Py_BuildValue ("(N)", + pygstminiobject_new((GstMiniObject *)buffer)); + + py_method = PyObject_GetAttrString(py_self, "do_get_times"); + + Py_DECREF(py_self); + + if (!py_method) { + if (PyErr_Occurred()) + PyErr_Print(); + goto beach; + } + + py_ret = PyObject_CallObject(py_method, py_args); + + Py_DECREF(py_method); + + if (!py_ret) { + if (PyErr_Occurred()) + PyErr_Print(); + goto beach; + } + + /* + If the method returned a numeric, the return value will be TRUE. + For ANY other case, we don't set size and the return value is FALSE. + */ + + if ((PyTuple_Check(py_ret)) && (PyTuple_Size (py_ret) == 2)) + PyArg_ParseTuple (py_ret, "KK", start, end); + + Py_DECREF (py_ret); + beach: + Py_DECREF (py_args); + pyg_gil_state_release(__py_state); + return; +} +%% +override GstBaseSink__do_get_times kwargs +static PyObject * +_wrap_GstBaseSink__do_get_times (PyObject *cls, PyObject *args, PyObject *kwargs) +{ + gpointer klass; + static char *kwlist[] = { "self", "buffer", NULL }; + PyGObject *self; + PyGstMiniObject *py_buffer; + GstClockTime start = 0; + GstClockTime end = 0; + PyObject *py_ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!:GstBaseSink.get_times", + kwlist, &PyGstBaseSink_Type, &self, + &PyGstBuffer_Type, &py_buffer)) + return NULL; + klass = g_type_class_ref(pyg_type_from_object(cls)); + if (GST_BASE_SINK_CLASS(klass)->get_times) { + pyg_begin_allow_threads; + GST_BASE_SINK_CLASS(klass)->get_times(GST_BASE_SINK(self->obj), + GST_BUFFER(py_buffer->obj), + &start, &end); + pyg_end_allow_threads; + } else { + PyErr_SetString(PyExc_NotImplementedError, "virtual method GstBaseSink.get_times not implemented"); + g_type_class_unref(klass); + return NULL; + } + g_type_class_unref(klass); + + py_ret = PyTuple_New(2); + PyTuple_SetItem(py_ret, 0, PyLong_FromUnsignedLongLong(start)); + PyTuple_SetItem(py_ret, 1, PyLong_FromUnsignedLongLong(end)); + + return py_ret; +} +%% +override gst_base_sink_query_latency noargs +static PyObject * +_wrap_gst_base_sink_query_latency (PyGObject *self) +{ + gboolean res, live = FALSE, upstream_live = FALSE; + GstClockTime minlat = GST_CLOCK_TIME_NONE, maxlat = GST_CLOCK_TIME_NONE; + + res = gst_base_sink_query_latency (GST_BASE_SINK (self->obj), &live, &upstream_live, + &minlat, &maxlat); + return Py_BuildValue("(OOOKK)", + PyBool_FromLong(res), + PyBool_FromLong(live), + PyBool_FromLong(upstream_live), + minlat, maxlat); +} +%% +override gst_base_src_query_latency noargs +static PyObject * +_wrap_gst_base_src_query_latency (PyGObject *self) +{ + gboolean res, live = FALSE; + GstClockTime minlat = GST_CLOCK_TIME_NONE, maxlat = GST_CLOCK_TIME_NONE; + + res = gst_base_src_query_latency (GST_BASE_SRC (self->obj), &live, + &minlat, &maxlat); + return Py_BuildValue("(OOKK)", + PyBool_FromLong(res), + PyBool_FromLong(live), + minlat, maxlat); +} +%% +override GstBaseTransform__do_src_event kwargs +static PyObject * +_wrap_GstBaseTransform__do_src_event(PyObject *cls, PyObject *args, PyObject *kwargs) +{ + gpointer klass; + static char *kwlist[] = { "self", "event", NULL }; + PyGObject *self; + int ret; + PyGstMiniObject *event; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O!O!:GstBaseTransform.src_event", kwlist, &PyGstBaseTransform_Type, &self, &PyGstEvent_Type, &event)) + return NULL; + klass = g_type_class_ref(pyg_type_from_object(cls)); + if (GST_BASE_TRANSFORM_CLASS(klass)->src_event) { + pyg_begin_allow_threads; + ret = GST_BASE_TRANSFORM_CLASS(klass)->src_event(GST_BASE_TRANSFORM(self->obj), + gst_event_ref (GST_EVENT(event->obj))); + pyg_end_allow_threads; + } else { + PyErr_SetString(PyExc_NotImplementedError, "virtual method GstBaseTransform.src_event not implemented"); + g_type_class_unref(klass); + return NULL; + } + g_type_class_unref(klass); + return PyBool_FromLong(ret); + +} +%% +override gst_adapter_take kwargs +static PyObject * +_wrap_gst_adapter_take(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "nbytes", NULL }; + PyObject *py_nbytes = NULL; + guint nbytes = 0; + guint8 *ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O:GstAdapter.take", kwlist, &py_nbytes)) + return NULL; + if (py_nbytes) { + if (PyLong_Check(py_nbytes)) + nbytes = PyLong_AsUnsignedLong(py_nbytes); + else if (PyInt_Check(py_nbytes)) + nbytes = PyInt_AsLong(py_nbytes); + else + PyErr_SetString(PyExc_TypeError, "Parameter 'nbytes' must be an int or a long"); + if (PyErr_Occurred()) + return NULL; + } + pyg_begin_allow_threads; + ret = gst_adapter_take(GST_ADAPTER(self->obj), nbytes); + pyg_end_allow_threads; + if (ret) { + PyObject *py_ret = PyString_FromStringAndSize((gchar*) ret, nbytes); + g_free(ret); + return py_ret; + } + Py_INCREF(Py_None); + return Py_None; +} +%% +override gst_adapter_peek kwargs +static PyObject * +_wrap_gst_adapter_peek(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "size", NULL }; + PyObject *py_size = NULL; + const guint8 *ret; + guint size = 0; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O:GstAdapter.peek", kwlist, &py_size)) + return NULL; + if (py_size) { + if (PyLong_Check(py_size)) + size = PyLong_AsUnsignedLong(py_size); + else if (PyInt_Check(py_size)) + size = PyInt_AsLong(py_size); + else + PyErr_SetString(PyExc_TypeError, "Parameter 'size' must be an int or a long"); + if (PyErr_Occurred()) + return NULL; + } + pyg_begin_allow_threads; + ret = gst_adapter_peek(GST_ADAPTER(self->obj), size); + pyg_end_allow_threads; + if (ret) + return PyString_FromStringAndSize((gchar*) ret, size); + Py_INCREF(Py_None); + return Py_None; +} diff --git a/gst/gstbin.override b/gst/gstbin.override new file mode 100644 index 0000000..c473163 --- /dev/null +++ b/gst/gstbin.override @@ -0,0 +1,265 @@ +/* -*- Mode: C; ; c-file-style: "python" -*- */ +/* gst-python + * Copyright (C) 2004 Johan Dahlin + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Johan Dahlin + */ + +%% +ignore + gst_bin_get_by_name_recurse_up +%% +override gst_bin_add args +static PyObject * +_wrap_gst_bin_add(PyGObject *self, PyObject *args) +{ + PyGObject *element; + int i, len; + + len = PyTuple_Size(args); + if (len == 0) { + PyErr_SetString(PyExc_TypeError, "GstBin.add_many requires at least one argument"); + return NULL; + } + + + for (i = 0; i < len; i++) { + element = (PyGObject*)PyTuple_GetItem(args, i); + if (!pygobject_check(element, &PyGstElement_Type)) + { + PyErr_SetString(PyExc_TypeError, "argument must be a GstElement"); + return NULL; + } + } + + for (i = 0; i < len; i++) { + gboolean rest; + + element = (PyGObject*)PyTuple_GetItem(args, i); + pyg_begin_allow_threads; + rest = gst_bin_add(GST_BIN(self->obj), GST_ELEMENT(element->obj)); + pyg_end_allow_threads; + if (!rest) { + PyErr_Format(PyGstExc_AddError, "Could not add element '%s'", GST_OBJECT_NAME(element->obj)); + return NULL; + } + } + + Py_INCREF(Py_None); + return Py_None; +} + +%% +override gst_bin_add_many kwargs +static PyObject * +_wrap_gst_bin_add_many(PyGObject *self, PyObject *args) +{ + if (PyErr_Warn(PyExc_DeprecationWarning, "gst.Bin.add_many() is deprecated, use gst.Bin.add()") < 0) + return NULL; + return _wrap_gst_bin_add (self, args); +} + +%% +override gst_bin_remove args +static PyObject * +_wrap_gst_bin_remove(PyGObject *self, PyObject *args) +{ + PyGObject *element; + int i, len; + + len = PyTuple_Size(args); + if (len == 0) { + PyErr_SetString(PyExc_TypeError, "GstBin.remove_many requires at least one argument"); + return NULL; + } + + + for (i = 0; i < len; i++) { + element = (PyGObject*)PyTuple_GetItem(args, i); + if (!pygobject_check(element, &PyGstElement_Type)) + { + PyErr_SetString(PyExc_TypeError, "argument must be a GstElement"); + return NULL; + } + } + + for (i = 0; i < len; i++) { + gboolean rest; + element = (PyGObject*)PyTuple_GetItem(args, i); + pyg_begin_allow_threads; + rest = gst_bin_remove(GST_BIN(self->obj), GST_ELEMENT(element->obj)); + pyg_end_allow_threads; + if (!rest) { + PyErr_Format(PyGstExc_RemoveError, "Could not remove element '%s'", GST_OBJECT_NAME(element->obj)); + return NULL; + } + } + + Py_INCREF(Py_None); + return Py_None; +} + +%% +override gst_bin_remove_many kwargs +static PyObject * +_wrap_gst_bin_remove_many(PyGObject *self, PyObject *args) +{ + if (PyErr_Warn(PyExc_DeprecationWarning, "gst.Bin.remove_many() is deprecated, use gst.Bin.remove()") < 0) + return NULL; + return _wrap_gst_bin_remove (self, args); +} +%% +override gst_bin_get_by_name kwargs +static PyObject * +_wrap_gst_bin_get_by_name(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "name", "recurse", NULL }; + char *name; + gboolean recurse = FALSE; + GstElement *el; + PyObject *ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|b:GstBin.get_by_name", + kwlist, &name, &recurse)) + return NULL; + + if (recurse) + el = gst_bin_get_by_name_recurse_up(GST_BIN(self->obj), name); + else + el = gst_bin_get_by_name(GST_BIN(self->obj), name); + + /* pygobject_new handles NULL checking */ + ret = pygobject_new((GObject *)el); + if (el) + gst_object_unref (el); /* from get_by_name */ + return ret; +} +%% +override-slot GstBin.tp_iter +static PyObject * +_wrap_gst_bin_tp_iter(PyGObject *self) +{ + return _wrap_gst_bin_iterate_elements(self); +} +%% +override GstBin__do_handle_message kwargs +static PyObject * +_wrap_GstBin__do_handle_message(PyObject *cls, PyObject *args, PyObject *kwargs) +{ + gpointer klass; + static char *kwlist[] = { "self", "message", NULL }; + PyGObject *self; + PyGstMiniObject *message; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O!O!:GstBin.handle_message", kwlist, &PyGstBin_Type, &self, &PyGstMessage_Type, &message)) + return NULL; + klass = g_type_class_ref(pyg_type_from_object(cls)); + if (GST_BIN_CLASS(klass)->handle_message) { + gst_mini_object_ref (message->obj); + pyg_begin_allow_threads; + GST_BIN_CLASS(klass)->handle_message(GST_BIN(self->obj), GST_MESSAGE(message->obj)); + pyg_end_allow_threads; + } else { + PyErr_SetString(PyExc_NotImplementedError, "virtual method GstBin.handle_message not implemented"); + g_type_class_unref(klass); + return NULL; + } + g_type_class_unref(klass); + Py_INCREF(Py_None); + return Py_None; +} + +%% +override GstBin__proxy_do_handle_message +static void +_wrap_GstBin__proxy_do_handle_message(GstBin *self, GstMessage*message) +{ + PyGILState_STATE __py_state; + PyObject *py_self; + PyObject *py_message = NULL; + PyObject *py_retval; + PyObject *py_args; + PyObject *py_method; + + __py_state = pyg_gil_state_ensure(); + py_self = pygobject_new((GObject *) self); + if (!py_self) { + if (PyErr_Occurred()) + PyErr_Print(); + pyg_gil_state_release(__py_state); + return; + } + if (message) { + py_message = pygstminiobject_new((GstMiniObject *) message); + gst_mini_object_unref ((GstMiniObject *) message); + } else { + Py_INCREF(Py_None); + py_message = Py_None; + } + + py_args = PyTuple_New(1); + Py_INCREF(py_message); + PyTuple_SET_ITEM(py_args, 0, py_message); + + py_method = PyObject_GetAttrString(py_self, "do_handle_message"); + if (!py_method) { + if (PyErr_Occurred()) + PyErr_Print(); + Py_DECREF(py_args); + gst_mini_object_ref ((GstMiniObject *) message); Py_DECREF(py_message); + Py_DECREF(py_self); + pyg_gil_state_release(__py_state); + return; + } + py_retval = PyObject_CallObject(py_method, py_args); + if (!py_retval) { + if (PyErr_Occurred()) + PyErr_Print(); + Py_DECREF(py_method); + Py_DECREF(py_args); + gst_mini_object_ref ((GstMiniObject *) message); Py_DECREF(py_message); + Py_DECREF(py_self); + pyg_gil_state_release(__py_state); + return; + } + if (py_retval != Py_None) { + if (PyErr_Occurred()) + PyErr_Print(); + PyErr_SetString(PyExc_TypeError, "retval should be None"); + Py_DECREF(py_retval); + Py_DECREF(py_method); + Py_DECREF(py_args); + gst_mini_object_ref ((GstMiniObject *) message); Py_DECREF(py_message); + Py_DECREF(py_self); + pyg_gil_state_release(__py_state); + return; + } + + + Py_DECREF(py_retval); + Py_DECREF(py_method); + Py_DECREF(py_args); + gst_mini_object_ref ((GstMiniObject *) message); Py_DECREF(py_message); + + /* #577735: since the bus handler will return BUS_DROP, we should unref. + This is the only change from the generated code. */ + gst_mini_object_unref ((GstMiniObject *) message); + + Py_DECREF(py_self); + pyg_gil_state_release(__py_state); +} diff --git a/gst/gstbuffer.override b/gst/gstbuffer.override new file mode 100644 index 0000000..c3c6ffe --- /dev/null +++ b/gst/gstbuffer.override @@ -0,0 +1,611 @@ +/* -*- Mode: C; ; c-file-style: "python" -*- */ +/* gst-python + * Copyright (C) 2002 David I. Lehn + * Copyright (C) 2004 Johan Dahlin + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Johan Dahlin + */ +%% +headers + +static Py_ssize_t gst_buffer_getreadbuffer (PyObject *self, + Py_ssize_t index, void **ptr); +static Py_ssize_t gst_buffer_getwritebuf (PyObject *self, + Py_ssize_t index, void **ptr); +static Py_ssize_t gst_buffer_getsegcount (PyObject *self, + Py_ssize_t *lenp); + +#if PY_VERSION_HEX >= 0x02050000 +static Py_ssize_t gst_buffer_getcharbuf (PyObject *self, + Py_ssize_t index, char **ptr); +#else +static Py_ssize_t gst_buffer_getcharbuf (PyObject *self, + Py_ssize_t index, const char **ptr); +#endif +%% +override gst_buffer_new kwargs +static int +_wrap_gst_buffer_new(PyGstMiniObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "data", "buffer_size", NULL }; + char *data = NULL; + int size = 0; + int buf_size = -1; + + GST_INFO("self:%p", self); + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|z#i:GstBuffer.__init__", kwlist, + &data, &size, &buf_size)) + return -1; + + if (size < 0) { + PyErr_SetString(PyExc_TypeError, "buffer size must be >= 0"); + return -1; + } + if (buf_size < 0) + buf_size = size; + if (buf_size < size) { + PyErr_SetString(PyExc_TypeError, "buffer size must be >= data size"); + return -1; + } + + self->obj = GST_MINI_OBJECT(gst_buffer_new_and_alloc(buf_size)); + GST_INFO ("pyo:%p pyr:%"G_GSSIZE_FORMAT" minio:%p minir:%d", + self, ((PyObject*)self)->ob_refcnt, + self->obj, GST_MINI_OBJECT_REFCOUNT_VALUE(self->obj)); + if (!self->obj) { + PyErr_SetString(PyExc_RuntimeError, "could not create GstBuffer object"); + return -1; + } + pygstminiobject_register_wrapper((PyObject *) self); + + if (data == NULL) + return 0; + + memcpy (GST_BUFFER_DATA (self->obj), data, size); + GST_BUFFER_SIZE (self->obj) = size; + + return 0; +} +%% +override-slot GstBuffer.tp_str +static PyObject * +_wrap_gst_buffer_tp_str (PyGstMiniObject *self) +{ + GstBuffer *buf; + + g_assert (self); + buf = GST_BUFFER(pygstminiobject_get(self)); + g_assert (buf); + + return PyString_FromStringAndSize((const gchar*) GST_BUFFER_DATA(buf), + (gint) GST_BUFFER_SIZE(buf)); +} + +%% +override-slot GstBuffer.tp_repr +static PyObject * +_wrap_gst_buffer_tp_repr (PyGstMiniObject *self) +{ + GstBuffer *buf; + guchar *data; + gchar *repr; + gint size = 0; + PyObject *ret; + + g_assert (self); + buf = GST_BUFFER(self->obj); + g_assert (buf); + + size = GST_BUFFER_SIZE (buf); + + if (size == 0) { + repr = g_strdup_printf ("", buf, size); + } else { + data = GST_BUFFER_DATA (buf); + repr = g_strdup_printf ( + "", buf, size, + *data, + size > 0 ? *(data + 1) : 0, + size > 1 ? *(data + 2) : 0, + size > 2 ? *(data + 3) : 0 + ); + } + ret = PyString_FromStringAndSize(repr, strlen (repr)); + g_free (repr); + return ret; +} + +%% +override-slot GstBuffer.tp_as_buffer +static PyBufferProcs _wrap_gst_buffer_tp_as_buffer = { + gst_buffer_getreadbuffer, /* bf_getreadbuffer */ + gst_buffer_getwritebuf, /* bf_getwritebuffer */ + gst_buffer_getsegcount, /* bf_getsegcount */ + gst_buffer_getcharbuf, /* bf_getcharbuffer */ +}; + +static Py_ssize_t +gst_buffer_getreadbuffer(PyObject *self, Py_ssize_t index, + void **ptr) +{ + GstBuffer *buf = GST_BUFFER(pygstminiobject_get(self)); + + if ( index != 0 ) { + PyErr_SetString(PyExc_SystemError, + "accessing non-existent GstBuffer segment"); + return -1; + } + + *ptr = GST_BUFFER_DATA(buf); + return GST_BUFFER_SIZE(buf); +} + +static Py_ssize_t +gst_buffer_getsegcount(PyObject *self, Py_ssize_t *lenp) +{ + GstBuffer *buf = GST_BUFFER(pygstminiobject_get(self)); + + if (lenp) + *lenp = GST_BUFFER_SIZE(buf); + return 1; +} + +/* Need a version that has const char ** for Python 2.4 */ +#if PY_VERSION_HEX >= 0x02050000 +static Py_ssize_t gst_buffer_getcharbuf (PyObject *self, + Py_ssize_t index, char **ptr) +#else +static Py_ssize_t gst_buffer_getcharbuf (PyObject *self, + Py_ssize_t index, const char **ptr) +#endif +{ + return gst_buffer_getreadbuffer (self, index, (void **) ptr); +} + +static Py_ssize_t +gst_buffer_getwritebuf(PyObject *self, Py_ssize_t index, void **ptr) +{ + GstBuffer *buf = GST_BUFFER(pygstminiobject_get(self)); + + if ( index != 0 ) { + PyErr_SetString(PyExc_SystemError, + "accessing non-existent GstBuffer segment"); + return -1; + } + + if (!gst_buffer_is_writable (buf)) { + PyErr_SetString(PyExc_TypeError, + "buffer is not writable"); + return -1; + } + + *ptr = GST_BUFFER_DATA(buf); + return GST_BUFFER_SIZE(buf); +} + +%% +override-slot GstBuffer.tp_as_sequence +/* FIXME: should buffer parts be buffers or strings? */ + +static Py_ssize_t +pygst_buffer_length(PyObject *self) +{ + return GST_BUFFER_SIZE(pygobject_get (self)); +} + +static PyObject * +pygst_buffer_slice(PyObject *self, Py_ssize_t start, Py_ssize_t end) +{ + GstBuffer *buf = GST_BUFFER (pygobject_get (self)); + if (start < 0) + start = 0; + if (end < 0) + end = 0; + if (end > GST_BUFFER_SIZE(buf)) + end = GST_BUFFER_SIZE(buf); + + if (end <= start) { + PyErr_SetString(PyExc_IndexError, "buffer index out of range"); + return NULL; + } + return PyString_FromStringAndSize((gchar *) GST_BUFFER_DATA (buf) + start, end - start); +} + +static PyObject * +pygst_buffer_item(PyObject *self, Py_ssize_t index) +{ + return pygst_buffer_slice (self, index, index + 1); +} + +static int +pygst_buffer_ass_slice (PyObject *self, Py_ssize_t start, + Py_ssize_t end, PyObject *val) +{ + GstBuffer *buf = GST_BUFFER (pygobject_get (self)); + const void *data; + Py_ssize_t len; + + if (!gst_buffer_is_writable (buf)) { + PyErr_SetString(PyExc_TypeError, "buffer is not writable"); + return -1; + } + /* FIXME: policy? */ + if (start < 0 || end <= start || end > GST_BUFFER_SIZE (buf)) { + PyErr_SetString(PyExc_IndexError, "buffer index out of range"); + return -1; + } + end -= start; + if (PyObject_AsReadBuffer(val, &data, &len)) + return -1; + if (len > end) + len = end; + memcpy (GST_BUFFER_DATA (buf) + start, data, len); + return 0; +} + +static int +pygst_buffer_ass_item (PyObject *self, Py_ssize_t index, PyObject *val) +{ + GstBuffer *buf = GST_BUFFER (pygobject_get (self)); + const void *data; + Py_ssize_t len; + + if (!gst_buffer_is_writable (buf)) { + PyErr_SetString(PyExc_TypeError, "buffer is not writable"); + return -1; + } + if (index < 0 || index > GST_BUFFER_SIZE (buf)) { + PyErr_SetString(PyExc_IndexError, "buffer index out of range"); + return -1; + } + if (PyObject_AsReadBuffer(val, &data, &len)) + return -1; + /* FIXME: how do we handle this? */ + if (len > GST_BUFFER_SIZE (buf) - index) + len = GST_BUFFER_SIZE (buf) - index; + memcpy (GST_BUFFER_DATA (buf) + index, data, len); + return 0; +} + +static PySequenceMethods _wrap_gst_buffer_tp_as_sequence = { + pygst_buffer_length, /* sq_length */ + NULL, /* sq_concat */ + NULL, /* sq_repeat */ + pygst_buffer_item, /* sq_item */ + pygst_buffer_slice, /* sq_slice */ + pygst_buffer_ass_item, /* sq_ass_item */ + pygst_buffer_ass_slice, /* sq_ass_slice */ + NULL, /* sq_contains */ + NULL, /* sq_inplace_concat */ + NULL, /* sq_inplace_repeat */ +}; +%% +define GstBuffer.copy_on_write +static PyObject * +_wrap_gst_buffer_copy_on_write (PyObject *self) +{ + GstBuffer *buf = GST_BUFFER(pygstminiobject_get(self)); + + GST_INFO("INCREF"); + if (gst_buffer_is_writable (buf)) { + Py_INCREF (self); + return self; + } + buf = gst_buffer_copy (buf); + self = pygstminiobject_new ((GstMiniObject *)(buf)); + gst_buffer_unref (buf); + return self; +} +%% +define GstBuffer.flag_is_set +static PyObject * +_wrap_gst_buffer_flag_is_set(PyObject *self, PyObject *args) +{ + int flag; + PyObject *retval; + GstBuffer *buf; + + if (!PyArg_ParseTuple(args, "i:GstBuffer.flag_is_set", &flag)) + return NULL; + + buf = GST_BUFFER(pygstminiobject_get(self)); + g_assert(GST_IS_BUFFER(buf)); + + retval = GST_BUFFER_FLAG_IS_SET(buf, flag) ? Py_True : Py_False; + Py_INCREF(retval); + return retval; +} +%% +define GstBuffer.flag_set +static PyObject * +_wrap_gst_buffer_flag_set(PyObject *self, PyObject *args) +{ + int flag; + GstBuffer *buf; + + if (!PyArg_ParseTuple(args, "i:GstBuffer.set", &flag)) + return NULL; + + buf = GST_BUFFER(pygstminiobject_get(self)); + g_assert(GST_IS_BUFFER(buf)); + GST_BUFFER_FLAG_SET(buf, flag); + + Py_INCREF(Py_None); + return Py_None; +} +%% +define GstBuffer.flag_unset +static PyObject * +_wrap_gst_buffer_flag_unset(PyObject *self, PyObject *args) +{ + int flag; + GstBuffer *buf; + + if (!PyArg_ParseTuple(args, "i:GstBuffer.unset", &flag)) + return NULL; + + buf = GST_BUFFER(pygstminiobject_get(self)); + g_assert(GST_IS_BUFFER(buf)); + GST_BUFFER_FLAG_UNSET(buf, flag); + + Py_INCREF(Py_None); + return Py_None; +} + +%% +override-attr GstBuffer.data +static PyObject * +_wrap_gst_buffer__get_data(PyObject *self, void *closure) +{ + GstBuffer *buf; + + g_assert (self); + buf = GST_BUFFER(pygstminiobject_get(self)); + g_assert (buf); + + return PyString_FromStringAndSize((const gchar*) GST_BUFFER_DATA(buf), + (gint) GST_BUFFER_SIZE(buf)); +} + +%% +override-attr GstBuffer.size +static PyObject * +_wrap_gst_buffer__get_size(PyObject *self, void *closure) +{ + return PyLong_FromUnsignedLongLong((guint) GST_BUFFER_SIZE(GST_BUFFER(pygstminiobject_get(self)))); +} +static int +_wrap_gst_buffer__set_size(PyGstMiniObject *self, PyObject *value, void *closure) +{ + guint val; + GstBuffer *buf; + void* ptr; + + if (PyInt_CheckExact(value)) + val = PyInt_AsUnsignedLongLongMask(value); + else + val = PyLong_AsUnsignedLongLong(value); + if (PyErr_Occurred()) + return -1; + + g_assert (self); + buf = GST_BUFFER(pygstminiobject_get(self)); + g_assert (buf); + + ptr = realloc( GST_BUFFER_DATA(buf), val ); + if (ptr) + { + GST_BUFFER_DATA(buf) = ptr; + GST_BUFFER_SIZE(buf) = val; + } + else + { + /* Raise an error */ + PyErr_SetString( PyExc_RuntimeError, "Unable to realloc Buffer" ); + } + return 0; +} +%% +override-attr GstBuffer.timestamp +static PyObject * +_wrap_gst_buffer__get_timestamp(PyObject *self, void *closure) +{ + guint64 ret; + + ret = GST_BUFFER(pygstminiobject_get(self))->timestamp; + return PyLong_FromUnsignedLongLong(ret); +} +static int +_wrap_gst_buffer__set_timestamp(PyGstMiniObject *self, PyObject *value, void *closure) +{ + guint64 val; + + if (PyInt_CheckExact(value)) + val = PyInt_AsUnsignedLongLongMask(value); + else + val = PyLong_AsUnsignedLongLong(value); + if (PyErr_Occurred()) + return -1; + + GST_BUFFER(self->obj)->timestamp = val; + return 0; +} +%% +override-attr GstBuffer.duration +static PyObject * +_wrap_gst_buffer__get_duration(PyObject *self, void *closure) +{ + guint64 ret; + + ret = GST_BUFFER(pygstminiobject_get(self))->duration; + return PyLong_FromUnsignedLongLong(ret); +} +static int +_wrap_gst_buffer__set_duration(PyGstMiniObject *self, PyObject *value, void *closure) +{ + guint64 val; + + if (PyInt_CheckExact(value)) + val = PyInt_AsUnsignedLongLongMask(value); + else + val = PyLong_AsUnsignedLongLong(value); + if (PyErr_Occurred()) + return -1; + + GST_BUFFER(self->obj)->duration = val; + return 0; +} + +%% +override-attr GstBuffer.offset +static PyObject * +_wrap_gst_buffer__get_offset (PyObject *self, void *closure) +{ + guint64 ret; + GstMiniObject *miniobject; + g_assert (self); + + miniobject = pygstminiobject_get (self); + g_assert (miniobject); + + ret = GST_BUFFER_OFFSET (GST_BUFFER (miniobject)); + return PyLong_FromUnsignedLongLong (ret); +} + +static int +_wrap_gst_buffer__set_offset (PyGstMiniObject *self, PyObject *value, void *closure) +{ + guint64 val; + g_assert (self); + + if (PyInt_CheckExact (value)) + val = PyInt_AsUnsignedLongLongMask (value); + else + val = PyLong_AsUnsignedLongLong (value); + if (PyErr_Occurred()) + return -1; + + GST_BUFFER_OFFSET (GST_BUFFER (self->obj)) = val; + return 0; +} + +%% +override-attr GstBuffer.offset_end +static PyObject * +_wrap_gst_buffer__get_offset_end (PyObject *self, void *closure) +{ + guint64 ret; + GstMiniObject *miniobject; + g_assert (self); + + miniobject = pygstminiobject_get (self); + g_assert (miniobject); + + ret = GST_BUFFER_OFFSET_END (GST_BUFFER (miniobject)); + return PyLong_FromUnsignedLongLong (ret); +} + +static int +_wrap_gst_buffer__set_offset_end (PyGstMiniObject *self, PyObject *value, void *closure) +{ + guint64 val; + g_assert (self); + + if (PyInt_CheckExact (value)) + val = PyInt_AsUnsignedLongLongMask (value); + else + val = PyLong_AsUnsignedLongLong (value); + if (PyErr_Occurred ()) + return -1; + + GST_BUFFER_OFFSET_END (GST_BUFFER (self->obj)) = val; + return 0; +} + +%% +override gst_buffer_stamp kwargs +static PyObject * +_wrap_gst_buffer_stamp (PyGstMiniObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "src", NULL }; + PyGstMiniObject *srcobj; + GstBuffer *dest, *src; + + if (!PyArg_ParseTupleAndKeywords (args, kwargs, + "O:GstBuffer.stamp", + kwlist, &srcobj)) + return NULL; + dest = GST_BUFFER(pygstminiobject_get(self)); + src = GST_BUFFER(pygstminiobject_get(srcobj)); + gst_buffer_stamp (dest, (const GstBuffer*) src); + + Py_INCREF(Py_None); + return Py_None; +} +%% +override-attr GstBuffer.caps +static PyObject * +_wrap_gst_buffer__get_caps (PyObject *self, void *closure) +{ + GstMiniObject *miniobject; + GstCaps *ret; + + miniobject = pygstminiobject_get (self); + g_assert (miniobject); + + pyg_begin_allow_threads; + ret = gst_buffer_get_caps(GST_BUFFER(miniobject)); + pyg_end_allow_threads; + return pyg_boxed_new (GST_TYPE_CAPS, ret, FALSE, TRUE); +} +static int +_wrap_gst_buffer__set_caps (PyGstMiniObject *self, PyObject *value, void *closure) +{ + GstCaps *caps; + g_assert (self); + + caps = pygst_caps_from_pyobject (value, NULL); + if (PyErr_Occurred()) + return -1; + pyg_begin_allow_threads; + gst_buffer_set_caps(GST_BUFFER(self->obj), caps); + gst_caps_unref (caps); + pyg_end_allow_threads; + return 0; +} +%% +override gst_buffer_set_caps kwargs +static PyObject * +_wrap_gst_buffer_set_caps(PyGstMiniObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "caps", NULL }; + PyObject *py_caps; + GstCaps *caps; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:GstBuffer.set_caps", kwlist, &py_caps)) + return NULL; + caps = pygst_caps_from_pyobject (py_caps, NULL); + if (PyErr_Occurred()) + return NULL; + pyg_begin_allow_threads; + gst_buffer_set_caps(GST_BUFFER(self->obj), caps); + gst_caps_unref (caps); + pyg_end_allow_threads; + Py_INCREF(Py_None); + return Py_None; +} diff --git a/gst/gstbus.override b/gst/gstbus.override new file mode 100644 index 0000000..23db495 --- /dev/null +++ b/gst/gstbus.override @@ -0,0 +1,272 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- + * vi:si:et:sw=4:sts=4:ts=4 + * + * gst-python + * Copyright (C) 2005 Edward Hervey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Edward Hervey + */ +%% +ignore + gst_bus_create_watch + gst_bus_sync_signal_handler + gst_bus_async_signal_func +%% +headers +static GstBusSyncReply +bus_sync_handler (GstBus *bus, GstMessage *message, gpointer user_data) +{ + PyGILState_STATE state; + GstBusSyncReply res; + PyObject *py_userdata; + PyObject *py_msg; + PyObject *callback, *args; + PyObject *ret; + gint i, len; + + g_return_val_if_fail (user_data != NULL, GST_BUS_PASS); + + state = pyg_gil_state_ensure (); + + py_userdata = (PyObject *) user_data; + py_msg = pygstminiobject_new (GST_MINI_OBJECT (message)); + callback = PyTuple_GetItem (py_userdata, 0); + + /* Using N we give away our references to the args tuple */ + args = Py_BuildValue ("(NN)", + pygobject_new (G_OBJECT (bus)), + py_msg); + + /* add all *args to the args tuple object */ + len = PyTuple_Size (py_userdata); + for (i = 1; i < len; ++i) { + PyObject *tuple = args; + args = PySequence_Concat (tuple, PyTuple_GetItem (py_userdata, i)); + Py_DECREF (tuple); + } + ret = PyObject_CallObject (callback, args); + + if (!ret) { + PyErr_Print (); + res = GST_BUS_PASS; + } else { + if (ret == Py_None) { + PyErr_SetString (PyExc_TypeError, + "callback should return a BusSyncReply"); + PyErr_Print (); + res = GST_BUS_PASS; + } else if (pyg_enum_get_value (GST_TYPE_BUS_SYNC_REPLY, ret, + (gint *) &res)) + res = GST_BUS_PASS; + + Py_DECREF (ret); + } + Py_DECREF (args); + + pyg_gil_state_release (state); + + return res; +} + +static gboolean +bus_func (GstBus *bus, GstMessage *message, gpointer user_data) +{ + PyGILState_STATE state; + gboolean res; + PyObject *py_userdata; + PyObject *py_msg; + PyObject *callback, *args; + PyObject *ret; + gint i, len; + + g_return_val_if_fail (user_data != NULL, TRUE); + + GST_DEBUG_OBJECT (bus, "dispatching message %p", message); + + state = pyg_gil_state_ensure (); + + py_userdata = (PyObject *) user_data; + g_assert (PyTuple_Check (py_userdata)); + + py_msg = pygstminiobject_new (GST_MINI_OBJECT (message)); + callback = PyTuple_GetItem (py_userdata, 0); + + /* Using N we give away our references to the args tuple */ + args = Py_BuildValue ("(NN)", + pygobject_new (G_OBJECT (bus)), + py_msg); + g_assert (args); + + /* add all *args to the args tuple object */ + len = PyTuple_Size (py_userdata); + for (i = 1; i < len; ++i) { + PyObject *item; + PyObject *tuple = args; + + item = PyTuple_GetItem (py_userdata, i); + g_assert (item); + + args = PySequence_Concat (tuple, item); + g_assert (args); + + Py_DECREF (tuple); + } + ret = PyObject_CallObject(callback, args); + + if (!ret) { + PyErr_Print (); + res = TRUE; + } else { + if (ret == Py_None) { + PyErr_SetString (PyExc_TypeError, + "callback should return True or False"); + PyErr_Print (); + res = TRUE; + } else + res = PyObject_IsTrue (ret); + Py_DECREF (ret); + } + Py_DECREF (args); + + pyg_gil_state_release (state); + + GST_DEBUG_OBJECT (bus, "dispatched message %p", message); + + return res; +} + +%% +override gst_bus_set_sync_handler args +static PyObject * +_wrap_gst_bus_set_sync_handler (PyGObject *self, PyObject *args) +{ + PyObject *callback = NULL; + PyObject *cbargs = NULL; + PyObject *data = NULL; + PyObject *old_data = NULL; + gint len; + static GQuark sync_handler_data_quark = 0; + + len = PyTuple_Size(args); + + if (len < 1) { + PyErr_SetString(PyExc_TypeError, "Bus requires at least 1 arg"); + return NULL; + } + + if (sync_handler_data_quark == 0) + sync_handler_data_quark = \ + g_quark_from_static_string("PyGst::BusSyncHandlerData"); + + callback = PySequence_GetItem(args, 0); + if (callback != Py_None) { + if (!PyCallable_Check(callback)) { + Py_DECREF (callback); + PyErr_SetString(PyExc_TypeError, "callback is not callable"); + return NULL; + } + + cbargs = PySequence_GetSlice(args, 1, len); + if (cbargs == NULL) { + Py_DECREF (callback); + return NULL; + } + + data = Py_BuildValue("(ON)", callback, cbargs); + Py_DECREF (cbargs); + if (data == NULL) { + Py_DECREF (callback); + return NULL; + } + + old_data = g_object_get_qdata (self->obj, sync_handler_data_quark); + if (old_data != NULL) { + Py_DECREF (old_data); + } + + g_object_set_qdata (self->obj, sync_handler_data_quark, data); + + gst_bus_set_sync_handler (GST_BUS (self->obj), + (GstBusSyncHandler) bus_sync_handler, + data); + } else { + old_data = g_object_get_qdata (self->obj, sync_handler_data_quark); + if (old_data != NULL) { + Py_DECREF (old_data); + } + + g_object_set_qdata (self->obj, sync_handler_data_quark, NULL); + + gst_bus_set_sync_handler (GST_BUS (self->obj), NULL, NULL); + } + + Py_DECREF (callback); + + Py_INCREF(Py_None); + return Py_None; +} +%% +override gst_bus_add_watch args +static PyObject * +_wrap_gst_bus_add_watch (PyGObject *self, PyObject *args) +{ + PyObject *callback, *cbargs = NULL, *data; + guint sigid; + guint len; + + len = PyTuple_Size(args); + + if (len < 1) { + PyErr_SetString(PyExc_TypeError, "Bus.add_watch requires at least 1 argument"); + return NULL; + } + + callback = PySequence_GetItem(args, 0); + if (!PyCallable_Check(callback)) { + PyErr_SetString(PyExc_TypeError, "callback is not callable"); + return NULL; + } + cbargs = PySequence_GetSlice(args, 1, len); + if (cbargs == NULL) + return NULL; + /* FIXME: thomas: I'm pretty sure the second N needs to be O */ + data = Py_BuildValue("(ON)", callback, cbargs); + if (data == NULL) + return NULL; + + sigid = gst_bus_add_watch_full (GST_BUS (self->obj), G_PRIORITY_DEFAULT, + (GstBusFunc) bus_func, data, (GDestroyNotify)pyg_destroy_notify); + + return PyInt_FromLong(sigid); +} +%% +override gst_bus_add_signal_watch kwargs +static PyObject * +_wrap_gst_bus_add_signal_watch(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "priority", NULL }; + int priority = G_PRIORITY_DEFAULT; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|i:GstBus.add_signal_watch", kwlist, &priority)) + return NULL; + pyg_begin_allow_threads; + gst_bus_add_signal_watch_full(GST_BUS(self->obj), priority); + pyg_end_allow_threads; + Py_INCREF(Py_None); + return Py_None; +} diff --git a/gst/gstcaps.override b/gst/gstcaps.override new file mode 100644 index 0000000..77e3d84 --- /dev/null +++ b/gst/gstcaps.override @@ -0,0 +1,474 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2005 Johan Dahlin + * 2005 Benjamin Otte + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Johan Dahlin + * Benjamin Otte + */ +%% +headers +/* This is a (hopefully) smart hack to allow access to a caps' + * structures without falling into traps when the caps get destroyed + * before the structures get. + * This Hash Table uses the structure PyObjects as keys and the caps + * PyObjects as values. No clue if this is a fast data structure but it + * probably doesn't matter anyway. + */ +static GHashTable *structure_caps_map = NULL; + +static void +pygst_caps_map_add (PyObject *structure, PyObject *caps) +{ + /* we can't have free_on_dealloc stuff in here */ + g_assert (((PyGBoxed *)structure)->free_on_dealloc == FALSE); + g_hash_table_insert (structure_caps_map, structure, caps); +} + +static void +pygst_caps_map_remove_structure (PyObject *structure) +{ + g_hash_table_remove (structure_caps_map, structure); +} + +static gboolean +pygst_caps_map_foreach (gpointer structure, gpointer caps, gpointer match) +{ + PyGBoxed *boxed = structure; + + if (match != caps) + return FALSE; + + /* we can't have free_on_dealloc stuff in here */ + g_assert (boxed->free_on_dealloc == FALSE); + boxed->boxed = gst_structure_copy (boxed->boxed); + boxed->free_on_dealloc = TRUE; + return TRUE; +} + +static void +pygst_caps_map_modified (PyObject *caps) +{ + g_hash_table_foreach_remove (structure_caps_map, pygst_caps_map_foreach, caps); +} + +%% +init + structure_caps_map = g_hash_table_new (g_direct_hash, g_direct_equal); +%% +ignore + gst_caps_new_simple + gst_caps_new_full + gst_caps_set_simple +%% +override gst_caps_get_structure kwargs +static PyObject *pygst_caps_sq_item(PyObject *self, Py_ssize_t i); +static PyObject * +_wrap_gst_caps_get_structure(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "index", NULL }; + int index; + + if (PyErr_Warn(PyExc_DeprecationWarning, "caps.get_structure(i) is deprecated, use caps[i]") < 0) + return NULL; + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:GstCaps.get_structure", kwlist, &index)) + return NULL; + return pygst_caps_sq_item (self, index); +} +%% +override gst_caps_new_empty kwargs +static int +_wrap_gst_caps_new_empty(PyGBoxed *self, PyObject *args, PyObject *kwargs) +{ + PyObject* item; + int len, i; + + /* we wrap caps_new, caps_from_string and caps_new_full */ + len = PyTuple_Size(args); + self->gtype = GST_TYPE_CAPS; + self->free_on_dealloc = TRUE; + + if (len == 0) { + /* 0 length creates a new empty caps */ + self->boxed = gst_caps_new_empty(); + } else if (len == 1) { + item = PyTuple_GetItem(args, 0); + /* 1 length is either a string or a structure */ + self->boxed = pygst_caps_from_pyobject (item, NULL); + } else { + /* it's multiple arguments that can all be made to caps */ + GstCaps *append; + self->boxed = gst_caps_new_empty(); + for (i = 0; i < len; i++) + { + item = PyTuple_GetItem(args, i); + append = pygst_caps_from_pyobject (item, NULL); + if (!append) { + gst_caps_unref (self->boxed); + self->boxed = NULL; + break; + } + gst_caps_append (self->boxed, append); + } + } + if (!self->boxed) { + PyErr_SetString(PyExc_TypeError, "wrong arguments when creating GstCaps object"); + return -1; + } + return 0; +} + +%% +override-slot GstCaps.tp_richcompare + +static gboolean +pygst_caps_is_true_subset (GstCaps *caps1, GstCaps *caps2) +{ + GstCaps *tmp; + gboolean ret; + + /* order is important here */ + if (gst_caps_is_any (caps1)) + return FALSE; + if (gst_caps_is_any (caps2)) + return TRUE; + if (gst_caps_is_empty (caps2)) + return FALSE; + if (gst_caps_is_empty (caps1)) + return TRUE; + + tmp = gst_caps_subtract (caps1, caps2); + ret = gst_caps_is_empty (tmp); + gst_caps_unref (tmp); + if (!ret) + return FALSE; + tmp = gst_caps_subtract (caps2, caps1); + ret = gst_caps_is_empty (tmp); + gst_caps_unref (tmp); + return !ret; +} + +static PyObject * +_wrap_gst_caps_tp_richcompare (PyObject *py_caps1, PyObject *py_caps2, int comparison) +{ + GstCaps *caps1, *caps2; + gboolean caps2_is_copy; + PyObject *ret; + + caps1 = pyg_boxed_get (py_caps1, GstCaps); + caps2 = pygst_caps_from_pyobject (py_caps2, &caps2_is_copy); + if (PyErr_Occurred()) { + /* the second arg is not a caps */ + switch (comparison) { + case Py_EQ: + PyErr_Clear(); + ret = Py_False; + Py_INCREF (ret); + return ret; + case Py_NE: + PyErr_Clear(); + ret = Py_True; + Py_INCREF (ret); + return ret; + default: + return NULL; + } + } + + switch (comparison) { + case Py_LT: + ret = pygst_caps_is_true_subset (caps1, caps2) ? Py_True : Py_False; + break; + case Py_LE: + ret = gst_caps_is_subset (caps1, caps2) ? Py_True : Py_False; + break; + case Py_NE: + ret = gst_caps_is_equal (caps1, caps2) ? Py_False : Py_True; + break; + case Py_EQ: + ret = gst_caps_is_equal (caps1, caps2) ? Py_True : Py_False; + break; + case Py_GE: + ret = gst_caps_is_subset (caps2, caps1) ? Py_True : Py_False; + break; + case Py_GT: + ret = pygst_caps_is_true_subset (caps2, caps1) ? Py_True : Py_False; + break; + default: + PyErr_SetString (PyExc_RuntimeError, "invalid comparison operation"); + if (caps2 && caps2_is_copy) + gst_caps_unref (caps2); + return NULL; + } + if (caps2 && caps2_is_copy) + gst_caps_unref (caps2); + + Py_INCREF (ret); + return ret; +} + +%% +override-slot GstCaps.tp_as_number + +/* In this number code, we mimic the Python set.Set datatype. + * The same operations are supported. If you want to have an operation + * supported for caps, add it to Python's Set type first. + */ +#define BINARY_FUNC(name,func) \ +static PyObject * \ +name (PyObject *py_caps1, PyObject *py_caps2) \ +{ \ + GstCaps *caps1, *caps2, *ret; \ + gboolean caps2_is_copy; \ +\ + caps1 = pyg_boxed_get (py_caps1, GstCaps); \ + caps2 = pygst_caps_from_pyobject (py_caps2, &caps2_is_copy); \ + if (PyErr_Occurred()) \ + return NULL; \ + ret = func (caps1, caps2); \ + if (caps2 && caps2_is_copy) \ + gst_caps_unref (caps2); \ + return pyg_boxed_new (GST_TYPE_CAPS, ret, FALSE, TRUE); \ +} + +BINARY_FUNC (pygst_caps_nb_subtract, gst_caps_subtract) +BINARY_FUNC (pygst_caps_nb_and, gst_caps_intersect) +BINARY_FUNC (pygst_caps_nb_or, gst_caps_union) +static GstCaps * +pygst_caps_xor (const GstCaps *caps1, const GstCaps *caps2) +{ + GstCaps *intersect, *_union, *ret; + intersect = gst_caps_intersect (caps1, caps2); + _union = gst_caps_union (caps1, caps2); + ret = gst_caps_subtract (_union, intersect); + gst_caps_unref (_union); + gst_caps_unref (intersect); + gst_caps_do_simplify (ret); + return ret; +} +BINARY_FUNC (pygst_caps_nb_xor, pygst_caps_xor) + +static int +pygst_caps_nb_nonzero (PyObject *py_caps) +{ + GstCaps *caps = pyg_boxed_get (py_caps, GstCaps); + + if (gst_caps_is_empty (caps)) + return 0; + else + return 1; +} + +static int +pygst_caps_nb_coerce (PyObject **py_caps1, PyObject **py_caps2) +{ + GstCaps *caps1, *caps2 = NULL; + gboolean caps1_is_copy, caps2_is_copy; + + caps1 = pygst_caps_from_pyobject (*py_caps1, &caps1_is_copy); + if (!caps1) + goto error; + caps2 = pygst_caps_from_pyobject (*py_caps2, &caps2_is_copy); + if (!caps2) + goto error; + /* if they're not copies, they're caps already */ + if (caps1_is_copy) + *py_caps1 = pyg_boxed_new (GST_TYPE_CAPS, caps1, FALSE, TRUE); + else + Py_INCREF (*py_caps1); + if (caps2_is_copy) + *py_caps2 = pyg_boxed_new (GST_TYPE_CAPS, caps2, FALSE, TRUE); + else + Py_INCREF (*py_caps2); + return 0; + +error: + g_assert (PyErr_Occurred ()); + PyErr_Clear (); + if (caps1 && !caps1_is_copy) + gst_caps_unref (caps1); + return 1; +} + +static PyNumberMethods _wrap_gst_caps_tp_as_number = { + 0, /* nb_add */ + pygst_caps_nb_subtract, /* nb_subtract */ + 0, /* nb_multiply */ + 0, /* nb_divide */ + 0, /* nb_remainder */ + 0, /* nb_divmod */ + 0, /* nb_power */ + 0, /* nb_negative */ + 0, /* nb_positive */ + 0, /* nb_absolute */ + pygst_caps_nb_nonzero, /* nb_nonzero */ + 0, /* nb_invert */ + 0, /* nb_lshift */ + 0, /* nb_rshift */ + pygst_caps_nb_and, /* nb_and */ + pygst_caps_nb_xor, /* nb_xor */ + pygst_caps_nb_or, /* nb_or */ + pygst_caps_nb_coerce, /* nb_coerce */ + 0, /* nb_int */ + 0, /* nb_long */ + 0, /* nb_float */ + 0, /* nb_oct */ + 0, /* nb_hex */ + 0, /* nb_inplace_add */ + 0, /* nb_inplace_subtract */ + 0, /* nb_inplace_multiply */ + 0, /* nb_inplace_divide */ + 0, /* nb_inplace_remainder */ + 0, /* nb_inplace_power */ + 0, /* nb_inplace_lshift */ + 0, /* nb_inplace_rshift */ + 0, /* nb_inplace_and */ + 0, /* nb_inplace_xor */ + 0, /* nb_inplace_or */ + 0, /* nb_floor_divide */ + 0, /* nb_true_divide */ + 0, /* nb_inplace_floor_divide */ + 0, /* nb_inplace_true_divide */ +}; +%% +override-slot GstCaps.tp_as_sequence +static Py_ssize_t +pygst_caps_sq_length(PyObject *self) +{ + GstCaps *caps = pyg_boxed_get (self, GstCaps); + return gst_caps_get_size(caps); +} + +static PyObject * +pygst_caps_sq_item(PyObject *self, Py_ssize_t i) +{ + GstCaps *caps = pyg_boxed_get (self, GstCaps); + GstStructure *structure; + PyObject *ret; + + if (i < 0 || i >= gst_caps_get_size(caps)) { + PyErr_SetString(PyExc_IndexError, "list index out of range"); + return NULL; + } + + structure = gst_caps_get_structure(caps, i); + + /* pyg_boxed_new handles NULL checking */ + ret = pyg_boxed_new(GST_TYPE_STRUCTURE, + structure, + FALSE, FALSE); + if (ret) + pygst_caps_map_add (ret, self); + return ret; +} + +/* FIXME: This syntax sucks */ +static PyObject * +pygst_caps_sq_slice(PyObject *self, Py_ssize_t start, Py_ssize_t end) +{ + GstCaps *caps = pyg_boxed_get (self, GstCaps); + GstCaps *ret = gst_caps_new_empty (); + int i; + + if (start < 0) + start = 0; + if (end > gst_caps_get_size (caps)) + end = gst_caps_get_size (caps); + + for (i = start; i < end; i++) + gst_caps_append_structure (ret, gst_structure_copy (gst_caps_get_structure (caps, i))); + + return pyg_boxed_new(GST_TYPE_CAPS, ret, FALSE, TRUE); +} + +static PySequenceMethods _wrap_gst_caps_tp_as_sequence = { + pygst_caps_sq_length, + NULL, /* not allowed for sets, use | instead of + */ + NULL, /* doesn't make sense, because it'd still be the same */ + pygst_caps_sq_item, + pygst_caps_sq_slice, + NULL, /* doesn't make sense, you can only append */ + NULL, /* doesn't make sense, you can only append */ + NULL, /* doesn't make sense really, unless you use is_subset */ + NULL, /* not allowed for sets, use | instead of + */ + NULL /* doesn't make sense, because it'd still be the same */ +}; +%% +override-slot GstCaps.tp_dealloc +static void +_wrap_gst_caps_tp_dealloc (PyObject *self) +{ + PyGBoxed *boxed = (PyGBoxed *) self; + + if (boxed->free_on_dealloc && boxed->boxed) { + pygst_caps_map_modified (self); + GST_DEBUG ("unreffing caps %" GST_PTR_FORMAT " at %p with refcount %d", + boxed->boxed, boxed->boxed, GST_CAPS_REFCOUNT (boxed->boxed)); + gst_caps_unref (boxed->boxed); + } + + self->ob_type->tp_free((PyObject *)self); +} + +%% +override-slot GstCaps.tp_str +static PyObject * +_wrap_gst_caps_tp_str(PyGObject *self) +{ + gchar *tmp; + PyObject *retval; + + tmp = gst_caps_to_string((GstCaps*)self->obj); + retval = PyString_FromString(tmp); + g_free(tmp); + + return retval; +} + +%% +override-attr GstCaps.__refcount__ + +static PyObject * +_wrap_gst_caps__get___refcount__(PyGObject *self, void *closure) +{ + return PyInt_FromLong(GST_CAPS_REFCOUNT(self->obj)); +} + +%% +override gst_caps_append_structure kwargs +static PyObject * +_wrap_gst_caps_append_structure(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "structure", NULL }; + PyObject *py_structure; + GstStructure *structure = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O:GstCaps.append_structure", kwlist, &py_structure)) + return NULL; + if (pyg_boxed_check(py_structure, GST_TYPE_STRUCTURE)) + structure = gst_structure_copy(pyg_boxed_get(py_structure, GstStructure)); + else { + PyErr_SetString(PyExc_TypeError, "structure should be a GstStructure"); + return NULL; + } + pyg_begin_allow_threads; + gst_caps_append_structure(pyg_boxed_get(self, GstCaps), structure); + pyg_end_allow_threads; + Py_INCREF(Py_None); + return Py_None; +} diff --git a/gst/gstelement.override b/gst/gstelement.override new file mode 100644 index 0000000..e8dc0ab --- /dev/null +++ b/gst/gstelement.override @@ -0,0 +1,637 @@ +/* -*- Mode: C; c-basic-offset: 8 -*- */ +/* gst-python + * Copyright (C) 2005 Johan Dahlin + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Johan Dahlin + */ +%% +ignore + gst_element_get + gst_element_set + gst_element_get_property + gst_element_set_property +%% +override gst_element_get_pad_template args +static PyObject * +_wrap_gst_element_get_pad_template(PyGObject *self, PyObject *args) +{ + PyObject *ret; + gchar *name; + GstPadTemplate *tmpl; + + if (!PyArg_ParseTuple(args, "s:GstElement.get_pad_template", &name)) + return NULL; + + pyg_begin_allow_threads; + tmpl = gst_element_class_get_pad_template + (GST_ELEMENT_GET_CLASS (self->obj), name); + pyg_end_allow_threads; + + if (tmpl) { + ret = pygobject_new (G_OBJECT (tmpl)); + } else { + ret = Py_None; + Py_INCREF (ret); + } + + return ret; +} +%% +override gst_element_set_state kwargs +static PyObject * +_wrap_gst_element_set_state(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "state", NULL }; + PyObject *py_state = NULL; + GstState state; + gint ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:GstElement.set_state", kwlist, &py_state)) + return NULL; + if (pyg_enum_get_value(GST_TYPE_STATE, py_state, (gint *)&state)) + return NULL; + + pyg_begin_allow_threads; + + ret = gst_element_set_state(GST_ELEMENT(self->obj), state); + + pyg_end_allow_threads; + + return pyg_enum_from_gtype(GST_TYPE_STATE_CHANGE_RETURN, ret); +} +%% +override gst_element_get_state kwargs +static PyObject * +_wrap_gst_element_get_state(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "timeout", NULL }; + GstState state; + GstState pending; + GstStateChangeReturn ret; + GstClockTime timeout = GST_CLOCK_TIME_NONE; + PyObject *tuple; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "|K:GstElement.get_state", kwlist, + &timeout)) { + PyErr_SetString(PyExc_RuntimeError, "Timeout not specified correctly"); + return NULL; + } + + pyg_begin_allow_threads; + + ret = gst_element_get_state(GST_ELEMENT (self->obj), &state, &pending, + timeout); + + pyg_end_allow_threads; + + tuple = Py_BuildValue("(OOO)", + pyg_enum_from_gtype (GST_TYPE_STATE_CHANGE_RETURN, ret), + pyg_enum_from_gtype (GST_TYPE_STATE, state), + pyg_enum_from_gtype (GST_TYPE_STATE, pending)); + + return tuple; +} +%% +override gst_element_link_many args +static PyObject * +_wrap_gst_element_link_many(PyObject *self, PyObject *args) +{ + PyGObject *element, *element2; + int i, len; + + len = PyTuple_Size(args); + if (len < 2) + { + PyErr_SetString(PyExc_TypeError, "gst.element_link_many requires at least two argument"); + return NULL; + } + + + for (i = 0; i < len; i++) + { + element = (PyGObject*)PyTuple_GetItem(args, i); + if (!pygobject_check(element, &PyGstElement_Type)) + { + PyErr_SetString(PyExc_TypeError, "argument must be a GstElement"); + return NULL; + } + } + + /* Mimic the real gst_element_link_many */ + element = (PyGObject*)PyTuple_GetItem(args, 0); + element2 = (PyGObject*)PyTuple_GetItem(args, 1); + + i = 2; + while (1) { + gboolean res; + + pyg_begin_allow_threads; + res = gst_element_link(GST_ELEMENT(element->obj), + GST_ELEMENT(element2->obj)); + pyg_end_allow_threads; + + if (!res) + { + PyErr_Format(PyGstExc_LinkError, + "failed to link %s with %s", + GST_ELEMENT_NAME(element->obj), + GST_ELEMENT_NAME(element2->obj)); + return NULL; + } + + if (i >= len) + break; + + element = element2; + element2 = (PyGObject*)PyTuple_GetItem(args, i); + + i++; + } + + Py_INCREF(Py_True); + return Py_True; +} + + +%% +override gst_element_link kwargs +static PyObject * +_wrap_gst_element_link(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "dest", "filtercaps", NULL }; + PyGObject *dest; + PyObject *py_caps = NULL; + int ret; + GstCaps *caps = NULL; + gboolean caps_is_copy; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!|O:GstElement.link", + kwlist, &PyGstElement_Type, &dest, &py_caps)) + return NULL; + if (py_caps == NULL) + caps = NULL; + else { + caps = pygst_caps_from_pyobject (py_caps, &caps_is_copy); + if (caps == NULL) + /* an error happened, propagate up */ + return NULL; + } + + pyg_begin_allow_threads; + ret = gst_element_link_filtered(GST_ELEMENT(self->obj), GST_ELEMENT(dest->obj), caps); + pyg_end_allow_threads; + + if (caps && caps_is_copy) + gst_caps_unref (caps); + if (!ret) { + PyErr_Format(PyGstExc_LinkError, + "failed to link %s with %s", + GST_ELEMENT_NAME(self->obj), + GST_ELEMENT_NAME(dest->obj)); + return NULL; + } + return PyBool_FromLong(ret); +} + +%% +override gst_element_link_filtered kwargs +static PyObject * +_wrap_gst_element_link_filtered(PyGObject *self, PyObject *args, + PyObject *kwargs) +{ + if (PyErr_Warn(PyExc_DeprecationWarning, "element.link_filtered is deprecated, use element.link") < 0) + return NULL; + return _wrap_gst_element_link (self, args, kwargs); +} + +%% +override gst_element_link_pads kwargs +static gboolean +pad_name_from_object (PyObject *object, const gchar **name) +{ + if (object == Py_None) { + *name = NULL; + return TRUE; + } else if (PyString_Check (object)) { + *name = PyString_AsString (object); + return TRUE; + } else if (pygobject_check (object, &PyGstPad_Type)) { + GstObject *obj = GST_OBJECT (pygobject_get (object)); + pyg_begin_allow_threads; + *name = gst_object_get_name (obj); + pyg_end_allow_threads; + return TRUE; + } + PyErr_SetString(PyExc_TypeError, "argument could not be converted to a pad"); + return FALSE; +} + +static PyObject * +_wrap_gst_element_link_pads(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "srcpadname", "dest", "destpadname", NULL }; + const char *srcpadname, *destpadname; + PyGObject *dest; + PyObject *srcpad, *destpad; + int ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "OO!O:GstElement.link_pads", kwlist, + &srcpad, &PyGstElement_Type, &dest, + &destpad)) + return NULL; + if (!pad_name_from_object (srcpad, &srcpadname) || + !pad_name_from_object (destpad, &destpadname)) + return NULL; + + pyg_begin_allow_threads; + ret = gst_element_link_pads(GST_ELEMENT(self->obj), srcpadname, + GST_ELEMENT(dest->obj), destpadname); + pyg_end_allow_threads; + if (!ret) { + PyErr_SetString(PyGstExc_LinkError, "link failed"); + return NULL; + } + return PyBool_FromLong(ret); + +} + +%% +override gst_element_link_pads_filtered kwargs +static PyObject * +_wrap_gst_element_link_pads_filtered(PyGObject *self, PyObject *args, + PyObject *kwargs) +{ + static char *kwlist[] = { "srcpadname", "dest", "destpadname", + "filtercaps", NULL }; + char *srcpadname, *destpadname; + PyGObject *dest; + int ret; + PyObject *py_filtercaps; + GstCaps *filtercaps = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "sO!sO:GstElement.link_pads_filtered", + kwlist, &srcpadname, &PyGstElement_Type, + &dest, &destpadname, &py_filtercaps)) + return NULL; + if (pyg_boxed_check(py_filtercaps, GST_TYPE_CAPS)) + filtercaps = pyg_boxed_get(py_filtercaps, GstCaps); + else { + PyErr_SetString(PyExc_TypeError, "filtercaps should be a GstCaps"); + return NULL; + } + pyg_begin_allow_threads; + ret = gst_element_link_pads_filtered(GST_ELEMENT(self->obj), srcpadname, + GST_ELEMENT(dest->obj), destpadname, + filtercaps); + pyg_end_allow_threads; + if (!ret) { + PyErr_SetString(PyGstExc_LinkError, "link failed"); + return NULL; + } + return PyBool_FromLong(ret); +} + +%% +override gst_element_unlink_many args +static PyObject * +_wrap_gst_element_unlink_many(PyObject *self, PyObject *args) +{ + PyGObject *element, *element2; + int i, len; + + len = PyTuple_Size(args); + if (len < 2) + { + PyErr_SetString(PyExc_TypeError, "gst.element_unlink_many requires at least two arguments"); + return NULL; + } + + + for (i = 0; i < len; i++) + { + element = (PyGObject*)PyTuple_GetItem(args, i); + if (!pygobject_check(element, &PyGstElement_Type)) + { + PyErr_SetString(PyExc_TypeError, "argument must be a GstElement"); + return NULL; + } + } + + /* Mimic the real gst_element_unlink_many */ + element = (PyGObject*)PyTuple_GetItem(args, 0); + element2 = (PyGObject*)PyTuple_GetItem(args, 1); + + i = 2; + while (1) { + pyg_begin_allow_threads; + gst_element_unlink(GST_ELEMENT(element->obj), GST_ELEMENT(element2->obj)); + pyg_end_allow_threads; + + if (i >= len) + break; + + element = element2; + element2 = (PyGObject*)PyTuple_GetItem(args, i); + + i++; + } + Py_INCREF(Py_None); + return Py_None; +} +%% +override gst_element_send_event kwargs +static PyObject * +_wrap_gst_element_send_event(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "event", NULL }; + PyObject *py_event; + int ret; + GstEvent *event = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:GstElement.send_event", kwlist, &py_event)) + return NULL; + if (pygstminiobject_check (py_event, &PyGstEvent_Type)) { + event = GST_EVENT (pygstminiobject_get (py_event)); + } else { + PyErr_SetString(PyExc_TypeError, "event should be a GstEvent"); + return NULL; + } + + /* The pipeline unrefs the event, but we want to keep the ownership */ + gst_event_ref(event); + + pyg_begin_allow_threads; + ret = gst_element_send_event(GST_ELEMENT(self->obj), event); + pyg_end_allow_threads; + + return PyBool_FromLong(ret); +} +%% +override gst_element_query_position args +static PyObject * +_wrap_gst_element_query_position (PyGObject *self, PyObject *args) +{ + gint64 cur; + gint format; + PyObject *pformat; + gboolean res; + + pformat = (PyObject*)PyTuple_GetItem(args, 0); + if (pyg_enum_get_value (GST_TYPE_FORMAT, pformat, &format)) { + PyErr_SetString(PyExc_TypeError, "argument should be a GstFormat"); + return NULL; + } + + pyg_begin_allow_threads; + res = gst_element_query_position(GST_ELEMENT (self->obj), (GstFormat*) &format, &cur); + pyg_end_allow_threads; + + if (!res) { + PyErr_Format(PyGstExc_QueryError, + "query failed"); + return NULL; + } + + return Py_BuildValue("(LO)", cur, + pyg_enum_from_gtype(GST_TYPE_FORMAT, format)); +} +%% +override gst_element_query_duration args +static PyObject * +_wrap_gst_element_query_duration (PyGObject *self, PyObject *args) +{ + gint64 cur; + gint format; + PyObject *pformat; + gboolean res; + + pformat = (PyObject*)PyTuple_GetItem(args, 0); + if (pyg_enum_get_value (GST_TYPE_FORMAT, pformat, &format)) { + PyErr_SetString(PyExc_TypeError, "argument should be a GstFormat"); + return NULL; + } + + pyg_begin_allow_threads; + res = gst_element_query_duration(GST_ELEMENT (self->obj), (GstFormat*) &format, &cur); + pyg_end_allow_threads; + + if (!res) { + PyErr_Format(PyGstExc_QueryError, + "query failed"); + return NULL; + } + + return Py_BuildValue("(LO)", cur, + pyg_enum_from_gtype(GST_TYPE_FORMAT, format)); +} +%% +override gst_element_query_convert kwargs +static PyObject * +_wrap_gst_element_query_convert (PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "fromformat", "fromvalue", "destformat", NULL }; + PyObject *pfromformat, *pdestformat; + GstFormat srcformat, destformat; + gint64 fromval, dstval; + gboolean res; + + /* Input : src_format, src_val, dst_format */ + /* Returns : dst_format, dst_val OR None */ + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "OLO:GstElement.query_convert", + kwlist, &pfromformat, &fromval, &pdestformat)) + return NULL; + + if (pyg_enum_get_value(GST_TYPE_FORMAT, pfromformat, (gint *) &srcformat)) { + PyErr_SetString(PyExc_TypeError, "argument should be a GstFormat"); + return NULL; + } + if (pyg_enum_get_value(GST_TYPE_FORMAT, pdestformat, (gint *) &destformat)) { + PyErr_SetString(PyExc_TypeError, "argument should be a GstFormat"); + return NULL; + } + + pyg_begin_allow_threads; + res = gst_element_query_convert (GST_ELEMENT(self->obj), + srcformat, fromval, + &destformat, &dstval); + pyg_end_allow_threads; + + if (!res) { + Py_INCREF(Py_None); + return Py_None; + } + + return Py_BuildValue("(OL)", + pyg_enum_from_gtype(GST_TYPE_FORMAT, destformat), + dstval); +} +%% +override gst_element_get_query_types noargs +static PyObject * +_wrap_gst_element_get_query_types (PyGObject *self) +{ + PyObject *ret; + PyObject *item; + int i; + GstQueryType *tab; + + pyg_begin_allow_threads; + tab = (GstQueryType*) gst_element_get_query_types(GST_ELEMENT(self->obj)); + pyg_end_allow_threads; + if (tab == NULL) { + Py_INCREF(Py_None); + return Py_None; + } + + ret = PyList_New(0); + for (i = 0; tab[i] != 0; i++) { + item = pyg_enum_from_gtype (GST_TYPE_QUERY_TYPE, tab[i]); + PyList_Append(ret, item); + } + + return ret; +} +%% +override-slot GstElement.tp_iter +static PyObject * +_wrap_gst_element_tp_iter(PyGObject *self) +{ + return _wrap_gst_element_iterate_pads(self); +} +%% +override gst_element_get_pad_template_list noargs +static PyObject * +_wrap_gst_element_get_pad_template_list(PyGObject *self) +{ + PyObject *ret; + GList *res = NULL; + guint i; + + pyg_begin_allow_threads; + res = gst_element_class_get_pad_template_list + (GST_ELEMENT_GET_CLASS (self->obj)); + pyg_end_allow_threads; + + if (res) { + i = g_list_length (res); + ret = PyList_New (i); + for (i = 0 ; res ; res = g_list_next (res), i++) { + GstPadTemplate * tmpl = (GstPadTemplate *) res->data; + PyList_SetItem (ret, i, pygobject_new (G_OBJECT (tmpl))); + } + } else { + ret = Py_None; + Py_INCREF (ret); + } + + return ret; +} +%% +override GstElement__proxy_do_request_new_pad +static GstPad* +_wrap_GstElement__proxy_do_request_new_pad(GstElement *self, GstPadTemplate*templ, const gchar*name) +{ + PyGILState_STATE __py_state; + PyObject *py_self; + PyObject *py_templ = NULL; + PyObject *py_name; + GstPad* retval; + PyObject *py_retval; + PyObject *py_args; + PyObject *py_method; + + __py_state = pyg_gil_state_ensure(); + py_self = pygobject_new((GObject *) self); + if (!py_self) { + if (PyErr_Occurred()) + PyErr_Print(); + pyg_gil_state_release(__py_state); + return NULL; + } + if (templ) + py_templ = pygobject_new((GObject *) templ); + else { + Py_INCREF(Py_None); + py_templ = Py_None; + } + + if (name == NULL) { + Py_INCREF(Py_None); + py_name = Py_None; + } else { + py_name = PyString_FromString(name); + if (!py_name) { + if (PyErr_Occurred()) + PyErr_Print(); + Py_DECREF(py_templ); + Py_DECREF(py_self); + pyg_gil_state_release(__py_state); + return NULL; + } + } + + py_args = PyTuple_New(2); + PyTuple_SET_ITEM(py_args, 0, py_templ); + PyTuple_SET_ITEM(py_args, 1, py_name); + + py_method = PyObject_GetAttrString(py_self, "do_request_new_pad"); + if (!py_method) { + if (PyErr_Occurred()) + PyErr_Print(); + Py_DECREF(py_args); + Py_DECREF(py_self); + pyg_gil_state_release(__py_state); + return NULL; + } + py_retval = PyObject_CallObject(py_method, py_args); + if (!py_retval) { + if (PyErr_Occurred()) + PyErr_Print(); + Py_DECREF(py_method); + Py_DECREF(py_args); + Py_DECREF(py_self); + pyg_gil_state_release(__py_state); + return NULL; + } + if (!PyObject_TypeCheck(py_retval, &PyGObject_Type)) { + PyErr_SetString(PyExc_TypeError, "retval should be a GObject"); + PyErr_Print(); + Py_DECREF(py_retval); + Py_DECREF(py_method); + Py_DECREF(py_args); + Py_DECREF(py_self); + pyg_gil_state_release(__py_state); + return NULL; + } + retval = (GstPad*) pygobject_get(py_retval); + g_object_ref((GObject *) retval); + + + Py_DECREF(py_retval); + Py_DECREF(py_method); + Py_DECREF(py_args); + Py_DECREF(py_self); + pyg_gil_state_release(__py_state); + + return retval; +} diff --git a/gst/gstelementfactory.override b/gst/gstelementfactory.override new file mode 100644 index 0000000..7d13189 --- /dev/null +++ b/gst/gstelementfactory.override @@ -0,0 +1,153 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +/* + * gstelementfactory.override - gstreamer element factory override + * Copyright (C) 2005 Alessandro Decina + * + * Authors: + * Alessandro Decina + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +%% +override gst_element_factory_make kwargs +static PyObject * +_wrap_gst_element_factory_make(PyObject *self, PyObject *args, PyObject *kwargs){ + static char *kwlist[] = { "factoryname", "name", NULL }; + char *factoryname, *name = NULL; + PyObject *py_ret; + GstElement *ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|z:element_factory_make", kwlist, &factoryname, &name)) + return NULL; + + pyg_begin_allow_threads; + ret = gst_element_factory_make(factoryname, name); + pyg_end_allow_threads; + + if (ret == NULL) { + PyErr_SetString(PyGstExc_ElementNotFoundError, factoryname); + return NULL; + } + py_ret = pygobject_new((GObject *)ret); + g_object_unref((GObject *)ret); + return py_ret; +} +%% +override gst_element_factory_get_static_pad_templates noargs +static PyObject * +_wrap_gst_element_factory_get_static_pad_templates(PyGObject *self) +{ + const GList *list; + GList *l; + PyObject *py_list; + int i = 0; + + pyg_begin_allow_threads; + list = gst_element_factory_get_static_pad_templates (GST_ELEMENT_FACTORY (self->obj)); + pyg_end_allow_threads; + + py_list = PyList_New(g_list_length ((GList*) list)); + + for (l = (GList*) list; l ; l = g_list_next(l), i++) { + GstStaticPadTemplate *templ = (GstStaticPadTemplate*) l->data; + PyList_SetItem(py_list, i, pyg_pointer_new(GST_TYPE_STATIC_PAD_TEMPLATE, (gpointer) templ)); + } + return py_list; +} +%% +override gst_element_factory_list_get_elements kwargs +static PyObject * +_wrap_gst_element_factory_list_get_elements(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "type", "minrank", NULL }; + PyObject *py_minrank; + GstRank minrank; + GstElementFactoryListType listype; + GList *res, *tmp; + PyObject *pyres; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"KO:element_factory_list_get_elements", kwlist, + &listype, &py_minrank)) + return NULL; + if (pyg_enum_get_value(GST_TYPE_RANK, py_minrank, (gint *)&minrank)) + return NULL; + pyg_begin_allow_threads; + res = gst_element_factory_list_get_elements(listype, minrank); + pyg_end_allow_threads; + + pyres = PyList_New(0); + for (tmp = res; tmp; tmp = tmp->next) { + GstElementFactory *fact = (GstElementFactory*) tmp->data; + PyObject *ltmp = pygobject_new (G_OBJECT (fact)); + + PyList_Append(pyres, ltmp); + } + gst_plugin_feature_list_free (res); + + return pyres; +} +%% +override gst_element_factory_list_filter kwargs +static PyObject * +_wrap_gst_element_factory_list_filter(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "list", "caps", "direction", "subsetonly", NULL }; + PyObject *py_list, *py_caps, *py_direction; + GList *inlist = NULL; + GList *res, *tmp; + GstCaps *caps; + GstPadDirection direction; + gboolean subsetonly, caps_is_copy; + PyObject *pyres; + guint i, n; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"OOOi:element_factory_list_filter", kwlist, + &py_list, &py_caps, &py_direction, &subsetonly)) + return NULL; + if (!PyList_Check (py_list)) + return NULL; + if (pyg_enum_get_value(GST_TYPE_PAD_DIRECTION, py_direction, (gint *)&direction)) + return NULL; + caps = pygst_caps_from_pyobject(py_caps, &caps_is_copy); + n = PyList_GET_SIZE(py_list); + for (i = 0; i < n; i++) { + /* Get Object */ + inlist = g_list_append(inlist, pygobject_get (PyList_GET_ITEM (py_list, i))); + } + + pyg_begin_allow_threads; + res = gst_element_factory_list_filter(inlist, caps, direction, subsetonly); + pyg_end_allow_threads; + + pyres = PyList_New(0); + for (tmp = res; tmp; tmp = tmp->next) { + GstElementFactory *fact = (GstElementFactory*) tmp->data; + PyObject *ltmp = pygobject_new (G_OBJECT (fact)); + + PyList_Append(pyres, ltmp); + } + + gst_plugin_feature_list_free (res); + if (caps && caps_is_copy) + gst_caps_unref (caps); + if (inlist) + g_list_free (inlist); + + return pyres; +} + + diff --git a/gst/gstevent.override b/gst/gstevent.override new file mode 100644 index 0000000..c79526c --- /dev/null +++ b/gst/gstevent.override @@ -0,0 +1,331 @@ +/* -*- Mode: C; ; c-file-style: "k&r"; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2005 Edward Hervey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Johan Dahlin + */ +%% +override gst_event_get_structure noargs +static PyObject * +_wrap_gst_event_get_structure(PyGstMiniObject *self) +{ + GstStructure *ret; + + ret = (GstStructure *) gst_event_get_structure(GST_EVENT(self->obj)); + /* pyg_boxed_new handles NULL checking */ + return pyg_boxed_new(GST_TYPE_STRUCTURE, ret, TRUE, TRUE); +} + +%% +override-slot GstEvent.tp_repr +static PyObject * +_wrap_gst_event_tp_repr (PyGObject *self) +{ + char *buf; + PyObject *retval; + GstEvent *event; + + event = GST_EVENT(self->obj); + + buf = g_strdup_printf ("", + gst_event_type_get_name (event->type), (long) self->obj); + + retval = PyString_FromString(buf); + g_free(buf); + return retval; +} +%% +override gst_event_parse_new_segment noargs +static PyObject * +_wrap_gst_event_parse_new_segment (PyGstMiniObject *self) +{ + gboolean update; + gdouble rate; + GstFormat format; + gint64 start_value, stop_value, base; + + if (GST_EVENT_TYPE(self->obj) != GST_EVENT_NEWSEGMENT) { + PyErr_SetString(PyExc_TypeError, "Event is not a 'NewSegment' event"); + return NULL; + } + + gst_event_parse_new_segment (GST_EVENT(self->obj), &update, &rate, &format, + &start_value, &stop_value, &base); + + return Py_BuildValue("(OdOLLL)", + PyBool_FromLong(update), + rate, pyg_enum_from_gtype (GST_TYPE_FORMAT, format), + start_value, stop_value, base); +} +%% +override gst_event_parse_tag noargs +static PyObject * +_wrap_gst_event_parse_tag (PyGstMiniObject *self) +{ + PyObject *ret; + GstTagList *taglist; + + if (GST_EVENT_TYPE(self->obj) != GST_EVENT_TAG) { + PyErr_SetString(PyExc_TypeError, "Event is not an 'Tag' event"); + return NULL; + } + + gst_event_parse_tag (GST_EVENT(self->obj), &taglist); + + ret = pyg_boxed_new (GST_TYPE_TAG_LIST, taglist, TRUE, TRUE); + + return ret; +} +%% +override gst_event_parse_qos noargs +static PyObject * +_wrap_gst_event_parse_qos (PyGstMiniObject *self) +{ + gdouble proportion; + GstClockTimeDiff diff; + GstClockTime timestamp; + + if (GST_EVENT_TYPE(self->obj) != GST_EVENT_QOS) { + PyErr_SetString(PyExc_TypeError, "Event is not an 'Qos' event"); + return NULL; + } + + gst_event_parse_qos (GST_EVENT(self->obj), &proportion, + &diff, ×tamp); + + return Py_BuildValue("(dLK)", proportion, diff, timestamp); +} +%% +override gst_event_parse_seek noargs +static PyObject * +_wrap_gst_event_parse_seek (PyGstMiniObject *self) +{ + gdouble rate; + GstFormat format; + GstSeekFlags flags; + GstSeekType cur_type; + gint64 cur; + GstSeekType stop_type; + gint64 stop; + + if (GST_EVENT_TYPE(self->obj) != GST_EVENT_SEEK) { + PyErr_SetString(PyExc_TypeError, "Event is not an 'Seek' event"); + return NULL; + } + + gst_event_parse_seek (GST_EVENT(self->obj), &rate, &format, &flags, + &cur_type, &cur, &stop_type, &stop); + + return Py_BuildValue("(dOOOLOL)", + rate, + pyg_enum_from_gtype (GST_TYPE_FORMAT, format), + pyg_flags_from_gtype (GST_TYPE_SEEK_FLAGS, flags), + pyg_enum_from_gtype (GST_TYPE_SEEK_TYPE, cur_type), + cur, + pyg_enum_from_gtype (GST_TYPE_SEEK_TYPE, stop_type), + stop); +} +%% +override gst_event_parse_buffer_size noargs +static PyObject * +_wrap_gst_event_parse_buffer_size (PyGstMiniObject *self) +{ + GstFormat format; + gint64 minsize; + gint64 maxsize; + gboolean async; + + if (GST_EVENT_TYPE (self->obj) != GST_EVENT_BUFFERSIZE) { + PyErr_SetString(PyExc_TypeError, "Event is not an 'BufferSize' event"); + return NULL; + } + + gst_event_parse_buffer_size (GST_EVENT (self->obj), + &format, &minsize, + &maxsize, &async); + + return Py_BuildValue("(OLLO)", + pyg_enum_from_gtype(GST_TYPE_FORMAT, format), + minsize, maxsize, + PyBool_FromLong(async)); +} +%% +override gst_event_parse_latency noargs +static PyObject * +_wrap_gst_event_parse_latency (PyGstMiniObject * self) +{ + GstClockTime ctime = GST_CLOCK_TIME_NONE; + + if (GST_EVENT_TYPE (self->obj) != GST_EVENT_LATENCY) { + PyErr_SetString(PyExc_TypeError, "Event is not a 'latency' event"); + return NULL; + } + + gst_event_parse_latency (GST_EVENT (self->obj), &ctime); + + return PyLong_FromUnsignedLongLong(ctime); +} +%% +override gst_event_new_navigation kwargs +static PyObject * +_wrap_gst_event_new_navigation(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "structure", NULL }; + PyObject *py_structure, *py_ret; + GstEvent *ret; + GstStructure *structure = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O:event_new_navigation", kwlist, &py_structure)) + return NULL; + if (pyg_boxed_check(py_structure, GST_TYPE_STRUCTURE)) + structure = pyg_boxed_get(py_structure, GstStructure); + else { + PyErr_SetString(PyExc_TypeError, "structure should be a GstStructure"); + return NULL; + } + pyg_begin_allow_threads; + ret = gst_event_new_navigation(gst_structure_copy(structure)); + pyg_end_allow_threads; + py_ret = pygstminiobject_new((GstMiniObject *)ret); + if (ret != NULL) + gst_mini_object_unref((GstMiniObject *)ret); + return py_ret; +} +%% +override gst_event_new_custom kwargs +static PyObject * +_wrap_gst_event_new_custom(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "type", "structure", NULL }; + PyObject *py_type = NULL, *py_structure, *py_ret; + GstEvent *ret; + GstStructure *structure = NULL; + GstEventType type; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"OO:event_new_custom", kwlist, &py_type, &py_structure)) + return NULL; + if (pyg_enum_get_value(GST_TYPE_EVENT_TYPE, py_type, (gint *)&type)) + return NULL; + if (pyg_boxed_check(py_structure, GST_TYPE_STRUCTURE)) + structure = pyg_boxed_get(py_structure, GstStructure); + else { + PyErr_SetString(PyExc_TypeError, "structure should be a GstStructure"); + return NULL; + } + pyg_begin_allow_threads; + ret = gst_event_new_custom(type, gst_structure_copy(structure)); + pyg_end_allow_threads; + py_ret = pygstminiobject_new((GstMiniObject *)ret); + if (ret != NULL) + gst_mini_object_unref((GstMiniObject *)ret); + return py_ret; +} +%% +override gst_event_new_tag kwargs +static PyObject * +_wrap_gst_event_new_tag(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "taglist", NULL }; + GstTagList *taglist = NULL; + PyObject *py_taglist, *py_ret; + GstEvent *ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O:event_new_tag", kwlist, &py_taglist)) + return NULL; + if (pyg_boxed_check(py_taglist, GST_TYPE_TAG_LIST)) + taglist = pyg_boxed_get(py_taglist, GstTagList); + else { + PyErr_SetString(PyExc_TypeError, "taglist should be a GstTagList"); + return NULL; + } + pyg_begin_allow_threads; + ret = gst_event_new_tag(gst_tag_list_copy(taglist)); + pyg_end_allow_threads; + py_ret = pygstminiobject_new((GstMiniObject *)ret); + if (ret != NULL) + gst_mini_object_unref((GstMiniObject *)ret); + return py_ret; +} +%% +override gst_event_parse_step noargs +static PyObject * +_wrap_gst_event_parse_step (PyGstMiniObject * self) +{ + GstFormat format; + guint64 amount; + gdouble rate; + gboolean flush, intermediate; + + if (GST_EVENT_TYPE (self->obj) != GST_EVENT_STEP) { + PyErr_SetString(PyExc_TypeError, "Event is not a 'step' event"); + return NULL; + } + + gst_event_parse_step (GST_EVENT (self->obj), &format, &amount, &rate, + &flush, &intermediate); + + return Py_BuildValue("OKdOO", + pyg_enum_from_gtype (GST_TYPE_FORMAT, format), + amount, rate, + PyBool_FromLong(flush), + PyBool_FromLong(intermediate)); +} +%% +override gst_event_parse_new_segment_full noargs +static PyObject * +_wrap_gst_event_parse_new_segment_full (PyGstMiniObject *self) +{ + gboolean update; + gdouble rate, applied_rate; + GstFormat format; + gint64 start_value, stop_value, base; + + if (GST_EVENT_TYPE(self->obj) != GST_EVENT_NEWSEGMENT) { + PyErr_SetString(PyExc_TypeError, "Event is not a 'NewSegment' event"); + return NULL; + } + + gst_event_parse_new_segment_full (GST_EVENT(self->obj), &update, &rate, + &applied_rate, &format, + &start_value, &stop_value, &base); + + return Py_BuildValue("(OddOLLL)", + PyBool_FromLong(update), + rate, applied_rate, pyg_enum_from_gtype (GST_TYPE_FORMAT, format), + start_value, stop_value, base); +} +%% +override gst_event_parse_sink_message noargs +static PyObject * +_wrap_gst_event_parse_sink_message (PyGstMiniObject *self) +{ + GstMessage *message; + + if (GST_EVENT_TYPE(self->obj) != GST_EVENT_SINK_MESSAGE) { + PyErr_SetString(PyExc_TypeError, "Event is not a 'SinkMessage' event"); + return NULL; + } + + gst_event_parse_sink_message (GST_EVENT(self->obj), &message); + + if (message) + return pygstminiobject_new (GST_MINI_OBJECT (message)); + + Py_INCREF(Py_None); + return Py_None; +} diff --git a/gst/gstlibs.override b/gst/gstlibs.override new file mode 100644 index 0000000..4280e13 --- /dev/null +++ b/gst/gstlibs.override @@ -0,0 +1,402 @@ +/* -*- Mode: C; ; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2005 Edward Hervey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Johan Dahlin + */ +%% +ignore + gst_controller_new + gst_controller_*_valist + gst_controller_remove_properties_list + +%% +override gst_controller_set args +static PyObject * +_wrap_gst_controller_set (PyGObject *self, PyObject *args) +{ + GstController *controller = (GstController *) self->obj; + gchar *param_name; + GParamSpec *pspec = NULL; + GstClockTime timestamp; + GValue value = { 0, }; + PyObject *pvalue; + gboolean res; + + if (!PyArg_ParseTuple(args, "sLO:GstController.set", + ¶m_name, ×tamp, &pvalue)) + return NULL; + + if (!(pspec = g_object_class_find_property(G_OBJECT_GET_CLASS (controller->object), + (const gchar*) param_name))) { + PyErr_SetString (PyExc_TypeError, + "The controlled object doesn't have the given property"); + return NULL; + } + + g_value_init (&value, pspec->value_type); + + if (pyg_value_from_pyobject (&value, pvalue)) { + PyErr_SetString (PyExc_TypeError, + "Couldn't convert the given value to the good type"); + return NULL; + } + + res = gst_controller_set (controller, param_name, timestamp, &value); + if (res) { + Py_INCREF (Py_True); + return Py_True; + } + Py_INCREF (Py_False); + return Py_False; +} +%% +override gst_controller_get kwargs +static PyObject * +_wrap_gst_controller_get (PyGObject *self, PyObject *args, PyObject *kwargs) +{ + GstController *controller = (GstController *) self->obj; + static char *kwlist[] = { "propertyname", "timestamp", NULL }; + gchar *propertyname; + GstClockTime timestamp; + GValue *value = NULL; + PyObject *pyvalue; + + if (!PyArg_ParseTupleAndKeywords (args, kwargs, + "sL:GstController.get", + kwlist, &propertyname, ×tamp)) + return NULL; + + value = gst_controller_get (controller, propertyname, timestamp); + if (value) { + pyvalue = pyg_value_as_pyobject (value, FALSE); + return pyvalue; + } + Py_INCREF (Py_None); + return Py_None; +} +%% +override gst_controller_new_list args +static int +_wrap_gst_controller_new_list(PyGObject *self, PyObject *args) +{ + PyObject *target_pyobj; + PyGObject *target; + gint len; + GList *list = NULL; + + if ((len = PyTuple_Size(args)) < 1) { + PyErr_SetString(PyExc_TypeError, "Controller requires at least a target object"); + return -1; + } + + target_pyobj = PyTuple_GetItem(args, 0); + if (!PyObject_TypeCheck(target_pyobj, &PyGObject_Type)) { + PyErr_Format(PyExc_TypeError, + "argument 1 must be %s, not %s", + PyGObject_Type.tp_name, + target_pyobj == Py_None ? "None" : target_pyobj->ob_type->tp_name); + return -1; + } + + target = (PyGObject *) target_pyobj; + + if (len > 1) + while (len-- > 1) { + PyObject *temp; + gchar *str; + + temp = PyTuple_GetItem(args, len); + str = PyString_AsString(temp); + if (str == NULL) { + g_list_free (list); + return -1; + } + GST_INFO("prepending %s [%d]", str, len); + list = g_list_prepend(list, str); + } + + self->obj = (GObject *) gst_controller_new_list(target->obj, list); + g_list_free (list); + + if (!self->obj) { + PyErr_SetString(PyExc_RuntimeError, "could not create GstController object"); + return -1; + } + + pygobject_register_wrapper((PyObject *) self); + return 0; +} +%% +override gst_controller_remove_properties args +static PyObject * +_wrap_gst_controller_remove_properties (PyGObject *self, PyObject *args) +{ + GstController *controller = (GstController *) self->obj; + gint len; + GList *list = NULL; + gboolean res = FALSE; + PyObject *pret; + + if ((len = PyTuple_Size(args)) < 1) { + PyErr_SetString(PyExc_TypeError, "Please give at least one property name to remove"); + return NULL; + } + + while (len--) { + PyObject *temp; + gchar *str; + + temp = PyTuple_GetItem(args, len); + str = PyString_AsString(temp); + if (str == NULL) { + g_list_free (list); + return NULL; + } + GST_INFO("prepending %s [%d]", str, len); + list = g_list_prepend(list, str); + } + + res = gst_controller_remove_properties_list(controller, list); + g_list_free (list); + + if (res) + pret = Py_True; + else + pret = Py_False; + + Py_INCREF (pret); + + return pret; +} +%% +override gst_controller_set_from_list args +static PyObject * +_wrap_gst_controller_set_from_list (PyGObject *self, PyObject *args) +{ + GstController *controller = (GstController *) self->obj; + PyObject *temp; + gint len; + gchar *pname; + GSList *list = NULL; + GParamSpec *pspec = NULL; + gboolean res = FALSE; + PyObject *pret; + + if ((len = PyTuple_Size(args)) < 2) { + PyErr_SetString(PyExc_TypeError, "Please give a property name and a tuple of (time,value)"); + return NULL; + } + + temp = PyTuple_GetItem(args, 0); + if (!PyString_Check (temp)) { + PyErr_SetString(PyExc_TypeError, "First argument must be a string"); + return NULL; + } + pname = PyString_AsString(temp); + + if (!(pspec = g_object_class_find_property(G_OBJECT_GET_CLASS (controller->object), + (const gchar*) pname))) + goto error; + + while (len-- > 1) { + PyObject *temp2; + GstTimedValue *tval; + + temp2 = PyTuple_GetItem(args, len); + if (!PyTuple_Check (temp2)) { + PyErr_SetString (PyExc_TypeError, "Tuple doesn't contain tuples !"); + goto error; + } + tval = g_new0(GstTimedValue, 1); + tval->timestamp = PyLong_AsUnsignedLongLong(PyTuple_GetItem(temp2, 0)); + g_value_init (&tval->value, pspec->value_type); + if ((pyg_value_from_pyobject (&tval->value, PyTuple_GetItem (temp2, 1))) < 0) { + PyErr_SetString (PyExc_TypeError, "Couldn't convert value to correct type"); + goto error; + }; + + list = g_slist_prepend(list, tval); + } + + res = gst_controller_set_from_list(controller, pname, list); + g_slist_free (list); + + if (res) + pret = Py_True; + else + pret = Py_False; + + Py_INCREF (pret); + + return pret; + + error: + while (list) { + g_free(list->data); + list = g_slist_next(list); + } + g_slist_free (list); + return NULL; +} +%% +override gst_dp_header_payload_length kwargs +static PyObject * +_wrap_gst_dp_header_payload_length(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "header", NULL }; + char *header; + gulong ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s:dp_header_payload_length", kwlist, &header)) + return NULL; + ret = gst_dp_header_payload_length((guint8*)header); + return PyLong_FromUnsignedLong(ret); +} +%% +overrid gst_dp_header_payload_type kwargs +static PyObject * +_wrap_gst_dp_header_payload_type(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "header", NULL }; + char *header; + gint ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s:dp_header_payload_type", kwlist, &header)) + return NULL; + ret = gst_dp_header_payload_type((guint8*)header); + return pyg_enum_from_gtype(G_TYPE_NONE, ret); +} +%% +override gst_dp_buffer_from_header kwargs +static PyObject * +_wrap_gst_dp_buffer_from_header(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "header_length", "header", NULL }; + char *header; + GstBuffer *ret; + guint header_length; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Is:dp_buffer_from_header", kwlist, &header_length, &header)) + return NULL; + ret = gst_dp_buffer_from_header(header_length, (guint8*)header); + /* pygobject_new handles NULL checking */ + return pygstminiobject_new((GstMiniObject *)ret); +} +%% +override gst_dp_caps_from_packet kwargs +static PyObject * +_wrap_gst_dp_caps_from_packet(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "header_length", "header", "payload", NULL }; + char *header, *payload; + GstCaps *ret; + guint header_length; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Iss:dp_caps_from_packet", kwlist, &header_length, &header, &payload)) + return NULL; + ret = gst_dp_caps_from_packet(header_length, + (guint8*) header, + (guint8*) payload); + return pyg_boxed_new (GST_TYPE_CAPS, ret, FALSE, TRUE); +} +%% +override gst_dp_event_from_packet kwargs +static PyObject * +_wrap_gst_dp_event_from_packet(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "header_length", "header", "payload", NULL }; + char *header, *payload; + GstEvent *ret; + guint header_length; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Iss:dp_event_from_packet", kwlist, &header_length, &header, &payload)) + return NULL; + ret = gst_dp_event_from_packet(header_length, + (guint8*) header, + (guint8*) payload); + /* pygobject_new handles NULL checking */ + return pygstminiobject_new((GstMiniObject *)ret); +} +%% +override gst_dp_validate_header kwargs +static PyObject * +_wrap_gst_dp_validate_header(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "header_length", "header", NULL }; + char *header; + int ret; + guint header_length; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Is:dp_validate_header", kwlist, &header_length, &header)) + return NULL; + ret = gst_dp_validate_header(header_length, (guint8*) header); + return PyBool_FromLong(ret); + +} +%% +override gst_dp_validate_payload kwargs +static PyObject * +_wrap_gst_dp_validate_payload(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "header_length", "header", "payload", NULL }; + char *header, *payload; + int ret; + guint header_length; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Iss:dp_validate_payload", kwlist, &header_length, &header, &payload)) + return NULL; + ret = gst_dp_validate_payload(header_length, + (guint8*) header, + (guint8*) payload); + return PyBool_FromLong(ret); + +} +%% +override gst_dp_validate_packet kwargs +static PyObject * +_wrap_gst_dp_validate_packet(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "header_length", "header", "payload", NULL }; + char *header, *payload; + int ret; + guint header_length; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Iss:dp_validate_packet", kwlist, &header_length, &header, &payload)) + return NULL; + ret = gst_dp_validate_packet(header_length, + (guint8*) header, + (guint8*) payload); + return PyBool_FromLong(ret); + +} +%% +override gst_dp_header_payload_type kwargs +static PyObject * +_wrap_gst_dp_header_payload_type(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "header", NULL }; + char *header; + gint ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s:dp_header_payload_type", kwlist, &header)) + return NULL; + ret = gst_dp_header_payload_type((guint8*) header); + return pyg_enum_from_gtype(G_TYPE_NONE, ret); +} + diff --git a/gst/gstmessage.override b/gst/gstmessage.override new file mode 100644 index 0000000..666d589 --- /dev/null +++ b/gst/gstmessage.override @@ -0,0 +1,540 @@ +/* -*- Mode: C; ; c-file-style: "python" -*- */ +/* gst-python + * Copyright (C) 2005 Edward Hervey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Johan Dahlin + */ + +%% +override-slot GstMessage.tp_repr +static PyObject * +_wrap_gst_message_tp_repr (PyGstMiniObject *self) +{ + GstMessage *msg; + gchar *repr, *structure_str, *src_str; + PyObject *ret; + + g_assert (self); + msg = GST_MESSAGE (self->obj); + g_assert (msg); + + structure_str = msg->structure ? gst_structure_to_string (msg->structure) + : g_strdup ("(none)"); + if (msg->src) { + pyg_begin_allow_threads; + src_str = gst_object_get_name (msg->src); + pyg_end_allow_threads; + } else { + src_str = g_strdup ("(no src)"); + } + + repr = g_strdup_printf ("", + structure_str, src_str, msg); + g_free (src_str); + g_free (structure_str); + + ret = PyString_FromStringAndSize(repr, strlen (repr)); + g_free (repr); + + return ret; +} + +%% +override gst_message_parse_state_changed noargs +static PyObject * +_wrap_gst_message_parse_state_changed (PyGstMiniObject *self) +{ + GstState old; + GstState new; + GstState pen; + + /* Should raise an exception if it's not a state-changed message */ + if (GST_MESSAGE(self->obj)->type != GST_MESSAGE_STATE_CHANGED) { + PyErr_SetString(PyExc_TypeError, "Message is not a state-changed message"); + return NULL; + } + gst_message_parse_state_changed (GST_MESSAGE(self->obj), &old, &new, &pen); + + return Py_BuildValue("[OOO]", + pyg_enum_from_gtype(GST_TYPE_STATE, old), + pyg_enum_from_gtype(GST_TYPE_STATE, new), + pyg_enum_from_gtype(GST_TYPE_STATE, pen)); +} +%% +override gst_message_parse_segment_start noargs +static PyObject * +_wrap_gst_message_parse_segment_start (PyGstMiniObject *self) +{ + gint64 position; + GstFormat format; + + /* Should raise an exception if it's not a segment start message */ + if (GST_MESSAGE(self->obj)->type != GST_MESSAGE_SEGMENT_START) { + PyErr_SetString(PyExc_TypeError, "Message is not a segment start message"); + return NULL; + } + gst_message_parse_segment_start (GST_MESSAGE(self->obj), &format, &position); + + return Py_BuildValue("(OL)", + pyg_enum_from_gtype(GST_TYPE_FORMAT, format), + position); +} + +%% +override gst_message_parse_segment_done noargs +static PyObject * +_wrap_gst_message_parse_segment_done (PyGstMiniObject *self) +{ + gint64 position; + GstFormat format; + + /* Should raise an exception if it's not a segment done message */ + if (GST_MESSAGE(self->obj)->type != GST_MESSAGE_SEGMENT_DONE) { + PyErr_SetString(PyExc_TypeError, "Message is not a segment done message"); + return NULL; + } + gst_message_parse_segment_done (GST_MESSAGE(self->obj), &format, &position); + + return Py_BuildValue("(OL)", + pyg_enum_from_gtype(GST_TYPE_FORMAT, format), + position); +} + +%% +override gst_message_parse_error noargs +static PyObject * +_wrap_gst_message_parse_error (PyGstMiniObject *self) +{ + PyObject *ret; + GError *error = NULL; + gchar *debug; + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_ERROR) { + PyErr_SetString(PyExc_TypeError, "Message is not an error message"); + return NULL; + } + + gst_message_parse_error (GST_MESSAGE(self->obj), &error, &debug); + + ret = PyList_New(2); + PyList_SetItem(ret, 0, pyg_boxed_new (GST_TYPE_G_ERROR, error, TRUE, TRUE)); + if (error) + g_error_free (error); + if (debug != NULL) { + PyList_SetItem(ret, 1, PyString_FromString(debug)); + } else { + Py_INCREF (Py_None); + PyList_SetItem(ret, 1, Py_None); + } + g_free(debug); + return ret; +} +%% +override gst_message_parse_warning noargs +static PyObject * +_wrap_gst_message_parse_warning (PyGstMiniObject *self) +{ + PyObject *ret; + GError *warning = NULL; + gchar *debug; + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_WARNING) { + PyErr_SetString(PyExc_TypeError, "Message is not an warning message"); + return NULL; + } + + gst_message_parse_warning (GST_MESSAGE(self->obj), &warning, &debug); + + ret = PyList_New(2); + PyList_SetItem(ret, 0, pyg_boxed_new (GST_TYPE_G_ERROR, warning, TRUE, TRUE)); + if (warning) + g_error_free (warning); + if (debug != NULL) { + PyList_SetItem(ret, 1, PyString_FromString(debug)); + } else { + Py_INCREF (Py_None); + PyList_SetItem(ret, 1, Py_None); + } + g_free(debug); + return ret; +} +%% +override gst_message_parse_info noargs +static PyObject * +_wrap_gst_message_parse_info (PyGstMiniObject *self) +{ + PyObject *ret; + GError *info = NULL; + gchar *debug; + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_INFO) { + PyErr_SetString(PyExc_TypeError, "Message is not an info message"); + return NULL; + } + + gst_message_parse_info (GST_MESSAGE(self->obj), &info, &debug); + + ret = PyList_New(2); + PyList_SetItem(ret, 0, pyg_boxed_new (GST_TYPE_G_ERROR, info, TRUE, TRUE)); + if (info) + g_error_free (info); + if (debug != NULL) { + PyList_SetItem(ret, 1, PyString_FromString(debug)); + } else { + Py_INCREF (Py_None); + PyList_SetItem(ret, 1, Py_None); + } + g_free(debug); + return ret; +} +%% +override gst_message_parse_tag noargs +static PyObject * +_wrap_gst_message_parse_tag (PyGstMiniObject *self) +{ + PyObject *ret; + GstTagList *taglist; + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_TAG) { + PyErr_SetString(PyExc_TypeError, "Message is not an Tag message"); + return NULL; + } + + gst_message_parse_tag (GST_MESSAGE(self->obj), &taglist); + + ret = pyg_boxed_new (GST_TYPE_TAG_LIST, taglist, TRUE, TRUE); + gst_tag_list_free (taglist); + return ret; +} +%% +override gst_message_parse_clock_provide noargs +static PyObject * +_wrap_gst_message_parse_clock_provide (PyGstMiniObject *self) +{ + GstClock *clock; + gboolean ready; + + if (GST_MESSAGE(self->obj)->type != GST_MESSAGE_CLOCK_PROVIDE) { + PyErr_SetString(PyExc_TypeError, "Message is not a 'clock provide' message"); + return NULL; + } + + gst_message_parse_clock_provide (GST_MESSAGE(self->obj), &clock, &ready); + + return Py_BuildValue("(OO)", + pygobject_new(G_OBJECT (clock)), + PyBool_FromLong(ready)); +} +%% +override gst_message_parse_clock_lost noargs +static PyObject * +_wrap_gst_message_parse_clock_lost (PyGstMiniObject *self) +{ + GstClock *clock; + + if (GST_MESSAGE(self->obj)->type != GST_MESSAGE_CLOCK_LOST) { + PyErr_SetString(PyExc_TypeError, "Message is not a 'clock lost' message"); + return NULL; + } + + gst_message_parse_clock_lost (GST_MESSAGE(self->obj), &clock); + + return pygobject_new(G_OBJECT(clock)); +} +%% +override gst_message_parse_new_clock noargs +static PyObject * +_wrap_gst_message_parse_new_clock (PyGstMiniObject *self) +{ + GstClock *clock; + + if (GST_MESSAGE(self->obj)->type != GST_MESSAGE_NEW_CLOCK) { + PyErr_SetString(PyExc_TypeError, "Message is not a 'new clock' message"); + return NULL; + } + + gst_message_parse_new_clock (GST_MESSAGE(self->obj), &clock); + + return pygobject_new(G_OBJECT(clock)); +} +%% +override gst_message_parse_duration noargs +static PyObject * +_wrap_gst_message_parse_duration (PyGstMiniObject *self) +{ + GstFormat format; + gint64 duration; + + if (GST_MESSAGE(self->obj)->type != GST_MESSAGE_DURATION) { + PyErr_SetString(PyExc_TypeError, "Message is not a 'duration' message"); + return NULL; + } + + gst_message_parse_duration (GST_MESSAGE(self->obj), &format, &duration); + + return Py_BuildValue("(OL)", + pyg_enum_from_gtype (GST_TYPE_FORMAT, format), + duration); +} +%% +override gst_message_parse_async_start noargs +static PyObject * +_wrap_gst_message_parse_async_start (PyGstMiniObject *self) +{ + gboolean res = FALSE; + + if (GST_MESSAGE(self->obj)->type != GST_MESSAGE_ASYNC_START) { + PyErr_SetString(PyExc_TypeError, "Message is not an 'async-start' message"); + return NULL; + } + + gst_message_parse_async_start (GST_MESSAGE(self->obj), &res); + + return PyBool_FromLong (res); +} +%% +override gst_message_parse_buffering noargs +static PyObject * +_wrap_gst_message_parse_buffering (PyGstMiniObject *self) +{ + gint percent; + + if (GST_MESSAGE(self->obj)->type != GST_MESSAGE_BUFFERING) { + PyErr_SetString(PyExc_TypeError, "Message is not a 'buffering' message"); + return NULL; + } + + gst_message_parse_buffering (GST_MESSAGE(self->obj), &percent); + + return Py_BuildValue("i", percent); +} +%% +override gst_message_parse_tag_full noargs +static PyObject * +_wrap_gst_message_parse_tag_full (PyGstMiniObject *self) +{ + GstPad *pad; + GstTagList *taglist; + PyObject *ptlist; + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_TAG) { + PyErr_SetString(PyExc_TypeError, "Message is not an Tag message"); + return NULL; + } + + gst_message_parse_tag_full (GST_MESSAGE (self->obj), &pad, &taglist); + ptlist = pyg_boxed_new (GST_TYPE_TAG_LIST, taglist, TRUE, TRUE); + gst_tag_list_free (taglist); + + return Py_BuildValue("(OO)", + pygobject_new((GObject*) pad), + ptlist); +} +%% +override gst_message_parse_step_done noargs +static PyObject * +_wrap_gst_message_parse_step_done (PyGstMiniObject *self) +{ + GstFormat format; + guint64 amount, duration; + gdouble rate; + gboolean flush, intermediate, eos; + + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_STEP_DONE) { + PyErr_SetString(PyExc_TypeError, "Message is not an 'step-done' message"); + return NULL; + } + + gst_message_parse_step_done (GST_MESSAGE (self->obj), &format, &amount, &rate, + &flush, &intermediate, &duration, &eos); + + return Py_BuildValue("OKdOOKO", + pyg_enum_from_gtype (GST_TYPE_FORMAT, format), + amount, rate, + PyBool_FromLong(flush), + PyBool_FromLong(intermediate), + duration, + PyBool_FromLong(eos)); +} +%% +override gst_message_parse_step_start noargs +static PyObject * +_wrap_gst_message_parse_step_start (PyGstMiniObject *self) +{ + GstFormat format; + guint64 amount; + gdouble rate; + gboolean active, flush, intermediate; + + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_STEP_START) { + PyErr_SetString(PyExc_TypeError, "Message is not an 'step-start' message"); + return NULL; + } + + gst_message_parse_step_start (GST_MESSAGE (self->obj), &active, &format, + &amount, &rate, &flush, &intermediate); + + return Py_BuildValue("OOKdOO", + PyBool_FromLong(active), + pyg_enum_from_gtype (GST_TYPE_FORMAT, format), + amount, rate, + PyBool_FromLong(flush), + PyBool_FromLong(intermediate)); +} +%% +override gst_message_parse_stream_status noargs +static PyObject * +_wrap_gst_message_parse_stream_status (PyGstMiniObject *self) +{ + GstStreamStatusType type; + GstElement *owner; + + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_STREAM_STATUS) { + PyErr_SetString(PyExc_TypeError, "Message is not an 'stream-status' message"); + return NULL; + } + + gst_message_parse_stream_status (GST_MESSAGE (self->obj), &type, &owner); + + return Py_BuildValue("OO", + pyg_enum_from_gtype (GST_TYPE_STREAM_STATUS_TYPE, type), + pygobject_new((GObject*) owner)); +} +%% +override gst_message_parse_structure_change noargs +static PyObject * +_wrap_gst_message_parse_structure_change (PyGstMiniObject *self) +{ + GstStructureChangeType type; + GstElement *owner; + gboolean busy; + + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_STRUCTURE_CHANGE) { + PyErr_SetString(PyExc_TypeError, "Message is not an 'structure_change' message"); + return NULL; + } + + gst_message_parse_structure_change (GST_MESSAGE (self->obj), &type, &owner, &busy); + + return Py_BuildValue("OOO", + pyg_enum_from_gtype (GST_TYPE_STRUCTURE_CHANGE_TYPE, type), + pygobject_new((GObject*) owner), + PyBool_FromLong(busy)); +} +%% +override gst_message_parse_request_state noargs +static PyObject * +_wrap_gst_message_parse_request_state (PyGstMiniObject *self) +{ + GstState state; + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_REQUEST_STATE) { + PyErr_SetString(PyExc_TypeError, "Message is not an 'request_state' message"); + return NULL; + } + + gst_message_parse_request_state (GST_MESSAGE (self->obj), &state); + + return pyg_enum_from_gtype(GST_TYPE_STATE, state); +} +%% +override gst_message_parse_buffering_stats noargs +static PyObject * +_wrap_gst_message_parse_buffering_stats (PyGstMiniObject *self) +{ + GstBufferingMode mode; + gint avg_in, avg_out; + gint64 buffering_left; + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_BUFFERING) { + PyErr_SetString(PyExc_TypeError, "Message is not an 'buffering' message"); + return NULL; + } + + gst_message_parse_buffering_stats (GST_MESSAGE (self->obj), &mode, &avg_in, &avg_out, + &buffering_left); + + return Py_BuildValue("OiiL", + pyg_enum_from_gtype (GST_TYPE_BUFFERING_MODE, mode), + avg_in, avg_out, buffering_left); +} +%% +override gst_message_parse_qos noargs +static PyObject * +_wrap_gst_message_parse_qos (PyGstMiniObject *self) +{ + gboolean live; + guint64 running_time, stream_time, timestamp, duration; + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_QOS) { + PyErr_SetString(PyExc_TypeError, "Message is not an 'qos' message"); + return NULL; + } + + gst_message_parse_qos (GST_MESSAGE (self->obj), &live, &running_time, &stream_time, + ×tamp, &duration); + + return Py_BuildValue("OKKKK", + PyBool_FromLong(live), running_time, stream_time, + timestamp, duration); +} +%% +override gst_message_parse_qos_values noargs +static PyObject * +_wrap_gst_message_parse_qos_values (PyGstMiniObject *self) +{ + gint64 jitter; + gdouble proportion; + gint quality; + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_QOS) { + PyErr_SetString(PyExc_TypeError, "Message is not an 'qos' message"); + return NULL; + } + + gst_message_parse_qos_values (GST_MESSAGE (self->obj), &jitter, + &proportion, &quality); + + return Py_BuildValue("Ldi", + jitter, proportion, quality); +} +%% +override gst_message_parse_qos_stats noargs +static PyObject * +_wrap_gst_message_parse_qos_stats (PyGstMiniObject *self) +{ + GstFormat format; + guint64 processed; + guint64 dropped; + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_QOS) { + PyErr_SetString(PyExc_TypeError, "Message is not an 'qos' message"); + return NULL; + } + + gst_message_parse_qos_stats (GST_MESSAGE (self->obj), &format, + &processed, &dropped); + + return Py_BuildValue("OKK", + pyg_enum_from_gtype(GST_TYPE_FORMAT, format), + processed, dropped); +} diff --git a/gst/gstmodule.c b/gst/gstmodule.c new file mode 100644 index 0000000..2a37f8e --- /dev/null +++ b/gst/gstmodule.c @@ -0,0 +1,395 @@ +/* -*- Mode: C; ; c-file-style: "k&r"; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2002 David I. Lehn + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: David I. Lehn + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +/* include this first, before NO_IMPORT_PYGOBJECT is defined */ +#include +#include +#include +#include "pygst-private.h" +#include "pygstexception.h" + +#include + + +void pygst_register_classes (PyObject * d); +void pygst_add_constants (PyObject * module, const gchar * strip_prefix); +void _pygst_register_boxed_types (PyObject * moddict); + +extern PyMethodDef pygst_functions[]; + +GST_DEBUG_CATEGORY (pygst_debug); /* for bindings code */ +GST_DEBUG_CATEGORY (python_debug); /* for python code */ + +/* copied from pygtk to register GType */ +#define REGISTER_TYPE(d, type, name) \ + type.ob_type = &PyType_Type; \ + type.tp_alloc = PyType_GenericAlloc; \ + type.tp_new = PyType_GenericNew; \ + if (PyType_Ready(&type)) \ + return; \ + PyDict_SetItemString(d, name, (PyObject *)&type); + +#define REGISTER_GTYPE(d, type, name, gtype) \ + REGISTER_TYPE(d, type, name); \ + PyDict_SetItemString(type.tp_dict, "__gtype__", \ + o=pyg_type_wrapper_new(gtype)); \ + Py_DECREF(o); + +static PyObject * +pygstminiobject_from_gvalue (const GValue * value) +{ + GstMiniObject *miniobj; + + if ((miniobj = gst_value_get_mini_object (value)) == NULL) { + Py_INCREF (Py_None); + return Py_None; + } + return pygstminiobject_new (miniobj); +} + +static int +pygstminiobject_to_gvalue (GValue * value, PyObject * obj) +{ + PyGstMiniObject *self = (PyGstMiniObject *) obj; + + gst_value_set_mini_object (value, obj == Py_None ? NULL : self->obj); + + return 0; +} + +static void +sink_gstobject (GObject * object) +{ + if (GST_OBJECT_IS_FLOATING (object)) { + g_object_ref (object); + gst_object_sink (GST_OBJECT (object)); + } +} + +static PyObject * +pygst_fraction_from_value (const GValue * value) +{ + PyObject *module, *dict, *fraction_type, *args, *fraction; + gint numerator, denominator; + + numerator = gst_value_get_fraction_numerator (value); + denominator = gst_value_get_fraction_denominator (value); + + module = PyImport_ImportModule ("gst"); + dict = PyModule_GetDict (module); + fraction_type = PyMapping_GetItemString (dict, "Fraction"); + + args = Py_BuildValue ("(ii)", numerator, denominator); + fraction = PyObject_Call (fraction_type, args, NULL); + Py_DECREF (args); + Py_DECREF (fraction_type); + Py_DECREF (module); + + return fraction; +} + +static int +pygst_fraction_to_value (GValue * value, PyObject * object) +{ + PyObject *numerator, *denominator; + + numerator = PyObject_GetAttrString (object, "num"); + if (numerator == NULL) + goto fail; + + denominator = PyObject_GetAttrString (object, "denom"); + if (denominator == NULL) + goto fail; + + gst_value_set_fraction (value, + PyLong_AsLong (numerator), PyLong_AsLong (denominator)); + + return 0; + +fail: + return -1; +} + +struct _PyGst_Functions pygst_api_functions = { + pygst_caps_from_pyobject, + pygst_iterator_new, + pygstminiobject_new +}; + +/* for addon libraries ... */ +static void +pygst_register_api (PyObject * d) +{ + PyObject *api; + + api = PyCObject_FromVoidPtr (&pygst_api_functions, NULL); + PyDict_SetItemString (d, "_PyGst_API", api); + Py_DECREF (api); +} + +DL_EXPORT (void) +init_gst (void) +{ + PyObject *m, *d; + PyObject *av, *tuple; + int argc, i; + guint major, minor, micro, nano; + char **argv; + GError *error = NULL; + + init_pygobject (); + + /* pull in arguments */ + av = PySys_GetObject ("argv"); + if (av != NULL) { + argc = PyList_Size (av); + argv = g_new (char *, argc); + for (i = 0; i < argc; i++) + argv[i] = g_strdup (PyString_AsString (PyList_GetItem (av, i))); + } else { + /* gst_init_check does not like argc == 0 */ + argc = 1; + argv = g_new (char *, argc); + argv[0] = g_strdup (""); + } + if (!gst_init_check (&argc, &argv, &error)) { + gchar *errstr; + + if (argv != NULL) { + for (i = 0; i < argc; i++) + g_free (argv[i]); + g_free (argv); + } + errstr = g_strdup_printf ("can't initialize module gst: %s", + error ? GST_STR_NULL (error->message) : "no error given"); + PyErr_SetString (PyExc_RuntimeError, errstr); + g_free (errstr); + g_error_free (error); + setlocale (LC_NUMERIC, "C"); + return; + } + + setlocale (LC_NUMERIC, "C"); + if (argv != NULL) { + PySys_SetArgv (argc, argv); + for (i = 0; i < argc; i++) + g_free (argv[i]); + g_free (argv); + } + + /* Initialize debugging category */ + GST_DEBUG_CATEGORY_INIT (pygst_debug, "pygst", 0, + "GStreamer python bindings"); + GST_DEBUG_CATEGORY_INIT (python_debug, "python", GST_DEBUG_FG_GREEN, + "python code using gst-python"); + + pygobject_register_sinkfunc (GST_TYPE_OBJECT, sink_gstobject); + + m = Py_InitModule ("_gst", pygst_functions); + d = PyModule_GetDict (m); + pygst_register_api (d); + + /* gst version */ + gst_version (&major, &minor, µ, &nano); + tuple = Py_BuildValue ("(iii)", major, minor, micro); + PyDict_SetItemString (d, "gst_version", tuple); + Py_DECREF (tuple); + + /* gst-python version */ + tuple = Py_BuildValue ("(iii)", PYGST_MAJOR_VERSION, PYGST_MINOR_VERSION, + PYGST_MICRO_VERSION); + PyDict_SetItemString (d, "pygst_version", tuple); + Py_DECREF (tuple); + + /* clock stuff */ + PyModule_AddIntConstant (m, "SECOND", GST_SECOND); + PyModule_AddIntConstant (m, "MSECOND", GST_MSECOND); + PyModule_AddIntConstant (m, "NSECOND", GST_NSECOND); + + PyModule_AddObject (m, "CLOCK_TIME_NONE", + PyLong_FromUnsignedLongLong (GST_CLOCK_TIME_NONE)); + PyModule_AddObject (m, "BUFFER_OFFSET_NONE", + PyLong_FromUnsignedLongLong (GST_BUFFER_OFFSET_NONE)); + + pygst_exceptions_register_classes (d); + + REGISTER_TYPE (d, PyGstIterator_Type, "Iterator"); + + + pygstminiobject_register_class (d, "GstMiniObject", GST_TYPE_MINI_OBJECT, + &PyGstMiniObject_Type, NULL); + pyg_register_boxed_custom (GST_TYPE_MINI_OBJECT, + pygstminiobject_from_gvalue, pygstminiobject_to_gvalue); + + pygst_register_classes (d); + pygst_add_constants (m, "GST_"); + + /* make our types available */ + PyModule_AddObject (m, "TYPE_ELEMENT_FACTORY", + pyg_type_wrapper_new (GST_TYPE_ELEMENT_FACTORY)); + PyModule_AddObject (m, "TYPE_INDEX_FACTORY", + pyg_type_wrapper_new (GST_TYPE_INDEX_FACTORY)); + PyModule_AddObject (m, "TYPE_TYPE_FIND_FACTORY", + pyg_type_wrapper_new (GST_TYPE_TYPE_FIND_FACTORY)); + +#define ADD_GST_TAG(a) PyModule_AddStringConstant(m, "TAG_" #a, GST_TAG_##a) + /* GStreamer core tags */ + ADD_GST_TAG (TITLE); + ADD_GST_TAG (ARTIST); + ADD_GST_TAG (ALBUM); + ADD_GST_TAG (DATE); + ADD_GST_TAG (GENRE); + ADD_GST_TAG (COMMENT); + ADD_GST_TAG (TRACK_NUMBER); + ADD_GST_TAG (TRACK_COUNT); + ADD_GST_TAG (ALBUM_VOLUME_NUMBER); + ADD_GST_TAG (ALBUM_VOLUME_COUNT); + ADD_GST_TAG (LOCATION); + ADD_GST_TAG (DESCRIPTION); + ADD_GST_TAG (VERSION); + ADD_GST_TAG (ISRC); + ADD_GST_TAG (ORGANIZATION); + ADD_GST_TAG (COPYRIGHT); + ADD_GST_TAG (CONTACT); + ADD_GST_TAG (LICENSE); + ADD_GST_TAG (PERFORMER); + ADD_GST_TAG (DURATION); + ADD_GST_TAG (CODEC); + ADD_GST_TAG (VIDEO_CODEC); + ADD_GST_TAG (AUDIO_CODEC); + ADD_GST_TAG (BITRATE); + ADD_GST_TAG (NOMINAL_BITRATE); + ADD_GST_TAG (MINIMUM_BITRATE); + ADD_GST_TAG (MAXIMUM_BITRATE); + ADD_GST_TAG (SERIAL); + ADD_GST_TAG (ENCODER); + ADD_GST_TAG (ENCODER_VERSION); + ADD_GST_TAG (TRACK_GAIN); + ADD_GST_TAG (TRACK_PEAK); + ADD_GST_TAG (ALBUM_GAIN); + ADD_GST_TAG (ALBUM_PEAK); + ADD_GST_TAG (LANGUAGE_CODE); + ADD_GST_TAG (IMAGE); + ADD_GST_TAG (PREVIEW_IMAGE); + ADD_GST_TAG (EXTENDED_COMMENT); + ADD_GST_TAG (REFERENCE_LEVEL); + ADD_GST_TAG (BEATS_PER_MINUTE); + ADD_GST_TAG (LICENSE_URI); + ADD_GST_TAG (COPYRIGHT_URI); + ADD_GST_TAG (COMPOSER); + ADD_GST_TAG (ARTIST_SORTNAME); + ADD_GST_TAG (ALBUM_SORTNAME); + ADD_GST_TAG (TITLE_SORTNAME); +#if ((GST_VERSION_MICRO >= 21) || (GST_VERSION_MICRO == 20 && GST_VERSION_NANO > 0)) + ADD_GST_TAG (ATTACHMENT); + ADD_GST_TAG (KEYWORDS); + ADD_GST_TAG (GEO_LOCATION_NAME); + ADD_GST_TAG (GEO_LOCATION_LATITUDE); + ADD_GST_TAG (GEO_LOCATION_LONGITUDE); + ADD_GST_TAG (GEO_LOCATION_ELEVATION); +#if ((GST_VERSION_MICRO >= 23) || (GST_VERSION_MICRO == 22 && GST_VERSION_NANO > 0)) + ADD_GST_TAG (SUBTITLE_CODEC); + ADD_GST_TAG (HOMEPAGE); +#if ((GST_VERSION_MICRO >= 24) || (GST_VERSION_MICRO == 23 && GST_VERSION_NANO > 0)) + ADD_GST_TAG (CONTAINER_FORMAT); +#if ((GST_VERSION_MICRO >= 25) || (GST_VERSION_MICRO == 24 && GST_VERSION_NANO > 0)) + ADD_GST_TAG (ALBUM_ARTIST); + ADD_GST_TAG (ALBUM_ARTIST_SORTNAME); +#if ((GST_VERSION_MICRO >= 26) || (GST_VERSION_MICRO == 25 && GST_VERSION_NANO > 0)) + ADD_GST_TAG (SHOW_NAME); + ADD_GST_TAG (SHOW_SORTNAME); + ADD_GST_TAG (SHOW_EPISODE_NUMBER); + ADD_GST_TAG (SHOW_SEASON_NUMBER); + ADD_GST_TAG (LYRICS); + ADD_GST_TAG (COMPOSER_SORTNAME); + ADD_GST_TAG (GROUPING); +#if ((GST_VERSION_MICRO >= 29) || (GST_VERSION_MICRO == 28 && GST_VERSION_NANO > 0)) + ADD_GST_TAG (GEO_LOCATION_COUNTRY); + ADD_GST_TAG (GEO_LOCATION_CITY); + ADD_GST_TAG (GEO_LOCATION_SUBLOCATION); + ADD_GST_TAG (USER_RATING); +#if ((GST_VERSION_MICRO >= 30) || (GST_VERSION_MICRO == 29 && GST_VERSION_NANO > 0)) + ADD_GST_TAG (DEVICE_MANUFACTURER); + ADD_GST_TAG (IMAGE_ORIENTATION); + ADD_GST_TAG (DEVICE_MODEL); + ADD_GST_TAG (GEO_LOCATION_MOVEMENT_SPEED); + ADD_GST_TAG (GEO_LOCATION_MOVEMENT_DIRECTION); + ADD_GST_TAG (GEO_LOCATION_CAPTURE_DIRECTION); + ADD_GST_TAG (IMAGE_ORIENTATION); +#if ((GST_VERSION_MICRO >= 31) || (GST_VERSION_MICRO == 30 && GST_VERSION_NANO > 0)) +#define ADD_FACTORY_TYPE(a) PyModule_AddObject(m, "ELEMENT_FACTORY_TYPE_" #a,\ + PyLong_FromUnsignedLongLong(GST_ELEMENT_FACTORY_TYPE_##a)) + ADD_FACTORY_TYPE (DECODER); + ADD_FACTORY_TYPE (ENCODER); + ADD_FACTORY_TYPE (SINK); + ADD_FACTORY_TYPE (SRC); + ADD_FACTORY_TYPE (MUXER); + ADD_FACTORY_TYPE (DEMUXER); + ADD_FACTORY_TYPE (PARSER); + ADD_FACTORY_TYPE (PAYLOADER); + ADD_FACTORY_TYPE (DEPAYLOADER); + ADD_FACTORY_TYPE (FORMATTER); + ADD_FACTORY_TYPE (MAX_ELEMENTS); + ADD_FACTORY_TYPE (MEDIA_VIDEO); + ADD_FACTORY_TYPE (MEDIA_AUDIO); + ADD_FACTORY_TYPE (MEDIA_IMAGE); + ADD_FACTORY_TYPE (MEDIA_SUBTITLE); + ADD_FACTORY_TYPE (MEDIA_METADATA); + ADD_FACTORY_TYPE (ANY); + ADD_FACTORY_TYPE (MEDIA_ANY); + ADD_FACTORY_TYPE (VIDEO_ENCODER); + ADD_FACTORY_TYPE (AUDIO_ENCODER); + ADD_FACTORY_TYPE (AUDIOVIDEO_SINKS); + ADD_FACTORY_TYPE (DECODABLE); + ADD_GST_TAG (DATE_TIME); + ADD_GST_TAG (APPLICATION_NAME); + ADD_GST_TAG (APPLICATION_DATA); + ADD_GST_TAG (GEO_LOCATION_HORIZONTAL_ERROR); +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif + + PyModule_AddStringConstant (m, "LIBRARY_ERROR", + (gchar *) g_quark_to_string (GST_LIBRARY_ERROR)); + PyModule_AddStringConstant (m, "RESOURCE_ERROR", + (gchar *) g_quark_to_string (GST_RESOURCE_ERROR)); + PyModule_AddStringConstant (m, "CORE_ERROR", + (gchar *) g_quark_to_string (GST_CORE_ERROR)); + PyModule_AddStringConstant (m, "STREAM_ERROR", + (gchar *) g_quark_to_string (GST_STREAM_ERROR)); + + pyg_register_gtype_custom (GST_TYPE_FRACTION, + pygst_fraction_from_value, pygst_fraction_to_value); + + if (PyErr_Occurred ()) { + Py_FatalError ("can't initialize module gst"); + } +} diff --git a/gst/gstobject.override b/gst/gstobject.override new file mode 100644 index 0000000..ec8e78c --- /dev/null +++ b/gst/gstobject.override @@ -0,0 +1,165 @@ +/* -*- Mode: C -*- */ +/* gst-python + * Copyright (C) 2005 Edward Hervey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Edward Hervey + */ + +%% +ignore + gst_object_default_deep_notify + gst_object_check_uniqueness + gst_object_replace + +%% +override-attr GstObject.__gstrefcount__ + +/* keep this attribute around even after 2.8 for compatibility reasons */ +static PyObject * +_wrap_gst_object__get___gstrefcount__ (PyGObject * self, void *closure) +{ + return PyInt_FromLong (GST_OBJECT_REFCOUNT_VALUE (self->obj)); +} + +%% +override-slot GstObject.tp_repr +static PyObject * +_wrap_gst_object_tp_repr (PyObject * self) +{ + gchar *repr; + PyObject *ret; + GstObject *object = GST_OBJECT (pygobject_get (self)); + + repr = g_strdup_printf ("<%s object (%s) at 0x%lx>", + self->ob_type->tp_name, + object ? ( + GST_OBJECT_NAME (object) ? GST_OBJECT_NAME (object) : "unnamed" + ) : "(null)", + (long) self); + ret = PyString_FromString (repr); + g_free (repr); + return ret; +} + +%% +override-slot GstObject.tp_str +static PyObject * +_wrap_gst_object_tp_str (PyObject * self) +{ + gchar *repr, *path; + PyObject *ret; + GstObject *object = GST_OBJECT (pygobject_get (self)); + + pyg_begin_allow_threads; + path = gst_object_get_path_string (object); + pyg_end_allow_threads; + + repr = g_strdup_printf ("%s (%s)", path, self->ob_type->tp_name); + ret = PyString_FromString (repr); + g_free (repr); + g_free (path); + return ret; +} +%% +override gst_object_set_property args + +/* + * REMOVE THE FOLLOWING CODE, once pygobject has fixed the issue of not + * releasing the GIL when calling g_object_set_property. + * + * See bug #395048 : set_property() doesn't release the GIL + **/ + +static gboolean +set_property_from_pspec(GObject *obj, + char *attr_name, + GParamSpec *pspec, + PyObject *pvalue) +{ + GValue value = { 0, }; + + if (pspec->flags & G_PARAM_CONSTRUCT_ONLY) { + PyErr_Format(PyExc_TypeError, + "property '%s' can only be set in constructor", + attr_name); + return FALSE; + } + + if (!(pspec->flags & G_PARAM_WRITABLE)) { + PyErr_Format(PyExc_TypeError, + "property '%s' is not writable", attr_name); + return FALSE; + } + + g_value_init(&value, G_PARAM_SPEC_VALUE_TYPE(pspec)); +/* FIXME: bug in pygtk 2.8 series; see +http://svn.gnome.org/viewcvs/pygobject/trunk/gobject/pygobject.h?rev=566&r1=564&r2=566 */ + +#ifndef PYGOBJECT_2_12 +#undef pyg_param_gvalue_from_pyobject +#define pyg_param_gvalue_from_pyobject (_PyGObject_API->gvalue_from_param_pyobject) +#endif + + if (pyg_param_gvalue_from_pyobject(&value, pvalue, pspec) < 0) { + PyErr_SetString(PyExc_TypeError, + "could not convert argument to correct param type"); + return FALSE; + } + + pyg_begin_allow_threads; + g_object_set_property(obj, attr_name, &value); + pyg_end_allow_threads; + + g_value_unset(&value); + + return TRUE; +} + +static PyObject * +_wrap_gst_object_set_property(PyGObject *self, PyObject *args) +{ + gchar *param_name; + GParamSpec *pspec; + PyObject *pvalue; + + if (!PyArg_ParseTuple(args, "sO:gst.Object.set_property", ¶m_name, + &pvalue)) + return NULL; + + if (!GST_IS_OBJECT (self->obj)) { + PyErr_Format (PyExc_TypeError, + "object at %p of type %s is not initialized", + self, self->ob_type->tp_name); + return NULL; + } + + pspec = g_object_class_find_property(G_OBJECT_GET_CLASS(self->obj), + param_name); + if (!pspec) { + PyErr_Format(PyExc_TypeError, + "object of type `%s' does not have property `%s'", + g_type_name(G_OBJECT_TYPE(self->obj)), param_name); + return NULL; + } + + if (!set_property_from_pspec(self->obj, param_name, pspec, pvalue)) + return NULL; + + Py_INCREF(Py_None); + return Py_None; +} diff --git a/gst/gstpad.override b/gst/gstpad.override new file mode 100644 index 0000000..2f701dd --- /dev/null +++ b/gst/gstpad.override @@ -0,0 +1,1682 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ + * vi:si:et:sw=4:sts=4:ts=4 + * + * gst-python + * Copyright (C) 2004 Johan Dahlin + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Johan Dahlin 0) || \ + (GST_VERSION_MAJOR == 0 && GST_VERSION_MINOR > 10) || \ + (GST_VERSION_MAJOR == 0 && GST_VERSION_MINOR == 10 && \ + GST_VERSION_MICRO >= 23) || \ + (GST_VERSION_MAJOR == 0 && GST_VERSION_MINOR == 10 && \ + GST_VERSION_MICRO == 22 && GST_VERSION_NANO > 0)) +#define HAVE_SET_BLOCKED_ASYNC_FULL 1 +#else +#define HAVE_SET_BLOCKED_ASYNC_FULL 0 +#endif + +/* we need to do this until PyClosures get exception handlers */ +#ifndef pyg_closure_set_exception_handler +# define pyg_closure_set_exception_handler(ig, nore) +# define EXCEPTION_HANDLER G_GNUC_UNUSED +#else +# define EXCEPTION_HANDLER +#endif +#define SET_PAD_CLOSURE(self, args, kwargs, name) \ + static char *kwlist[] = { G_STRINGIFY (name), NULL }; \ + PyObject *function; \ + GstPad *pad; \ + GClosure *closure; \ + PyGstPadPrivate *priv; \ +\ + if (!PyArg_ParseTupleAndKeywords(args, kwargs, \ + "O:GstPad.set_" G_STRINGIFY (name), \ + kwlist, \ + &function)) { \ + return NULL; \ + } \ +\ + if (!PyCallable_Check(function)) { \ + PyErr_SetString(PyExc_TypeError, G_STRINGIFY (name) " not callable"); \ + return NULL; \ + } \ +\ + closure = pyg_closure_new (function, NULL, NULL); \ + pyg_closure_set_exception_handler (closure, handle_ ## name ## _exception); \ + pygobject_watch_closure((PyObject *)self, closure); \ + priv = py_pad_private(self);\ + if (priv->name) { \ + g_closure_invalidate (priv->name); \ + g_closure_unref (priv->name); \ + } \ + priv->name = closure; \ + pad = (GstPad*)pygobject_get(self); \ + gst_pad_set_ ## name (pad, call_ ## name); \ +\ + Py_INCREF(Py_None); \ + return Py_None; + +static void +free_pad_private (gpointer data) +{ + PyGstPadPrivate *private = data; +#define INVALIDATE_CLOSURE(closure) \ + if (closure) { \ + g_closure_invalidate (closure); \ + g_closure_unref (closure); \ + closure = NULL; \ + } + INVALIDATE_CLOSURE (private->link_function) + INVALIDATE_CLOSURE (private->event_function) + INVALIDATE_CLOSURE (private->chain_function) + INVALIDATE_CLOSURE (private->get_function) + INVALIDATE_CLOSURE (private->getcaps_function) + INVALIDATE_CLOSURE (private->setcaps_function) + INVALIDATE_CLOSURE (private->activate_function) + INVALIDATE_CLOSURE (private->activatepull_function) + INVALIDATE_CLOSURE (private->activatepush_function) +#undef INVALIDATE_CLOSURE + + if (private->query_function) { + Py_DECREF (private->query_function); + private->query_function = NULL; + } +} + +static PyGstPadPrivate* +pad_private(GstPad *pad) +{ + PyGstPadPrivate *private; + static GQuark padprivate = 0; + + if (!padprivate) + padprivate = g_quark_from_static_string ("PyGst::PadPrivate"); + private = g_object_get_qdata (G_OBJECT (pad), padprivate); + if (private == NULL) { + private = g_new0(PyGstPadPrivate, 1); + private->pad = (PyGObject *) pygobject_new (G_OBJECT (pad)); + Py_DECREF (private->pad); + g_object_set_qdata_full (G_OBJECT (pad), padprivate, private, free_pad_private); + } + return private; +} + +static PyGstPadPrivate* +py_pad_private(PyGObject *pad) +{ + return pad_private ((GstPad *)pygobject_get(pad)); +} + +%% +ignore + gst_pad_select + gst_pad_selectv + gst_pad_new_from_template + gst_pad_load_and_link +%% +override gst_pad_set_getcaps_function kwargs + +static void EXCEPTION_HANDLER +handle_getcaps_function_exception (GValue *ret, guint n, const GValue *params) +{ + g_value_set_boxed (ret, gst_pad_get_pad_template_caps ( + GST_PAD (g_value_get_object (¶ms[0])))); + PyErr_Clear (); +} + +static GstCaps * +call_getcaps_function (GstPad *pad) +{ + GClosure *closure; + GValue ret = { 0, }; + GValue args = { 0, }; + GstCaps *caps; + + g_value_init (&ret, GST_TYPE_CAPS); + g_value_init (&args, GST_TYPE_PAD); + g_value_set_object (&args, pad); + + closure = pad_private(pad)->getcaps_function; + + g_closure_invoke (closure, &ret, 1, &args, NULL); + + caps = g_value_dup_boxed (&ret); + g_value_unset (&ret); + g_value_unset (&args); + return caps; +} + +static PyObject* +_wrap_gst_pad_set_getcaps_function (PyGObject *self, + PyObject *args, + PyObject *kwargs) +{ + SET_PAD_CLOSURE (self, args, kwargs, getcaps_function) +} + +%% +override gst_pad_set_link_function kwargs + +static void EXCEPTION_HANDLER +handle_link_function_exception (GValue *ret, guint n, const GValue *params) +{ + g_value_set_enum (ret, GST_PAD_LINK_REFUSED); + PyErr_Clear (); +} + +static GstPadLinkReturn +call_link_function (GstPad *pad, GstPad *peer) +{ + GClosure *closure; + GValue ret = { 0, }; + GValue args[2] = { { 0, }, {0, } }; + GstPadLinkReturn i; + + g_value_init (&ret, GST_TYPE_PAD_LINK_RETURN); + g_value_init (&args[0], GST_TYPE_PAD); + g_value_init (&args[1], GST_TYPE_PAD); + g_value_set_object (&args[0], pad); + g_value_set_object (&args[1], peer); + + closure = pad_private(pad)->link_function; + + g_closure_invoke (closure, &ret, 2, args, NULL); + + i = g_value_get_enum (&ret); + g_value_unset (&ret); + g_value_unset (&args[0]); + g_value_unset (&args[1]); + return i; +} + +static PyObject* +_wrap_gst_pad_set_link_function (PyGObject *self, + PyObject *args, + PyObject *kwargs) +{ + SET_PAD_CLOSURE (self, args, kwargs, link_function) +} + +%% +override gst_pad_set_chain_function kwargs + +static void EXCEPTION_HANDLER +handle_chain_function_exception (GValue *ret, guint n, const GValue *params) +{ + GstElement *element = GST_ELEMENT (gst_object_get_parent (g_value_get_object (¶ms[0]))); + + if (!_pygst_element_check_error (element)) { + g_assert_not_reached (); /* only returns FALSE when there's no error */ + } +} + +static GstFlowReturn +call_chain_function(GstPad *pad, GstBuffer *buffer) +{ + GClosure *closure; + GValue ret = { 0, }; + GValue args[2] = { { 0, }, { 0, } }; + GstFlowReturn flow; + + g_value_init (&ret, GST_TYPE_FLOW_RETURN); + g_value_set_enum (&ret, GST_FLOW_ERROR); + g_value_init (&args[0], GST_TYPE_PAD); + g_value_init (&args[1], GST_TYPE_BUFFER); + + g_value_set_object (&args[0], pad); + gst_value_set_mini_object (&args[1], GST_MINI_OBJECT (buffer)); + closure = pad_private(pad)->chain_function; + + g_closure_invoke (closure, &ret, 2, args, NULL); + flow = g_value_get_enum (&ret); + + g_value_unset (&ret); + g_value_unset (&args[0]); + g_value_unset (&args[1]); + + /* a chain function takes over the ref of the buffer handed to it; + * so we should unref after calling the pythonic chain func */ + gst_buffer_unref (buffer); + return flow; +} + +static PyObject* +_wrap_gst_pad_set_chain_function(PyGObject *self, + PyObject *args, + PyObject *kwargs) +{ + SET_PAD_CLOSURE (self, args, kwargs, chain_function) +} + +%% +override gst_pad_set_event_function kwargs + +static void EXCEPTION_HANDLER +handle_event_function_exception (GValue *ret, guint n, const GValue *params) +{ + GstElement *element = GST_ELEMENT (gst_pad_get_parent (g_value_get_object (¶ms[0]))); + + if (!_pygst_element_check_error (element)) { + g_assert_not_reached (); /* only returns FALSE when there's no error */ + } +} + +static gboolean +call_event_function (GstPad *pad, GstEvent *event) +{ + GClosure *closure; + GValue ret = { 0, }; + GValue args[2] = { { 0, }, { 0, } }; + gboolean bool; + + g_value_init (&ret, G_TYPE_BOOLEAN); + g_value_set_boolean (&ret, FALSE); + g_value_init (&args[0], GST_TYPE_PAD); + g_value_init (&args[1], GST_TYPE_EVENT); + g_value_set_object (&args[0], pad); + gst_value_set_mini_object (&args[1], GST_MINI_OBJECT (event)); + closure = pad_private(pad)->event_function; + + g_closure_invoke (closure, &ret, 2, args, NULL); + + bool = g_value_get_boolean (&ret); + + g_value_unset (&ret); + g_value_unset (&args[0]); + g_value_unset (&args[1]); + return bool; +} + +static PyObject* +_wrap_gst_pad_set_event_function (PyGObject *self, + PyObject *args, + PyObject *kwargs) +{ + SET_PAD_CLOSURE (self, args, + kwargs, event_function) +} + +%% +override gst_pad_set_query_function kwargs + +static gboolean +pypad_copy_struct_members (GQuark field_id, const GValue * value, + GstStructure* to_structure) +{ + gst_structure_id_set_value (to_structure, field_id, value); + + return TRUE; +} + +static gboolean +call_query_function (GstPad *pad, GstQuery *query) +{ + PyGILState_STATE __py_state; + PyGObject *py_pad; + PyGstPadPrivate *priv; + + PyObject *py_ret; + PyObject *py_args; + gboolean ret = FALSE; + GstQuery *query_copy; + PyObject *py_query; + + /* Push our GIL state */ + __py_state = pyg_gil_state_ensure(); + + /* Get the python version of the pad */ + py_pad = (PyGObject *) pygobject_new((GObject*) (pad)); + if (!py_pad) { + if (PyErr_Occurred()) + PyErr_Print(); + goto beach; + } + /* Private data, where our callback should be stored */ + priv = py_pad_private(py_pad); + if (priv->query_function == NULL) { + /* FIXME: Generate an error message somewhere? */ + Py_DECREF(py_pad); + goto beach; + } + + /* Create our arguments tuple and populate */ + py_args = PyTuple_New(2); + + /* We copy the query into a new one so that it can have a refcount + * of exactly 1 and be owned by python */ + pyg_begin_allow_threads; + query_copy = gst_query_copy (query); + pyg_end_allow_threads; + py_query = pygstminiobject_new((GstMiniObject *)query_copy); + gst_query_unref (query_copy); + + PyTuple_SetItem(py_args, 0, (PyObject *) (py_pad)); + PyTuple_SetItem(py_args, 1, py_query); + + /* Perform the callback into python, then parse the result */ + py_ret = PyObject_CallObject(priv->query_function, py_args); + if (!py_ret) { + if (PyErr_Occurred()) + PyErr_Print(); + + Py_DECREF(py_args); + goto beach; + } + + ret = (py_ret == Py_True ? TRUE : FALSE); + + /* If the query succeeded, copy the result back into the original query. + * We still have a refcount to it, because we didn't unref the py_query + * wrapper yet. */ + if (ret) { + /* I feel ill violating the poor query like this, but it's the only + * way to transfer data from our copy back to the original query */ + GstStructure *from, *to; + + pyg_begin_allow_threads; + from = GST_QUERY (query_copy)->structure; + to = query->structure; + gst_structure_foreach (from, + (GstStructureForeachFunc) pypad_copy_struct_members, to); + pyg_end_allow_threads; + } + + Py_DECREF(py_args); + Py_DECREF(py_ret); +beach: + pyg_gil_state_release(__py_state); + + return ret; +} + +static PyObject* +_wrap_gst_pad_set_query_function (PyGObject *self, + PyObject *args, + PyObject *kwargs) +{ + static char *kwlist[] = { "query_function", NULL }; + PyObject *function; + GstPad *pad; + PyGstPadPrivate *priv; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O:GstPad.set_query_function", + kwlist, + &function)) { + return NULL; + } + + pad = (GstPad*)pygobject_get(self); + priv = py_pad_private(self); + + /* Allow setting query_function to None to clear it to NULL */ + if (function == Py_None) { + if (priv->query_function) { + Py_DECREF (priv->query_function); + priv->query_function = NULL; + } + gst_pad_set_query_function (pad, NULL); + goto out; + } + + if (!PyCallable_Check(function)) { + PyErr_SetString(PyExc_TypeError, "Passed query_function not callable"); + return NULL; + } + + if (priv->query_function) { + Py_DECREF (priv->query_function); + } + + Py_INCREF(function); + priv->query_function = function; + + gst_pad_set_query_function (pad, call_query_function); + +out: + Py_INCREF(Py_None); + return Py_None; +} + +%% +override gst_pad_set_setcaps_function kwargs + +static void EXCEPTION_HANDLER +handle_setcaps_function_exception (GValue *ret, guint n, const GValue *params) +{ + GstElement *element = GST_ELEMENT (gst_pad_get_parent (g_value_get_object (¶ms[0]))); + + if (!_pygst_element_check_error (element)) { + g_assert_not_reached (); /* only returns FALSE when there's no error */ + } +} + +static gboolean +call_setcaps_function (GstPad *pad, GstCaps *caps) +{ + GClosure *closure; + GValue ret = { 0, }; + GValue args[2] = { { 0, }, { 0, } }; + gboolean bool; + + g_value_init (&ret, G_TYPE_BOOLEAN); + g_value_set_boolean (&ret, FALSE); + g_value_init (&args[0], GST_TYPE_PAD); + g_value_init (&args[1], GST_TYPE_CAPS); + g_value_set_object (&args[0], pad); + gst_value_set_caps (&args[1], (const GstCaps*) caps); + closure = pad_private(pad)->setcaps_function; + + g_closure_invoke (closure, &ret, 2, args, NULL); + + bool = g_value_get_boolean (&ret); + + g_value_unset (&ret); + g_value_unset (&args[0]); + g_value_unset (&args[1]); + return bool; +} + +static PyObject* +_wrap_gst_pad_set_setcaps_function (PyGObject *self, + PyObject *args, + PyObject *kwargs) +{ + SET_PAD_CLOSURE (self, args, + kwargs, setcaps_function) +} +%% +override gst_pad_set_activate_function kwargs + +static void EXCEPTION_HANDLER +handle_activate_function_exception (GValue * ret, guint n, const GValue * params) +{ + GstElement *element = GST_ELEMENT (gst_pad_get_parent (g_value_get_object (¶ms[0]))); + + if (!_pygst_element_check_error (element)) { + g_assert_not_reached (); /* only returns FALSE when there's no error */ + } +} + +static gboolean +call_activate_function (GstPad * pad) +{ + GClosure * closure; + GValue ret = { 0, }; + GValue args[1] = { {0, }}; + gboolean bool; + + g_value_init (&ret, G_TYPE_BOOLEAN); + g_value_set_boolean (&ret, FALSE); + g_value_init(&args[0], GST_TYPE_PAD); + g_value_set_object (&args[0], pad); + closure = pad_private(pad)->activate_function; + + g_closure_invoke (closure, &ret, 1, args, NULL); + + bool = g_value_get_boolean (&ret); + + g_value_unset (&ret); + g_value_unset (&args[0]); + + return bool; +} + +static PyObject * +_wrap_gst_pad_set_activate_function (PyGObject *self, + PyObject *args, + PyObject *kwargs) +{ + SET_PAD_CLOSURE (self, args, kwargs, activate_function) +} +%% +override gst_pad_set_activatepull_function kwargs + +static void EXCEPTION_HANDLER +handle_activatepull_function_exception (GValue * ret, guint n, const GValue * params) +{ + GstElement *element = GST_ELEMENT (gst_pad_get_parent (g_value_get_object (¶ms[0]))); + + if (!_pygst_element_check_error (element)) { + g_assert_not_reached (); /* only returns FALSE when there's no error */ + } +} + +static gboolean +call_activatepull_function (GstPad * pad, gboolean active) +{ + GClosure * closure; + GValue ret = { 0, }; + GValue args[2] = { {0, }, {0, } }; + gboolean bool; + + g_value_init (&ret, G_TYPE_BOOLEAN); + g_value_set_boolean (&ret, FALSE); + g_value_init (&args[0], GST_TYPE_PAD); + g_value_set_object (&args[0], pad); + g_value_init (&args[1], G_TYPE_BOOLEAN); + g_value_set_boolean (&args[1], active); + closure = pad_private(pad)->activatepull_function; + + g_closure_invoke (closure, &ret, 2, args, NULL); + + bool = g_value_get_boolean (&ret); + + g_value_unset (&ret); + g_value_unset (&args[0]); + g_value_unset (&args[1]); + + return bool; +} + +static PyObject * +_wrap_gst_pad_set_activatepull_function (PyGObject *self, + PyObject *args, + PyObject *kwargs) +{ + SET_PAD_CLOSURE (self, args, kwargs, activatepull_function); +} +%% +override gst_pad_set_activatepush_function kwargs + +static void EXCEPTION_HANDLER +handle_activatepush_function_exception (GValue * ret, guint n, const GValue * params) +{ + GstElement *element = GST_ELEMENT (gst_pad_get_parent (g_value_get_object (¶ms[0]))); + + if (!_pygst_element_check_error (element)) { + g_assert_not_reached (); /* only returns FALSE when there's no error */ + } +} + +static gboolean +call_activatepush_function (GstPad * pad, gboolean active) +{ + GClosure * closure; + GValue ret = { 0, }; + GValue args[2] = { {0, }, {0, }}; + gboolean bool; + + g_value_init (&ret, G_TYPE_BOOLEAN); + g_value_set_boolean (&ret, FALSE); + g_value_init (&args[0], GST_TYPE_PAD); + g_value_set_object (&args[0], pad); + g_value_init (&args[1], G_TYPE_BOOLEAN); + g_value_set_boolean (&args[1], active); + closure = pad_private(pad)->activatepush_function; + + g_closure_invoke (closure, &ret, 2, args, NULL); + + bool = g_value_get_boolean (&ret); + + g_value_unset (&ret); + g_value_unset (&args[0]); + g_value_unset (&args[1]); + + return bool; +} + +static PyObject * +_wrap_gst_pad_set_activatepush_function (PyGObject *self, + PyObject *args, + PyObject *kwargs) +{ + SET_PAD_CLOSURE (self, args, kwargs, activatepush_function); +} +%% +override-slot GstPad.tp_repr +static PyObject * +_wrap_gst_pad_tp_repr (PyGObject *self) +{ + char *buf; + PyObject *retval; + GstPad *pad; + GstElement *parent; + gchar *padname = NULL; + gchar *elementname = NULL; + + pad = GST_PAD(self->obj); + + pyg_begin_allow_threads; + padname = gst_pad_get_name (pad); + + parent = GST_ELEMENT (gst_pad_get_parent (pad)); + if (parent) + elementname = gst_element_get_name (parent); + + buf = g_strdup_printf ("", + parent ? elementname : "---", + padname, (long) self->obj); + + g_free(padname); + + if (parent) { + gst_object_unref (parent); + g_free(elementname); + } + pyg_end_allow_threads; + + retval = PyString_FromString(buf); + g_free(buf); + + return retval; +} + +%% +override gst_pad_query kwargs +static PyObject * +_wrap_gst_pad_query(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "query", NULL }; + int ret; + PyGstMiniObject *query; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!:GstPad.query", kwlist, &PyGstQuery_Type, &query)) + return NULL; + + pyg_begin_allow_threads; + ret = gst_pad_query(GST_PAD(self->obj), GST_QUERY (query->obj)); + pyg_end_allow_threads; + + return PyBool_FromLong(ret); +} +%% +override gst_pad_convert kwargs +static PyObject * +_wrap_gst_pad_convert(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "src_format", "src_value", + "dest_format", NULL }; + GstFormat src_format, dest_format; + PyObject *src_value_obj; + gint64 src_value, dest_value = 0; + gboolean ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "iOi:GstPad.convert", kwlist, + &src_format, &src_value_obj, + &dest_format)) + return NULL; + + src_value = PyLong_AsLongLong(src_value_obj); + + ret = gst_pad_convert(GST_PAD(self->obj), src_format, src_value, + &dest_format, &dest_value); + return PyLong_FromLongLong(dest_value); +} +%% +override gst_pad_link kwargs +static PyObject * +_wrap_gst_pad_link(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "sinkpad", NULL }; + PyGObject *sinkpad; + int ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!:GstPad.link", kwlist, + &PyGstPad_Type, &sinkpad)) + return NULL; + pyg_begin_allow_threads; + ret = gst_pad_link(GST_PAD(self->obj), GST_PAD(sinkpad->obj)); + pyg_end_allow_threads; + if (ret) { + PyObject *exc_val = pyg_enum_from_gtype(GST_TYPE_PAD_LINK_RETURN, ret); + PyErr_SetObject(PyGstExc_LinkError, exc_val); + Py_DECREF(exc_val); + return NULL; + } + return PyBool_FromLong(ret); +} + +%% +override gst_pad_link_filtered kwargs +static PyObject * +_wrap_gst_pad_link_filtered(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "sinkpad", "filtercaps", NULL }; + PyGObject *sinkpad; + PyObject *py_filtercaps; + int ret; + GstCaps *filtercaps = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O:GstPad.link_filtered", + kwlist, &PyGstPad_Type, &sinkpad, + &py_filtercaps)) + return NULL; + if (pyg_boxed_check(py_filtercaps, GST_TYPE_CAPS)) + filtercaps = pyg_boxed_get(py_filtercaps, GstCaps); + else { + PyErr_SetString(PyExc_TypeError, "filtercaps should be a GstCaps"); + return NULL; + } + ret = gst_pad_link_filtered(GST_PAD(self->obj), + GST_PAD(sinkpad->obj), + filtercaps); + if (ret) { + PyObject *exc_val = pyg_enum_from_gtype(GST_TYPE_PAD_LINK_RETURN, ret); + PyErr_SetObject(PyGstExc_LinkError, exc_val); + Py_DECREF(exc_val); + return NULL; + } + return PyBool_FromLong(ret); +} +%% +override gst_pad_get_pad_template_caps noargs +static PyObject * +_wrap_gst_pad_get_pad_template_caps(PyGObject *self) +{ + GstCaps *ret = (GstCaps*)gst_pad_get_pad_template_caps(GST_PAD(self->obj)); + return pyg_boxed_new(GST_TYPE_CAPS, ret, TRUE, TRUE); +} +%% +override gst_pad_template_get_caps noargs +static PyObject * +_wrap_gst_pad_template_get_caps(PyGObject *self) +{ + GstCaps *ret = (GstCaps*)gst_pad_template_get_caps(GST_PAD_TEMPLATE(self->obj)); + return pyg_boxed_new(GST_TYPE_CAPS, ret, TRUE, TRUE); +} +%% +override gst_pad_template_get_caps_by_name kwargs +static PyObject * +_wrap_gst_pad_template_get_caps_by_name(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "name", NULL }; + char *name; + GstCaps *ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s:GstPadTemplate.get_caps_by_name", kwlist, &name)) + return NULL; + ret = (GstCaps*)gst_pad_template_get_caps_by_name(GST_PAD_TEMPLATE(self->obj), name); + /* pyg_boxed_new handles NULL checking */ + return pyg_boxed_new(GST_TYPE_CAPS, ret, TRUE, TRUE); +} +%% +new-constructor GST_TYPE_PAD +%% +override gst_pad_new kwargs +static int +_wrap_gst_pad_new(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "name", "direction", NULL }; + static char *kwlist2[] = { "template", "name", NULL }; + PyGObject *templ; + char *name = NULL; + PyObject *py_direction = NULL; + GstPadDirection direction; + + if (PyArg_ParseTupleAndKeywords (args, kwargs, "zO:GstPad.__init__", + kwlist, &name, &py_direction)) { + + GST_LOG ("gst.Pad.__init__: using gst_pad_new"); + if (pyg_enum_get_value (GST_TYPE_PAD_DIRECTION, py_direction, + (gint *) &direction)) { + GST_LOG ("gst.Pad.__init__: direction is not valid"); + return -1; + } + + self->obj = (GObject *) gst_pad_new (name, direction); + } else { + PyErr_Clear (); + + GST_LOG ("gst.Pad.__init__: using gst_pad_new_from_template"); + if (PyArg_ParseTupleAndKeywords (args, kwargs, "O!|s:GstPad.__init__", + kwlist2, &PyGstPadTemplate_Type, + &templ, &name)) { + if (name == NULL) + name = GST_PAD_TEMPLATE_NAME_TEMPLATE (GST_PAD_TEMPLATE ( + templ->obj)); + self->obj = (GObject *) gst_pad_new_from_template ( + GST_PAD_TEMPLATE (templ->obj), name); + } + } + if (!self->obj) { + PyErr_SetString (PyExc_RuntimeError, "could not create GstPad object"); + return -1; + } + pygobject_register_wrapper ((PyObject *)self); + return 0; +} +%% +override gst_pad_add_data_probe args + +static void +data_probe_destroy_data (gpointer data) +{ + PyGILState_STATE state; + PyObject *py_data = (PyObject *) data; + + state = pyg_gil_state_ensure(); + + Py_DECREF (py_data); + + pyg_gil_state_release(state); +} + +static gboolean +data_probe_callback_marshal(GstPad *pad, GstMiniObject *obj, gpointer user_data) +{ + PyGILState_STATE state; + PyObject *callback, *args; + PyObject *pret; + PyObject *py_user_data; + gboolean ret; + + g_return_val_if_fail(user_data != NULL, TRUE); + + state = pyg_gil_state_ensure(); + + py_user_data = (PyObject *) user_data; + + callback = PyTuple_GetItem(py_user_data, 0); + args = Py_BuildValue("(NN)", + pygobject_new(G_OBJECT(pad)), + pygstminiobject_new(GST_MINI_OBJECT(obj))); + + { + PyObject *tmp = args; + args = PySequence_Concat(tmp, PyTuple_GetItem(py_user_data, 1)); + Py_DECREF (tmp); + } + + pret = PyObject_CallObject(callback, args); + Py_DECREF(args); + + if (!pret) { + PyErr_Print(); + ret = TRUE; + } else { + ret = PyObject_IsTrue(pret)? TRUE : FALSE; + Py_DECREF(pret); + } + + pyg_gil_state_release(state); + + return ret; +} + +static PyObject * +_wrap_gst_pad_add_data_probe(PyGObject *self, PyObject *args) +{ + PyObject *callback, *cbargs = NULL, *data; + PyObject *pret; + gulong ret; + gint len; + + len = PyTuple_Size(args); + if (len < 1) { + PyErr_SetString(PyExc_TypeError, "Requires at least 1 arg"); + return NULL; + } + + callback = PyTuple_GetItem(args, 0); + if (!PyCallable_Check(callback)) { + PyErr_SetString(PyExc_TypeError, "callback is not callable"); + return NULL; + } + cbargs = PySequence_GetSlice(args, 1, len); + if (cbargs == NULL) + return NULL; + data = Py_BuildValue("(ON)", callback, cbargs); + if (data == NULL) + return NULL; + + pyg_begin_allow_threads; + ret = gst_pad_add_data_probe_full(GST_PAD(self->obj), + (GCallback) data_probe_callback_marshal, data, + data_probe_destroy_data); + pyg_end_allow_threads; + + pret = PyLong_FromUnsignedLong(ret); + Py_INCREF(pret); + + return pret; +} +%% +override gst_pad_add_event_probe args +static PyObject * +_wrap_gst_pad_add_event_probe(PyGObject *self, PyObject *args) +{ + PyObject *callback, *cbargs = NULL, *data; + PyObject *pret; + gulong ret; + gint len; + + len = PyTuple_Size(args); + if (len < 1) { + PyErr_SetString(PyExc_TypeError, "Requires at least 1 arg"); + return NULL; + } + + callback = PyTuple_GetItem(args, 0); + if (!PyCallable_Check(callback)) { + PyErr_SetString(PyExc_TypeError, "callback is not callable"); + return NULL; + } + cbargs = PySequence_GetSlice(args, 1, len); + if (cbargs == NULL) + return NULL; + data = Py_BuildValue("(ON)", callback, cbargs); + if (data == NULL) + return NULL; + + pyg_begin_allow_threads; + ret = gst_pad_add_event_probe_full(GST_PAD(self->obj), + (GCallback) data_probe_callback_marshal, data, + data_probe_destroy_data); + pyg_end_allow_threads; + + pret = PyLong_FromUnsignedLong(ret); + Py_INCREF(pret); + + return pret; +} +%% +override gst_pad_add_buffer_probe args + +static PyObject * +_wrap_gst_pad_add_buffer_probe(PyGObject *self, PyObject *args) +{ + PyObject *callback, *cbargs = NULL, *data; + PyObject *pret; + gulong ret; + gint len; + + len = PyTuple_Size(args); + if (len < 1) { + PyErr_SetString(PyExc_TypeError, "Requires at least 1 arg"); + return NULL; + } + + callback = PyTuple_GetItem(args, 0); + if (!PyCallable_Check(callback)) { + PyErr_SetString(PyExc_TypeError, "callback is not callable"); + return NULL; + } + cbargs = PySequence_GetSlice(args, 1, len); + if (cbargs == NULL) + return NULL; + data = Py_BuildValue("(ON)", callback, cbargs); + if (data == NULL) + return NULL; + + pyg_begin_allow_threads; + ret = gst_pad_add_buffer_probe_full(GST_PAD(self->obj), + (GCallback) data_probe_callback_marshal, data, + data_probe_destroy_data); + pyg_end_allow_threads; + + pret = PyLong_FromUnsignedLong(ret); + Py_INCREF(pret); + + return pret; +} +%% +override-slot GstPadTemplate.tp_getattr +#define IS_ATTR(name) (strcmp (name, attr) == 0) +static PyObject * +_wrap_gst_pad_template_tp_getattr(PyObject *self, char *attr) +{ + GstPadTemplate *templ = GST_PAD_TEMPLATE (pygobject_get (self)); + + if (IS_ATTR ("__members__")) { + return Py_BuildValue("[ssss]", "name_template", "direction", "presence", "caps" ); + } else if (IS_ATTR ("name_template")) { + return PyString_FromString (GST_PAD_TEMPLATE_NAME_TEMPLATE(templ)); + } else if (IS_ATTR ("direction")) { + return pyg_enum_from_gtype(GST_TYPE_PAD_DIRECTION, GST_PAD_TEMPLATE_DIRECTION(templ)); + } else if (IS_ATTR ("presence")) { + return pyg_enum_from_gtype(GST_TYPE_PAD_PRESENCE, GST_PAD_TEMPLATE_PRESENCE(templ)); + } else if (IS_ATTR ("caps")) { + return pyg_boxed_new (GST_TYPE_CAPS, GST_PAD_TEMPLATE_CAPS(templ), TRUE, TRUE); + } + return Py_FindMethod((PyMethodDef*) _PyGstPadTemplate_methods, self, attr); +} +%% +override gst_pad_query_position args +static PyObject * +_wrap_gst_pad_query_position (PyGObject *self, PyObject *args) +{ + gint64 cur; + gint format; + PyObject *pformat; + PyObject *ret; + + pformat = (PyObject*)PyTuple_GetItem(args, 0); + if (pyg_enum_get_value (GST_TYPE_FORMAT, pformat, &format)) { + PyErr_SetString(PyExc_TypeError, "argument should be a GstFormat"); + return NULL; + } + + if ((gst_pad_query_position(GST_PAD (self->obj), (GstFormat*) &format, &cur))) { + ret = Py_BuildValue("(LO)", cur, + pyg_enum_from_gtype (GST_TYPE_FORMAT, format)); + } else { + Py_INCREF(Py_None); + ret = Py_None; + } + + return ret; +} +%% +override gst_pad_query_duration args +static PyObject * +_wrap_gst_pad_query_duration (PyGObject *self, PyObject *args) +{ + gint64 cur; + gint format; + PyObject *pformat; + PyObject *ret; + + pformat = (PyObject*)PyTuple_GetItem(args, 0); + if (pyg_enum_get_value (GST_TYPE_FORMAT, pformat, &format)) { + PyErr_SetString(PyExc_TypeError, "argument should be a GstFormat"); + return NULL; + } + + if ((gst_pad_query_duration(GST_PAD (self->obj), (GstFormat*) &format, &cur))) { + ret = Py_BuildValue("(LO)", cur, + pyg_enum_from_gtype (GST_TYPE_FORMAT, format)); + } else { + Py_INCREF(Py_None); + ret = Py_None; + } + + return ret; +} +%% +override gst_pad_query_convert kwargs +static PyObject * +_wrap_gst_pad_query_convert (PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "fromformat", "fromvalue", "destformat", NULL }; + PyObject *pfromformat, *pdestformat; + GstFormat srcformat, destformat; + gint64 fromval, dstval; + + /* Input : src_format, src_val, dst_format */ + /* Returns : dst_format, dst_val OR None */ + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "0L0:GstPad.query_convert", + kwlist, &pfromformat, &fromval, &pdestformat)) + return NULL; + if (pyg_enum_get_value(GST_TYPE_FORMAT, pfromformat, (gint *) &srcformat)) { + PyErr_SetString(PyExc_TypeError, "argument should be a GstFormat"); + return NULL; + } + if (pyg_enum_get_value(GST_TYPE_FORMAT, pdestformat, (gint *) &destformat)) { + PyErr_SetString(PyExc_TypeError, "argument should be a GstFormat"); + return NULL; + } + + if (!(gst_pad_query_convert (GST_PAD(self->obj), + srcformat, fromval, + &destformat, &dstval))) { + Py_INCREF(Py_None); + return Py_None; + } + + return Py_BuildValue("(OL)", + pyg_enum_from_gtype (GST_TYPE_FORMAT, destformat), + dstval); +} +%% +override gst_pad_alloc_buffer kwargs +static PyObject * +_wrap_gst_pad_alloc_buffer (PyGObject *self, PyObject * args, PyObject *kwargs) +{ + static char *kwlist[] = {"offset", "size", "caps", NULL}; + guint64 offset; + gint size; + PyObject *pcaps; + GstCaps *caps; + PyObject *ret; + GstBuffer *buf; + GstFlowReturn res; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "KiO:GstPad.alloc_buffer", + kwlist, &offset, &size, &pcaps)) + return NULL; + caps = pyg_boxed_get(pcaps, GstCaps); + res = gst_pad_alloc_buffer (GST_PAD(pygobject_get(self)), + offset, size, caps, &buf); + ret = PyList_New(2); + PyList_SetItem(ret, 0, pyg_enum_from_gtype(GST_TYPE_FLOW_RETURN, res)); + if (res != GST_FLOW_OK) { + PyList_SetItem(ret, 1, Py_None); + } else { + PyList_SetItem(ret, 1, pygstminiobject_new(GST_MINI_OBJECT(buf))); + /* Bring down the reference count, since we are meant to be the only + * one holding a reference to the newly created buffer. */ + gst_buffer_unref (buf); + } + return ret; +} +%% +override gst_pad_alloc_buffer_and_set_caps kwargs +static PyObject * +_wrap_gst_pad_alloc_buffer_and_set_caps (PyGObject *self, PyObject * args, PyObject *kwargs) +{ + static char *kwlist[] = {"offset", "size", "caps", NULL}; + guint64 offset; + gint size; + PyObject *pcaps; + GstCaps *caps; + PyObject *ret; + GstBuffer *buf; + GstFlowReturn res; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "KiO:GstPad.alloc_buffer_and_set_caps", + kwlist, &offset, &size, &pcaps)) + return NULL; + caps = pyg_boxed_get(pcaps, GstCaps); + res = gst_pad_alloc_buffer_and_set_caps (GST_PAD(pygobject_get(self)), + offset, size, caps, &buf); + ret = PyList_New(2); + PyList_SetItem(ret, 0, pyg_enum_from_gtype(GST_TYPE_FLOW_RETURN, res)); + if (res != GST_FLOW_OK) { + PyList_SetItem(ret, 1, Py_None); + } else { + PyList_SetItem(ret, 1, pygstminiobject_new(GST_MINI_OBJECT(buf))); + /* Bring down the reference count, since we are meant to be the only + * one holding a reference to the newly created buffer. */ + gst_buffer_unref (buf); + } + return ret; +} +%% +override gst_pad_pull_range kwargs +static PyObject * +_wrap_gst_pad_pull_range (PyGObject *self, PyObject * args, PyObject *kwargs) +{ + static char *kwlist[] = {"offset", "size", NULL}; + guint64 offset; + gint size; + PyObject *ret; + GstBuffer *buf; + GstFlowReturn res; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "Ki:GstPad.pull_range", + kwlist, &offset, &size)) + return NULL; + res = gst_pad_pull_range (GST_PAD(pygobject_get(self)), + offset, size, &buf); + ret = PyList_New(2); + PyList_SetItem(ret, 0, pyg_enum_from_gtype(GST_TYPE_FLOW_RETURN, res)); + if (res != GST_FLOW_OK) { + PyList_SetItem(ret, 1, Py_None); + } else { + PyList_SetItem(ret, 1, pygstminiobject_new(GST_MINI_OBJECT(buf))); + /* Bring down the reference count, since we are meant to be the only + * one holding a reference to the newly created buffer. */ + gst_buffer_unref (buf); + } + return ret; +} +%% +override gst_pad_get_range kwargs +static PyObject * +_wrap_gst_pad_get_range (PyGObject *self, PyObject * args, PyObject *kwargs) +{ + static char *kwlist[] = {"offset", "size", NULL}; + guint64 offset; + gint size; + PyObject *ret; + GstBuffer *buf; + GstFlowReturn res; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "Ki:GstPad.get_range", + kwlist, &offset, &size)) + return NULL; + res = gst_pad_get_range (GST_PAD(pygobject_get(self)), + offset, size, &buf); + ret = PyList_New(2); + PyList_SetItem(ret, 0, pyg_enum_from_gtype(GST_TYPE_FLOW_RETURN, res)); + if (res != GST_FLOW_OK) { + PyList_SetItem(ret, 1, Py_None); + } else { + PyList_SetItem(ret, 1, pygstminiobject_new(GST_MINI_OBJECT(buf))); + /* Bring down the reference count, since we are meant to be the only + * one holding a reference to the newly created buffer. */ + gst_buffer_unref (buf); + } + return ret; +} +%% +override gst_pad_get_internal_links noargs +static PyObject * +_wrap_gst_pad_get_internal_links (PyGObject * self) +{ + PyObject *ret; + GList *lst, *tmp; + gint i; + + lst = gst_pad_get_internal_links (GST_PAD (pygobject_get(self))); + + ret = PyList_New(g_list_length(lst)); + for (tmp = lst, i = 0 ; tmp; tmp = g_list_next(tmp), ++i) { + PyList_SetItem(ret, i, pygobject_new(G_OBJECT(tmp->data))); + } + g_list_free(lst); + return ret; +} +%% +override gst_pad_get_internal_links_default noargs +static PyObject * +_wrap_gst_pad_get_internal_links_default (PyGObject * self) +{ + PyObject *ret; + GList *lst, *tmp; + gint i; + + lst = gst_pad_get_internal_links_default (GST_PAD (pygobject_get(self))); + + ret = PyList_New(g_list_length(lst)); + for (tmp = lst, i = 0 ; tmp; tmp = g_list_next(tmp), ++i) { + PyList_SetItem(ret, i, pygobject_new(G_OBJECT(tmp->data))); + } + g_list_free(lst); + return ret; +} +%% +override gst_pad_get_query_types noargs +static PyObject * +_wrap_gst_pad_get_query_types (PyGObject *self) +{ + PyObject *ret; + PyObject *item; + int i; + GstQueryType *tab; + + tab = (GstQueryType*) gst_pad_get_query_types(GST_PAD(self->obj)); + if (tab == NULL) { + Py_INCREF(Py_None); + return Py_None; + } + + ret = PyList_New(0); + for (i = 0; tab[i] != 0; i++) { + item = pyg_enum_from_gtype (GST_TYPE_QUERY_TYPE, tab[i]); + PyList_Append(ret, item); + Py_XDECREF(item); + } + + return ret; +} +%% +override gst_pad_get_query_types_default noargs +static PyObject * +_wrap_gst_pad_get_query_types_default (PyGObject *self) +{ + PyObject *ret; + PyObject *item; + int i; + GstQueryType *tab; + + tab = (GstQueryType*) gst_pad_get_query_types_default(GST_PAD(self->obj)); + if (tab == NULL) { + Py_INCREF(Py_None); + return Py_None; + } + + ret = PyList_New(0); + for (i = 0; tab[i] != 0; i++) { + item = pyg_enum_from_gtype (GST_TYPE_QUERY_TYPE, tab[i]); + PyList_Append(ret, item); + Py_XDECREF(item); + } + + return ret; +} +%% +override gst_pad_set_blocked_async args + +#if HAVE_SET_BLOCKED_ASYNC_FULL +static void +pad_block_destroy_data (gpointer data) +{ + PyGILState_STATE state; + PyObject *py_data = (PyObject *) data; + + state = pyg_gil_state_ensure(); + + Py_DECREF (py_data); + + pyg_gil_state_release(state); +} +#endif + +static void +pad_block_callback_marshal(GstPad *pad, gboolean blocked, gpointer user_data) +{ + PyGILState_STATE state; + PyObject *callback, *args; + PyObject *ret; + PyObject *py_user_data; + + g_return_if_fail(user_data != NULL); + + state = pyg_gil_state_ensure(); + + py_user_data = (PyObject *) user_data; + + callback = PyTuple_GetItem(py_user_data, 0); + args = Py_BuildValue("(NO)", + pygobject_new(G_OBJECT(pad)), + blocked ? Py_True : Py_False); + + { + PyObject *tmp = args; + args = PySequence_Concat(tmp, PyTuple_GetItem(py_user_data, 1)); + Py_DECREF (tmp); + } + + ret = PyObject_CallObject(callback, args); + Py_DECREF(args); + + if (!ret) + PyErr_Print(); + else + Py_DECREF(ret); + + pyg_gil_state_release(state); +} + +static PyObject * +_wrap_gst_pad_set_blocked_async (PyGObject *self, PyObject *args) +{ + PyObject *callback, *cbargs = NULL, *data; + PyObject *pblocked, *pret; + gboolean blocked; + gboolean ret; + gint len; + + len = PyTuple_Size(args); + + if (len < 2) { + PyErr_SetString(PyExc_TypeError, "Requires at least 2 arg"); + return NULL; + } + pblocked = PyTuple_GetItem(args, 0); + blocked = PyObject_IsTrue(pblocked); + + callback = PyTuple_GetItem(args, 1); + if (!PyCallable_Check(callback)) { + PyErr_SetString(PyExc_TypeError, "callback is not callable"); + return NULL; + } + cbargs = PySequence_GetSlice(args, 2, len); + if (cbargs == NULL) + return NULL; + data = Py_BuildValue("(ON)", callback, cbargs); + if (data == NULL) + return NULL; + pyg_begin_allow_threads; +#if HAVE_SET_BLOCKED_ASYNC_FULL + ret = gst_pad_set_blocked_async_full (GST_PAD (self->obj), blocked, + (GstPadBlockCallback) pad_block_callback_marshal, data, + pad_block_destroy_data); +#else + ret = gst_pad_set_blocked_async (GST_PAD (self->obj), blocked, + (GstPadBlockCallback) pad_block_callback_marshal, data); +#endif + pyg_end_allow_threads; + if (ret) + pret = Py_True; + else + pret = Py_False; + Py_INCREF(pret); + + return pret; +} +%% +override gst_pad_set_caps kwargs +static PyObject * +_wrap_gst_pad_set_caps(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "caps", NULL }; + PyObject *py_caps; + int ret; + GstCaps *caps; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:GstPad.set_caps", kwlist, &py_caps)) + return NULL; + if (py_caps == Py_None) { + caps = NULL; + } else { + caps = pygst_caps_from_pyobject (py_caps, NULL); + if (PyErr_Occurred()) + return NULL; + } + pyg_begin_allow_threads; + ret = gst_pad_set_caps(GST_PAD(self->obj), caps); + if (ret && caps) + gst_caps_unref (caps); + pyg_end_allow_threads; + return PyBool_FromLong(ret); + +} +%% +override gst_pad_query_peer_position args +static PyObject * +_wrap_gst_pad_query_peer_position (PyGObject *self, PyObject *args) +{ + gint64 cur; + gint format; + PyObject *pformat; + PyObject *ret; + + pformat = (PyObject*)PyTuple_GetItem(args, 0); + if (pyg_enum_get_value (GST_TYPE_FORMAT, pformat, &format)) { + PyErr_SetString(PyExc_TypeError, "argument should be a GstFormat"); + return NULL; + } + + if ((gst_pad_query_peer_position(GST_PAD (self->obj), (GstFormat*) &format, &cur))) { + ret = PyList_New(2); + PyList_SetItem(ret, 0, PyLong_FromLongLong(cur)); + PyList_SetItem(ret, 1, pyg_enum_from_gtype (GST_TYPE_FORMAT, format )); + } else { + Py_INCREF(Py_None); + ret = Py_None; + } + + return ret; +} +%% +override gst_pad_query_peer_duration args +static PyObject * +_wrap_gst_pad_query_peer_duration (PyGObject *self, PyObject *args) +{ + gint64 cur; + gint format; + PyObject *pformat; + PyObject *ret; + + pformat = (PyObject*)PyTuple_GetItem(args, 0); + if (pyg_enum_get_value (GST_TYPE_FORMAT, pformat, &format)) { + PyErr_SetString(PyExc_TypeError, "argument should be a GstFormat"); + return NULL; + } + + if ((gst_pad_query_peer_duration(GST_PAD (self->obj), (GstFormat*) &format, &cur))) { + ret = PyList_New(2); + PyList_SetItem(ret, 0, PyLong_FromLongLong(cur)); + PyList_SetItem(ret, 1, pyg_enum_from_gtype (GST_TYPE_FORMAT, format )); + } else { + Py_INCREF(Py_None); + ret = Py_None; + } + + return ret; +} +%% +override gst_pad_query_peer_convert kwargs +static PyObject * +_wrap_gst_pad_query_peer_convert (PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "fromformat", "fromvalue", "destformat", NULL }; + PyObject *pfromformat, *pdestformat; + GstFormat srcformat, destformat; + gint64 fromval, dstval; + PyObject *ret; + + /* Input : src_format, src_val, dst_format */ + /* Returns : dst_format, dst_val OR None */ + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "0L0:GstPad.query_peer_convert", + kwlist, &pfromformat, &fromval, &pdestformat)) + return NULL; + if (pyg_enum_get_value(GST_TYPE_FORMAT, pfromformat, (gint *) &srcformat)) { + PyErr_SetString(PyExc_TypeError, "argument should be a GstFormat"); + return NULL; + } + if (pyg_enum_get_value(GST_TYPE_FORMAT, pdestformat, (gint *) &destformat)) { + PyErr_SetString(PyExc_TypeError, "argument should be a GstFormat"); + return NULL; + } + + if (!(gst_pad_query_peer_convert (GST_PAD(self->obj), + srcformat, fromval, + &destformat, &dstval))) { + Py_INCREF(Py_None); + return Py_None; + } + + ret = PyList_New(2); + PyList_SetItem(ret, 0, pyg_enum_from_gtype (GST_TYPE_FORMAT, destformat)); + PyList_SetItem(ret, 1, PyLong_FromLongLong(dstval)); + + return ret; +} +%% +override-attr GstStaticPadTemplate.static_caps +static PyObject * +_wrap_gst_static_pad_template__get_static_caps(PyObject *self, void *closure) +{ + GstStaticPadTemplate *templ; + + + templ = pyg_pointer_get(self, GstStaticPadTemplate); + return pyg_pointer_new(GST_TYPE_STATIC_CAPS, &(templ->static_caps)); +} +%% +override gst_pad_start_task args +static void +pad_task_handler(void *data) { + PyGILState_STATE state; + PyObject *callback, *args = NULL; + PyObject *py_user_data; + + if (data == NULL) + return; + + state = pyg_gil_state_ensure(); + py_user_data = (PyObject*) data; + + callback = PyTuple_GetItem(py_user_data, 0); + if (!(PyCallable_Check(callback))) { + PyErr_Print(); + goto beach; + } + if (!(args = PyTuple_GetSlice(py_user_data, 1, PyTuple_Size(py_user_data)))) { + PyErr_Print(); + goto beach; + } + + if (!(PyTuple_Check(args))) { + PyErr_Print(); + goto beach; + } + + PyObject_CallObject(callback, args); + + if(PyErr_Occurred()) + PyErr_Print(); + + Py_DECREF(args); + + beach: + pyg_gil_state_release(state); +} + +static PyObject * +_wrap_gst_pad_start_task(PyGObject *self, PyObject *args) +{ + PyObject *callback, *data, *cbargs, *py_ret; + gboolean ret; + + /* 1st argument must be a callable */ + if (PyTuple_Size(args) < 1) { + PyErr_SetString(PyExc_TypeError, "gst.Pad.start_task() requires at least 1 argument"); + return NULL; + } + + callback = PySequence_GetItem(args, 0); + if (!PyCallable_Check(callback)) { + PyErr_SetString(PyExc_TypeError, "callback must be a function or method"); + Py_DECREF(callback); + return NULL; + } + + if (!(cbargs = PySequence_GetSlice(args, 1, PyTuple_Size(args)))) { + Py_DECREF(callback); + return NULL; + } + + if (!(data = Py_BuildValue("(ON)", callback, cbargs))) { + Py_DECREF(callback); + Py_DECREF(cbargs); + return NULL; + } + + pyg_begin_allow_threads; + ret = gst_pad_start_task(GST_PAD(self->obj), (GstTaskFunction) pad_task_handler, data); + pyg_end_allow_threads; + + if (ret == TRUE) + py_ret = Py_True; + else + py_ret = Py_False; + + Py_INCREF(py_ret); + return py_ret; +} +%% +override gst_static_pad_template_get_caps noargs +static PyObject * +_wrap_gst_static_pad_template_get_caps(PyObject *self) +{ + GstCaps *ret; + + ret = gst_static_pad_template_get_caps(pyg_pointer_get(self, GstStaticPadTemplate)); + /* We take a copy of the caps so they don't disappear */ + ret = gst_caps_copy(ret); + return pyg_boxed_new (GST_TYPE_CAPS, ret, FALSE, TRUE); +} diff --git a/gst/gstquery.override b/gst/gstquery.override new file mode 100644 index 0000000..9435eee --- /dev/null +++ b/gst/gstquery.override @@ -0,0 +1,324 @@ +/* -*- Mode: C; ; c-file-style: "python" -*- */ +/* gst-python + * Copyright (C) 2005 Edward Hervey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Johan Dahlin + */ +%% +ignore + gst_query_set_formatsv +%% +override gst_query_parse_position noargs +static PyObject * +_wrap_gst_query_parse_position (PyGstMiniObject *self) +{ + GstFormat format; + gint64 cur; + + if (GST_QUERY_TYPE(self->obj) != GST_QUERY_POSITION) { + PyErr_SetString(PyExc_TypeError, "Query is not a 'Position' query"); + return NULL; + } + + gst_query_parse_position (GST_QUERY(self->obj), &format, &cur); + + return Py_BuildValue("(OL)", + pyg_enum_from_gtype (GST_TYPE_FORMAT, format), + cur); +} +%% +override gst_query_parse_duration noargs +static PyObject * +_wrap_gst_query_parse_duration (PyGstMiniObject *self) +{ + GstFormat format; + gint64 cur; + + if (GST_QUERY_TYPE(self->obj) != GST_QUERY_DURATION) { + PyErr_SetString(PyExc_TypeError, "Query is not a 'Duration' query"); + return NULL; + } + + gst_query_parse_duration (GST_QUERY(self->obj), &format, &cur); + + return Py_BuildValue("(OL)", + pyg_enum_from_gtype (GST_TYPE_FORMAT, format), + cur); +} +%% +override gst_query_parse_convert noargs +static PyObject * +_wrap_gst_query_parse_convert (PyGstMiniObject *self) +{ + GstFormat srcformat, destformat; + gint64 srcvalue, destvalue; + + if (GST_QUERY_TYPE(self->obj) != GST_QUERY_CONVERT) { + PyErr_SetString(PyExc_TypeError, "Query is not a 'Convert' query"); + return NULL; + } + + gst_query_parse_convert (GST_QUERY(self->obj), + &srcformat, &srcvalue, + &destformat, &destvalue); + + return Py_BuildValue("(OLOL)", + pyg_enum_from_gtype(GST_TYPE_FORMAT, srcformat), + srcvalue, + pyg_enum_from_gtype(GST_TYPE_FORMAT, destformat), + destvalue); +} +%% +override gst_query_parse_segment noargs +static PyObject * +_wrap_gst_query_parse_segment (PyGstMiniObject *self) +{ + gdouble rate; + GstFormat format; + gint64 start_value; + gint64 stop_value; + + if (GST_QUERY_TYPE(self->obj) != GST_QUERY_SEGMENT) { + PyErr_SetString(PyExc_TypeError, "Query is not a 'Segment' query"); + return NULL; + } + + gst_query_parse_segment (GST_QUERY(self->obj), + &rate, &format, + &start_value, &stop_value); + + return Py_BuildValue("(dOLL)", + rate, + pyg_enum_from_gtype (GST_TYPE_FORMAT, format), + start_value, stop_value); +} +%% +override gst_query_parse_seeking noargs +static PyObject * +_wrap_gst_query_parse_seeking (PyGstMiniObject *self) +{ + GstFormat format; + gboolean seekable; + gint64 segment_start, segment_end; + + if (GST_QUERY_TYPE(self->obj) != GST_QUERY_SEEKING) { + PyErr_SetString(PyExc_TypeError, "Query is not a 'Seeking' query"); + return NULL; + } + + gst_query_parse_seeking (GST_QUERY(self->obj), + &format, &seekable, + &segment_start, &segment_end); + + return Py_BuildValue("(OOLL)", + pyg_enum_from_gtype (GST_TYPE_FORMAT, format), + PyBool_FromLong(seekable), + segment_start, + segment_end); +} +%% +override gst_query_parse_formats_length noargs +static PyObject * +_wrap_gst_query_parse_formats_length (PyGstMiniObject *self) +{ + PyObject *ret; + guint n_formats; + + if (GST_QUERY_TYPE(self->obj) != GST_QUERY_FORMATS) { + PyErr_SetString(PyExc_TypeError, "Query is not a 'Formats' query"); + return NULL; + } + + gst_query_parse_formats_length (GST_QUERY (self->obj), + &n_formats); + + ret = PyInt_FromLong(n_formats); + + return ret; +} +%% +override gst_query_parse_formats_nth kwargs +static PyObject * +_wrap_gst_query_parse_formats_nth (PyGstMiniObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = {"nth", NULL}; + guint nth; + GstFormat format; + + if (GST_QUERY_TYPE (self->obj) != GST_QUERY_FORMATS) { + PyErr_SetString(PyExc_TypeError, "Query is not a 'Formats' query"); + return NULL; + } + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "I:GstQuery.parse_formats_nth", kwlist, &nth)) + return NULL; + + gst_query_parse_formats_nth (GST_QUERY (self->obj), + nth, &format); + + return pyg_enum_from_gtype (GST_TYPE_FORMAT, format); +} +%% +override gst_query_set_formats args +static PyObject * +_wrap_gst_query_set_formats (PyGstMiniObject *self, PyObject *args) +{ + PyObject *ret = NULL; + gint len, i; + GstFormat *formats; + + if (GST_QUERY_TYPE (self->obj) != GST_QUERY_FORMATS) { + PyErr_SetString(PyExc_TypeError, "Query is not a 'Formats' query"); + return NULL; + } + + if ((len = PyTuple_Size(args)) < 1) { + PyErr_SetString(PyExc_TypeError, "You need to supply at least one gst.Format"); + return NULL; + } + + formats = g_new0(GstFormat, len); + + for (i = 0; i < len; i++) { + if (pyg_enum_get_value(GST_TYPE_FORMAT, + PyTuple_GetItem(args, i), + (gint *) &formats[i])) + goto beach; + } + + gst_query_set_formatsv (GST_QUERY(self->obj), len, formats); + + Py_INCREF(Py_None); + ret = Py_None; + + beach: + g_free(formats); + return ret; +} +%% +override gst_query_get_structure noargs +static PyObject * +_wrap_gst_query_get_structure(PyGstMiniObject *self) +{ + GstStructure *ret; + + pyg_begin_allow_threads; + ret = gst_query_get_structure(GST_QUERY(self->obj)); + pyg_end_allow_threads; + /* pyg_boxed_new handles NULL checking */ + return pyg_boxed_new(GST_TYPE_STRUCTURE, ret, FALSE, FALSE); +} +%% +override gst_query_parse_latency noargs +static PyObject * +_wrap_gst_query_parse_latency (PyGstMiniObject * self) +{ + gboolean islive; + GstClockTime minlat, maxlat; + + if (GST_QUERY_TYPE (self->obj) != GST_QUERY_LATENCY) { + PyErr_SetString(PyExc_TypeError, "Query is not a 'latency' query"); + return NULL; + } + + gst_query_parse_latency (GST_QUERY (self->obj), &islive, &minlat, &maxlat); + + return Py_BuildValue("(OKK)", + PyBool_FromLong(islive), + minlat, maxlat); +} +%% +override gst_query_parse_buffering_percent noargs +static PyObject * +_wrap_gst_query_parse_buffering_percent (PyGstMiniObject * self) +{ + gboolean busy; + gint percent; + + if (GST_QUERY_TYPE (self->obj) != GST_QUERY_BUFFERING) { + PyErr_SetString(PyExc_TypeError, "Query is not a 'buffering' query"); + return NULL; + } + + gst_query_parse_buffering_percent (GST_QUERY (self->obj), &busy, &percent); + + return Py_BuildValue("(Od)", PyBool_FromLong(busy), percent); +} +%% +override gst_query_parse_buffering_stats noargs +static PyObject * +_wrap_gst_query_parse_buffering_stats (PyGstMiniObject * self) +{ + GstBufferingMode mode; + gint avg_in, avg_out; + gint64 buffering_left; + + if (GST_QUERY_TYPE (self->obj) != GST_QUERY_BUFFERING) { + PyErr_SetString(PyExc_TypeError, "Query is not a 'buffering' query"); + return NULL; + } + + gst_query_parse_buffering_stats (GST_QUERY (self->obj), &mode, + &avg_in, &avg_out, + &buffering_left); + return Py_BuildValue("OiiL", + pyg_enum_from_gtype (GST_TYPE_BUFFERING_MODE, mode), + avg_in, avg_out, buffering_left); +} +%% +override gst_query_parse_buffering_range noargs +static PyObject * +_wrap_gst_query_parse_buffering_range (PyGstMiniObject * self) +{ + GstFormat format; + gint64 start, stop, estimated_total; + + if (GST_QUERY_TYPE (self->obj) != GST_QUERY_BUFFERING) { + PyErr_SetString(PyExc_TypeError, "Query is not a 'buffering' query"); + return NULL; + } + + gst_query_parse_buffering_range (GST_QUERY (self->obj), &format, + &start, &stop, &estimated_total); + return Py_BuildValue("OLLL", + pyg_enum_from_gtype (GST_TYPE_FORMAT, format), + start, stop, estimated_total); +} +%% +override gst_query_parse_uri noargs +static PyObject * +_wrap_gst_query_parse_uri (PyGstMiniObject * self) +{ + gchar *uri = NULL; + PyObject *ret; + + if (GST_QUERY_TYPE (self->obj) != GST_QUERY_URI) { + PyErr_SetString(PyExc_TypeError, "Query is not a 'uri' query"); + return NULL; + } + + gst_query_parse_uri (GST_QUERY (self->obj), &uri); + if (uri) { + ret = PyString_FromStringAndSize(uri, strlen (uri)); + g_free(uri); + } else { + Py_INCREF(Py_None); + ret = Py_None; + } + return ret; +} diff --git a/gst/gststructure.override b/gst/gststructure.override new file mode 100644 index 0000000..771f83e --- /dev/null +++ b/gst/gststructure.override @@ -0,0 +1,348 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2005 Johan Dahlin + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Johan Dahlin + */ +%% +ignore + gst_structure_get_boolean + gst_structure_get_int + gst_structure_get_fourcc + gst_structure_get_double + gst_structure_get_date + gst_structure_get_clock_time + gst_structure_get_string + gst_structure_get_value + gst_structure_get_enum + gst_structure_get_fraction + gst_structure_set + gst_structure_get_name_id + gst_structure_id_get_value + gst_structure_id_set_value + gst_structure_set_parent_refcount + gst_structure_remove_fields + gst_structure_map_in_place + gst_structure_fixate_field_nearest_fraction +%% +override gst_structure_new kwargs +static int +_wrap_gst_structure_new(PyGBoxed *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "name", NULL }; + char *name; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s:GstStructure.__init__", kwlist, &name)) + return -1; + + self->gtype = GST_TYPE_STRUCTURE; + self->free_on_dealloc = FALSE; + + self->boxed = gst_structure_new(name, NULL); + + if (!self->boxed) { + PyErr_SetString(PyExc_RuntimeError, "could not create GstStructure object"); + return -1; + } + return 0; +} +%% +override gst_structure_set_value kwargs +static PyObject * +_wrap_gst_structure_set_value(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "field", "value", "type_name", NULL }; + char *field; + PyObject *py_value = NULL; + char *type_name = NULL; + GType type; + GValue value = { 0 }; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "sO|s:GstStructure.set_value", + kwlist, &field, &py_value, + &type_name)) { + return NULL; + } + + if (type_name) { + if (strcmp (type_name, "char") == 0) { + type = G_TYPE_CHAR; + } else if (strcmp (type_name, "uchar") == 0) { + type = G_TYPE_UCHAR; + } else if (strcmp (type_name, "boolean") == 0) { + type = G_TYPE_BOOLEAN; + } else if (strcmp (type_name, "int") == 0) { + type = G_TYPE_INT; + } else if (strcmp (type_name, "uint") == 0) { + type = G_TYPE_UINT; + } else if (strcmp (type_name, "long") == 0) { + type = G_TYPE_LONG; + } else if (strcmp (type_name, "ulong") == 0) { + type = G_TYPE_ULONG; + } else if (strcmp (type_name, "int64") == 0) { + type = G_TYPE_INT64; + } else if (strcmp (type_name, "uint64") == 0) { + type = G_TYPE_UINT64; + } else if (strcmp (type_name, "float") == 0) { + type = G_TYPE_FLOAT; + } else if (strcmp (type_name, "double") == 0) { + type = G_TYPE_DOUBLE; + } else if (strcmp (type_name, "string") == 0) { + type = G_TYPE_STRING; + } else { + PyErr_SetString(PyExc_TypeError, + "invalid type name"); + return NULL; + } + } else if (py_value == Py_None) { + PyErr_SetString(PyExc_TypeError, "value can't be None"); + return NULL; + } else { + type = pyg_type_from_object((PyObject *) py_value->ob_type); + } + + if (type != G_TYPE_INVALID) { + g_value_init(&value, type); + } else if (!pygst_value_init_for_pyobject(&value, py_value)) { + return NULL; + } + + if (pygst_value_from_pyobject(&value, py_value) != 0) { + return NULL; + } + gst_structure_set_value(pyg_boxed_get(self, GstStructure), field, + &value); + + Py_INCREF(Py_None); + return Py_None; +} +%% +define GstStructure.has_key args +static PyObject* +_wrap_gst_structure_has_key(PyGObject *self, PyObject *args) +{ + gchar *key; + gboolean has_field; + + if (!PyArg_ParseTuple(args, "s:GstStructure.has_key", &key)) + return NULL; + + has_field = gst_structure_has_field((GstStructure*)self->obj, key); + + return PyBool_FromLong(has_field); +} + +%% +override gst_structure_keys noargs +static PyObject * +_wrap_gst_structure_keys (PyObject *self) +{ + GstStructure *s; + int i, n; + PyObject *ret; + + s = pyg_boxed_get(self, GstStructure); + n = gst_structure_n_fields(s); + ret = PyList_New(n); + + for (i = 0; i < n; ++i) { + const gchar *name = gst_structure_nth_field_name (s, i); + PyList_SetItem(ret, i, PyString_FromString(name)); + } + + return ret; +} + + +%% +override-slot GstStructure.tp_as_mapping +static Py_ssize_t +_wrap_gst_structure_length(PyObject *self) +{ + PyGObject *gself = (PyGObject *)self; + return gst_structure_n_fields((GstStructure*)gself->obj); +} + +static PyObject * +_wrap_gst_structure_subscript(PyGObject *self, PyObject *py_key) +{ + PyObject *v = NULL; + const char *field = PyString_AsString(py_key); + + if (gst_structure_has_field((GstStructure*)self->obj, field)) { + const GValue *gvalue; + gvalue = gst_structure_get_value((GstStructure*)self->obj, field); + g_assert(gvalue != NULL); + v = pygst_value_as_pyobject(gvalue, TRUE); + } else { + PyErr_SetString(PyExc_KeyError, field); + } + + return v; +} + +static int +_wrap_gst_structure_ass_subscript(PyGObject *self, + PyObject *py_key, + PyObject *py_value) +{ + const char *key; + GstStructure* structure; + + structure = (GstStructure*)self->obj; + key = PyString_AsString(py_key); + if (py_value != NULL) { + GValue v = { 0, }; + if (!pygst_value_init_for_pyobject (&v, py_value)) + return -1; + if (pygst_value_from_pyobject(&v, py_value)) + return -1; + gst_structure_set_value(structure, key, &v); + g_value_unset(&v); + } else { + gst_structure_remove_field(structure, key); + } + + return 0; +} + +static PyMappingMethods _wrap_gst_structure_tp_as_mapping = { + _wrap_gst_structure_length, /* mp_length */ + (binaryfunc)_wrap_gst_structure_subscript, /* mp_subscript */ + (objobjargproc)_wrap_gst_structure_ass_subscript /* mp_ass_subscript */ +}; + +%% +override gst_structure_foreach kwargs +static gboolean +pygst_structure_foreach_marshal(GQuark field_id, + const GValue *value, + gpointer user_data) +{ + PyGstCustomNotify *cunote = user_data; + PyObject *py_field, *py_value, *retobj; + gboolean retval = TRUE; + PyGILState_STATE state; + + g_assert(cunote->func); + + state = pyg_gil_state_ensure(); + + py_field = Py_BuildValue("s", g_quark_to_string(field_id)); + py_value = pygst_value_as_pyobject(value, FALSE); + if (cunote->data) + retobj = PyEval_CallFunction(cunote->func, "(NNO)", + py_field, py_value, + cunote->data); + else + retobj = PyEval_CallFunction(cunote->func, "(NN)", + py_field, py_value); + + if (PyErr_Occurred () || (retobj == NULL) || (retobj == Py_None)) { + PyErr_Print (); + retval = FALSE; + } else if (retobj != Py_None) { + retval = PyInt_AsLong(retobj); + } + + Py_XDECREF(retobj); + + pyg_gil_state_release(state); + + return retval; +} + +static PyObject * +_wrap_gst_structure_foreach (PyGObject *self, + PyObject *args, + PyObject *kwargs) +{ + static char *kwlist[] = { "foreach_function", "args", NULL }; + PyObject *pyfunc, *pyarg = NULL; + PyGstCustomNotify cunote; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O|O:GstStructure.foreach", + kwlist, + &pyfunc, &pyarg)) { + return NULL; + } + + if (!PyCallable_Check(pyfunc)) { + PyErr_SetString(PyExc_TypeError, "foreach_function not callable"); + return NULL; + } + + cunote.func = pyfunc; + cunote.data = pyarg; + gst_structure_foreach(pyg_boxed_get(self, GstStructure), + pygst_structure_foreach_marshal, + &cunote); + + Py_INCREF(Py_None); + return Py_None; +} +%% +override-slot GstStructure.tp_repr +static PyObject * +_wrap_gst_structure_tp_repr (PyGObject *self) +{ + char *buf; + PyObject *retval; + + buf = g_strdup_printf("", + gst_structure_get_name((GstStructure*)self->obj), + (long)self->obj); + + retval = PyString_FromString(buf); + g_free(buf); + return retval; +} +%% +override gst_structure_from_string kwargs +static PyObject * +_wrap_gst_structure_from_string(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "string", NULL }; + char *string; + GstStructure *ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s:structure_from_string", kwlist, &string)) + return NULL; + + ret = gst_structure_from_string(string, NULL); + + /* pyg_boxed_new handles NULL checking */ + return pyg_boxed_new(GST_TYPE_STRUCTURE, ret, FALSE, TRUE); +} +%% +override-slot GstStructure.tp_dealloc +static void +_wrap_gst_structure_tp_dealloc (PyObject *self) +{ + PyGBoxed *boxed = (PyGBoxed *) self; + + if (boxed->free_on_dealloc && boxed->boxed) { + gst_structure_free (boxed->boxed); + } else if (boxed->boxed) { + pygst_caps_map_remove_structure (self); + } + + self->ob_type->tp_free((PyObject *)self); +} diff --git a/gst/gsttaglist.override b/gst/gsttaglist.override new file mode 100644 index 0000000..3775232 --- /dev/null +++ b/gst/gsttaglist.override @@ -0,0 +1,160 @@ +/* -*- Mode: C; ; c-file-style: "python" -*- */ +/* gst-python + * Copyright (C) 2005 Edward Hervey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Edward Hervey + */ + +%% +ignore-glob + gst_tag_list_get_* +%% +ignore + gst_tag_list_add + gst_tag_list_add_values + gst_tag_list_add_valist_values + gst_tag_list_copy_value + gst_tag_list_get + gst_tag_list_remove_tag + gst_tag_list_foreach + gst_is_tag_list +%% +define GstTagList.keys noargs +static void +tag_foreach_func_list (const GstTagList *list, + const gchar *tag, + PyObject *py_list) +{ + int count; + + count = gst_tag_list_get_tag_size(GST_TAG_LIST(list), tag); + if (count == 0) + PyErr_SetString(PyExc_KeyError, tag); + else if (count > 0) + PyList_Append(py_list, PyString_FromString(tag)); +} + +static PyObject* +_wrap_gst_tag_list_keys(PyGObject *self) +{ + PyObject *dict; + + dict = PyList_New(0); + + gst_tag_list_foreach(GST_TAG_LIST(self->obj), + (GstTagForeachFunc)tag_foreach_func_list, + (gpointer)dict); + return dict; +} +%% +override-slot GstTagList.tp_as_mapping +static Py_ssize_t +_wrap_gst_tag_list_length(PyObject *self) +{ + PyGObject *gself = (PyGObject *)self; + return gst_structure_n_fields((GstStructure*)gself->obj); +} + +static PyObject * +_wrap_gst_tag_list_subscript(PyGObject *self, PyObject *py_key) +{ + PyObject *v = NULL; + const char *field = PyString_AsString(py_key); + + if (gst_structure_has_field((GstStructure*)self->obj, field)) { + const GValue *gvalue; + gvalue = gst_structure_get_value((GstStructure*)self->obj, field); + g_assert(gvalue != NULL); + v = pygst_value_as_pyobject(gvalue, TRUE); + } else { + PyErr_SetString(PyExc_KeyError, field); + } + + return v; +} + +static int +_wrap_gst_tag_list_ass_subscript(PyGObject *self, + PyObject *py_key, + PyObject *py_value) +{ + const char *key; + GstStructure* structure; + GType tagtype; + + structure = (GstStructure*)self->obj; + key = PyString_AsString(py_key); + if (py_value != NULL) { + GValue v = { 0, }; + + if (!pygst_value_init_for_pyobject (&v, py_value)) + return -1; + if (pygst_value_from_pyobject(&v, py_value)) + return -1; + + /* some tags are supposed to be uint, but there is no unsigned + * int python type, so convert here if needed */ + if (gst_tag_exists (key)) { + tagtype = gst_tag_get_type (key); + + if (tagtype && tagtype != G_VALUE_TYPE (&v)) { + GValue w = { 0, }; + + g_value_init (&w, tagtype); + g_value_transform (&v, &w); + g_value_unset (&v); + g_value_init (&v, tagtype); + g_value_copy (&w, &v); + } + } + gst_structure_set_value(structure, key, &v); + g_value_unset(&v); + } else { + gst_structure_remove_field(structure, key); + } + + return 0; +} + +static PyMappingMethods _wrap_gst_tag_list_tp_as_mapping = { + _wrap_gst_tag_list_length, /* mp_length */ + (binaryfunc)_wrap_gst_tag_list_subscript, /* mp_subscript */ + (objobjargproc)_wrap_gst_tag_list_ass_subscript /* mp_ass_subscript */ +}; +%% +override-slot GstTagList.tp_as_sequence +static int +_wrap_gst_tag_list_contains(PyGObject *self, PyObject *py_key) +{ + return gst_structure_has_field((GstStructure*)self->obj, + PyString_AsString(py_key)); +} + +static PySequenceMethods _wrap_gst_tag_list_tp_as_sequence = { + (lenfunc)NULL, + (binaryfunc)NULL, + (ssizeargfunc)NULL, + (ssizeargfunc)NULL, + (ssizessizeargfunc)NULL, + (ssizeobjargproc)NULL, + (ssizessizeobjargproc)NULL, + (objobjproc)_wrap_gst_tag_list_contains, + (binaryfunc)NULL, + (ssizeargfunc)NULL, +}; + diff --git a/gst/gstversion.override.in b/gst/gstversion.override.in new file mode 100644 index 0000000..fd340aa --- /dev/null +++ b/gst/gstversion.override.in @@ -0,0 +1,21 @@ +%% +include +@IGNORE_GST_0_10_21@ +@IGNORE_GST_0_10_22@ +@IGNORE_GST_0_10_23@ +@IGNORE_GST_PB_0_10_23@ +@IGNORE_GST_0_10_24@ +@IGNORE_GST_0_10_25@ +@IGNORE_GST_PB_0_10_25@ +@IGNORE_GST_0_10_26@ +@IGNORE_GST_PB_0_10_26@ +@IGNORE_GST_LOADSAVE@ +@IGNORE_GST_0_10_29@ +@IGNORE_GST_PB_0_10_29@ +@IGNORE_GST_0_10_30@ +@IGNORE_GST_PB_0_10_30@ +@IGNORE_GST_0_10_31@ +@IGNORE_GST_PB_0_10_31@ +@IGNORE_GST_0_10_32@ +@IGNORE_GST_PB_0_10_32@ +%% diff --git a/gst/interfaces.defs b/gst/interfaces.defs new file mode 100644 index 0000000..c88d812 --- /dev/null +++ b/gst/interfaces.defs @@ -0,0 +1,1255 @@ +;; -*- scheme -*- + +(include "xoverlay.defs") + +;; object definitions ... + +;; +;; interface definitions ... +;; + +(define-interface ColorBalance + (in-module "Gst") + (c-name "GstColorBalance") + (gtype-id "GST_TYPE_COLOR_BALANCE") + (vtable "GstColorBalanceClass") +) + +(define-object ColorBalanceChannel + (in-module "Gst") + (parent "GObject") + (c-name "GstColorBalanceChannel") + (gtype-id "GST_TYPE_COLOR_BALANCE_CHANNEL") + (fields + '("gchar*" "label") + '("gint" "min_value") + '("gint" "max_value") + ) +) + +(define-interface Mixer + (in-module "Gst") + (c-name "GstMixer") + (gtype-id "GST_TYPE_MIXER") + (fields + '("GstMixerType" "mixer_type") + ) + (vtable "GstMixerClass") +) + +(define-object MixerTrack + (in-module "Gst") + (parent "GObject") + (c-name "GstMixerTrack") + (gtype-id "GST_TYPE_MIXER_TRACK") + (fields + '("gchar*" "label") + '("GstMixerTrackFlags" "flags") + '("gint" "num_channels") + '("gint" "min_volume") + '("gint" "max_volume") + ) +) + +(define-object MixerOptions + (in-module "Gst") + (parent "GstMixerTrack") + (c-name "GstMixerOptions") + (gtype-id "GST_TYPE_MIXER_OPTIONS") +) + +(define-interface Navigation + (in-module "Gst") + (c-name "GstNavigation") + (gtype-id "GST_TYPE_NAVIGATION") + (vtable "GstNavigationInterface") +) + +(define-interface PropertyProbe + (in-module "Gst") + (c-name "GstPropertyProbe") + (gtype-id "GST_TYPE_PROPERTY_PROBE") + (vtable "GstPropertyProbeInterface") +) + +(define-interface Tuner + (in-module "Gst") + (c-name "GstTuner") + (gtype-id "GST_TYPE_TUNER") + (vtable "GstTunerClass") +) + +(define-object TunerChannel + (in-module "Gst") + (parent "GObject") + (c-name "GstTunerChannel") + (gtype-id "GST_TYPE_TUNER_CHANNEL") + (fields + '("gchar*" "label") + '("GstTunerChannelFlags" "flags") + '("gfloat" "freq_multiplicator") + '("gulong" "min_frequency") + '("gulong" "max_frequency") + '("gint" "min_signal") + '("gint" "max_signal")) +) + +(define-object TunerNorm + (in-module "Gst") + (parent "GObject") + (c-name "GstTunerNorm") + (gtype-id "GST_TYPE_TUNER_NORM") + (fields + '("gchar*" "label") + '("GValue*" "framerate")) +) + +;; Enumerations and flags ... + +(define-enum ColorBalanceType + (in-module "Gst") + (c-name "GstColorBalanceType") + (gtype-id "GST_TYPE_COLOR_BALANCE_TYPE") + (values + '("hardware" "GST_COLOR_BALANCE_HARDWARE") + '("software" "GST_COLOR_BALANCE_SOFTWARE") + ) +) + +(define-enum MixerType + (in-module "Gst") + (c-name "GstMixerType") + (gtype-id "GST_TYPE_MIXER_TYPE") + (values + '("hardware" "GST_MIXER_HARDWARE") + '("software" "GST_MIXER_SOFTWARE") + ) +) + +(define-enum MixerMessageType + (in-module "Gst") + (c-name "GstMixerMessageType") + (gtype-id "GST_TYPE_MIXER_MESSAGE_TYPE") + (values + '("invalid" "GST_MIXER_MESSAGE_INVALID") + '("mute-toggled" "GST_MIXER_MESSAGE_MUTE_TOGGLED") + '("record-toggled" "GST_MIXER_MESSAGE_RECORD_TOGGLED") + '("volume-changed" "GST_MIXER_MESSAGE_VOLUME_CHANGED") + '("option-changed" "GST_MIXER_MESSAGE_OPTION_CHANGED") + ) +) + +(define-flags MixerFlags + (in-module "Gst") + (c-name "GstMixerFlags") + (gtype-id "GST_TYPE_MIXER_FLAGS") + (values + '("none" "GST_MIXER_FLAG_NONE") + '("auto-notifications" "GST_MIXER_FLAG_AUTO_NOTIFICATIONS") + '("has-whitelist" "GST_MIXER_FLAG_HAS_WHITELIST") + '("grouping" "GST_MIXER_FLAG_GROUPING") + ) +) + +(define-flags MixerTrackFlags + (in-module "Gst") + (c-name "GstMixerTrackFlags") + (gtype-id "GST_TYPE_MIXER_TRACK_FLAGS") + (values + '("input" "GST_MIXER_TRACK_INPUT") + '("output" "GST_MIXER_TRACK_OUTPUT") + '("mute" "GST_MIXER_TRACK_MUTE") + '("record" "GST_MIXER_TRACK_RECORD") + '("master" "GST_MIXER_TRACK_MASTER") + '("software" "GST_MIXER_TRACK_SOFTWARE") + '("no-record" "GST_MIXER_TRACK_NO_RECORD") + '("no-mute" "GST_MIXER_TRACK_NO_MUTE") + '("whitelist" "GST_MIXER_TRACK_WHITELIST") + '("readonly" "GST_MIXER_TRACK_READONLY") + '("writeonly" "GST_MIXER_TRACK_WRITEONLY") + ) +) + +(define-enum NavigationCommand + (in-module "Gst") + (c-name "GstNavigationCommand") + (gtype-id "GST_TYPE_NAVIGATION_COMMAND") + (values + '("invalid" "GST_NAVIGATION_COMMAND_INVALID") + '("menu1" "GST_NAVIGATION_COMMAND_MENU1") + '("menu2" "GST_NAVIGATION_COMMAND_MENU2") + '("menu3" "GST_NAVIGATION_COMMAND_MENU3") + '("menu4" "GST_NAVIGATION_COMMAND_MENU4") + '("menu5" "GST_NAVIGATION_COMMAND_MENU5") + '("menu6" "GST_NAVIGATION_COMMAND_MENU6") + '("menu7" "GST_NAVIGATION_COMMAND_MENU7") + '("left" "GST_NAVIGATION_COMMAND_LEFT") + '("right" "GST_NAVIGATION_COMMAND_RIGHT") + '("up" "GST_NAVIGATION_COMMAND_UP") + '("down" "GST_NAVIGATION_COMMAND_DOWN") + '("activate" "GST_NAVIGATION_COMMAND_ACTIVATE") + '("prev-angle" "GST_NAVIGATION_COMMAND_PREV_ANGLE") + '("next-angle" "GST_NAVIGATION_COMMAND_NEXT_ANGLE") + ) +) + +(define-enum NavigationQueryType + (in-module "Gst") + (c-name "GstNavigationQueryType") + (gtype-id "GST_TYPE_NAVIGATION_QUERY_TYPE") + (values + '("invalid" "GST_NAVIGATION_QUERY_INVALID") + '("commands" "GST_NAVIGATION_QUERY_COMMANDS") + '("angles" "GST_NAVIGATION_QUERY_ANGLES") + ) +) + +(define-enum NavigationMessageType + (in-module "Gst") + (c-name "GstNavigationMessageType") + (gtype-id "GST_TYPE_NAVIGATION_MESSAGE_TYPE") + (values + '("invalid" "GST_NAVIGATION_MESSAGE_INVALID") + '("mouse-over" "GST_NAVIGATION_MESSAGE_MOUSE_OVER") + '("commands-changed" "GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED") + '("angles-changed" "GST_NAVIGATION_MESSAGE_ANGLES_CHANGED") + ) +) + +(define-enum NavigationEventType + (in-module "Gst") + (c-name "GstNavigationEventType") + (gtype-id "GST_TYPE_NAVIGATION_EVENT_TYPE") + (values + '("invalid" "GST_NAVIGATION_EVENT_INVALID") + '("key-press" "GST_NAVIGATION_EVENT_KEY_PRESS") + '("key-release" "GST_NAVIGATION_EVENT_KEY_RELEASE") + '("mouse-button-press" "GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS") + '("mouse-button-release" "GST_NAVIGATION_EVENT_MOUSE_BUTTON_RELEASE") + '("mouse-move" "GST_NAVIGATION_EVENT_MOUSE_MOVE") + '("command" "GST_NAVIGATION_EVENT_COMMAND") + ) +) + +(define-enum StreamVolumeFormat + (in-module "Gst") + (c-name "GstStreamVolumeFormat") + (gtype-id "GST_TYPE_STREAM_VOLUME_FORMAT") + (values + '("linear" "GST_STREAM_VOLUME_FORMAT_LINEAR") + '("cubic" "GST_STREAM_VOLUME_FORMAT_CUBIC") + '("db" "GST_STREAM_VOLUME_FORMAT_DB") + ) +) + +(define-flags TunerChannelFlags + (in-module "Gst") + (c-name "GstTunerChannelFlags") + (gtype-id "GST_TYPE_TUNER_CHANNEL_FLAGS") + (values + '("input" "GST_TUNER_CHANNEL_INPUT") + '("output" "GST_TUNER_CHANNEL_OUTPUT") + '("frequency" "GST_TUNER_CHANNEL_FREQUENCY") + '("audio" "GST_TUNER_CHANNEL_AUDIO") + ) +) + +;; From /opt/gnome/include/gstreamer-0.7/gst/colorbalance/colorbalance.h + +(define-function gst_color_balance_get_type + (c-name "gst_color_balance_get_type") + (return-type "GType") +) + +(define-method list_colorbalance_channels + (of-object "GstColorBalance") + (c-name "gst_color_balance_list_channels") + (return-type "const-GList*") +) + +(define-method set_value + (of-object "GstColorBalance") + (c-name "gst_color_balance_set_value") + (return-type "none") + (parameters + '("GstColorBalanceChannel*" "channel") + '("gint" "value") + ) +) + +(define-method get_value + (of-object "GstColorBalance") + (c-name "gst_color_balance_get_value") + (return-type "gint") + (parameters + '("GstColorBalanceChannel*" "channel") + ) +) + +(define-method value_changed + (of-object "GstColorBalance") + (c-name "gst_color_balance_value_changed") + (return-type "none") + (parameters + '("GstColorBalanceChannel*" "channel") + '("gint" "value") + ) +) + +(define-virtual list_channels + (of-object "GstColorBalance") + (return-type "const-GList*") +) + +(define-virtual set_value + (of-object "GstColorBalance") + (return-type "none") + (parameters + '("GstColorBalanceChannel*" "channel") + '("gint" "value") + ) +) + +(define-virtual get_value + (of-object "GstColorBalance") + (return-type "gint") + (parameters + '("GstColorBalanceChannel*" "channel") + ) +) + + + +;; From /opt/gnome/include/gstreamer-0.7/gst/mixer/mixer.h + +(define-function gst_mixer_get_type + (c-name "gst_mixer_get_type") + (return-type "GType") +) + +(define-method list_tracks + (of-object "GstMixer") + (c-name "gst_mixer_list_tracks") + (return-type "const-GList*") +) + +(define-method set_volume + (of-object "GstMixer") + (c-name "gst_mixer_set_volume") + (return-type "none") + (parameters + '("GstMixerTrack*" "track") + '("gint*" "volumes") + ) +) + +(define-method get_volume + (of-object "GstMixer") + (c-name "gst_mixer_get_volume") + (return-type "tuple") + (parameters + '("GstMixerTrack*" "track") + ) +) + +(define-method set_mute + (of-object "GstMixer") + (c-name "gst_mixer_set_mute") + (return-type "none") + (parameters + '("GstMixerTrack*" "track") + '("gboolean" "mute") + ) +) + +(define-method set_record + (of-object "GstMixer") + (c-name "gst_mixer_set_record") + (return-type "none") + (parameters + '("GstMixerTrack*" "track") + '("gboolean" "record") + ) +) + +(define-method set_option + (of-object "GstMixer") + (c-name "gst_mixer_set_option") + (return-type "none") + (parameters + '("GstMixerOptions*" "opts") + '("gchar*" "value") + ) +) + +(define-method get_option + (of-object "GstMixer") + (c-name "gst_mixer_get_option") + (return-type "const-gchar*") + (parameters + '("GstMixerOptions*" "opts") + ) +) + +(define-method mute_toggled + (of-object "GstMixer") + (c-name "gst_mixer_mute_toggled") + (return-type "none") + (parameters + '("GstMixerTrack*" "track") + '("gboolean" "mute") + ) +) + +(define-method record_toggled + (of-object "GstMixer") + (c-name "gst_mixer_record_toggled") + (return-type "none") + (parameters + '("GstMixerTrack*" "track") + '("gboolean" "record") + ) +) + +(define-method volume_changed + (of-object "GstMixer") + (c-name "gst_mixer_volume_changed") + (return-type "none") + (parameters + '("GstMixerTrack*" "track") + '("gint*" "volumes") + ) +) + +(define-method option_changed + (of-object "GstMixer") + (c-name "gst_mixer_option_changed") + (return-type "none") + (parameters + '("GstMixerOptions*" "opts") + '("gchar*" "value") + ) +) + +(define-method get_mixer_flags + (of-object "GstMixer") + (c-name "gst_mixer_get_mixer_flags") + (return-type "GstMixerFlags") +) + +(define-function mixer_message_get_type + (c-name "gst_mixer_message_get_type") + (return-type "GstMixerMessageType") + (parameters + '("GstMessage*" "message") + ) +) + +(define-function mixer_message_parse_mute_toggled + (c-name "gst_mixer_message_parse_mute_toggled") + (return-type "none") + (parameters + '("GstMessage*" "message") + '("GstMixerTrack**" "track") + '("gboolean*" "mute") + ) +) + +(define-function mixer_message_parse_record_toggled + (c-name "gst_mixer_message_parse_record_toggled") + (return-type "none") + (parameters + '("GstMessage*" "message") + '("GstMixerTrack**" "track") + '("gboolean*" "record") + ) +) + +(define-function mixer_message_parse_volume_changed + (c-name "gst_mixer_message_parse_volume_changed") + (return-type "none") + (parameters + '("GstMessage*" "message") + '("GstMixerTrack**" "track") + '("gint**" "volumes") + '("gint*" "num_channels") + ) +) + +(define-function mixer_message_parse_option_changed + (c-name "gst_mixer_message_parse_option_changed") + (return-type "none") + (parameters + '("GstMessage*" "message") + '("GstMixerOptions**" "options") + '("const-gchar**" "value") + ) +) + +(define-function gst_mixer_message_parse_options_list_changed + (c-name "gst_mixer_message_parse_options_list_changed") + (return-type "none") + (parameters + '("GstMessage*" "message") + '("GstMixerOptions**" "options") + ) +) + +(define-virtual list_tracks + (of-object "GstMixer") + (return-type "const-GList*") +) + +(define-virtual set_volume + (of-object "GstMixer") + (return-type "none") + (parameters + '("GstMixerTrack*" "track") + '("gint*" "volumes") + ) +) + +(define-virtual get_volume + (of-object "GstMixer") + (return-type "none") + (parameters + '("GstMixerTrack*" "track") + '("gint*" "volumes") + ) +) + +(define-virtual set_mute + (of-object "GstMixer") + (return-type "none") + (parameters + '("GstMixerTrack*" "track") + '("gboolean" "mute") + ) +) + +(define-virtual set_record + (of-object "GstMixer") + (return-type "none") + (parameters + '("GstMixerTrack*" "track") + '("gboolean" "record") + ) +) + + +;; From ../gst-plugins-base/gst-libs/gst/interfaces/mixeroptions.h + +(define-function gst_mixer_options_get_type + (c-name "gst_mixer_options_get_type") + (return-type "GType") +) + +(define-method get_values + (of-object "GstMixerOptions") + (c-name "gst_mixer_options_get_values") + (return-type "GList*") +) + + +;; From /opt/gnome/include/gstreamer-0.7/gst/navigation/navigation.h + +(define-function navigation_get_type + (c-name "gst_navigation_get_type") + (return-type "GType") +) + +(define-function navigation_query_get_type + (c-name "gst_navigation_query_get_type") + (return-type "GstNavigationQueryType") + (parameters + '("GstQuery*" "query") + ) +) + +(define-function navigation_query_new_commands + (c-name "gst_navigation_query_new_commands") + (caller-owns-return #t) + (return-type "GstQuery*") +) + +(define-function navigation_query_set_commands + (c-name "gst_navigation_query_set_commands") + (return-type "none") + (parameters + '("GstQuery*" "query") + '("gint" "n_cmds") + ) + (varargs #t) +) + +(define-function navigation_query_set_commandsv + (c-name "gst_navigation_query_set_commandsv") + (return-type "none") + (parameters + '("GstQuery*" "query") + '("gint" "n_cmds") + '("GstNavigationCommand*" "cmds") + ) +) + +(define-function navigation_query_parse_commands_length + (c-name "gst_navigation_query_parse_commands_length") + (return-type "gboolean") + (parameters + '("GstQuery*" "query") + '("guint*" "n_cmds") + ) +) + +(define-function navigation_query_parse_commands_nth + (c-name "gst_navigation_query_parse_commands_nth") + (return-type "gboolean") + (parameters + '("GstQuery*" "query") + '("guint" "nth") + '("GstNavigationCommand*" "cmd") + ) +) + +(define-function navigation_query_new_angles + (c-name "gst_navigation_query_new_angles") + (caller-owns-return #t) + (return-type "GstQuery*") +) + +(define-function navigation_query_set_angles + (c-name "gst_navigation_query_set_angles") + (return-type "none") + (parameters + '("GstQuery*" "query") + '("guint" "cur_angle") + '("guint" "n_angles") + ) +) + +(define-function navigation_query_parse_angles + (c-name "gst_navigation_query_parse_angles") + (return-type "gboolean") + (parameters + '("GstQuery*" "query") + '("guint*" "cur_angle") + '("guint*" "n_angles") + ) +) + +(define-function navigation_message_get_type + (c-name "gst_navigation_message_get_type") + (return-type "GstNavigationMessageType") + (parameters + '("GstMessage*" "message") + ) +) + +(define-function navigation_message_new_mouse_over + (c-name "gst_navigation_message_new_mouse_over") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("gboolean" "active") + ) +) + +(define-function navigation_message_parse_mouse_over + (c-name "gst_navigation_message_parse_mouse_over") + (return-type "gboolean") + (parameters + '("GstMessage*" "message") + '("gboolean*" "active") + ) +) + +(define-function navigation_message_new_commands_changed + (c-name "gst_navigation_message_new_commands_changed") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + ) +) + +(define-function navigation_message_new_angles_changed + (c-name "gst_navigation_message_new_angles_changed") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("guint" "cur_angle") + '("guint" "n_angles") + ) +) + +(define-function navigation_message_parse_angles_changed + (c-name "gst_navigation_message_parse_angles_changed") + (return-type "gboolean") + (parameters + '("GstMessage*" "message") + '("guint*" "cur_angle") + '("guint*" "n_angles") + ) +) + +(define-function navigation_event_get_type + (c-name "gst_navigation_event_get_type") + (return-type "GstNavigationEventType") + (parameters + '("GstEvent*" "event") + ) +) + +(define-function navigation_event_parse_key_event + (c-name "gst_navigation_event_parse_key_event") + (return-type "gboolean") + (parameters + '("GstEvent*" "event") + '("const-gchar**" "key") + ) +) + +(define-function navigation_event_parse_mouse_button_event + (c-name "gst_navigation_event_parse_mouse_button_event") + (return-type "gboolean") + (parameters + '("GstEvent*" "event") + '("gint*" "button") + '("gdouble*" "x") + '("gdouble*" "y") + ) +) + +(define-function navigation_event_parse_mouse_move_event + (c-name "gst_navigation_event_parse_mouse_move_event") + (return-type "gboolean") + (parameters + '("GstEvent*" "event") + '("gdouble*" "x") + '("gdouble*" "y") + ) +) + +(define-function navigation_event_parse_command + (c-name "gst_navigation_event_parse_command") + (return-type "gboolean") + (parameters + '("GstEvent*" "event") + '("GstNavigationCommand*" "command") + ) +) + +(define-method send_event + (of-object "GstNavigation") + (c-name "gst_navigation_send_event") + (return-type "none") + (parameters + '("GstStructure*" "structure") + ) +) + +(define-method send_key_event + (of-object "GstNavigation") + (c-name "gst_navigation_send_key_event") + (return-type "none") + (parameters + '("const-char*" "event") + '("const-char*" "key") + ) +) + +(define-method send_mouse_event + (of-object "GstNavigation") + (c-name "gst_navigation_send_mouse_event") + (return-type "none") + (parameters + '("const-char*" "event") + '("int" "button") + '("double" "x") + '("double" "y") + ) +) + +(define-virtual send_event + (of-object "GstNavigation") + (return-type "none") + (parameters + '("GstStructure*" "structure") + ) +) + +(define-method send_command + (of-object "GstNavigation") + (c-name "gst_navigation_send_command") + (return-type "none") + (parameters + '("GstNavigationCommand" "command") + ) +) + +;; From /opt/gnome/include/gstreamer-0.7/gst/propertyprobe/propertyprobe.h + +(define-function gst_property_probe_get_type + (c-name "gst_property_probe_get_type") + (return-type "GType") +) + +(define-method probe_get_properties + (of-object "GstPropertyProbe") + (c-name "gst_property_probe_get_properties") + (return-type "const-GList*") +) + +(define-method probe_get_property + (of-object "GstPropertyProbe") + (c-name "gst_property_probe_get_property") + (return-type "const-GParamSpec*") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method probe_property + (of-object "GstPropertyProbe") + (c-name "gst_property_probe_probe_property") + (return-type "none") + (parameters + '("const-GParamSpec*" "pspec") + ) +) + +(define-method probe_property_name + (of-object "GstPropertyProbe") + (c-name "gst_property_probe_probe_property_name") + (return-type "none") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method needs_probe + (of-object "GstPropertyProbe") + (c-name "gst_property_probe_needs_probe") + (return-type "gboolean") + (parameters + '("const-GParamSpec*" "pspec") + ) +) + +(define-method needs_probe_name + (of-object "GstPropertyProbe") + (c-name "gst_property_probe_needs_probe_name") + (return-type "gboolean") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method get_values + (of-object "GstPropertyProbe") + (c-name "gst_property_probe_get_values") + (return-type "GValueArray*") + (parameters + '("const-GParamSpec*" "pspec") + ) +) + +(define-method probe_get_values_name + (of-object "GstPropertyProbe") + (c-name "gst_property_probe_get_values_name") + (return-type "GValueArray*") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method probe_and_get_values + (of-object "GstPropertyProbe") + (c-name "gst_property_probe_probe_and_get_values") + (return-type "GValueArray*") + (parameters + '("const-GParamSpec*" "pspec") + ) +) + +(define-method probe_and_get_values_name + (of-object "GstPropertyProbe") + (c-name "gst_property_probe_probe_and_get_values_name") + (return-type "GValueArray*") + (parameters + '("const-gchar*" "name") + ) +) + +(define-virtual get_properties + (of-object "GstPropertyProbe") + (return-type "const-GList*") +) + +(define-virtual needs_probe + (of-object "GstPropertyProbe") + (return-type "gboolean") + (parameters + '("guint" "prop_id") + '("const-GParamSpec*" "pspec") + ) +) + +(define-virtual probe_property + (of-object "GstPropertyProbe") + (return-type "none") + (parameters + '("guint" "prop_id") + '("const-GParamSpec*" "pspec") + ) +) + +(define-virtual get_values + (of-object "GstPropertyProbe") + (return-type "GValueArray*") + (parameters + '("guint" "prop_id") + '("const-GParamSpec*" "pspec") + ) +) + + +;; From streamvolume.h + +(define-method set_volume + (of-object "GstStreamVolume") + (c-name "gst_stream_volume_set_volume") + (return-type "none") + (parameters + '("GstStreamVolumeFormat" "format") + '("gdouble" "val") + ) +) + +(define-method get_volume + (of-object "GstStreamVolume") + (c-name "gst_stream_volume_get_volume") + (return-type "gdouble") + (parameters + '("GstStreamVolumeFormat" "format") + ) +) + +(define-method set_mute + (of-object "GstStreamVolume") + (c-name "gst_stream_volume_set_mute") + (return-type "none") + (parameters + '("gboolean" "mute") + ) +) + +(define-method get_mute + (of-object "GstStreamVolume") + (c-name "gst_stream_volume_get_mute") + (return-type "gboolean") +) + +(define-function stream_volume_convert_volume + (c-name "gst_stream_volume_convert_volume") + (return-type "gdouble") + (parameters + '("GstStreamVolumeFormat" "from") + '("GstStreamVolumeFormat" "to") + '("gdouble" "val") + ) +) + + +;; From /opt/gnome/include/gstreamer-0.7/gst/tuner/tuner.h + +(define-function gst_tuner_get_type + (c-name "gst_tuner_get_type") + (return-type "GType") +) + +(define-method list_channels + (of-object "GstTuner") + (c-name "gst_tuner_list_channels") + (return-type "const-GList*") +) + +(define-method set_channel + (of-object "GstTuner") + (c-name "gst_tuner_set_channel") + (return-type "none") + (parameters + '("GstTunerChannel*" "channel") + ) +) + +(define-method get_channel + (of-object "GstTuner") + (c-name "gst_tuner_get_channel") + (return-type "GstTunerChannel*") +) + +(define-method list_norms + (of-object "GstTuner") + (c-name "gst_tuner_list_norms") + (return-type "const-GList*") +) + +(define-method set_norm + (of-object "GstTuner") + (c-name "gst_tuner_set_norm") + (return-type "none") + (parameters + '("GstTunerNorm*" "channel") + ) +) + +(define-method get_norm + (of-object "GstTuner") + (c-name "gst_tuner_get_norm") + (return-type "GstTunerNorm*") +) + +(define-method set_frequency + (of-object "GstTuner") + (c-name "gst_tuner_set_frequency") + (return-type "none") + (parameters + '("GstTunerChannel*" "channel") + '("gulong" "frequency") + ) +) + +(define-method get_frequency + (of-object "GstTuner") + (c-name "gst_tuner_get_frequency") + (return-type "gulong") + (parameters + '("GstTunerChannel*" "channel") + ) +) + +(define-method signal_strength + (of-object "GstTuner") + (c-name "gst_tuner_signal_strength") + (return-type "gint") + (parameters + '("GstTunerChannel*" "channel") + ) +) + +(define-method find_norm_by_name + (of-object "GstTuner") + (c-name "gst_tuner_find_norm_by_name") + (return-type "GstTunerNorm*") + (parameters + '("gchar*" "norm") + ) +) + +(define-method find_channel_by_name + (of-object "GstTuner") + (c-name "gst_tuner_find_channel_by_name") + (return-type "GstTunerChannel*") + (parameters + '("gchar*" "channel") + ) +) + +(define-method channel_changed + (of-object "GstTuner") + (c-name "gst_tuner_channel_changed") + (return-type "none") + (parameters + '("GstTunerChannel*" "channel") + ) +) + +(define-method norm_changed + (of-object "GstTuner") + (c-name "gst_tuner_norm_changed") + (return-type "none") + (parameters + '("GstTunerNorm*" "norm") + ) +) + +(define-method frequency_changed + (of-object "GstTuner") + (c-name "gst_tuner_frequency_changed") + (return-type "none") + (parameters + '("GstTunerChannel*" "channel") + '("gulong" "frequency") + ) +) + +(define-method signal_changed + (of-object "GstTuner") + (c-name "gst_tuner_signal_changed") + (return-type "none") + (parameters + '("GstTunerChannel*" "channel") + '("gint" "signal") + ) +) + +(define-virtual list_channels + (of-object "GstTuner") + (return-type "const-GList*") +) + +(define-virtual set_channel + (of-object "GstTuner") + (return-type "none") + (parameters + '("GstTunerChannel*" "channel") + ) +) + +(define-virtual get_channel + (of-object "GstTuner") + (return-type "GstTunerChannel*") +) + +(define-virtual list_norms + (of-object "GstTuner") + (return-type "const-GList*") +) + +(define-virtual set_norm + (of-object "GstTuner") + (return-type "none") + (parameters + '("GstTunerNorm*" "channel") + ) +) + +(define-virtual get_norm + (of-object "GstTuner") + (return-type "GstTunerNorm*") +) + +(define-virtual set_frequency + (of-object "GstTuner") + (return-type "none") + (parameters + '("GstTunerChannel*" "channel") + '("gulong" "frequency") + ) +) + +(define-virtual get_frequency + (of-object "GstTuner") + (return-type "gulong") + (parameters + '("GstTunerChannel*" "channel") + ) +) + +(define-virtual signal_strength + (of-object "GstTuner") + (return-type "gint") + (parameters + '("GstTunerChannel*" "channel") + ) +) + +;; -*- scheme -*- +; object definitions ... +;; Enumerations and flags ... + + +;; From videoorientation.h + +;; +;; interface definitions ... +;; + +(define-interface VideoOrientation + (in-module "Gst") + (c-name "GstVideoOrientation") + (gtype-id "GST_TYPE_VIDEO_ORIENTATION") + (vtable "GstVideoOrientationClass") +) + +(define-function gst_video_orientation_get_type + (c-name "gst_video_orientation_get_type") + (return-type "GType") +) + +(define-method get_hflip + (of-object "GstVideoOrientation") + (c-name "gst_video_orientation_get_hflip") + (return-type "gboolean") + (parameters + '("gboolean*" "flip") + ) +) + +(define-method get_vflip + (of-object "GstVideoOrientation") + (c-name "gst_video_orientation_get_vflip") + (return-type "gboolean") + (parameters + '("gboolean*" "flip") + ) +) + +(define-method get_hcenter + (of-object "GstVideoOrientation") + (c-name "gst_video_orientation_get_hcenter") + (return-type "gboolean") + (parameters + '("gint*" "center") + ) +) + +(define-method get_vcenter + (of-object "GstVideoOrientation") + (c-name "gst_video_orientation_get_vcenter") + (return-type "gboolean") + (parameters + '("gint*" "center") + ) +) + +(define-method set_hflip + (of-object "GstVideoOrientation") + (c-name "gst_video_orientation_set_hflip") + (return-type "gboolean") + (parameters + '("gboolean" "flip") + ) +) + +(define-method set_vflip + (of-object "GstVideoOrientation") + (c-name "gst_video_orientation_set_vflip") + (return-type "gboolean") + (parameters + '("gboolean" "flip") + ) +) + +(define-method set_hcenter + (of-object "GstVideoOrientation") + (c-name "gst_video_orientation_set_hcenter") + (return-type "gboolean") + (parameters + '("gint" "center") + ) +) + +(define-method set_vcenter + (of-object "GstVideoOrientation") + (c-name "gst_video_orientation_set_vcenter") + (return-type "gboolean") + (parameters + '("gint" "center") + ) +) + + diff --git a/gst/interfaces.override b/gst/interfaces.override new file mode 100644 index 0000000..ad06738 --- /dev/null +++ b/gst/interfaces.override @@ -0,0 +1,486 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2004 David I. Lehn + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: David I. Lehn + */ +%% +headers +#ifdef HAVE_CONFIG_H +# include +#endif + +#define NO_IMPORT_PYGOBJECT +#include "common.h" +#include "pygst.h" + +#include + +#include +#include +#include +#include +#include +#include +#ifdef HAVE_STREAM_VOLUME_INTERFACE +#include +#endif + +%% +modulename gst.interfaces +%% +import gobject.GObject as PyGObject_Type +import gst.Object as PyGstObject_Type +import gst.Structure as PyGstStructure_Type +import gst.Element as PyGstElement_Type +import gst.Query as PyGstQuery_Type +%% +include + xoverlay.override + gstversion.override +%% +ignore-glob + _* + gstinterfaces_*init + *_get_type +%% +override gst_tuner_list_channels noargs +static PyObject * +_wrap_gst_tuner_list_channels(PyGObject *self) +{ + const GList *l, *list; + PyObject *py_list; + + g_return_val_if_fail (GST_IS_TUNER (self->obj), PyList_New(0)); + + pyg_begin_allow_threads; + list = gst_tuner_list_channels(GST_TUNER(self->obj)); + pyg_end_allow_threads; + + py_list = PyList_New(0); + for (l = list; l; l = l->next) { + GstTunerChannel *channel = (GstTunerChannel*)l->data; + PyObject *py_channel = pygobject_new(G_OBJECT(channel)); + PyList_Append(py_list, py_channel); + Py_DECREF(py_channel); + } + + return py_list; +} +%% +override gst_tuner_list_norms noargs +static PyObject * +_wrap_gst_tuner_list_norms(PyGObject *self) +{ + const GList *l, *list; + PyObject *py_list; + + g_return_val_if_fail (GST_IS_TUNER (self->obj), PyList_New(0)); + + pyg_begin_allow_threads; + list = gst_tuner_list_norms(GST_TUNER(self->obj)); + pyg_end_allow_threads; + + py_list = PyList_New(0); + for (l = list; l; l = l->next) { + GstTunerNorm *norm = (GstTunerNorm*)l->data; + PyObject *py_norm = pygobject_new(G_OBJECT(norm)); + PyList_Append(py_list, py_norm); + Py_DECREF(py_norm); + } + + return py_list; +} +%% +override gst_mixer_list_tracks noargs +static PyObject * +_wrap_gst_mixer_list_tracks(PyGObject *self) +{ + const GList *l, *list; + PyObject *py_list; + + g_return_val_if_fail (GST_IS_MIXER (self->obj), PyList_New(0)); + + pyg_begin_allow_threads; + list = gst_mixer_list_tracks(GST_MIXER(self->obj)); + pyg_end_allow_threads; + + py_list = PyList_New(0); + for (l = list; l; l = l->next) { + GstMixerTrack *track = (GstMixerTrack*)l->data; + PyObject *py_track = pygobject_new(G_OBJECT(track)); + PyList_Append(py_list, py_track); + Py_DECREF(py_track); + } + + return py_list; +} +%% +override gst_color_balance_list_channels noargs +static PyObject * +_wrap_gst_color_balance_list_channels(PyGObject *self) +{ + const GList *l, *list; + PyObject *py_list; + + g_return_val_if_fail (GST_IS_COLOR_BALANCE (self->obj), PyList_New(0)); + + pyg_begin_allow_threads; + list = gst_color_balance_list_channels(GST_COLOR_BALANCE(self->obj)); + pyg_end_allow_threads; + + py_list = PyList_New(0); + for (l = list; l; l = l->next) { + GstColorBalanceChannel *channel = (GstColorBalanceChannel*)l->data; + PyObject *py_channel = pygobject_new(G_OBJECT(channel)); + PyList_Append(py_list, py_channel); + Py_DECREF(py_channel); + } + + return py_list; +} +%% +override gst_mixer_options_get_values noargs +static PyObject * +_wrap_gst_mixer_options_get_values (PyGObject *self) +{ + GList *l, *list; + PyObject *py_list; + + g_return_val_if_fail (GST_IS_MIXER_OPTIONS (self->obj), PyList_New(0)); + + pyg_begin_allow_threads; + list = gst_mixer_options_get_values (GST_MIXER_OPTIONS (self->obj)); + pyg_end_allow_threads; + + py_list = PyList_New(0); + for (l = list; l; l = l->next) { + gchar *value = (gchar *) l->data; + PyObject *py_string = PyString_FromString(g_strdup(value)); + PyList_Append(py_list, py_string); + Py_DECREF (py_string); + } + + return py_list; +} + +%% +override gst_mixer_set_volume kwargs +static PyObject * +_wrap_gst_mixer_set_volume (PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "track", "volumes", NULL }; + PyGObject *track; + PyObject *py_tuple; + gint *volumes = NULL; + gint channels; + int i; + PyObject *ret; + + if (!PyArg_ParseTupleAndKeywords (args, kwargs, "O!O:GstMixer.set_volume", + kwlist, &PyGstMixerTrack_Type, &track, &py_tuple)) + return NULL; + + g_object_get (GST_MIXER_TRACK (track->obj), "num-channels", &channels, + NULL); + + if (channels != PyTuple_Size (py_tuple)) { + PyErr_Format (PyExc_TypeError, + "Track channel count %d != volume tuple size %d", + channels, (gint) PyTuple_Size (py_tuple)); + return NULL; + } + + Py_INCREF(Py_None); + ret = Py_None; + + if (channels == 0) + return ret; + + volumes = g_malloc (channels * sizeof (gint)); + for (i = 0; i < channels; ++i) { + volumes[i] = PyInt_AsLong (PyTuple_GET_ITEM (py_tuple, i)); + } + + pyg_begin_allow_threads; + gst_mixer_set_volume (GST_MIXER (self->obj), GST_MIXER_TRACK (track->obj), + volumes); + pyg_end_allow_threads; + + g_free (volumes); + + return ret; +} + +%% +override gst_mixer_get_volume kwargs +static PyObject * +_wrap_gst_mixer_get_volume (PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "track", NULL }; + PyGObject *track; + PyObject *py_tuple; + gint *volumes = NULL; + gint channels; + int i; + + if (!PyArg_ParseTupleAndKeywords (args, kwargs, "O!:GstMixer.get_volume", + kwlist, &PyGstMixerTrack_Type, &track)) + return NULL; + + g_object_get (GST_MIXER_TRACK (track->obj), "num-channels", &channels, + NULL); + + volumes = g_malloc (channels * sizeof (gint)); + /* 0 channels will cause volume to be a NULL pointer, but we still want + * our (empty) tuple */ + if (channels) { + pyg_begin_allow_threads; + gst_mixer_get_volume (GST_MIXER (self->obj), GST_MIXER_TRACK (track->obj), + volumes); + pyg_end_allow_threads; + } + + py_tuple = PyTuple_New (channels); + + for (i = 0; i < channels; ++i) { + PyTuple_SET_ITEM (py_tuple, i, PyInt_FromLong (volumes[i])); + } + g_free (volumes); + + return py_tuple; +} + +%% +override gst_property_probe_get_property args +static PyObject * +_wrap_gst_property_probe_get_property (PyGObject *self, PyObject *args) +{ + const char *name; + const GParamSpec *spec; + + if (!PyArg_ParseTuple(args, "s:ProbeProperty.get_property", &name)) + return NULL; + + pyg_begin_allow_threads; + spec = gst_property_probe_get_property (GST_PROPERTY_PROBE (self->obj), + name); + pyg_end_allow_threads; + + if (!spec) { + PyErr_Format(PyExc_ValueError, "unknown property: %s", name); + return NULL; + } + + return pyg_param_spec_new((GParamSpec*)spec); +} +%% +override gst_property_probe_get_properties noargs +static PyObject * +_wrap_gst_property_probe_get_properties (PyGObject *self) +{ + const GList *l, *list; + PyObject *py_list; + + g_return_val_if_fail (GST_IS_PROPERTY_PROBE (self->obj), PyList_New(0)); + + pyg_begin_allow_threads; + list = gst_property_probe_get_properties (GST_PROPERTY_PROBE (self->obj)); + pyg_end_allow_threads; + + py_list = PyList_New(0); + for (l = list; l; l = l->next) { + GParamSpec *spec = (GParamSpec*)l->data; + PyObject *py_gspec = pyg_param_spec_new((GParamSpec*)spec); + PyList_Append(py_list, py_gspec); + Py_DECREF(py_gspec); + } + + return py_list; +} +%% +override gst_property_probe_get_values_name args +static PyObject * +_wrap_gst_property_probe_get_values_name (PyGObject *self, PyObject *args) +{ + const char *name; + GValueArray *array; + PyObject *py_list; + int i; + + g_return_val_if_fail (GST_IS_PROPERTY_PROBE (self->obj), PyList_New(0)); + + if (!PyArg_ParseTuple(args, "s:ProbeProperty.get_values_name", &name)) + return NULL; + + pyg_begin_allow_threads; + array = gst_property_probe_get_values_name (GST_PROPERTY_PROBE (self->obj), + name); + pyg_end_allow_threads; + + py_list = PyList_New(0); + + if (array) { + for (i = 0; i < array->n_values; i++) { + GValue *value = g_value_array_get_nth(array, i); + PyObject *py_value = pyg_value_as_pyobject(value, TRUE); + PyList_Append(py_list, py_value); + Py_DECREF(py_value); + + } + g_value_array_free(array); + } + + return py_list; +} +%% +override gst_mixer_message_parse_mute_toggled noargs +static PyObject * +_wrap_gst_mixer_message_parse_mute_toggled (PyGstMiniObject * self) +{ + GstMixerTrack *track; + gboolean mute; + + if (GST_MESSAGE(self->obj)->type != GST_MIXER_MESSAGE_MUTE_TOGGLED) { + PyErr_SetString(PyExc_TypeError, "Message is not a mute-toggled message"); + return NULL; + } + gst_mixer_message_parse_mute_toggled (GST_MESSAGE(self->obj), &track, &mute); + + return Py_BuildValue("(OO)", + pygobject_new(G_OBJECT (track)), + PyBool_FromLong(mute)); +} +%% +override gst_mixer_message_parse_record_toggled noargs +static PyObject * +_wrap_gst_mixer_message_parse_record_toggled (PyGstMiniObject * self) +{ + GstMixerTrack *track; + gboolean record; + + if (GST_MESSAGE(self->obj)->type != GST_MIXER_MESSAGE_RECORD_TOGGLED) { + PyErr_SetString(PyExc_TypeError, "Message is not a record-toggled message"); + return NULL; + } + gst_mixer_message_parse_record_toggled (GST_MESSAGE(self->obj), &track, &record); + + return Py_BuildValue("(OO)", + pygobject_new(G_OBJECT (track)), + PyBool_FromLong(record)); +} +%% +override gst_mixer_message_parse_volume_changed noargs +static PyObject * +_wrap_gst_mixer_message_parse_volume_changed (PyGstMiniObject * self) +{ + GstMixerTrack *track; + gint *volumes; + gint num_channels; + PyObject *pvolumes; + int i; + + if (GST_MESSAGE(self->obj)->type != GST_MIXER_MESSAGE_VOLUME_CHANGED) { + PyErr_SetString(PyExc_TypeError, "Message is not a volume-changed message"); + return NULL; + } + gst_mixer_message_parse_volume_changed (GST_MESSAGE(self->obj), &track, &volumes, &num_channels); + + pvolumes = PyList_New (num_channels); + + for (i = 0; i < num_channels; ++i) { + PyList_SET_ITEM (pvolumes, i, PyInt_FromLong (volumes[i])); + } + g_free (volumes); + + return Py_BuildValue("(OOi)", + pygobject_new(G_OBJECT (track)), + pvolumes, num_channels); +} +%% +override gst_mixer_message_parse_option_changed noargs +static PyObject * +_wrap_gst_mixer_message_parse_option_changed (PyGstMiniObject * self) +{ + GstMixerOptions *options; + const gchar *value = NULL; + + if (GST_MESSAGE(self->obj)->type != GST_MIXER_MESSAGE_OPTION_CHANGED) { + PyErr_SetString(PyExc_TypeError, "Message is not a option-changed message"); + return NULL; + } + gst_mixer_message_parse_option_changed (GST_MESSAGE(self->obj), &options, &value); + + return Py_BuildValue("(Os)", + pygobject_new(G_OBJECT (options)), + value); +} +%% +override gst_video_orientation_get_hflip noargs +static PyObject * +_wrap_gst_video_orientation_get_hflip (PyGObject * self) +{ + gboolean flip, res; + + res = gst_video_orientation_get_hflip (GST_VIDEO_ORIENTATION (self->obj), &flip); + + return Py_BuildValue("(OO)", + PyBool_FromLong(res), + PyBool_FromLong(flip)); +} +%% +override gst_video_orientation_get_vflip noargs +static PyObject * +_wrap_gst_video_orientation_get_vflip (PyGObject * self) +{ + gboolean flip, res; + + res = gst_video_orientation_get_vflip (GST_VIDEO_ORIENTATION (self->obj), &flip); + + return Py_BuildValue("(OO)", + PyBool_FromLong(res), + PyBool_FromLong(flip)); +} +%% +override gst_video_orientation_get_hcenter noargs +static PyObject * +_wrap_gst_video_orientation_get_hcenter (PyGObject * self) +{ + gboolean res; + gint center; + + res = gst_video_orientation_get_hcenter (GST_VIDEO_ORIENTATION (self->obj), ¢er); + + return Py_BuildValue("(Oi)", + PyBool_FromLong(res), + center); +} +%% +override gst_video_orientation_get_vcenter noargs +static PyObject * +_wrap_gst_video_orientation_get_vcenter (PyGObject * self) +{ + gboolean res; + gint center; + + res = gst_video_orientation_get_vcenter (GST_VIDEO_ORIENTATION (self->obj), ¢er); + + return Py_BuildValue("(Oi)", + PyBool_FromLong(res), + center); +} diff --git a/gst/interfacesmodule.c b/gst/interfacesmodule.c new file mode 100644 index 0000000..b297db4 --- /dev/null +++ b/gst/interfacesmodule.c @@ -0,0 +1,55 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2004 David I. Lehn + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: David I. Lehn + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +/* include this first, before NO_IMPORT_PYGOBJECT is defined */ +#include +#include +#include "pygst.h" + +void pyinterfaces_register_classes (PyObject * d); +void pyinterfaces_add_constants (PyObject * module, const gchar * strip_prefix); + +extern PyMethodDef pyinterfaces_functions[]; + +DL_EXPORT (void) +initinterfaces (void) +{ + PyObject *m, *d; + + init_pygobject (); + pygst_init (); + + m = Py_InitModule ("interfaces", pyinterfaces_functions); + d = PyModule_GetDict (m); + + pyinterfaces_register_classes (d); + pyinterfaces_add_constants (m, "GST_"); + + if (PyErr_Occurred ()) { + PyErr_Print (); + Py_FatalError ("can't initialize module gst.interfaces"); + } +} diff --git a/gst/libs.defs b/gst/libs.defs new file mode 100644 index 0000000..17436c9 --- /dev/null +++ b/gst/libs.defs @@ -0,0 +1,684 @@ +;; -*- scheme -*- +; object definitions ... + +(define-object ControlSource + (in-module "Gst") + (parent "GObject") + (c-name "GstControlSource") + (gtype-id "GST_TYPE_CONTROL_SOURCE") +) + +(define-object Controller + (in-module "Gst") + (parent "GObject") + (c-name "GstController") + (gtype-id "GST_TYPE_CONTROLLER") +) + +(define-object InterpolationControlSource + (in-module "Gst") + (parent "GstControlSource") + (c-name "GstInterpolationControlSource") + (gtype-id "GST_TYPE_INTERPOLATION_CONTROL_SOURCE") +) + +(define-object LFOControlSource + (in-module "Gst") + (parent "GstControlSource") + (c-name "GstLFOControlSource") + (gtype-id "GST_TYPE_LFO_CONTROL_SOURCE") +) + + +;; Enumerations and flags ... + +(define-enum InterpolateMode + (in-module "Gst") + (c-name "GstInterpolateMode") + (values + '("none" "GST_INTERPOLATE_NONE") + '("trigger" "GST_INTERPOLATE_TRIGGER") + '("linear" "GST_INTERPOLATE_LINEAR") + '("quadratic" "GST_INTERPOLATE_QUADRATIC") + '("cubic" "GST_INTERPOLATE_CUBIC") + '("user" "GST_INTERPOLATE_USER") + ) +) + +(define-enum LFOWaveform + (in-module "Gst") + (c-name "GstLFOWaveform") + (gtype-id "GST_TYPE_LFO_WAVEFORM") + (values + '("sine" "GST_LFO_WAVEFORM_SINE") + '("square" "GST_LFO_WAVEFORM_SQUARE") + '("saw" "GST_LFO_WAVEFORM_SAW") + '("reverse-saw" "GST_LFO_WAVEFORM_REVERSE_SAW") + '("triangle" "GST_LFO_WAVEFORM_TRIANGLE") + ) +) + +(define-enum DPVersion + (in-module "Gst") + (c-name "GstDPVersion") + (gtype-id "GST_TYPE_DP_VERSION") + (values + '("0-2" "GST_DP_VERSION_0_2") + '("1-0" "GST_DP_VERSION_1_0") + ) +) + +(define-flags DPHeaderFlag + (in-module "Gst") + (c-name "GstDPHeaderFlag") + (values + '("none" "GST_DP_HEADER_FLAG_NONE") + '("crc-header" "GST_DP_HEADER_FLAG_CRC_HEADER") + '("crc-payload" "GST_DP_HEADER_FLAG_CRC_PAYLOAD") + '("crc" "GST_DP_HEADER_FLAG_CRC") + ) +) + +(define-enum DPPayloadType + (in-module "Gst") + (c-name "GstDPPayloadType") + (values + '("none" "GST_DP_PAYLOAD_NONE") + '("buffer" "GST_DP_PAYLOAD_BUFFER") + '("caps" "GST_DP_PAYLOAD_CAPS") + '("event-none" "GST_DP_PAYLOAD_EVENT_NONE") + ) +) + +;; From ../gstreamer/libs/gst/controller/gst-controller.h + +(define-function gst_controller_get_type + (c-name "gst_controller_get_type") + (return-type "GType") +) + +(define-function gst_controller_new_valist + (c-name "gst_controller_new_valist") + (return-type "GstController*") + (parameters + '("GObject*" "object") + '("va_list" "var_args") + ) +) + +(define-function gst_controller_new_list + (c-name "gst_controller_new_list") + (is-constructor-of "GstController") + (return-type "GstController*") + (parameters + '("GObject*" "object") + '("GList*" "list") + ) +) + +(define-function gst_controller_new + (c-name "gst_controller_new") + (return-type "GstController*") + (parameters + '("GObject*" "object") + ) + (varargs #t) +) + +(define-method remove_properties_valist + (of-object "GstController") + (c-name "gst_controller_remove_properties_valist") + (return-type "gboolean") + (parameters + '("va_list" "var_args") + ) +) + +(define-method remove_properties + (of-object "GstController") + (c-name "gst_controller_remove_properties") + (return-type "gboolean") + (parameters + ) + (varargs #t) +) + +(define-method remove_properties_list + (of-object "GstController") + (c-name "gst_controller_remove_properties_list") + (return-type "gboolean") + (parameters + '("GList*" "list") + ) +) + +(define-method set_disabled + (of-object "GstController") + (c-name "gst_controller_set_disabled") + (return-type "none") + (parameters + '("gboolean" "disabled") + ) +) + +(define-method set_property_disabled + (of-object "GstController") + (c-name "gst_controller_set_property_disabled") + (return-type "none") + (parameters + '("gchar*" "property_name") + '("gboolean" "disabled") + ) +) + +(define-method set_control_source + (of-object "GstController") + (c-name "gst_controller_set_control_source") + (return-type "gboolean") + (parameters + '("gchar*" "property_name") + '("GstControlSource*" "csource") + ) +) + +(define-method get_control_source + (of-object "GstController") + (c-name "gst_controller_get_control_source") + (return-type "GstControlSource*") + (parameters + '("gchar*" "property_name") + ) +) +(define-method set + (of-object "GstController") + (c-name "gst_controller_set") + (return-type "gboolean") + (parameters + '("gchar*" "property_name") + '("GstClockTime" "timestamp") + '("GValue*" "value") + ) +) + +(define-method set_from_list + (of-object "GstController") + (c-name "gst_controller_set_from_list") + (return-type "gboolean") + (parameters + '("gchar*" "property_name") + '("GSList*" "timedvalues") + ) +) + +(define-method unset + (of-object "GstController") + (c-name "gst_controller_unset") + (return-type "gboolean") + (parameters + '("gchar*" "property_name") + '("GstClockTime" "timestamp") + ) +) + +(define-method unset_all + (of-object "GstController") + (c-name "gst_controller_unset_all") + (return-type "gboolean") + (parameters + '("gchar*" "property_name") + ) +) + +(define-method get + (of-object "GstController") + (c-name "gst_controller_get") + (return-type "GValue*") + (parameters + '("gchar*" "property_name") + '("GstClockTime" "timestamp") + ) +) + +(define-method get_all + (of-object "GstController") + (c-name "gst_controller_get_all") + (return-type "const-GList*") + (parameters + '("gchar*" "property_name") + ) +) + +(define-method suggest_next_sync + (of-object "GstController") + (c-name "gst_controller_suggest_next_sync") + (return-type "GstClockTime") +) + +(define-method sync_values + (of-object "GstController") + (c-name "gst_controller_sync_values") + (return-type "gboolean") + (parameters + '("GstClockTime" "timestamp") + ) +) + +(define-method get_value_arrays + (of-object "GstController") + (c-name "gst_controller_get_value_arrays") + (return-type "gboolean") + (parameters + '("GstClockTime" "timestamp") + '("GSList*" "value_arrays") + ) +) + +(define-method get_value_array + (of-object "GstController") + (c-name "gst_controller_get_value_array") + (return-type "gboolean") + (parameters + '("GstClockTime" "timestamp") + '("GstValueArray*" "value_array") + ) +) + +(define-method set_interpolation_mode + (of-object "GstController") + (c-name "gst_controller_set_interpolation_mode") + (return-type "gboolean") + (parameters + '("gchar*" "property_name") + '("GstInterpolateMode" "mode") + ) +) + +(define-function object_control_properties + (c-name "gst_object_control_properties") + (return-type "GstController*") + (parameters + '("GObject*" "object")) + (varargs #t) +) + +(define-function object_uncontrol_properties + (c-name "gst_object_uncontrol_properties") + (return-type "gboolean") + (parameters + '("GObject*" "object") + ) + (varargs #t) +) + +(define-function object_get_controller + (c-name "gst_object_get_controller") + (return-type "GstController*") + (parameters + '("GObject*" "object") + ) +) + +(define-function object_set_controller + (c-name "gst_object_set_controller") + (return-type "gboolean") + (parameters + '("GObject*" "object") + '("GstController*" "controller") + ) +) + +(define-function object_suggest_next_sync + (c-name "gst_object_suggest_next_sync") + (return-type "GstClockTime") + (parameters + '("GObject*" "object") + ) +) + +(define-function object_sync_values + (c-name "gst_object_sync_values") + (return-type "gboolean") + (parameters + '("GObject*" "object") + '("GstClockTime" "timestamp") + ) +) + +(define-function gst_object_set_control_source + (c-name "gst_object_set_control_source") + (return-type "gboolean") + (parameters + '("GObject*" "object") + '("gchar*" "property_name") + '("GstControlSource*" "csource") + ) +) + +(define-function gst_object_get_control_source + (c-name "gst_object_get_control_source") + (return-type "GstControlSource*") + (parameters + '("GObject*" "object") + '("gchar*" "property_name") + ) +) + +(define-function object_get_value_arrays + (c-name "gst_object_get_value_arrays") + (return-type "gboolean") + (parameters + '("GObject*" "object") + '("GstClockTime" "timestamp") + '("GSList*" "value_arrays") + ) +) + +(define-function object_get_value_array + (c-name "gst_object_get_value_array") + (return-type "gboolean") + (parameters + '("GObject*" "object") + '("GstClockTime" "timestamp") + '("GstValueArray*" "value_array") + ) +) + +(define-function object_get_control_rate + (c-name "gst_object_get_control_rate") + (return-type "GstClockTime") + (parameters + '("GObject*" "object") + ) +) + +(define-function object_set_control_rate + (c-name "gst_object_set_control_rate") + (return-type "none") + (parameters + '("GObject*" "object") + '("GstClockTime" "control_rate") + ) +) + +(define-function gst_controller_init + (c-name "gst_controller_init") + (return-type "gboolean") + (parameters + '("int*" "argc") + '("char***" "argv") + ) +) + + + +;; From gstcontrolsource.h + +(define-function gst_control_source_get_type + (c-name "gst_control_source_get_type") + (return-type "GType") + (parameters + ) +) + +(define-method get_value + (of-object "GstControlSource") + (c-name "gst_control_source_get_value") + (return-type "gboolean") + (parameters + '("GstClockTime" "timestamp") + '("GValue*" "value") + ) +) + +(define-method get_value_array + (of-object "GstControlSource") + (c-name "gst_control_source_get_value_array") + (return-type "gboolean") + (parameters + '("GstClockTime" "timestamp") + '("GstValueArray*" "value_array") + ) +) + +(define-method bind + (of-object "GstControlSource") + (c-name "gst_control_source_bind") + (return-type "gboolean") + (parameters + '("GParamSpec*" "pspec") + ) +) + + + +;; From gstinterpolationcontrolsource.h + +(define-function gst_interpolation_control_source_get_type + (c-name "gst_interpolation_control_source_get_type") + (return-type "GType") + (parameters + ) +) + +(define-function gst_interpolation_control_source_new + (c-name "gst_interpolation_control_source_new") + (is-constructor-of "GstInterpolationControlSource") + (return-type "GstInterpolationControlSource*") + (parameters + ) +) + +(define-method set_interpolation_mode + (of-object "GstInterpolationControlSource") + (c-name "gst_interpolation_control_source_set_interpolation_mode") + (return-type "gboolean") + (parameters + '("GstInterpolateMode" "mode") + ) +) + +(define-method set + (of-object "GstInterpolationControlSource") + (c-name "gst_interpolation_control_source_set") + (return-type "gboolean") + (parameters + '("GstClockTime" "timestamp") + '("GValue*" "value") + ) +) + +(define-method set_from_list + (of-object "GstInterpolationControlSource") + (c-name "gst_interpolation_control_source_set_from_list") + (return-type "gboolean") + (parameters + '("GSList*" "timedvalues") + ) +) + +(define-method unset + (of-object "GstInterpolationControlSource") + (c-name "gst_interpolation_control_source_unset") + (return-type "gboolean") + (parameters + '("GstClockTime" "timestamp") + ) +) + +(define-method unset_all + (of-object "GstInterpolationControlSource") + (c-name "gst_interpolation_control_source_unset_all") + (return-type "none") +) + +(define-method get_all + (of-object "GstInterpolationControlSource") + (c-name "gst_interpolation_control_source_get_all") + (return-type "GList*") +) + +(define-method get_count + (of-object "GstInterpolationControlSource") + (c-name "gst_interpolation_control_source_get_count") + (return-type "gint") +) + + + +;; From gstlfocontrolsource.h + +(define-function gst_lfo_control_source_get_type + (c-name "gst_lfo_control_source_get_type") + (return-type "GType") + (parameters + ) +) + +(define-function gst_lfo_waveform_get_type + (c-name "gst_lfo_waveform_get_type") + (return-type "GType") + (parameters + ) +) + +(define-function gst_lfo_control_source_new + (c-name "gst_lfo_control_source_new") + (is-constructor-of "GstLfoControlSource") + (return-type "GstLFOControlSource*") + (parameters + ) +) + +;; From ../gstreamer/libs/gst/dataprotocol/dataprotocol.h + +(define-function dp_init + (c-name "gst_dp_init") + (return-type "none") +) + +(define-function dp_packetizer_new + (c-name "gst_dp_packetizer_new") + (is-constructor-of "GstDpPacketizer") + (return-type "GstDPPacketizer*") + (parameters + '("GstDPVersion" "version") + ) +) + +(define-function gst_dp_crc + (c-name "gst_dp_crc") + (return-type "guint16") + (parameters + '("const-guint8*" "buffer") + '("guint" "length") + ) +) + +(define-function dp_header_payload_length + (c-name "gst_dp_header_payload_length") + (return-type "guint32") + (parameters + '("const-gchar*" "header") + ) +) + +(define-function dp_header_payload_type + (c-name "gst_dp_header_payload_type") + (return-type "GstDPPayloadType") + (parameters + '("const-gchar*" "header") + ) +) + +(define-function dp_header_from_buffer + (c-name "gst_dp_header_from_buffer") + (return-type "gboolean") + (parameters + '("const-GstBuffer*" "buffer") + '("GstDPHeaderFlag" "flags") + '("guint*" "length") + '("guint8**" "header") + ) +) + +(define-function dp_packet_from_caps + (c-name "gst_dp_packet_from_caps") + (return-type "gboolean") + (parameters + '("const-GstCaps*" "caps") + '("GstDPHeaderFlag" "flags") + '("guint*" "length") + '("guint8**" "header") + '("guint8**" "payload") + ) +) + +(define-function dp_packet_from_event + (c-name "gst_dp_packet_from_event") + (return-type "gboolean") + (parameters + '("const-GstEvent*" "event") + '("GstDPHeaderFlag" "flags") + '("guint*" "length") + '("guint8**" "header") + '("guint8**" "payload") + ) +) + +(define-function dp_buffer_from_header + (c-name "gst_dp_buffer_from_header") + (return-type "GstBuffer*") + (parameters + '("guint" "header_length") + '("const-guint8*" "header") + ) +) + +(define-function dp_caps_from_packet + (c-name "gst_dp_caps_from_packet") + (return-type "GstCaps*") + (parameters + '("guint" "header_length") + '("const-guint8*" "header") + '("const-guint8*" "payload") + ) +) + +(define-function dp_event_from_packet + (c-name "gst_dp_event_from_packet") + (return-type "GstEvent*") + (parameters + '("guint" "header_length") + '("const-guint8*" "header") + '("const-guint8*" "payload") + ) +) + +(define-function dp_validate_header + (c-name "gst_dp_validate_header") + (return-type "gboolean") + (parameters + '("guint" "header_length") + '("const-guint8*" "header") + ) +) + +(define-function dp_validate_payload + (c-name "gst_dp_validate_payload") + (return-type "gboolean") + (parameters + '("guint" "header_length") + '("const-guint8*" "header") + '("const-guint8*" "payload") + ) +) + +(define-function dp_validate_packet + (c-name "gst_dp_validate_packet") + (return-type "gboolean") + (parameters + '("guint" "header_length") + '("const-guint8*" "header") + '("const-guint8*" "payload") + ) +) diff --git a/gst/pbutils.defs b/gst/pbutils.defs new file mode 100644 index 0000000..a662eaf --- /dev/null +++ b/gst/pbutils.defs @@ -0,0 +1,1056 @@ +;; -*- scheme -*- +; object definitions ... +;; Enumerations and flags ... + +(define-boxed InstallPluginsContext + (in-module "Gst") + (c-name "GstInstallPluginsContext") + (gtype-id "GST_TYPE_INSTALL_PLUGINS_CONTEXT") +) + +(define-enum InstallPluginsReturn + (in-module "Gst") + (c-name "GstInstallPluginsReturn") + (gtype-id "GST_TYPE_INSTALL_PLUGINS_RETURN") + (values + '("success" "GST_INSTALL_PLUGINS_SUCCESS") + '("not-found" "GST_INSTALL_PLUGINS_NOT_FOUND") + '("error" "GST_INSTALL_PLUGINS_ERROR") + '("partial-success" "GST_INSTALL_PLUGINS_PARTIAL_SUCCESS") + '("user-abort" "GST_INSTALL_PLUGINS_USER_ABORT") + '("crashed" "GST_INSTALL_PLUGINS_CRASHED") + '("invalid" "GST_INSTALL_PLUGINS_INVALID") + '("started-ok" "GST_INSTALL_PLUGINS_STARTED_OK") + '("internal-failure" "GST_INSTALL_PLUGINS_INTERNAL_FAILURE") + '("helper-missing" "GST_INSTALL_PLUGINS_HELPER_MISSING") + '("install-in-progress" "GST_INSTALL_PLUGINS_INSTALL_IN_PROGRESS") + ) +) + +(define-object Discoverer + (in-module "Gst") + (parent "GObject") + (c-name "GstDiscoverer") + (gtype-id "GST_TYPE_DISCOVERER") +) + +(define-enum DiscovererResult + (in-module "Gst") + (c-name "GstDiscovererResult") + (gtype-id "GST_TYPE_DISCOVERER_RESULT") + (values + '("ok" "GST_DISCOVERER_OK") + '("uri-invalid" "GST_DISCOVERER_URI_INVALID") + '("error" "GST_DISCOVERER_ERROR") + '("timeout" "GST_DISCOVERER_TIMEOUT") + '("busy" "GST_DISCOVERER_BUSY") + '("missing-plugins" "GST_DISCOVERER_MISSING_PLUGINS") + ) +) + +(define-miniobject DiscovererInfo + (in-module "Gst") + (c-name "GstDiscovererInfo") + (parent "GstMiniObject") + (gtype-id "GST_TYPE_DISCOVERER_INFO") +) + +(define-miniobject DiscovererStreamInfo + (in-module "Gst") + (c-name "GstDiscovererStreamInfo") + (parent "GstMiniObject") + (gtype-id "GST_TYPE_DISCOVERER_STREAM_INFO") +) + +(define-miniobject DiscovererContainerInfo + (in-module "Gst") + (c-name "GstDiscovererContainerInfo") + (parent "GstDiscovererStreamInfo") + (gtype-id "GST_TYPE_DISCOVERER_CONTAINER_INFO") +) + +(define-miniobject DiscovererAudioInfo + (in-module "Gst") + (c-name "GstDiscovererAudioInfo") + (parent "GstDiscovererStreamInfo") + (gtype-id "GST_TYPE_DISCOVERER_AUDIO_INFO") +) + +(define-miniobject DiscovererVideoInfo + (in-module "Gst") + (c-name "GstDiscovererVideoInfo") + (parent "GstDiscovererStreamInfo") + (gtype-id "GST_TYPE_DISCOVERER_VIDEO_INFO") +) + +(define-miniobject EncodingProfile + (in-module "Gst") + (c-name "GstEncodingProfile") + (parent "GstMiniObject") + (gtype-id "GST_TYPE_ENCODING_PROFILE") +) + +(define-miniobject EncodingContainerProfile + (in-module "Gst") + (c-name "GstEncodingContainerProfile") + (parent "GstEncodingProfile") + (gtype-id "GST_TYPE_ENCODING_CONTAINER_PROFILE") +) + +(define-miniobject EncodingVideoProfile + (in-module "Gst") + (c-name "GstEncodingVideoProfile") + (parent "GstEncodingProfile") + (gtype-id "GST_TYPE_ENCODING_VIDEO_PROFILE") +) + +(define-miniobject EncodingAudioProfile + (in-module "Gst") + (c-name "GstEncodingAudioProfile") + (parent "GstEncodingProfile") + (gtype-id "GST_TYPE_ENCODING_AUDIO_PROFILE") +) + +(define-miniobject EncodingTarget + (in-module "Gst") + (c-name "GstEncodingTarget") + (parent "GstMiniObject") + (gtype-id "GST_TYPE_ENCODING_TARGET") +) + +;; From codec-utils.h + +(define-function codec_utils_aac_get_sample_rate_from_index + (c-name "gst_codec_utils_aac_get_sample_rate_from_index") + (return-type "guint") + (parameters + '("guint" "sr_idx") + ) +) + +(define-function codec_utils_aac_get_profile + (c-name "gst_codec_utils_aac_get_profile") + (return-type "const-gchar*") + (parameters + '("const-guint8*" "audio_config") + '("guint" "len") + ) +) + +(define-function codec_utils_aac_get_level + (c-name "gst_codec_utils_aac_get_level") + (return-type "const-gchar*") + (parameters + '("const-guint8*" "audio_config") + '("guint" "len") + ) +) + +(define-method codec_utils_aac_caps_set_level_and_profile + (of-object "GstCaps") + (c-name "gst_codec_utils_aac_caps_set_level_and_profile") + (return-type "gboolean") + (parameters + '("const-guint8*" "audio_config") + '("guint" "len") + ) +) + +(define-function codec_utils_h264_get_profile + (c-name "gst_codec_utils_h264_get_profile") + (return-type "const-gchar*") + (parameters + '("const-guint8*" "sps") + '("guint" "len") + ) +) + +(define-function codec_utils_h264_get_level + (c-name "gst_codec_utils_h264_get_level") + (return-type "const-gchar*") + (parameters + '("const-guint8*" "sps") + '("guint" "len") + ) +) + +(define-method codec_utils_h264_caps_set_level_and_profile + (of-object "GstCaps") + (c-name "gst_codec_utils_h264_caps_set_level_and_profile") + (return-type "gboolean") + (parameters + '("const-guint8*" "sps") + '("guint" "len") + ) +) + +(define-function codec_utils_mpeg4video_get_profile + (c-name "gst_codec_utils_mpeg4video_get_profile") + (return-type "const-gchar*") + (parameters + '("const-guint8*" "vis_obj_seq") + '("guint" "len") + ) +) + +(define-function codec_utils_mpeg4video_get_level + (c-name "gst_codec_utils_mpeg4video_get_level") + (return-type "const-gchar*") + (parameters + '("const-guint8*" "vis_obj_seq") + '("guint" "len") + ) +) + +(define-method codec_utils_mpeg4video_caps_set_level_and_profile + (of-object "GstCaps") + (c-name "gst_codec_utils_mpeg4video_caps_set_level_and_profile") + (return-type "gboolean") + (parameters + '("const-guint8*" "vis_obj_seq") + '("guint" "len") + ) +) + + +;; From descriptions.h + +(define-function add_codec_description_to_tag_list + (c-name "gst_pb_utils_add_codec_description_to_tag_list") + (return-type "gboolean") + (parameters + '("GstTagList*" "taglist") + '("const-gchar*" "codec_tag") + '("const-GstCaps*" "caps") + ) +) + +(define-function get_codec_description + (c-name "gst_pb_utils_get_codec_description") + (return-type "gchar*") + (parameters + '("const-GstCaps*" "caps") + ) +) + +(define-function get_source_description + (c-name "gst_pb_utils_get_source_description") + (return-type "gchar*") + (parameters + '("const-gchar*" "protocol") + ) +) + +(define-function get_sink_description + (c-name "gst_pb_utils_get_sink_description") + (return-type "gchar*") + (parameters + '("const-gchar*" "protocol") + ) +) + +(define-function get_decoder_description + (c-name "gst_pb_utils_get_decoder_description") + (return-type "gchar*") + (parameters + '("const-GstCaps*" "caps") + ) +) + +(define-function get_encoder_description + (c-name "gst_pb_utils_get_encoder_description") + (return-type "gchar*") + (parameters + '("const-GstCaps*" "caps") + ) +) + +(define-function get_element_description + (c-name "gst_pb_utils_get_element_description") + (return-type "gchar*") + (parameters + '("const-gchar*" "factory_name") + ) +) + + + +;; From install-plugins.h + +(define-function install_plugins_context_new + (c-name "gst_install_plugins_context_new") + (is-constructor-of "GstInstallPluginsContext") + (return-type "GstInstallPluginsContext*") +) + +(define-method free + (of-object "GstInstallPluginsContext") + (c-name "gst_install_plugins_context_free") + (return-type "none") +) + +(define-method set_xid + (of-object "GstInstallPluginsContext") + (c-name "gst_install_plugins_context_set_xid") + (return-type "none") + (parameters + '("guint" "xid") + ) +) + +(define-function install_plugins_async + (c-name "gst_install_plugins_async") + (return-type "GstInstallPluginsReturn") + (parameters + '("gchar**" "details") + '("GstInstallPluginsContext*" "ctx") + '("GstInstallPluginsResultFunc" "func") + '("gpointer" "user_data") + ) +) + +(define-function install_plugins_sync + (c-name "gst_install_plugins_sync") + (return-type "GstInstallPluginsReturn") + (parameters + '("gchar**" "details") + '("GstInstallPluginsContext*" "ctx") + ) +) + +(define-method get_name + (of-object "GstInstallPluginsReturn") + (c-name "gst_install_plugins_return_get_name") + (return-type "const-gchar*") +) + +(define-function install_plugins_installation_in_progress + (c-name "gst_install_plugins_installation_in_progress") + (return-type "gboolean") +) + +(define-function install_plugins_supported + (c-name "gst_install_plugins_supported") + (return-type "gboolean") +) + + +;; From encoding-profile.h + +(define-method get_name + (of-object "GstEncodingProfile") + (c-name "gst_encoding_profile_get_name") + (return-type "const-gchar*") +) + +(define-method get_description + (of-object "GstEncodingProfile") + (c-name "gst_encoding_profile_get_description") + (return-type "const-gchar*") +) + +(define-method get_format + (of-object "GstEncodingProfile") + (c-name "gst_encoding_profile_get_format") + (return-type "const-GstCaps*") +) + +(define-method get_preset + (of-object "GstEncodingProfile") + (c-name "gst_encoding_profile_get_preset") + (return-type "const-gchar*") +) + +(define-method get_presence + (of-object "GstEncodingProfile") + (c-name "gst_encoding_profile_get_presence") + (return-type "guint") +) + +(define-method get_restriction + (of-object "GstEncodingProfile") + (c-name "gst_encoding_profile_get_restriction") + (return-type "const-GstCaps*") +) + +(define-method set_name + (of-object "GstEncodingProfile") + (c-name "gst_encoding_profile_set_name") + (return-type "none") + (parameters + '("const-gchar*" "name" (null-ok) (default "NULL")) + ) +) + +(define-method set_description + (of-object "GstEncodingProfile") + (c-name "gst_encoding_profile_set_description") + (return-type "none") + (parameters + '("const-gchar*" "description" (null-ok) (default "NULL")) + ) +) + +(define-method set_format + (of-object "GstEncodingProfile") + (c-name "gst_encoding_profile_set_format") + (return-type "none") + (parameters + '("GstCaps*" "format") + ) +) + +(define-method set_preset + (of-object "GstEncodingProfile") + (c-name "gst_encoding_profile_set_preset") + (return-type "none") + (parameters + '("const-gchar*" "preset" (null-ok) (default "NULL")) + ) +) + +(define-method set_restriction + (of-object "GstEncodingProfile") + (c-name "gst_encoding_profile_set_restriction") + (return-type "none") + (parameters + '("GstCaps*" "restriction" (null-ok) (default "NULL")) + ) +) + +(define-method set_presence + (of-object "GstEncodingProfile") + (c-name "gst_encoding_profile_set_presence") + (return-type "none") + (parameters + '("guint" "presence") + ) +) + +(define-method is_equal + (of-object "GstEncodingProfile") + (c-name "gst_encoding_profile_is_equal") + (return-type "gboolean") + (parameters + '("GstEncodingProfile*" "b") + ) +) + +(define-method get_input_caps + (of-object "GstEncodingProfile") + (c-name "gst_encoding_profile_get_input_caps") + (return-type "GstCaps*") +) + +(define-method get_type_nick + (of-object "GstEncodingProfile") + (c-name "gst_encoding_profile_get_type_nick") + (return-type "const-gchar*") +) + +(define-function encoding_profile_find + (c-name "gst_encoding_profile_find") + (return-type "GstEncodingProfile*") + (parameters + '("const-gchar*" "targetname") + '("const-gchar*" "profilename") + '("const-gchar*" "category" (null-ok) (default "NULL")) + ) +) + +(define-method add_profile + (of-object "GstEncodingContainerProfile") + (c-name "gst_encoding_container_profile_add_profile") + (return-type "gboolean") + (parameters + '("GstEncodingProfile*" "profile") + ) +) + +(define-method contains_profile + (of-object "GstEncodingContainerProfile") + (c-name "gst_encoding_container_profile_contains_profile") + (return-type "gboolean") + (parameters + '("GstEncodingProfile*" "profile") + ) +) + +(define-method get_profiles + (of-object "GstEncodingContainerProfile") + (c-name "gst_encoding_container_profile_get_profiles") + (return-type "const-GList*") +) + +(define-function gst_encoding_container_profile_new + (c-name "gst_encoding_container_profile_new") + (is-constructor-of "GstEncodingContainerProfile") + (return-type "GstEncodingContainerProfile*") + (parameters + '("const-gchar*" "name" (null-ok) (default "NULL")) + '("const-gchar*" "description" (null-ok) (default "NULL")) + '("GstCaps*" "format") + '("const-gchar*" "preset"(null-ok) (default "NULL")) + ) +) + +(define-function gst_encoding_video_profile_new + (c-name "gst_encoding_video_profile_new") + (is-constructor-of "GstEncodingVideoProfile") + (return-type "GstEncodingVideoProfile*") + (parameters + '("GstCaps*" "format") + '("const-gchar*" "preset" (null-ok) (default "NULL")) + '("GstCaps*" "restriction" (null-ok)) + '("guint" "presence") + ) +) + +(define-function gst_encoding_audio_profile_new + (c-name "gst_encoding_audio_profile_new") + (is-constructor-of "GstEncodingAudioProfile") + (return-type "GstEncodingAudioProfile*") + (parameters + '("GstCaps*" "format") + '("const-gchar*" "preset" (null-ok) (default "NULL")) + '("GstCaps*" "restriction" (null-ok)) + '("guint" "presence") + ) +) + +(define-method get_pass + (of-object "GstEncodingVideoProfile") + (c-name "gst_encoding_video_profile_get_pass") + (return-type "guint") +) + +(define-method get_variableframerate + (of-object "GstEncodingVideoProfile") + (c-name "gst_encoding_video_profile_get_variableframerate") + (return-type "gboolean") +) + +(define-method set_pass + (of-object "GstEncodingVideoProfile") + (c-name "gst_encoding_video_profile_set_pass") + (return-type "none") + (parameters + '("guint" "pass") + ) +) + +(define-method set_variableframerate + (of-object "GstEncodingVideoProfile") + (c-name "gst_encoding_video_profile_set_variableframerate") + (return-type "none") + (parameters + '("gboolean" "variableframerate") + ) +) + + + +;; From encoding-target.h + +(define-function gst_encoding_target_new + (c-name "gst_encoding_target_new") + (is-constructor-of "GstEncodingTarget") + (return-type "GstEncodingTarget*") + (parameters + '("const-gchar*" "name") + '("const-gchar*" "category") + '("const-gchar*" "description") + '("const-GList*" "profiles") + ) +) + +(define-method get_name + (of-object "GstEncodingTarget") + (c-name "gst_encoding_target_get_name") + (return-type "const-gchar*") +) + +(define-method get_category + (of-object "GstEncodingTarget") + (c-name "gst_encoding_target_get_category") + (return-type "const-gchar*") +) + +(define-method get_description + (of-object "GstEncodingTarget") + (c-name "gst_encoding_target_get_description") + (return-type "const-gchar*") +) + +(define-method get_profiles + (of-object "GstEncodingTarget") + (c-name "gst_encoding_target_get_profiles") + (return-type "const-GList*") +) + +(define-method add_profile + (of-object "GstEncodingTarget") + (c-name "gst_encoding_target_add_profile") + (return-type "gboolean") + (parameters + '("GstEncodingProfile*" "profile") + ) +) + +(define-method save + (of-object "GstEncodingTarget") + (c-name "gst_encoding_target_save") + (return-type "gboolean") + (parameters + '("GError**" "error") + ) +) + +(define-method save_to_file + (of-object "GstEncodingTarget") + (c-name "gst_encoding_target_save_to_file") + (return-type "gboolean") + (parameters + '("const-gchar*" "path") + '("GError**" "error") + ) +) + +(define-function encoding_target_load + (c-name "gst_encoding_target_load") + (return-type "GstEncodingTarget*") + (parameters + '("const-gchar*" "name") + '("const-gchar*" "category") + '("GError**" "error") + ) +) + +(define-function encoding_target_load_from_file + (c-name "gst_encoding_target_load_from_file") + (return-type "GstEncodingTarget*") + (parameters + '("const-gchar*" "path") + '("GError**" "error") + ) +) + +(define-function encoding_list_available_categories + (c-name "gst_encoding_list_available_categories") + (return-type "GList*") +) + +(define-function encoding_list_all_targets + (c-name "gst_encoding_list_all_targets") + (return-type "GList*") + (parameters + '("const-gchar*" "categoryname") + ) +) + + + +;; From gstdiscoverer.h + +(define-method get_previous + (of-object "GstDiscovererStreamInfo") + (c-name "gst_discoverer_stream_info_get_previous") + (return-type "GstDiscovererStreamInfo*") +) + +(define-method get_next + (of-object "GstDiscovererStreamInfo") + (c-name "gst_discoverer_stream_info_get_next") + (return-type "GstDiscovererStreamInfo*") +) + +(define-method get_caps + (of-object "GstDiscovererStreamInfo") + (c-name "gst_discoverer_stream_info_get_caps") + (return-type "GstCaps*") +) + +(define-method get_tags + (of-object "GstDiscovererStreamInfo") + (c-name "gst_discoverer_stream_info_get_tags") + (return-type "const-GstTagList*") +) + +(define-method get_misc + (of-object "GstDiscovererStreamInfo") + (c-name "gst_discoverer_stream_info_get_misc") + (return-type "const-GstStructure*") +) + +(define-method get_stream_type_nick + (of-object "GstDiscovererStreamInfo") + (c-name "gst_discoverer_stream_info_get_stream_type_nick") + (return-type "const-gchar*") +) + +(define-method get_streams + (of-object "GstDiscovererContainerInfo") + (c-name "gst_discoverer_container_info_get_streams") + (return-type "GList*") +) + +(define-method get_channels + (of-object "GstDiscovererAudioInfo") + (c-name "gst_discoverer_audio_info_get_channels") + (return-type "guint") +) + +(define-method get_sample_rate + (of-object "GstDiscovererAudioInfo") + (c-name "gst_discoverer_audio_info_get_sample_rate") + (return-type "guint") +) + +(define-method get_depth + (of-object "GstDiscovererAudioInfo") + (c-name "gst_discoverer_audio_info_get_depth") + (return-type "guint") +) + +(define-method get_bitrate + (of-object "GstDiscovererAudioInfo") + (c-name "gst_discoverer_audio_info_get_bitrate") + (return-type "guint") +) + +(define-method get_max_bitrate + (of-object "GstDiscovererAudioInfo") + (c-name "gst_discoverer_audio_info_get_max_bitrate") + (return-type "guint") +) + +(define-method get_width + (of-object "GstDiscovererVideoInfo") + (c-name "gst_discoverer_video_info_get_width") + (return-type "guint") +) + +(define-method get_height + (of-object "GstDiscovererVideoInfo") + (c-name "gst_discoverer_video_info_get_height") + (return-type "guint") +) + +(define-method get_depth + (of-object "GstDiscovererVideoInfo") + (c-name "gst_discoverer_video_info_get_depth") + (return-type "guint") +) + +(define-method get_framerate_num + (of-object "GstDiscovererVideoInfo") + (c-name "gst_discoverer_video_info_get_framerate_num") + (return-type "guint") +) + +(define-method get_framerate_denom + (of-object "GstDiscovererVideoInfo") + (c-name "gst_discoverer_video_info_get_framerate_denom") + (return-type "guint") +) + +(define-method get_par_num + (of-object "GstDiscovererVideoInfo") + (c-name "gst_discoverer_video_info_get_par_num") + (return-type "guint") +) + +(define-method get_par_denom + (of-object "GstDiscovererVideoInfo") + (c-name "gst_discoverer_video_info_get_par_denom") + (return-type "guint") +) + +(define-method is_interlaced + (of-object "GstDiscovererVideoInfo") + (c-name "gst_discoverer_video_info_is_interlaced") + (return-type "gboolean") +) + +(define-method get_bitrate + (of-object "GstDiscovererVideoInfo") + (c-name "gst_discoverer_video_info_get_bitrate") + (return-type "guint") +) + +(define-method get_max_bitrate + (of-object "GstDiscovererVideoInfo") + (c-name "gst_discoverer_video_info_get_max_bitrate") + (return-type "guint") +) + +(define-method is_image + (of-object "GstDiscovererVideoInfo") + (c-name "gst_discoverer_video_info_is_image") + (return-type "gboolean") +) + +(define-method copy + (of-object "GstDiscovererInfo") + (c-name "gst_discoverer_info_copy") + (return-type "GstDiscovererInfo*") +) + +(define-method get_uri + (of-object "GstDiscovererInfo") + (c-name "gst_discoverer_info_get_uri") + (return-type "const-gchar*") +) + +(define-method get_result + (of-object "GstDiscovererInfo") + (c-name "gst_discoverer_info_get_result") + (return-type "GstDiscovererResult") +) + +(define-method get_stream_info + (of-object "GstDiscovererInfo") + (c-name "gst_discoverer_info_get_stream_info") + (return-type "GstDiscovererStreamInfo*") +) + +(define-method get_stream_list + (of-object "GstDiscovererInfo") + (c-name "gst_discoverer_info_get_stream_list") + (return-type "GList*") +) + +(define-method get_duration + (of-object "GstDiscovererInfo") + (c-name "gst_discoverer_info_get_duration") + (return-type "GstClockTime") +) + +(define-method get_seekable + (of-object "GstDiscovererInfo") + (c-name "gst_discoverer_info_get_seekable") + (return-type "gboolean") +) + +(define-method get_misc + (of-object "GstDiscovererInfo") + (c-name "gst_discoverer_info_get_misc") + (return-type "const-GstStructure*") +) + +(define-method get_tags + (of-object "GstDiscovererInfo") + (c-name "gst_discoverer_info_get_tags") + (return-type "const-GstTagList*") +) + +(define-method get_streams + (of-object "GstDiscovererInfo") + (c-name "gst_discoverer_info_get_streams") + (return-type "GList*") + (parameters + '("GType" "streamtype") + ) +) + +(define-method get_audio_streams + (of-object "GstDiscovererInfo") + (c-name "gst_discoverer_info_get_audio_streams") + (return-type "GList*") +) + +(define-method get_video_streams + (of-object "GstDiscovererInfo") + (c-name "gst_discoverer_info_get_video_streams") + (return-type "GList*") +) + +(define-method get_container_streams + (of-object "GstDiscovererInfo") + (c-name "gst_discoverer_info_get_container_streams") + (return-type "GList*") +) + + +(define-function gst_discoverer_new + (c-name "gst_discoverer_new") + (is-constructor-of "GstDiscoverer") + (return-type "GstDiscoverer*") + (parameters + '("GstClockTime" "timeout") + '("GError**" "err") + ) +) + +(define-method start + (of-object "GstDiscoverer") + (c-name "gst_discoverer_start") + (return-type "none") +) + +(define-method stop + (of-object "GstDiscoverer") + (c-name "gst_discoverer_stop") + (return-type "none") +) + +(define-method discover_uri_async + (of-object "GstDiscoverer") + (c-name "gst_discoverer_discover_uri_async") + (return-type "gboolean") + (parameters + '("const-gchar*" "uri") + ) +) + +(define-method discover_uri + (of-object "GstDiscoverer") + (c-name "gst_discoverer_discover_uri") + (return-type "GstDiscovererInfo*") + (parameters + '("const-gchar*" "uri") + '("GError**" "err") + ) +) + +;; From gstpluginsbaseversion.h + +(define-function plugins_base_version + (c-name "gst_plugins_base_version") + (return-type "none") + (parameters + '("guint*" "major") + '("guint*" "minor") + '("guint*" "micro") + '("guint*" "nano") + ) +) + +(define-function plugins_base_version_string + (c-name "gst_plugins_base_version_string") + (return-type "gchar*") +) + + + +;; From missing-plugins.h + +(define-function missing_uri_source_message_new + (c-name "gst_missing_uri_source_message_new") + (return-type "GstMessage*") + (parameters + '("GstElement*" "element") + '("const-gchar*" "protocol") + ) +) + +(define-function missing_uri_sink_message_new + (c-name "gst_missing_uri_sink_message_new") + (return-type "GstMessage*") + (parameters + '("GstElement*" "element") + '("const-gchar*" "protocol") + ) +) + +(define-function missing_element_message_new + (c-name "gst_missing_element_message_new") + (return-type "GstMessage*") + (parameters + '("GstElement*" "element") + '("const-gchar*" "factory_name") + ) +) + +(define-function missing_decoder_message_new + (c-name "gst_missing_decoder_message_new") + (return-type "GstMessage*") + (parameters + '("GstElement*" "element") + '("const-GstCaps*" "decode_caps") + ) +) + +(define-function missing_encoder_message_new + (c-name "gst_missing_encoder_message_new") + (return-type "GstMessage*") + (parameters + '("GstElement*" "element") + '("const-GstCaps*" "encode_caps") + ) +) + +(define-function missing_plugin_message_get_installer_detail + (c-name "gst_missing_plugin_message_get_installer_detail") + (return-type "gchar*") + (parameters + '("GstMessage*" "msg") + ) +) + +(define-function missing_plugin_message_get_description + (c-name "gst_missing_plugin_message_get_description") + (return-type "gchar*") + (parameters + '("GstMessage*" "msg") + ) +) + +(define-function is_missing_plugin_message + (c-name "gst_is_missing_plugin_message") + (return-type "gboolean") + (parameters + '("GstMessage*" "msg") + ) +) + +(define-function missing_uri_source_installer_detail_new + (c-name "gst_missing_uri_source_installer_detail_new") + (return-type "gchar*") + (parameters + '("const-gchar*" "protocol") + ) +) + +(define-function missing_uri_sink_installer_detail_new + (c-name "gst_missing_uri_sink_installer_detail_new") + (return-type "gchar*") + (parameters + '("const-gchar*" "protocol") + ) +) + +(define-function missing_element_installer_detail_new + (c-name "gst_missing_element_installer_detail_new") + (return-type "gchar*") + (parameters + '("const-gchar*" "factory_name") + ) +) + +(define-function missing_decoder_installer_detail_new + (c-name "gst_missing_decoder_installer_detail_new") + (return-type "gchar*") + (parameters + '("const-GstCaps*" "decode_caps") + ) +) + +(define-function missing_encoder_installer_detail_new + (c-name "gst_missing_encoder_installer_detail_new") + (return-type "gchar*") + (parameters + '("const-GstCaps*" "encode_caps") + ) +) + + + +;; From pbutils.h + +(define-function init + (c-name "gst_pb_utils_init") + (return-type "none") +) + + diff --git a/gst/pbutils.override b/gst/pbutils.override new file mode 100644 index 0000000..a3de280 --- /dev/null +++ b/gst/pbutils.override @@ -0,0 +1,486 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2008 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ +%% +headers + +#ifdef HAVE_CONFIG_H +# include +#endif + +#define NO_IMPORT_PYGOBJECT +#include "common.h" +#include "pygst.h" + +#include + +#include +#include "pygstminiobject.h" +GST_DEBUG_CATEGORY_EXTERN (pygst_debug); +#define GST_CAT_DEFAULT pygst_debug + +/* Boonky define that allows for backwards compatibility with Python 2.4 */ +#if PY_VERSION_HEX < 0x02050000 +#define Py_ssize_t int +#endif + +static void +install_plugins_result_handler(GstInstallPluginsReturn result, gpointer user_data) +{ + PyGILState_STATE state; + PyObject *callback, *args; + PyObject *py_user_data; + PyObject *py_result; + PyObject *ret; + gint i, len; + + if (user_data == NULL) + return; + + state = pyg_gil_state_ensure(); + + py_user_data = (PyObject*) user_data; + py_result = pyg_enum_from_gtype(GST_TYPE_INSTALL_PLUGINS_RETURN, result); + + callback = PyTuple_GetItem(py_user_data, 0); + args = Py_BuildValue("(N)", py_result); + + len = PyTuple_Size(py_user_data); + for (i = 1; i < len; ++i) { + PyObject *tuple = args; + args = PySequence_Concat(tuple, PyTuple_GetItem(py_user_data, i)); + Py_DECREF(tuple); + } + + ret = PyObject_CallObject(callback, args); + + if (PyErr_Occurred()) + PyErr_Print(); + + Py_DECREF(args); + pyg_gil_state_release(state); + +} +%% +modulename gst.pbutils +%% +import gobject.GObject as PyGObject_Type +import gst.Object as PyGstObject_Type +import gst.Structure as PyGstStructure_Type +import gst.Element as PyGstElement_Type +import gst.Message as PyGstMessage_Type +import gst.MiniObject as PyGstMiniObject_Type +%% +include + gstversion.override +%% +ignore-glob + _* + *init + *_free + *_get_type +%% +override gst_install_plugins_sync kwargs +static PyObject * +_wrap_gst_install_plugins_sync(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "details", "context", NULL }; + PyObject *py_ctx; + GstInstallPluginsContext *ctx; + GstInstallPluginsReturn ret; + gchar **details; + gint len; + PyObject *py_ret; + PyObject *py_details; + Py_ssize_t i; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO:install_plugins_sync", + kwlist, &py_details, &py_ctx)) + return NULL; + + if (!pyg_boxed_check(py_ctx, GST_TYPE_INSTALL_PLUGINS_CONTEXT)) { + PyErr_SetString(PyExc_TypeError, "Argument 2 must be a gst.pbutils.InstallPluginsContext"); + return NULL; + } + + len = PySequence_Size(py_details); + if ((!PySequence_Check(py_details)) || (len < 1)) { + PyErr_SetString(PyExc_TypeError, "Details need to be a non-empty list or tuple of strings"); + Py_DECREF(py_details); + return NULL; + } + + details = g_new0(gchar*, len+1); + + /* Check all items in py_details are strings */ + for (i = 0; i < len; i++) { + PyObject *py_str = PySequence_GetItem(py_details, i); + gchar *str; + + if (!PyString_Check(py_str)) { + PyErr_SetString(PyExc_TypeError, "Details need to be a non-empty list or tuple of strings"); + Py_DECREF(py_str); + Py_DECREF(py_details); + g_strfreev(details); + return NULL; + } + if (!(str = PyString_AsString(py_str))) { + Py_DECREF(py_str); + Py_DECREF(py_details); + g_strfreev(details); + return NULL; + } + details[i] = g_strdup(str); + Py_DECREF(py_str); + } + + ctx = (GstInstallPluginsContext *) pyg_boxed_get(py_ctx, GstInstallPluginsContext); + + pyg_begin_allow_threads; + ret = gst_install_plugins_sync(details, ctx); + pyg_end_allow_threads; + + g_strfreev(details); + + py_ret = pyg_enum_from_gtype(GST_TYPE_INSTALL_PLUGINS_RETURN, ret); + return py_ret; +} +%% +override gst_install_plugins_async args +static PyObject * +_wrap_gst_install_plugins_async(PyGObject *self, PyObject *args) +{ + PyObject *py_ctx, *py_ret, *py_details, *callback, *cbargs, *data; + GstInstallPluginsContext *ctx; + GstInstallPluginsReturn ret; + gchar **details; + gint len; + Py_ssize_t i; + + if (PyTuple_Size(args) < 3) { + PyErr_SetString(PyExc_TypeError, "install_plugins_async requires at least 3 arguments"); + return NULL; + } + + py_ctx = PySequence_GetItem(args, 1); + + if (!pyg_boxed_check(py_ctx, GST_TYPE_INSTALL_PLUGINS_CONTEXT)) { + PyErr_SetString(PyExc_TypeError, "Argument 2 must be a gst.pbutils.InstallPluginsContext"); + Py_DECREF(py_ctx); + return NULL; + } + + py_details = PySequence_GetItem(args, 0); + if ((!PySequence_Check(py_details)) || (PySequence_Size(py_details) < 1)) { + PyErr_SetString(PyExc_TypeError, "Details need to be a non-empty list or tuple of strings"); + Py_DECREF(py_ctx); + Py_DECREF(py_details); + return NULL; + } + + len = PySequence_Size(py_details); + details = g_new0(gchar*, len+1); + + /* Check all items in py_details are strings */ + for (i = 0; i < len; i++) { + PyObject *py_str = PySequence_GetItem(py_details, i); + gchar *str; + + if (!PyString_Check(py_str)) { + PyErr_SetString(PyExc_TypeError, "Details need to be a non-empty list or tuple of strings"); + Py_DECREF(py_str); + Py_DECREF(py_ctx); + Py_DECREF(py_details); + g_strfreev(details); + return NULL; + } + if (!(str = PyString_AsString(py_str))) { + Py_DECREF(py_str); + Py_DECREF(py_ctx); + Py_DECREF(py_details); + g_strfreev(details); + return NULL; + } + details[i] = g_strdup(str); + Py_DECREF(py_str); + } + + callback = PySequence_GetItem(args, 2); + if (!PyCallable_Check(callback)) { + PyErr_SetString(PyExc_TypeError, "callback is not callable"); + Py_DECREF(callback); + Py_DECREF(py_ctx); + Py_DECREF(py_details); + g_strfreev(details); + } + + if (!(cbargs = PySequence_GetSlice(args, 3, PyTuple_Size(args)))) { + Py_DECREF(callback); + Py_DECREF(py_ctx); + Py_DECREF(py_details); + g_strfreev(details); + return NULL; + } + if (!(data = Py_BuildValue("(ON)", callback, cbargs))) { + Py_DECREF(py_details); + Py_DECREF(py_ctx); + Py_DECREF(callback); + Py_DECREF(cbargs); + } + + ctx = (GstInstallPluginsContext *) pyg_boxed_get(py_ctx, GstInstallPluginsContext); + pyg_begin_allow_threads; + ret = gst_install_plugins_async(details, ctx, + (GstInstallPluginsResultFunc) install_plugins_result_handler, + data); + pyg_end_allow_threads; + + g_strfreev(details); + + py_ret = pyg_enum_from_gtype(GST_TYPE_INSTALL_PLUGINS_RETURN, ret); + return py_ret; +} +%% +override gst_plugins_base_version noargs +static PyObject * +_wrap_gst_plugins_base_version (PyObject *self) +{ + guint major, minor, micro, nano; + PyObject *py_tuple; + + gst_plugins_base_version (&major, &minor, µ, &nano); + py_tuple = PyTuple_New(4); + PyTuple_SetItem(py_tuple, 0, PyInt_FromLong(major)); + PyTuple_SetItem(py_tuple, 1, PyInt_FromLong(minor)); + PyTuple_SetItem(py_tuple, 2, PyInt_FromLong(micro)); + PyTuple_SetItem(py_tuple, 3, PyInt_FromLong(nano)); + + return py_tuple; +} +%% +override gst_discoverer_info_get_stream_list noargs +static PyObject * +_wrap_gst_discoverer_info_get_stream_list(PyGstMiniObject * self) +{ + GList *res, *tmp; + PyObject *pyres; + + res = gst_discoverer_info_get_stream_list(GST_DISCOVERER_INFO (self->obj)); + + pyres = PyList_New(0); + for (tmp = res; tmp; tmp = tmp->next) { + PyList_Append(pyres, pygstminiobject_new((GstMiniObject*) tmp->data)); + } + if (res) + gst_discoverer_stream_info_list_free(res); + return pyres; +} +%% +override gst_discoverer_info_get_streams kwargs +static PyObject * +_wrap_gst_discoverer_info_get_streams(PyGstMiniObject * self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "type", NULL }; + GList *res, *tmp; + PyObject *pyres, *py_type; + GType ftype; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O:GstDiscovererInfo.get_streams", kwlist, &py_type)) + return NULL; + if ((ftype = pyg_type_from_object(py_type)) == 0) + return NULL; + res = gst_discoverer_info_get_streams(GST_DISCOVERER_INFO (self->obj), ftype); + + pyres = PyList_New(0); + for (tmp = res; tmp; tmp = tmp->next) { + PyList_Append(pyres, pygstminiobject_new((GstMiniObject*) tmp->data)); + } + if (res) + gst_discoverer_stream_info_list_free(res); + return pyres; +} +%% +override gst_discoverer_info_get_audio_streams noargs +static PyObject * +_wrap_gst_discoverer_info_get_audio_streams(PyGstMiniObject * self) +{ + GList *res, *tmp; + PyObject *pyres; + + res = gst_discoverer_info_get_audio_streams(GST_DISCOVERER_INFO (self->obj)); + + pyres = PyList_New(0); + for (tmp = res; tmp; tmp = tmp->next) { + PyList_Append(pyres, pygstminiobject_new((GstMiniObject*) tmp->data)); + } + if (res) + gst_discoverer_stream_info_list_free(res); + return pyres; +} +%% +override gst_discoverer_info_get_video_streams noargs +static PyObject * +_wrap_gst_discoverer_info_get_video_streams(PyGstMiniObject * self) +{ + GList *res, *tmp; + PyObject *pyres; + + res = gst_discoverer_info_get_video_streams(GST_DISCOVERER_INFO (self->obj)); + + pyres = PyList_New(0); + for (tmp = res; tmp; tmp = tmp->next) { + PyList_Append(pyres, pygstminiobject_new((GstMiniObject*) tmp->data)); + } + if (res) + gst_discoverer_stream_info_list_free(res); + return pyres; +} +%% +override gst_discoverer_info_get_container_streams noargs +static PyObject * +_wrap_gst_discoverer_info_get_container_streams(PyGstMiniObject * self) +{ + GList *res, *tmp; + PyObject *pyres; + + res = gst_discoverer_info_get_container_streams(GST_DISCOVERER_INFO (self->obj)); + + pyres = PyList_New(0); + for (tmp = res; tmp; tmp = tmp->next) { + PyList_Append(pyres, pygstminiobject_new((GstMiniObject*) tmp->data)); + } + if (res) + gst_discoverer_stream_info_list_free(res); + return pyres; +} +%% +override gst_discoverer_container_info_get_streams noargs +static PyObject * +_wrap_gst_discoverer_container_info_get_streams(PyGstMiniObject * self) +{ + GList *res, *tmp; + PyObject *pyres; + + res = gst_discoverer_container_info_get_streams(GST_DISCOVERER_CONTAINER_INFO (self->obj)); + + pyres = PyList_New(0); + for (tmp = res; tmp; tmp = tmp->next) { + PyList_Append(pyres, pygstminiobject_new((GstMiniObject*) tmp->data)); + } + if (res) + gst_discoverer_stream_info_list_free(res); + return pyres; +} +%% +override gst_encoding_container_profile_get_profiles noargs +static PyObject * +_wrap_gst_encoding_container_profile_get_profiles(PyGstMiniObject * self) +{ + GList *res, *tmp; + PyObject *pyres; + + res = (GList*) gst_encoding_container_profile_get_profiles(GST_ENCODING_CONTAINER_PROFILE (self->obj)); + + pyres = PyList_New(0); + for (tmp = res; tmp; tmp = tmp->next) { + PyList_Append(pyres, pygstminiobject_new((GstMiniObject*) tmp->data)); + } + if (res) + g_list_free (res); + return pyres; +} +%% +override gst_encoding_target_get_profiles noargs +static PyObject * +_wrap_gst_encoding_target_get_profiles(PyGstMiniObject * self) +{ + GList *res, *tmp; + PyObject *pyres; + + res = (GList*) gst_encoding_target_get_profiles(GST_ENCODING_TARGET (self->obj)); + + pyres = PyList_New(0); + for (tmp = res; tmp; tmp = tmp->next) { + PyList_Append(pyres, pygstminiobject_new((GstMiniObject*) tmp->data)); + } + if (res) + g_list_free (res); + return pyres; +} +%% +override gst_encoding_list_all_targets kwargs +static PyObject * +_wrap_gst_encoding_list_all_targets(PyGstMiniObject * self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "categoryname", NULL }; + GList *res, *tmp; + const gchar *categoryname = NULL; + PyObject *pyres; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"!s:GstDiscovererInfo.get_streams", kwlist, &categoryname)) + return NULL; + res = (GList*) gst_encoding_list_all_targets(categoryname); + + pyres = PyList_New(0); + for (tmp = res; tmp; tmp = tmp->next) { + PyList_Append(pyres, pygstminiobject_new((GstMiniObject*) tmp->data)); + } + if (res) + g_list_free (res); + return pyres; +} +%% +override gst_encoding_list_available_categories noargs +static PyObject * +_wrap_gst_encoding_list_available_categories(PyGstMiniObject * self) +{ + GList *res, *tmp; + PyObject *pyres; + + res = (GList*) gst_encoding_list_available_categories(); + + pyres = PyList_New(0); + for (tmp = res; tmp; tmp = tmp->next) { + PyList_Append(pyres, PyString_FromString((const gchar*) tmp->data)); + g_free (tmp->data); + } + if (res) + g_list_free (res); + return pyres; +} +%% +override gst_encoding_target_new kwargs +static int +_wrap_gst_encoding_target_new(PyGstMiniObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "name", "category", "description", NULL }; + char *name, *description, *category; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"sss:GstEncodingContainerProfile.__init__", kwlist, &name, &category, &description)) + return -1; + + self->obj = (GstMiniObject *)gst_encoding_target_new(name, category, description, NULL); + + if (!self->obj) { + PyErr_SetString(PyExc_RuntimeError, "could not create GstEncodingTarget miniobject"); + return -1; + } + pygstminiobject_register_wrapper((PyObject *)self); + return 0; +} diff --git a/gst/pbutilsmodule.c b/gst/pbutilsmodule.c new file mode 100644 index 0000000..215eca7 --- /dev/null +++ b/gst/pbutilsmodule.c @@ -0,0 +1,65 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2008 Edward Hervey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +/* include this first, before NO_IMPORT_PYGOBJECT is defined */ +#include +#include +#include +#include "pygst.h" + +void pypbutils_register_classes (PyObject * d); +void pypbutils_add_constants (PyObject * module, const gchar * strip_prefix); + +extern PyMethodDef pypbutils_functions[]; + +GST_DEBUG_CATEGORY (pygst_debug); /* for python code */ + +DL_EXPORT (void) +initpbutils (void) +{ + PyObject *m, *d; + PyObject *gst; + + init_pygobject (); + + /* Make sure gst module is loaded and ready */ + gst = pygst_init (); + if (PyErr_Occurred ()) { + PyErr_Print (); + Py_FatalError ("can't initialize module gst.pbutils"); + } + + gst_pb_utils_init (); + + m = Py_InitModule ("pbutils", pypbutils_functions); + d = PyModule_GetDict (m); + + pypbutils_register_classes (d); + pypbutils_add_constants (m, "GST_"); + + if (PyErr_Occurred ()) { + PyErr_Print (); + Py_FatalError ("can't initialize module gst.pbutils"); + } +} diff --git a/gst/pygst-private.h b/gst/pygst-private.h new file mode 100644 index 0000000..cb7c6be --- /dev/null +++ b/gst/pygst-private.h @@ -0,0 +1,44 @@ +/* -*- Mode: C; ; c-file-style: "python" -*- */ +/* gst-python + * Copyright (C) 2010 Edward Hervey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef _PYGST_PRIVATE_H_ +#define _PYGST_PRIVATE_H_ + +#ifdef _PYGST_H_ +# error "include pygst.h or pygst-private.h but not both" +#endif + +#define _INSIDE_PYGST_ +#include "pygst.h" +#include "common.h" + +extern PyTypeObject PyGstMiniObject_Type; + +/* from gst-types.c */ +GstCaps *pygst_caps_from_pyobject (PyObject *object, gboolean *copy); +PyObject* pygst_iterator_new(GstIterator *iter); + +/* from pygstminiobject.c */ +PyObject * +pygstminiobject_new(GstMiniObject *obj); + + + +#endif /* _PYGST_PRIVATE_H_ */ diff --git a/gst/pygst.h b/gst/pygst.h new file mode 100644 index 0000000..23b4b8a --- /dev/null +++ b/gst/pygst.h @@ -0,0 +1,102 @@ +/* -*- Mode: C; ; c-file-style: "python" -*- */ +/* gst-python + * Copyright (C) 2010 Edward Hervey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef _PYGST_H_ +#define _PYGST_H_ + +#include + +#include +#include +#include + +G_BEGIN_DECLS + +struct _PyGst_Functions { + GstCaps* (*caps_from_pyobject) (PyObject *object, gboolean *copy); + PyObject* (*iterator_new) (GstIterator *iter); + PyObject* (*miniobject_new) (GstMiniObject *obj); +}; + +#define pygstminiobject_get(v) (((PyGstMiniObject *)(v))->obj) +#define pygstminiobject_check(v,base) (PyObject_TypeCheck(v,base)) + +typedef struct { + PyObject_HEAD + GstMiniObject *obj; + PyObject *inst_dict; /* the instance dictionary -- must be last */ + PyObject *weakreflist; /* list of weak references */ +} PyGstMiniObject; + +#ifndef _INSIDE_PYGST_ + +#if defined(NO_IMPORT_PYGOBJECT) +extern struct _PyGst_Functions *_PyGst_API; +#else +struct _PyGst_Functions *_PyGst_API; +#endif + +#define pygst_caps_from_pyobject (_PyGst_API->caps_from_pyobject) +#define pygst_iterator_new (_PyGst_API->iterator_new) +#define pygstminiobject_new (_PyGst_API->miniobject_new) + +static inline PyObject * +pygst_init(void) +{ + PyObject *gstobject, *cobject; + + gstobject = PyImport_ImportModule("gst._gst"); + if (!gstobject) { + if (PyErr_Occurred()) + { + PyObject *type, *value, *traceback; + PyObject *py_orig_exc; + PyErr_Fetch(&type, &value, &traceback); + py_orig_exc = PyObject_Repr(value); + Py_XDECREF(type); + Py_XDECREF(value); + Py_XDECREF(traceback); + PyErr_Format(PyExc_ImportError, + "could not import gst (error was: %s)", + PyString_AsString(py_orig_exc)); + Py_DECREF(py_orig_exc); + } else { + PyErr_SetString(PyExc_ImportError, + "could not import gst (no error given)"); + } + return NULL; + } + + cobject = PyObject_GetAttrString(gstobject, "_PyGst_API"); + if (!cobject) { + PyErr_SetString(PyExc_ImportError, + "could not import gst (getting _PyGst_API)"); + return NULL; + } + _PyGst_API = (struct _PyGst_Functions *) PyCObject_AsVoidPtr(cobject); + + return gstobject; +} + +#endif /* _INSIDE_PYGST_ */ + +G_END_DECLS + +#endif /* !_PYGST_H_ */ diff --git a/gst/pygstexception.c b/gst/pygstexception.c new file mode 100644 index 0000000..9e60b16 --- /dev/null +++ b/gst/pygstexception.c @@ -0,0 +1,269 @@ +/* + * pygstexception.c - gst-python exceptions + * Copyright (C) 2005 Alessandro Decina + * + * Authors: + * Alessandro Decina + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include +#include "structmember.h" + +PyObject *PyGstExc_LinkError = NULL; +PyObject *PyGstExc_AddError = NULL; +PyObject *PyGstExc_QueryError = NULL; +PyObject *PyGstExc_RemoveError = NULL; +PyObject *PyGstExc_PluginNotFoundError = NULL; +PyObject *PyGstExc_ElementNotFoundError = NULL; + + +static PyObject * +call_exception_init (PyObject * args) +{ + PyObject *parent_init = NULL; + PyObject *res = NULL; + + /* get Exception.__init__ */ + parent_init = PyObject_GetAttrString (PyExc_Exception, "__init__"); + if (parent_init == NULL) + goto exception; + + /* call Exception.__init__. This will set self.args */ + res = PyObject_CallObject (parent_init, args); + if (res == NULL) + goto exception; + + Py_DECREF (parent_init); + + return res; + +exception: + Py_XDECREF (parent_init); + Py_XDECREF (res); + + return NULL; +} + +static int +add_method (PyObject * klass, PyObject * dict, PyMethodDef * method) +{ + PyObject *module = NULL; + PyObject *func = NULL; + PyObject *meth = NULL; + + module = PyString_FromString ("gst"); + if (module == NULL) + goto exception; + + func = PyCFunction_NewEx (method, NULL, module); + if (func == NULL) + goto exception; + Py_DECREF (module); + + meth = PyMethod_New (func, NULL, klass); + if (meth == NULL) + goto exception; + Py_DECREF (func); + + if (PyDict_SetItemString (dict, method->ml_name, meth) < 0) + goto exception; + Py_DECREF (meth); + + return 0; + +exception: + Py_XDECREF (module); + Py_XDECREF (func); + Py_XDECREF (meth); + + return -1; +} + +static PyObject * +link_error_init (PyObject * self, PyObject * args) +{ + PyObject *err_type = NULL; + int status; + + if (!PyArg_ParseTuple (args, "O|O:__init__", &self, &err_type)) + return NULL; + + if (err_type == NULL) + err_type = Py_None; + Py_INCREF (err_type); + + /* set self.error */ + status = PyObject_SetAttrString (self, "error", err_type); + Py_DECREF (err_type); + if (status < 0) + return NULL; + + return call_exception_init (args); +} + +static PyObject * +element_not_found_error_init (PyObject * self, PyObject * args) +{ + PyObject *element_name = NULL; + int status; + + if (!PyArg_ParseTuple (args, "O|O:__init__", &self, &element_name)) + return NULL; + + if (element_name == NULL) + element_name = Py_None; + Py_INCREF (element_name); + + /* set self.name */ + status = PyObject_SetAttrString (self, "name", element_name); + Py_DECREF (element_name); + if (status < 0) + return NULL; + + return call_exception_init (args); +} + +static PyMethodDef link_error_init_method = { "__init__", + link_error_init, METH_VARARGS +}; + +static PyMethodDef element_not_found_error_init_method = { "__init__", + element_not_found_error_init, METH_VARARGS +}; + +void +pygst_exceptions_register_classes (PyObject * d) +{ + PyObject *dict = NULL; + + /* register gst.LinkError */ + dict = PyDict_New (); + if (dict == NULL) + goto exception; + + PyGstExc_LinkError = PyErr_NewException ("gst.LinkError", + PyExc_Exception, dict); + if (PyGstExc_LinkError == NULL) + goto exception; + + if (add_method (PyGstExc_LinkError, dict, &link_error_init_method) < 0) + goto exception; + + Py_DECREF (dict); + + if (PyDict_SetItemString (d, "LinkError", PyGstExc_LinkError) < 0) + goto exception; + + Py_DECREF (PyGstExc_LinkError); + + /* register gst.AddError */ + PyGstExc_AddError = PyErr_NewException ("gst.AddError", + PyExc_Exception, NULL); + if (PyGstExc_AddError == NULL) + goto exception; + + if (PyDict_SetItemString (d, "AddError", PyGstExc_AddError) < 0) + goto exception; + + Py_DECREF (PyGstExc_AddError); + + /* register gst.RemoveError */ + PyGstExc_RemoveError = PyErr_NewException ("gst.RemoveError", + PyExc_Exception, NULL); + if (PyGstExc_RemoveError == NULL) + goto exception; + + if (PyDict_SetItemString (d, "RemoveError", PyGstExc_RemoveError) < 0) + goto exception; + + Py_DECREF (PyGstExc_RemoveError); + + /* register gst.QueryError */ + PyGstExc_QueryError = PyErr_NewException ("gst.QueryError", + PyExc_Exception, NULL); + if (PyGstExc_QueryError == NULL) + goto exception; + + if (PyDict_SetItemString (d, "QueryError", PyGstExc_QueryError) < 0) + goto exception; + + Py_DECREF (PyGstExc_QueryError); + +/* FIXME: remove this method in 0.11; element_factory_make deals with element + factories, not plug-ins */ + + /* register gst.PluginNotFoundError */ + dict = PyDict_New (); + if (dict == NULL) + goto exception; + + PyGstExc_PluginNotFoundError = + PyErr_NewException ("gst.PluginNotFoundError", PyExc_Exception, dict); + if (PyGstExc_PluginNotFoundError == NULL) + goto exception; + + if (add_method (PyGstExc_PluginNotFoundError, + dict, &element_not_found_error_init_method) < 0) + goto exception; + + Py_DECREF (dict); + + if (PyDict_SetItemString (d, "PluginNotFoundError", + PyGstExc_PluginNotFoundError) < 0) + goto exception; + + Py_DECREF (PyGstExc_PluginNotFoundError); + + /* register gst.ElementNotFoundError */ + dict = PyDict_New (); + if (dict == NULL) + goto exception; + + PyGstExc_ElementNotFoundError = + PyErr_NewException ("gst.ElementNotFoundError", + PyGstExc_PluginNotFoundError, dict); + if (PyGstExc_ElementNotFoundError == NULL) + goto exception; + + if (add_method (PyGstExc_ElementNotFoundError, + dict, &element_not_found_error_init_method) < 0) + goto exception; + + Py_DECREF (dict); + + if (PyDict_SetItemString (d, "ElementNotFoundError", + PyGstExc_ElementNotFoundError) < 0) + goto exception; + + Py_DECREF (PyGstExc_ElementNotFoundError); + + return; + + return; + +exception: + Py_XDECREF (dict); + Py_XDECREF (PyGstExc_LinkError); + Py_XDECREF (PyGstExc_AddError); + Py_XDECREF (PyGstExc_RemoveError); + Py_XDECREF (PyGstExc_QueryError); + Py_XDECREF (PyGstExc_PluginNotFoundError); + Py_XDECREF (PyGstExc_ElementNotFoundError); + + return; +} diff --git a/gst/pygstexception.h b/gst/pygstexception.h new file mode 100644 index 0000000..f6d2297 --- /dev/null +++ b/gst/pygstexception.h @@ -0,0 +1,36 @@ +/* + * pygstexception.h - gst-python exceptions + * Copyright (C) 2005 Alessandro Decina + * + * Authors: + * Alessandro Decina + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef _PYGSTEXCEPTION_H_ +#define _PYGSTEXCEPTION_H_ + +extern PyObject *PyGstExc_LinkError; +extern PyObject *PyGstExc_AddError; +extern PyObject *PyGstExc_RemoveError; +extern PyObject *PyGstExc_QueryError; +extern PyObject *PyGstExc_PluginNotFoundError; +extern PyObject *PyGstExc_ElementNotFoundError; + +void pygst_exceptions_register_classes(PyObject *d); + +#endif /* _PYGSTEXCEPTION_H_ */ diff --git a/gst/pygstiterator.c b/gst/pygstiterator.c new file mode 100644 index 0000000..ba009a9 --- /dev/null +++ b/gst/pygstiterator.c @@ -0,0 +1,160 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2005 Johan Dahlin + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Johan Dahlin + */ +/* define this for all source files that don't run init_pygobject() + * before including pygobject.h */ +#define NO_IMPORT_PYGOBJECT + +#include "pygst-private.h" + +static void +pygst_iterator_dealloc (PyGstIterator * self) +{ + gst_iterator_free (self->iter); + PyObject_Del ((PyObject *) self); +} + +static PyObject * +pygst_iterator_iter_next (PyGstIterator * self) +{ + gpointer element; + PyObject *retval = NULL; + GstIteratorResult result; + + result = gst_iterator_next (self->iter, &element); + switch (result) { + case GST_ITERATOR_DONE: + PyErr_SetNone (PyExc_StopIteration); + break; + case GST_ITERATOR_OK: + if (g_type_is_a (self->iter->type, G_TYPE_OBJECT)) { + retval = pygobject_new (G_OBJECT (element)); + g_object_unref (element); + } else if (g_type_is_a (self->iter->type, GST_TYPE_MINI_OBJECT)) { + retval = pygstminiobject_new (GST_MINI_OBJECT (element)); + gst_mini_object_unref (element); + } else { + const gchar *type_name; + + type_name = g_type_name (self->iter->type); + PyErr_Format (PyExc_TypeError, "Unsupported child type: %s", + type_name ? type_name : "unknown"); + } + break; + case GST_ITERATOR_RESYNC: + /* XXX: add/raise gst.IteratorResync */ + PyErr_SetString (PyExc_TypeError, "Resync"); + break; + case GST_ITERATOR_ERROR: + PyErr_SetString (PyExc_TypeError, "Error"); + break; + default: + g_assert_not_reached (); + break; + } + return retval; +} + +static PyObject * +pygst_iterator_next (PyGstIterator * self) +{ + /* Be compatible with Pythons API rather than GStreamers */ + return pygst_iterator_iter_next (self); +} + +static PyObject * +pygst_iterator_push (PyGstIterator * self, PyObject * args) +{ + PyGstIterator *other; + + if (!PyArg_ParseTuple (args, "O!:push", &PyGstIterator_Type, &other)) + return NULL; + + gst_iterator_push (self->iter, other->iter); + + Py_INCREF (Py_None); + return Py_None; +} + +static PyObject * +pygst_iterator_resync (PyGstIterator * self) +{ + gst_iterator_resync (self->iter); + + Py_INCREF (Py_None); + return Py_None; +} + +static PyMethodDef _PyGstIterator_methods[] = { + {"next", (PyCFunction) pygst_iterator_next, METH_NOARGS}, + {"push", (PyCFunction) pygst_iterator_push, METH_VARARGS}, + {"resync", (PyCFunction) pygst_iterator_resync, METH_NOARGS}, + {NULL, NULL, 0} +}; + +PyTypeObject PyGstIterator_Type = { + PyObject_HEAD_INIT (NULL) + 0, /* ob_size */ + "gst.Iterator", /* tp_name */ + sizeof (PyGstIterator), /* tp_basicsize */ + 0, /* tp_itemsize */ + (destructor) pygst_iterator_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_compare */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + "GstIterator wrapper", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + PyObject_SelfIter, /* tp_iter */ + (iternextfunc) pygst_iterator_iter_next, /* tp_iternext */ + _PyGstIterator_methods, /* tp_methods */ +}; + +PyObject * +pygst_iterator_new (GstIterator * iter) +{ + PyGstIterator *self; + + if (iter == NULL) { + PyErr_SetString (PyExc_TypeError, "Invalid GstIterator (NULL)"); + return NULL; + } + + self = PyObject_NEW (PyGstIterator, &PyGstIterator_Type); + self->iter = iter; + GST_DEBUG ("self:%p , iterator:%p, type:%lu", + self, self->iter, self->iter->type); + return (PyObject *) self; +} diff --git a/gst/pygstminiobject.c b/gst/pygstminiobject.c new file mode 100644 index 0000000..443d245 --- /dev/null +++ b/gst/pygstminiobject.c @@ -0,0 +1,381 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- + * pygtk- Python bindings for the GTK toolkit. + * Copyright (C) 1998-2003 James Henstridge + * + * pygobject.c: wrapper for the GObject type. + * + * 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.1 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, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * USA + */ + +#define NO_IMPORT_PYGOBJECT +#define _INSIDE_PYGST_ +#include "common.h" +#include "pygstminiobject.h" +#include "pygst.h" +#include + +static const gchar pygstminiobject_class_id[] = "PyGstMiniObject::class"; +static GQuark pygstminiobject_class_key = 0; +/* static const gchar pygstminiobject_wrapper_id[] = "PyGstMiniObject::wrapper"; */ +/* static GQuark pygstminiobject_wrapper_key = 0; */ + +static void pygstminiobject_dealloc (PyGstMiniObject * self); +/* static int pygstminiobject_traverse(PyGstMiniObject *self, visitproc visit, void *arg); */ +/* static int pygstminiobject_clear(PyGstMiniObject *self); */ + +GST_DEBUG_CATEGORY_EXTERN (pygst_debug); +#define GST_CAT_DEFAULT pygst_debug + +/** + * pygstminiobject_lookup_class: + * @gtype: the GType of the GstMiniObject subclass. + * + * This function looks up the wrapper class used to represent + * instances of a GstMiniObject represented by @gtype. If no wrapper class + * or interface has been registered for the given GType, then a new + * type will be created. + * + * Returns: The wrapper class for the GstMiniObject or NULL if the + * GType has no registered type and a new type couldn't be created + */ +PyTypeObject * +pygstminiobject_lookup_class (GType gtype) +{ + PyTypeObject *py_type = NULL; + GType ctype = gtype; + + while (!py_type && ctype) { + py_type = g_type_get_qdata (ctype, pygstminiobject_class_key); + ctype = g_type_parent (ctype); + } + if (!ctype) + g_error ("Couldn't find a good base type!!"); + + return py_type; +} + +/** + * pygstminiobject_register_class: + * @dict: the module dictionary. A reference to the type will be stored here. + * @type_name: not used ? + * @gtype: the GType of the Gstminiobject subclass. + * @type: the Python type object for this wrapper. + * @bases: a tuple of Python type objects that are the bases of this type. + * + * This function is used to register a Python type as the wrapper for + * a particular Gstminiobject subclass. It will also insert a reference to + * the wrapper class into the module dictionary passed as a reference, + * which simplifies initialisation. + */ +void +pygstminiobject_register_class (PyObject * dict, const gchar * type_name, + GType gtype, PyTypeObject * type, PyObject * bases) +{ + PyObject *o; + const char *class_name, *s; + + if (!pygstminiobject_class_key) + pygstminiobject_class_key = + g_quark_from_static_string (pygstminiobject_class_id); + + class_name = type->tp_name; + s = strrchr (class_name, '.'); + if (s != NULL) + class_name = s + 1; + + type->ob_type = &PyType_Type; + type->tp_alloc = PyType_GenericAlloc; + type->tp_new = PyType_GenericNew; + if (bases) { + type->tp_bases = bases; + type->tp_base = (PyTypeObject *) PyTuple_GetItem (bases, 0); + } + + if (PyType_Ready (type) < 0) { + g_warning ("couldn't make the type `%s' ready", type->tp_name); + return; + } + + if (gtype) { + o = pyg_type_wrapper_new (gtype); + PyDict_SetItemString (type->tp_dict, "__gtype__", o); + Py_DECREF (o); + + /* stash a pointer to the python class with the GType */ + Py_INCREF (type); + g_type_set_qdata (gtype, pygstminiobject_class_key, type); + } + + PyDict_SetItemString (dict, (char *) class_name, (PyObject *) type); +} + +void +pygstminiobject_register_wrapper (PyObject * self) +{ +} + + +/** + * pygstminiobject_new: + * @obj: a GstMiniObject instance. + * + * This function gets a reference to a wrapper for the given GstMiniObject + * instance. A new wrapper will always be created. + * + * Returns: a reference to the wrapper for the GstMiniObject. + */ +PyObject * +pygstminiobject_new (GstMiniObject * obj) +{ + PyGstMiniObject *self = NULL; + PyGILState_STATE state; + PyTypeObject *tp = NULL; + + if (obj == NULL) { + Py_INCREF (Py_None); + return Py_None; + } + + /* since mini objects cannot notify us when they get destroyed, we + * can't use a global hash to map GMO to PyO, and have to create a new + * Python object every time we see it */ + tp = pygstminiobject_lookup_class (G_OBJECT_TYPE (obj)); + GST_DEBUG ("have to create wrapper for object %p", obj); + if (!tp) + g_warning ("Couldn't get class for type object : %p", obj); + if (tp->tp_flags & Py_TPFLAGS_HEAPTYPE) { + GST_INFO ("Increment refcount %p", tp); + Py_INCREF (tp); + } + state = pyg_gil_state_ensure (); + self = PyObject_New (PyGstMiniObject, tp); + pyg_gil_state_release (state); + + if (self == NULL) + return NULL; + self->obj = gst_mini_object_ref (obj); + + self->inst_dict = NULL; + self->weakreflist = NULL; + + GST_DEBUG ("created Python object %p for GstMiniObject %p [ref:%d]", + self, obj, GST_MINI_OBJECT_REFCOUNT_VALUE (obj)); + return (PyObject *) self; +} + +static void +pygstminiobject_dealloc (PyGstMiniObject * self) +{ + PyGILState_STATE state; + + g_return_if_fail (self != NULL); + + GST_DEBUG ("At the beginning %p", self); + state = pyg_gil_state_ensure (); + + if (self->obj) { + GST_DEBUG ("PyO %p unreffing GstMiniObject %p [ref:%d]", self, + self->obj, GST_MINI_OBJECT_REFCOUNT_VALUE (self->obj)); + gst_mini_object_unref (self->obj); + GST_DEBUG ("setting self %p -> obj to NULL", self); + self->obj = NULL; + } + + if (self->inst_dict) { + Py_DECREF (self->inst_dict); + self->inst_dict = NULL; + } + + self->ob_type->tp_free ((PyObject *) self); + pyg_gil_state_release (state); + GST_DEBUG ("At the end %p", self); +} + +static int +pygstminiobject_compare (PyGstMiniObject * self, PyGstMiniObject * v) +{ + if (self->obj == v->obj) + return 0; + if (self->obj > v->obj) + return -1; + return 1; +} + +static long +pygstminiobject_hash (PyGstMiniObject * self) +{ + return (long) self->obj; +} + +static PyObject * +pygstminiobject_repr (PyGstMiniObject * self) +{ + gchar buf[256]; + + g_snprintf (buf, sizeof (buf), + "<%s mini-object (%s) at 0x%lx>", + self->ob_type->tp_name, + self->obj ? G_OBJECT_TYPE_NAME (self->obj) : "uninitialized", + (long) self); + return PyString_FromString (buf); +} + + +static void +pygstminiobject_free (PyObject * op) +{ + PyObject_FREE (op); +} + + +/* ---------------- PyGstMiniObject methods ----------------- */ + +static int +pygstminiobject_init (PyGstMiniObject * self, PyObject * args, + PyObject * kwargs) +{ + GType object_type; + GstMiniObjectClass *class; + + if (!PyArg_ParseTuple (args, ":GstMiniObject.__init__", &object_type)) + return -1; + + object_type = pyg_type_from_object ((PyObject *) self); + if (!object_type) + return -1; + + if (G_TYPE_IS_ABSTRACT (object_type)) { + PyErr_Format (PyExc_TypeError, "cannot create instance of abstract " + "(non-instantiable) type `%s'", g_type_name (object_type)); + return -1; + } + + if ((class = g_type_class_ref (object_type)) == NULL) { + PyErr_SetString (PyExc_TypeError, + "could not get a reference to type class"); + return -1; + } + + self->obj = gst_mini_object_new (object_type); + if (self->obj == NULL) + PyErr_SetString (PyExc_RuntimeError, "could not create object"); + + g_type_class_unref (class); + + return (self->obj) ? 0 : -1; +} + +static PyObject * +pygstminiobject__gstminiobject_init__ (PyGstMiniObject * self, PyObject * args, + PyObject * kwargs) +{ + if (pygstminiobject_init (self, args, kwargs) < 0) + return NULL; + Py_INCREF (Py_None); + return Py_None; +} + +static PyObject * +pygstminiobject_copy (PyGstMiniObject * self, PyObject * args) +{ + return pygstminiobject_new (gst_mini_object_copy (self->obj)); +} + +static PyMethodDef pygstminiobject_methods[] = { + {"__gstminiobject_init__", + (PyCFunction) pygstminiobject__gstminiobject_init__, + METH_VARARGS | METH_KEYWORDS}, + {"copy", (PyCFunction) pygstminiobject_copy, METH_VARARGS, + "Copies the miniobject"}, + {NULL, NULL, 0} +}; + +static PyObject * +pygstminiobject_get_dict (PyGstMiniObject * self, void *closure) +{ + if (self->inst_dict == NULL) { + self->inst_dict = PyDict_New (); + if (self->inst_dict == NULL) + return NULL; + } + Py_INCREF (self->inst_dict); + return self->inst_dict; +} + +static PyObject * +pygstminiobject_get_refcount (PyGstMiniObject * self, void *closure) +{ + return PyInt_FromLong (GST_MINI_OBJECT_REFCOUNT_VALUE (self->obj)); +} + +static PyObject * +pygstminiobject_get_flags (PyGstMiniObject * self, void *closure) +{ + return PyInt_FromLong (GST_MINI_OBJECT_FLAGS (self->obj)); +} + +static PyGetSetDef pygstminiobject_getsets[] = { + {"__dict__", (getter) pygstminiobject_get_dict, (setter) 0}, + {"__grefcount__", (getter) pygstminiobject_get_refcount, (setter) 0,}, + {"flags", (getter) pygstminiobject_get_flags, (setter) 0,}, + {NULL, 0, 0} +}; + +PyTypeObject PyGstMiniObject_Type = { + PyObject_HEAD_INIT (NULL) + 0, /* ob_size */ + "gst.MiniObject", /* tp_name */ + sizeof (PyGstMiniObject), /* tp_basicsize */ + 0, /* tp_itemsize */ + /* methods */ + (destructor) pygstminiobject_dealloc, /* tp_dealloc */ + (printfunc) 0, /* tp_print */ + (getattrfunc) 0, /* tp_getattr */ + (setattrfunc) 0, /* tp_setattr */ + (cmpfunc) pygstminiobject_compare, /* tp_compare */ + (reprfunc) pygstminiobject_repr, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + (hashfunc) pygstminiobject_hash, /* tp_hash */ + (ternaryfunc) 0, /* tp_call */ + (reprfunc) 0, /* tp_str */ + (getattrofunc) 0, /* tp_getattro */ + (setattrofunc) 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ + NULL, /* Documentation string */ + (traverseproc) 0, /* tp_traverse */ + (inquiry) 0, /* tp_clear */ + (richcmpfunc) 0, /* tp_richcompare */ + offsetof (PyGstMiniObject, weakreflist), /* tp_weaklistoffset */ + (getiterfunc) 0, /* tp_iter */ + (iternextfunc) 0, /* tp_iternext */ + pygstminiobject_methods, /* tp_methods */ + 0, /* tp_members */ + pygstminiobject_getsets, /* tp_getset */ + (PyTypeObject *) 0, /* tp_base */ + (PyObject *) 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + offsetof (PyGstMiniObject, inst_dict), /* tp_dictoffset */ + (initproc) pygstminiobject_init, /* tp_init */ + (allocfunc) 0, /* tp_alloc */ + (newfunc) 0, /* tp_new */ + (freefunc) pygstminiobject_free, /* tp_free */ + (inquiry) 0, /* tp_is_gc */ + (PyObject *) 0, /* tp_bases */ +}; diff --git a/gst/pygstminiobject.h b/gst/pygstminiobject.h new file mode 100644 index 0000000..08a5304 --- /dev/null +++ b/gst/pygstminiobject.h @@ -0,0 +1,39 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ + +#ifndef _PYGSTMINIOBJECT_H_ +#define _PYGSTMINIOBJECT_H_ + +#include + +#include +#include + +G_BEGIN_DECLS + +/* Work around bugs in PyGILState api fixed in 2.4.0a4 */ +#undef PYGIL_API_IS_BUGGY +#if PY_VERSION_HEX < 0x020400A4 +#define PYGIL_API_IS_BUGGY TRUE +#else +#define PYGIL_API_IS_BUGGY FALSE +#endif + + +void +pygstminiobject_register_class(PyObject *dict, const gchar *type_name, + GType gtype, PyTypeObject *type, + PyObject *bases); +void +pygstminiobject_register_wrapper(PyObject *self); + +void +pygst_miniobject_init(); + +#ifndef _INSIDE_PYGSTMINIOBJECT_ + + +#endif /* !_INSIDE_PYGSTMINIOBJECT_ */ + +G_END_DECLS + +#endif /* !_PYGSTMINIOBJECT_H_ */ diff --git a/gst/pygstvalue.c b/gst/pygstvalue.c new file mode 100644 index 0000000..60fff3a --- /dev/null +++ b/gst/pygstvalue.c @@ -0,0 +1,414 @@ +/* gst-python + * Copyright (C) 2004 Andy Wingo + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Andy Wingo + */ + +/* define this for all source files that don't run init_pygobject() + * before including pygobject.h */ +#define NO_IMPORT_PYGOBJECT + +#include "pygst-private.h" +#include "pygstvalue.h" + +static PyObject *gstvalue_class = NULL; +static PyObject *gstfourcc_class = NULL; +static PyObject *gstintrange_class = NULL; +static PyObject *gstdoublerange_class = NULL; +static PyObject *gstfraction_class = NULL; +static PyObject *gstfractionrange_class = NULL; + +/* helper function */ + +/* Finds the greatest common divisor. + * Returns 1 if none other found. + * This is Euclid's algorithm. */ +static long +my_gcd (long num, long denom) +{ + while (denom != 0) { + long temp = num; + + num = denom; + denom = temp % denom; + } + + return ABS (num); +} + +/** + * pygst_value_as_pyobject: + * @value: the GValue object. + * @copy_boxed: true if boxed values should be copied. + * + * This function creates/returns a Python wrapper object that + * represents the GValue passed as an argument. + * + * Returns: a PyObject representing the value. + */ +PyObject * +pygst_value_as_pyobject (const GValue * value, gboolean copy_boxed) +{ + PyObject *ret = pyg_value_as_pyobject (value, copy_boxed); + if (!ret) { + PyErr_Clear (); + if (GST_VALUE_HOLDS_FOURCC (value)) { + gchar str[5]; + g_snprintf (str, 5, "%" GST_FOURCC_FORMAT, + GST_FOURCC_ARGS (gst_value_get_fourcc (value))); + ret = PyObject_Call (gstfourcc_class, Py_BuildValue ("(s)", str), NULL); + } else if (GST_VALUE_HOLDS_INT_RANGE (value)) { + ret = PyObject_Call + (gstintrange_class, + Py_BuildValue ("ii", + gst_value_get_int_range_min (value), + gst_value_get_int_range_max (value)), NULL); + } else if (GST_VALUE_HOLDS_DOUBLE_RANGE (value)) { + ret = PyObject_Call + (gstdoublerange_class, + Py_BuildValue ("dd", + gst_value_get_double_range_min (value), + gst_value_get_double_range_max (value)), NULL); + } else if (GST_VALUE_HOLDS_LIST (value)) { + int i, len; + len = gst_value_list_get_size (value); + ret = PyList_New (len); + for (i = 0; i < len; i++) { + PyList_SetItem (ret, i, + pygst_value_as_pyobject + (gst_value_list_get_value (value, i), copy_boxed)); + } + } else if (GST_VALUE_HOLDS_ARRAY (value)) { + int i, len; + len = gst_value_array_get_size (value); + ret = PyTuple_New (len); + for (i = 0; i < len; i++) { + PyTuple_SetItem (ret, i, + pygst_value_as_pyobject + (gst_value_array_get_value (value, i), copy_boxed)); + } + } else if (GST_VALUE_HOLDS_FRACTION (value)) { + ret = PyObject_Call + (gstfraction_class, + Py_BuildValue ("ii", + gst_value_get_fraction_numerator (value), + gst_value_get_fraction_denominator (value)), NULL); + } else if (GST_VALUE_HOLDS_FRACTION_RANGE (value)) { + const GValue *min, *max; + min = gst_value_get_fraction_range_min (value); + max = gst_value_get_fraction_range_max (value); + ret = PyObject_Call + (gstfractionrange_class, + Py_BuildValue ("OO", + pygst_value_as_pyobject (min, copy_boxed), + pygst_value_as_pyobject (max, copy_boxed)), NULL); + } else if (GST_VALUE_HOLDS_BUFFER (value)) { + return pygstminiobject_new (gst_value_get_mini_object (value)); + } else { + gchar buf[256]; + g_snprintf (buf, 256, "unknown type: %s", + g_type_name (G_VALUE_TYPE (value))); + PyErr_SetString (PyExc_TypeError, buf); + } + } + + if (G_VALUE_TYPE (value) == G_TYPE_STRING) { + PyObject *u = NULL; + + /* FIXME: docs are not clear on whether this sets a python + exception when it fails */ + u = PyUnicode_FromEncodedObject (ret, "utf-8", NULL); + Py_DECREF (ret); + ret = u; + } + + return ret; +} + +#define VALUE_TYPE_CHECK(v, t) \ +G_STMT_START{\ +if (!G_VALUE_HOLDS (v, t)) {\ + gchar errbuf[256];\ + g_snprintf (errbuf, 256, "Could not convert %s to %s",\ + g_type_name (t), g_type_name (G_VALUE_TYPE (v)));\ + PyErr_SetString (PyExc_TypeError, errbuf);\ + return -1;\ +}}G_STMT_END + +gboolean +pygst_value_init_for_pyobject (GValue * value, PyObject * obj) +{ + GType t; + + if (obj == Py_None) { + PyErr_SetString (PyExc_TypeError, "value can't be None"); + return FALSE; + } + + if (!(t = pyg_type_from_object ((PyObject *) obj->ob_type))) { + if (PyObject_IsInstance (obj, gstvalue_class)) { + PyErr_Clear (); + if (PyObject_IsInstance (obj, gstfourcc_class)) + t = GST_TYPE_FOURCC; + else if (PyObject_IsInstance (obj, gstintrange_class)) + t = GST_TYPE_INT_RANGE; + else if (PyObject_IsInstance (obj, gstdoublerange_class)) + t = GST_TYPE_DOUBLE_RANGE; + else if (PyObject_IsInstance (obj, gstfraction_class)) + t = GST_TYPE_FRACTION; + else if (PyObject_IsInstance (obj, gstfractionrange_class)) + t = GST_TYPE_FRACTION_RANGE; + else { + PyErr_SetString (PyExc_TypeError, "Unexpected gst.Value instance"); + return FALSE; + } + } else if (PyObject_IsInstance (obj, (PyObject *) & PyGstMiniObject_Type)) { + PyErr_Clear (); + t = GST_TYPE_MINI_OBJECT; + } else if (PyTuple_Check (obj)) { + PyErr_Clear (); + t = GST_TYPE_ARRAY; + } else if (PyList_Check (obj)) { + PyErr_Clear (); + t = GST_TYPE_LIST; + } else if (PyUnicode_Check (obj)) { + /* unicode strings should be converted to UTF-8 */ + PyErr_Clear (); + t = G_TYPE_STRING; + } else { + /* pyg_type_from_object already set the error */ + return FALSE; + } + } + g_value_init (value, t); + return TRUE; +} + +static int +pygst_value_from_pyobject_internal (GValue * value, PyObject * obj) +{ + GType f = g_type_fundamental (G_VALUE_TYPE (value)); + + /* work around a bug in pygtk whereby pyg_value_from_pyobject claims success + for unknown fundamental types without actually doing anything */ + if (f < G_TYPE_MAKE_FUNDAMENTAL (G_TYPE_RESERVED_USER_FIRST) + && pyg_value_from_pyobject (value, obj) == 0) { + return 0; + } else if (PyObject_IsInstance (obj, gstvalue_class)) { + PyErr_Clear (); + + if (PyObject_IsInstance (obj, gstfourcc_class)) { + PyObject *pystr; + gchar *str; + VALUE_TYPE_CHECK (value, GST_TYPE_FOURCC); + if (!(pystr = PyObject_GetAttrString (obj, "fourcc"))) + return -1; + if (!(str = PyString_AsString (pystr))) + return -1; + g_assert (strlen (str) == 4); + gst_value_set_fourcc (value, GST_STR_FOURCC (str)); + } else if (PyObject_IsInstance (obj, gstintrange_class)) { + PyObject *pyval; + long low, high; + VALUE_TYPE_CHECK (value, GST_TYPE_INT_RANGE); + if (!(pyval = PyObject_GetAttrString (obj, "low"))) + return -1; + low = PyInt_AsLong (pyval); + g_assert (G_MININT <= low && low <= G_MAXINT); + if (!(pyval = PyObject_GetAttrString (obj, "high"))) + return -1; + high = PyInt_AsLong (pyval); + g_assert (G_MININT <= high && high <= G_MAXINT); + gst_value_set_int_range (value, (int) low, (int) high); + } else if (PyObject_IsInstance (obj, gstdoublerange_class)) { + PyObject *pyval; + double low, high; + VALUE_TYPE_CHECK (value, GST_TYPE_DOUBLE_RANGE); + if (!(pyval = PyObject_GetAttrString (obj, "low"))) + return -1; + low = PyFloat_AsDouble (pyval); + if (!(pyval = PyObject_GetAttrString (obj, "high"))) + return -1; + high = PyFloat_AsDouble (pyval); + gst_value_set_double_range (value, low, high); + } else if (PyObject_IsInstance (obj, gstfraction_class)) { + PyObject *pyval; + long num, denom; + long gcd = 0; + VALUE_TYPE_CHECK (value, GST_TYPE_FRACTION); + if (!(pyval = PyObject_GetAttrString (obj, "num"))) + return -1; + num = PyInt_AsLong (pyval); + if ((num == -1) && PyErr_Occurred ()) + return -1; + g_assert (G_MININT <= num && num <= G_MAXINT); + if (!(pyval = PyObject_GetAttrString (obj, "denom"))) + return -1; + denom = PyInt_AsLong (pyval); + if ((denom == -1) && PyErr_Occurred ()) + return -1; + /* we need to reduce the values to be smaller than MAXINT */ + if ((gcd = my_gcd (num, denom))) { + num /= gcd; + denom /= gcd; + } + g_assert (G_MININT <= denom && denom <= G_MAXINT); + gst_value_set_fraction (value, (int) num, (int) denom); + } else if (PyObject_IsInstance (obj, gstfractionrange_class)) { + GValue low = { 0, }; + GValue high = { 0, }; + PyObject *pylow, *pyhigh; + + VALUE_TYPE_CHECK (value, GST_TYPE_FRACTION_RANGE); + if (!(pylow = PyObject_GetAttrString (obj, "low"))) + return -1; + if (!pygst_value_init_for_pyobject (&low, pylow)) + return -1; + if (pygst_value_from_pyobject (&low, pylow) != 0) + return -1; + + if (!(pyhigh = PyObject_GetAttrString (obj, "high"))) + return -1; + if (!pygst_value_init_for_pyobject (&high, pyhigh)) + return -1; + if (pygst_value_from_pyobject (&high, pyhigh) != 0) + return -1; + + gst_value_set_fraction_range (value, &low, &high); + } else { + gchar buf[256]; + gchar *str = PyString_AsString (PyObject_Repr (obj)); + g_snprintf (buf, 256, "Unknown gst.Value type: %s", str); + PyErr_SetString (PyExc_TypeError, buf); + return -1; + } + return 0; + } else if (PyObject_IsInstance (obj, (PyObject *) & PyGstMiniObject_Type)) { + VALUE_TYPE_CHECK (value, GST_TYPE_MINI_OBJECT); + gst_value_set_mini_object (value, pygstminiobject_get (obj)); + return 0; + } else if (PyTuple_Check (obj)) { + gint i, len; + PyErr_Clear (); + VALUE_TYPE_CHECK (value, GST_TYPE_ARRAY); + len = PyTuple_Size (obj); + for (i = 0; i < len; i++) { + PyObject *o; + GValue new = { 0, }; + o = PyTuple_GetItem (obj, i); + if (!pygst_value_init_for_pyobject (&new, o)) + return -1; + if (pygst_value_from_pyobject (&new, o) != 0) { + g_value_unset (&new); + return -1; + } + gst_value_array_append_value (value, &new); + g_value_unset (&new); + } + return 0; + } else if (PyList_Check (obj)) { + gint i, len; + PyErr_Clear (); + VALUE_TYPE_CHECK (value, GST_TYPE_LIST); + len = PyList_Size (obj); + for (i = 0; i < len; i++) { + PyObject *o; + GValue new = { 0, }; + o = PyList_GetItem (obj, i); + if (!pygst_value_init_for_pyobject (&new, o)) + return -1; + if (pygst_value_from_pyobject (&new, o) != 0) { + g_value_unset (&new); + return -1; + } + gst_value_list_append_value (value, &new); + g_value_unset (&new); + } + return 0; + } else { + return -1; + } +} + +/** + * pygst_value_from_pyobject: + * @value: the GValue object to store the converted value in. + * @obj: the Python object to convert. + * + * This function converts a Python object and stores the result in a + * GValue. The GValue must be initialised in advance with + * g_value_init(). If the Python object can't be converted to the + * type of the GValue, then an error is returned. + * + * Returns: 0 on success, -1 on error. + */ +int +pygst_value_from_pyobject (GValue * value, PyObject * obj) +{ + PyObject *v = NULL; + int res; + + /* Unicode objects should be converted to utf-8 strings */ + if (PyObject_TypeCheck (obj, &PyUnicode_Type)) { + + v = PyUnicode_AsUTF8String (obj); + obj = v; + } + + res = pygst_value_from_pyobject_internal (value, obj); + + if (v) { + Py_DECREF (obj); + } + + return res; +} + +#define NULL_CHECK(o) if (!o) goto err + +gboolean +pygst_value_init (void) +{ + PyObject *module, *dict; + + if ((module = PyImport_ImportModule ("gst")) == NULL) + return FALSE; + + dict = PyModule_GetDict (module); + + gstvalue_class = (PyObject *) PyDict_GetItemString (dict, "Value"); + NULL_CHECK (gstvalue_class); + gstfourcc_class = (PyObject *) PyDict_GetItemString (dict, "Fourcc"); + NULL_CHECK (gstfourcc_class); + gstintrange_class = (PyObject *) PyDict_GetItemString (dict, "IntRange"); + NULL_CHECK (gstintrange_class); + gstdoublerange_class = + (PyObject *) PyDict_GetItemString (dict, "DoubleRange"); + NULL_CHECK (gstdoublerange_class); + gstfraction_class = (PyObject *) PyDict_GetItemString (dict, "Fraction"); + NULL_CHECK (gstfraction_class); + gstfractionrange_class = + (PyObject *) PyDict_GetItemString (dict, "FractionRange"); + NULL_CHECK (gstfractionrange_class); + return TRUE; + +err: + PyErr_SetString (PyExc_ImportError, + "Failed to get GstValue classes from gst module"); + return FALSE; +} diff --git a/gst/pygstvalue.h b/gst/pygstvalue.h new file mode 100644 index 0000000..a65f00b --- /dev/null +++ b/gst/pygstvalue.h @@ -0,0 +1,29 @@ +/* gst-python + * Copyright (C) 2004 Andy Wingo + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Andy Wingo + */ + +#include +#include + + +PyObject *pygst_value_as_pyobject(const GValue *value, gboolean copy_boxed); +gboolean pygst_value_init_for_pyobject (GValue *value, PyObject *obj); +int pygst_value_from_pyobject(GValue *value, PyObject *obj); +gboolean pygst_value_init(void); diff --git a/gst/tag.defs b/gst/tag.defs new file mode 100644 index 0000000..a9f4927 --- /dev/null +++ b/gst/tag.defs @@ -0,0 +1,306 @@ +;; -*- scheme -*- +; object definitions ... +(define-object TagDemux + (in-module "Gst") + (parent "GstElement") + (c-name "GstTagDemux") + (gtype-id "GST_TYPE_TAG_DEMUX") +) + +;; Enumerations and flags ... + +(define-enum TagDemuxResult + (in-module "Gst") + (c-name "GstTagDemuxResult") + (gtype-id "GST_TYPE_TAG_DEMUX_RESULT") + (values + '("broken-tag" "GST_TAG_DEMUX_RESULT_BROKEN_TAG") + '("again" "GST_TAG_DEMUX_RESULT_AGAIN") + '("ok" "GST_TAG_DEMUX_RESULT_OK") + ) +) + +(define-enum TagImageType + (in-module "Gst") + (c-name "GstTagImageType") + (gtype-id "GST_TYPE_TAG_IMAGE_TYPE") + (values + '("none" "GST_TAG_IMAGE_TYPE_NONE") + '("undefined" "GST_TAG_IMAGE_TYPE_UNDEFINED") + '("front-cover" "GST_TAG_IMAGE_TYPE_FRONT_COVER") + '("back-cover" "GST_TAG_IMAGE_TYPE_BACK_COVER") + '("leaflet-page" "GST_TAG_IMAGE_TYPE_LEAFLET_PAGE") + '("medium" "GST_TAG_IMAGE_TYPE_MEDIUM") + '("lead-artist" "GST_TAG_IMAGE_TYPE_LEAD_ARTIST") + '("artist" "GST_TAG_IMAGE_TYPE_ARTIST") + '("conductor" "GST_TAG_IMAGE_TYPE_CONDUCTOR") + '("band-orchestra" "GST_TAG_IMAGE_TYPE_BAND_ORCHESTRA") + '("composer" "GST_TAG_IMAGE_TYPE_COMPOSER") + '("lyricist" "GST_TAG_IMAGE_TYPE_LYRICIST") + '("recording-location" "GST_TAG_IMAGE_TYPE_RECORDING_LOCATION") + '("during-recording" "GST_TAG_IMAGE_TYPE_DURING_RECORDING") + '("during-performance" "GST_TAG_IMAGE_TYPE_DURING_PERFORMANCE") + '("video-capture" "GST_TAG_IMAGE_TYPE_VIDEO_CAPTURE") + '("fish" "GST_TAG_IMAGE_TYPE_FISH") + '("illustration" "GST_TAG_IMAGE_TYPE_ILLUSTRATION") + '("band-artist-logo" "GST_TAG_IMAGE_TYPE_BAND_ARTIST_LOGO") + '("publisher-studio-logo" "GST_TAG_IMAGE_TYPE_PUBLISHER_STUDIO_LOGO") + ) +) + + +;; From gsttagdemux.h + +(define-function demux_get_type + (c-name "gst_tag_demux_get_type") + (return-type "GType") +) + + + +;; From tag.h + +(define-function image_type_get_type + (c-name "gst_tag_image_type_get_type") + (return-type "GType") +) + +(define-function from_vorbis_tag + (c-name "gst_tag_from_vorbis_tag") + (return-type "const-gchar*") + (parameters + '("const-gchar*" "vorbis_tag") + ) +) + +(define-function to_vorbis_tag + (c-name "gst_tag_to_vorbis_tag") + (return-type "const-gchar*") + (parameters + '("const-gchar*" "gst_tag") + ) +) + +(define-function gst_vorbis_tag_add + (c-name "gst_vorbis_tag_add") + (return-type "none") + (parameters + '("GstTagList*" "list") + '("const-gchar*" "tag") + '("const-gchar*" "value") + ) +) + +(define-function to_vorbis_comments + (c-name "gst_tag_to_vorbis_comments") + (return-type "GList*") + (parameters + '("const-GstTagList*" "list") + '("const-gchar*" "tag") + ) +) + +(define-function list_from_vorbiscomment_buffer + (c-name "gst_tag_list_from_vorbiscomment_buffer") + (return-type "GstTagList*") + (parameters + '("const-GstBuffer*" "buffer") + '("const-guint8*" "id_data") + '("const-guint" "id_data_length") + '("gchar**" "vendor_string") + ) +) + +(define-method to_vorbiscomment_buffer + (of-object "GstTagList") + (c-name "gst_tag_list_to_vorbiscomment_buffer") + (return-type "GstBuffer*") + (parameters + '("const-guint8*" "id_data") + '("const-guint" "id_data_length") + '("const-gchar*" "vendor_string") + ) +) + +(define-function id3_genre_count + (c-name "gst_tag_id3_genre_count") + (return-type "guint") +) + +(define-function id3_genre_get + (c-name "gst_tag_id3_genre_get") + (return-type "const-gchar*") + (parameters + '("const-guint" "id") + ) +) + +(define-function list_new_from_id3v1 + (c-name "gst_tag_list_new_from_id3v1") + (return-type "GstTagList*") + (parameters + '("const-guint8*" "data") + ) +) + +(define-function from_id3_tag + (c-name "gst_tag_from_id3_tag") + (return-type "const-gchar*") + (parameters + '("const-gchar*" "id3_tag") + ) +) + +(define-function from_id3_user_tag + (c-name "gst_tag_from_id3_user_tag") + (return-type "const-gchar*") + (parameters + '("const-gchar*" "type") + '("const-gchar*" "id3_user_tag") + ) +) + +(define-function to_id3_tag + (c-name "gst_tag_to_id3_tag") + (return-type "const-gchar*") + (parameters + '("const-gchar*" "gst_tag") + ) +) + +(define-method add_id3_image + (of-object "GstTagList") + (c-name "gst_tag_list_add_id3_image") + (return-type "gboolean") + (parameters + '("const-guint8*" "image_data") + '("guint" "image_data_len") + '("guint" "id3_picture_type") + ) +) + +(define-method to_exif_buffer + (of-object "GstTagList") + (c-name "gst_tag_list_to_exif_buffer") + (return-type "GstBuffer*") + (parameters + '("gint" "byte_order") + '("guint32" "base_offset") + ) +) + +(define-method to_exif_buffer_with_tiff_header + (of-object "GstTagList") + (c-name "gst_tag_list_to_exif_buffer_with_tiff_header") + (return-type "GstBuffer*") +) + +(define-function tag_list_from_exif_buffer + (c-name "gst_tag_list_from_exif_buffer") + (return-type "GstTagList*") + (parameters + '("const-GstBuffer*" "buffer") + '("gint" "byte_order") + '("guint32" "base_offset") + ) +) + +(define-function tag_list_from_exif_buffer_with_tiff_header + (c-name "gst_tag_list_from_exif_buffer_with_tiff_header") + (return-type "GstTagList*") + (parameters + '("const-GstBuffer*" "buffer") + ) +) + +(define-function parse_extended_comment + (c-name "gst_tag_parse_extended_comment") + (return-type "gboolean") + (parameters + '("const-gchar*" "ext_comment") + '("gchar**" "key") + '("gchar**" "lang") + '("gchar**" "value") + '("gboolean" "fail_if_no_key") + ) +) + +(define-function freeform_string_to_utf8 + (c-name "gst_tag_freeform_string_to_utf8") + (return-type "gchar*") + (parameters + '("const-gchar*" "data") + '("gint" "size") + '("const-gchar**" "env_vars") + ) +) + +(define-function image_data_to_image_buffer + (c-name "gst_tag_image_data_to_image_buffer") + (return-type "GstBuffer*") + (parameters + '("const-guint8*" "image_data") + '("guint" "image_data_len") + '("GstTagImageType" "image_type") + ) +) + +(define-function register_musicbrainz_tags + (c-name "gst_tag_register_musicbrainz_tags") + (return-type "none") +) + +(define-function get_language_codes + (c-name "gst_tag_get_language_codes") + (return-type "gchar**") +) + +(define-function get_language_name + (c-name "gst_tag_get_language_name") + (return-type "const-gchar*") + (parameters + '("const-gchar*" "language_code") + ) +) + +(define-function get_language_code_iso_639_1 + (c-name "gst_tag_get_language_code_iso_639_1") + (return-type "const-gchar*") + (parameters + '("const-gchar*" "lang_code") + ) +) + +(define-function get_language_code_iso_639_2B + (c-name "gst_tag_get_language_code_iso_639_2B") + (return-type "const-gchar*") + (parameters + '("const-gchar*" "lang_code") + ) +) + +(define-function get_language_code_iso_639_2T + (c-name "gst_tag_get_language_code_iso_639_2T") + (return-type "const-gchar*") + (parameters + '("const-gchar*" "lang_code") + ) +) + +(define-function tag_list_from_xmp_buffer + (c-name "gst_tag_list_from_xmp_buffer") + (return-type "GstTagList*") + (parameters + '("const-GstBuffer*" "buffer") + ) +) + +(define-function tag_list_to_xmp_buffer + (c-name "gst_tag_list_to_xmp_buffer") + (return-type "GstBuffer*") + (parameters + '("const-GstTagList*" "taglist") + '("gboolean" "readonly") + ) +) + diff --git a/gst/tag.override b/gst/tag.override new file mode 100644 index 0000000..813c44d --- /dev/null +++ b/gst/tag.override @@ -0,0 +1,105 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2008 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ +%% +headers + +#ifdef HAVE_CONFIG_H +# include +#endif + +#define NO_IMPORT_PYGOBJECT +#include "common.h" +#include "pygst.h" + +#include + +#include +#include +#include "pygstminiobject.h" +GST_DEBUG_CATEGORY_EXTERN (pygst_debug); +#define GST_CAT_DEFAULT pygst_debug + +/* Boonky define that allows for backwards compatibility with Python 2.4 */ +#if PY_VERSION_HEX < 0x02050000 +#define Py_ssize_t int +#endif + +%% +modulename gst.tag +%% +import gobject.GObject as PyGObject_Type +import gst.Object as PyGstObject_Type +import gst.Structure as PyGstStructure_Type +import gst.Element as PyGstElement_Type +import gst.Pad as PyGstPad_Type +import gst.Buffer as PyGstBuffer_Type +import gst.Message as PyGstMessage_Type +import gst.SystemClock as PyGstSystemClock_Type +import gst.BaseTransform as PyGstBaseTransform_Type +import gst.BaseSink as PyGstBaseSink_Type +%% +include + gstversion.override +%% +ignore-glob + _* + *init + *_free + *_get_type + +%% +override gst_tag_to_vorbis_comments +static PyObject * +_wrap_gst_tag_to_vorbis_comments(PyObject *self, PyObject *args, PyObject *kwargs) +{ + PyObject *py_taglist; + const GstTagList *taglist; + const gchar *tag; + + const GList *list; + const GList *l; + PyObject *py_list; + + if (!PyArg_ParseTuple(args, "Os", &py_taglist, &tag)) + return NULL; + + if (pyg_boxed_check(py_taglist, GST_TYPE_TAG_LIST)) + taglist = pyg_boxed_get(py_taglist, GstTagList); + else { + PyErr_SetString(PyExc_TypeError, "list should be a GstTagList"); + return NULL; + } + + + pyg_begin_allow_threads; + list = gst_tag_to_vorbis_comments (taglist, tag); + pyg_end_allow_threads; + + py_list = PyList_New(0); + + for (l = list; l; l = l->next) { + gchar *pair = (gchar *)l->data; + PyObject *py_pair = PyString_FromString(pair); + PyList_Append(py_list, py_pair); + Py_DECREF(py_pair); + } + return py_list; + +} diff --git a/gst/tagmodule.c b/gst/tagmodule.c new file mode 100644 index 0000000..ec303fc --- /dev/null +++ b/gst/tagmodule.c @@ -0,0 +1,58 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2008 Edward Hervey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +/* include this first, before NO_IMPORT_PYGOBJECT is defined */ +#include +#include +#include +#include "pygst.h" + +void pytag_register_classes (PyObject * d); +void pytag_add_constants (PyObject * module, const gchar * strip_prefix); + +extern PyMethodDef pytag_functions[]; + +GST_DEBUG_CATEGORY (pygst_debug); /* for python code */ + +DL_EXPORT (void) +inittag (void) +{ + PyObject *m, *d; + + init_pygobject (); + pygst_init (); + /* Initialize tag library */ + gst_tag_register_musicbrainz_tags (); + + m = Py_InitModule ("tag", pytag_functions); + d = PyModule_GetDict (m); + + pytag_register_classes (d); + pytag_add_constants (m, "GST_"); + + if (PyErr_Occurred ()) { + PyErr_Print (); + Py_FatalError ("can't initialize module gst.tag"); + } +} diff --git a/gst/video.defs b/gst/video.defs new file mode 100644 index 0000000..744721e --- /dev/null +++ b/gst/video.defs @@ -0,0 +1,371 @@ +;; -*- scheme -*- +; object definitions ... +(define-object VideoFilter + (in-module "Gst") + (parent "GstBaseTransform") + (c-name "GstVideoFilter") + (gtype-id "GST_TYPE_VIDEO_FILTER") +) + +(define-object VideoSink + (in-module "Gst") + (parent "GstBaseSink") + (c-name "GstVideoSink") + (gtype-id "GST_TYPE_VIDEO_SINK") +) + +;; Enumerations and flags ... + +(define-enum VideoFormat + (in-module "Gst") + (c-name "GstVideoFormat") + (gtype-id "GST_TYPE_VIDEO_FORMAT") + (values + '("unknown" "GST_VIDEO_FORMAT_UNKNOWN") + '("i420" "GST_VIDEO_FORMAT_I420") + '("yv12" "GST_VIDEO_FORMAT_YV12") + '("yuy2" "GST_VIDEO_FORMAT_YUY2") + '("uyvy" "GST_VIDEO_FORMAT_UYVY") + '("ayuv" "GST_VIDEO_FORMAT_AYUV") + '("rgbx" "GST_VIDEO_FORMAT_RGBx") + '("bgrx" "GST_VIDEO_FORMAT_BGRx") + '("xrgb" "GST_VIDEO_FORMAT_xRGB") + '("xbgr" "GST_VIDEO_FORMAT_xBGR") + '("rgba" "GST_VIDEO_FORMAT_RGBA") + '("bgra" "GST_VIDEO_FORMAT_BGRA") + '("argb" "GST_VIDEO_FORMAT_ARGB") + '("abgr" "GST_VIDEO_FORMAT_ABGR") + '("rgb" "GST_VIDEO_FORMAT_RGB") + '("bgr" "GST_VIDEO_FORMAT_BGR") + '("y41b" "GST_VIDEO_FORMAT_Y41B") + '("y42b" "GST_VIDEO_FORMAT_Y42B") + '("yvyu" "GST_VIDEO_FORMAT_YVYU") + '("y444" "GST_VIDEO_FORMAT_Y444") + '("v210" "GST_VIDEO_FORMAT_v210") + '("v216" "GST_VIDEO_FORMAT_v216") + '("nv12" "GST_VIDEO_FORMAT_NV12") + '("nv21" "GST_VIDEO_FORMAT_NV21") + '("gray8" "GST_VIDEO_FORMAT_GRAY8") + '("gray16-be" "GST_VIDEO_FORMAT_GRAY16_BE") + '("gray16-le" "GST_VIDEO_FORMAT_GRAY16_LE") + '("v308" "GST_VIDEO_FORMAT_v308") + '("y800" "GST_VIDEO_FORMAT_Y800") + '("y16" "GST_VIDEO_FORMAT_Y16") + '("rgb16" "GST_VIDEO_FORMAT_RGB16") + '("bgr16" "GST_VIDEO_FORMAT_BGR16") + '("rgb15" "GST_VIDEO_FORMAT_RGB15") + '("bgr15" "GST_VIDEO_FORMAT_BGR15") + '("uyvp" "GST_VIDEO_FORMAT_UYVP") + '("a420" "GST_VIDEO_FORMAT_A420") + '("rgb8-paletted" "GST_VIDEO_FORMAT_RGB8_PALETTED") + '("yuv9" "GST_VIDEO_FORMAT_YUV9") + '("yvu9" "GST_VIDEO_FORMAT_YVU9") + '("iyu1" "GST_VIDEO_FORMAT_IYU1") + ) +) + + +;; From gstvideofilter.h + +(define-function gst_video_filter_get_type + (c-name "gst_video_filter_get_type") + (return-type "GType") +) + + + +;; From gstvideosink.h + +(define-function gst_video_sink_get_type + (c-name "gst_video_sink_get_type") + (return-type "GType") +) + +(define-function video_sink_center_rect + (c-name "gst_video_sink_center_rect") + (return-type "none") + (parameters + '("GstVideoRectangle" "src") + '("GstVideoRectangle" "dst") + '("GstVideoRectangle*" "result") + '("gboolean" "scaling") + ) +) + + + +;; From video.h + +(define-function get_size + (c-name "gst_video_get_size") + (return-type "gboolean") + (parameters + '("GstPad*" "pad") + '("gint*" "width") + '("gint*" "height") + ) +) + +(define-function calculate_display_ratio + (c-name "gst_video_calculate_display_ratio") + (return-type "gboolean") + (parameters + '("guint*" "dar_n") + '("guint*" "dar_d") + '("guint" "video_width") + '("guint" "video_height") + '("guint" "video_par_n") + '("guint" "video_par_d") + '("guint" "display_par_n") + '("guint" "display_par_d") + ) +) + +(define-function format_parse_caps + (c-name "gst_video_format_parse_caps") + (return-type "gboolean") + (parameters + '("GstCaps*" "caps") + '("GstVideoFormat*" "format") + '("int*" "width") + '("int*" "height") + ) +) + +(define-function format_parse_caps_interlaced + (c-name "gst_video_format_parse_caps_interlaced") + (return-type "gboolean") + (parameters + '("GstCaps*" "caps") + '("gboolean*" "interlaced") + ) +) + +(define-function parse_caps_framerate + (c-name "gst_video_parse_caps_framerate") + (return-type "gboolean") + (parameters + '("GstCaps*" "caps") + '("int*" "fps_n") + '("int*" "fps_d") + ) +) + +(define-function parse_caps_pixel_aspect_ratio + (c-name "gst_video_parse_caps_pixel_aspect_ratio") + (return-type "gboolean") + (parameters + '("GstCaps*" "caps") + '("int*" "par_n") + '("int*" "par_d") + ) +) + +(define-function parse_caps_color_matrix + (c-name "gst_video_parse_caps_color_matrix") + (return-type "const-char*") + (parameters + '("GstCaps*" "caps") + ) +) + +(define-function parse_caps_chroma_site + (c-name "gst_video_parse_caps_chroma_site") + (return-type "const-char*") + (parameters + '("GstCaps*" "caps") + ) +) + +(define-function video_parse_caps_palette + (c-name "gst_video_parse_caps_palette") + (return-type "GstBuffer*") + (parameters + '("GstCaps*" "caps") + ) +) + +(define-method new_caps + (of-object "GstVideoFormat") + (c-name "gst_video_format_new_caps") + (caller-owns-return #t) + (return-type "GstCaps*") + (parameters + '("int" "width") + '("int" "height") + '("int" "framerate_n") + '("int" "framerate_d") + '("int" "par_n") + '("int" "par_d") + ) +) + +(define-method new_caps_interlaced + (of-object "GstVideoFormat") + (c-name "gst_video_format_new_caps_interlaced") + (caller-owns-return #t) + (return-type "GstCaps*") + (parameters + '("int" "width") + '("int" "height") + '("int" "framerate_n") + '("int" "framerate_d") + '("int" "par_n") + '("int" "par_d") + '("gboolean" "interlaced") + ) +) + +(define-function format_from_fourcc + (c-name "gst_video_format_from_fourcc") + (return-type "GstVideoFormat") + (parameters + '("guint32" "fourcc") + ) +) + +(define-method to_fourcc + (of-object "GstVideoFormat") + (c-name "gst_video_format_to_fourcc") + (return-type "guint32") +) + +(define-method is_rgb + (of-object "GstVideoFormat") + (c-name "gst_video_format_is_rgb") + (return-type "gboolean") +) + +(define-method is_yuv + (of-object "GstVideoFormat") + (c-name "gst_video_format_is_yuv") + (return-type "gboolean") +) + +(define-method is_gray + (of-object "GstVideoFormat") + (c-name "gst_video_format_is_gray") + (return-type "gboolean") +) + +(define-method has_alpha + (of-object "GstVideoFormat") + (c-name "gst_video_format_has_alpha") + (return-type "gboolean") +) + +(define-method get_row_stride + (of-object "GstVideoFormat") + (c-name "gst_video_format_get_row_stride") + (return-type "int") + (parameters + '("int" "component") + '("int" "width") + ) +) + +(define-method get_pixel_stride + (of-object "GstVideoFormat") + (c-name "gst_video_format_get_pixel_stride") + (return-type "int") + (parameters + '("int" "component") + ) +) + +(define-method get_component_width + (of-object "GstVideoFormat") + (c-name "gst_video_format_get_component_width") + (return-type "int") + (parameters + '("int" "component") + '("int" "width") + ) +) + +(define-method get_component_height + (of-object "GstVideoFormat") + (c-name "gst_video_format_get_component_height") + (return-type "int") + (parameters + '("int" "component") + '("int" "height") + ) +) + +(define-method get_component_offset + (of-object "GstVideoFormat") + (c-name "gst_video_format_get_component_offset") + (return-type "int") + (parameters + '("int" "component") + '("int" "width") + '("int" "height") + ) +) + +(define-method get_size + (of-object "GstVideoFormat") + (c-name "gst_video_format_get_size") + (return-type "int") + (parameters + '("int" "width") + '("int" "height") + ) +) + +(define-method convert + (of-object "GstVideoFormat") + (c-name "gst_video_format_convert") + (return-type "gboolean") + (parameters + '("int" "width") + '("int" "height") + '("int" "fps_n") + '("int" "fps_d") + '("GstFormat" "src_format") + '("gint64" "src_value") + '("GstFormat" "dest_format") + '("gint64*" "dest_value") + ) +) + +(define-function event_new_still_frame + (c-name "gst_video_event_new_still_frame") + (return-type "GstEvent*") + (parameters + '("gboolean" "in_still") + ) +) + +(define-function event_parse_still_frame + (c-name "gst_video_event_parse_still_frame") + (return-type "gboolean") + (parameters + '("GstEvent*" "event") + '("gboolean*" "in_still") + ) +) +(define-function video_convert_frame + (c-name "gst_video_convert_frame") + (return-type "GstBuffer*") + (parameters + '("GstBuffer*" "buf") + '("const-GstCaps*" "to_caps") + '("GstClockTime" "timeout") + '("GError**" "error") + ) +) + +(define-function video_convert_frame_async + (c-name "gst_video_convert_frame_async") + (return-type "none") + (parameters + '("GstBuffer*" "buf") + '("const-GstCaps*" "to_caps") + '("GstClockTime" "timeout") + '("GstVideoConvertFrameCallback" "callback") + '("gpointer" "user_data") + '("GDestroyNotify" "destroy_notify") + ) +) diff --git a/gst/video.override b/gst/video.override new file mode 100644 index 0000000..ad2acd6 --- /dev/null +++ b/gst/video.override @@ -0,0 +1,66 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2008 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ +%% +headers + +#ifdef HAVE_CONFIG_H +# include +#endif + +#define NO_IMPORT_PYGOBJECT +#include "common.h" +#include "pygst.h" + +#include + +#include +#include +#include +#include "pygstminiobject.h" +GST_DEBUG_CATEGORY_EXTERN (pygst_debug); +#define GST_CAT_DEFAULT pygst_debug + +/* Boonky define that allows for backwards compatibility with Python 2.4 */ +#if PY_VERSION_HEX < 0x02050000 +#define Py_ssize_t int +#endif + +%% +modulename gst.video +%% +import gobject.GObject as PyGObject_Type +import gst.Object as PyGstObject_Type +import gst.Structure as PyGstStructure_Type +import gst.Element as PyGstElement_Type +import gst.Pad as PyGstPad_Type +import gst.Buffer as PyGstBuffer_Type +import gst.Message as PyGstMessage_Type +import gst.SystemClock as PyGstSystemClock_Type +import gst.BaseTransform as PyGstBaseTransform_Type +import gst.BaseSink as PyGstBaseSink_Type +%% +include + gstversion.override +%% +ignore-glob + _* + *init + *_free + *_get_type diff --git a/gst/videomodule.c b/gst/videomodule.c new file mode 100644 index 0000000..9308a15 --- /dev/null +++ b/gst/videomodule.c @@ -0,0 +1,58 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2008 Edward Hervey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +/* include this first, before NO_IMPORT_PYGOBJECT is defined */ +#include +#include +#include +#include +#include +#include "pygst.h" + +void pyvideo_register_classes (PyObject * d); +void pyvideo_add_constants (PyObject * module, const gchar * strip_prefix); + +extern PyMethodDef pyvideo_functions[]; + +GST_DEBUG_CATEGORY (pygst_debug); /* for python code */ + +DL_EXPORT (void) +initvideo (void) +{ + PyObject *m, *d, *gst; + + init_pygobject (); + gst = pygst_init (); + + m = Py_InitModule ("video", pyvideo_functions); + d = PyModule_GetDict (m); + + pyvideo_register_classes (d); + pyvideo_add_constants (m, "GST_"); + + if (PyErr_Occurred ()) { + PyErr_Print (); + Py_FatalError ("can't initialize module gst.video"); + } +} diff --git a/gst/xoverlay.defs b/gst/xoverlay.defs new file mode 100644 index 0000000..db7072d --- /dev/null +++ b/gst/xoverlay.defs @@ -0,0 +1,53 @@ +;; -*- scheme -*- +; object definitions ... +;; Enumerations and flags ... + +(define-interface XOverlay + (in-module "Gst") + (c-name "GstXOverlay") + (gtype-id "GST_TYPE_X_OVERLAY") +) + +;; From /opt/gnome/include/gstreamer-0.7/gst/xoverlay/xoverlay.h + +(define-method set_xwindow_id + (of-object "GstXOverlay") + (c-name "gst_x_overlay_set_xwindow_id") + (return-type "none") + (parameters + '("gulong" "xwindow_id") + ) +) + +(define-method set_render_rectangle + (of-object "GstXOverlay") + (c-name "gst_x_overlay_set_render_rectangle") + (return-type "gboolean") + (parameters + '("gint" "x") + '("gint" "y") + '("gint" "width") + '("gint" "height") + ) +) + +(define-method expose + (of-object "GstXOverlay") + (c-name "gst_x_overlay_expose") + (return-type "none") +) + +(define-method got_xwindow_id + (of-object "GstXOverlay") + (c-name "gst_x_overlay_got_xwindow_id") + (return-type "none") + (parameters + '("gulong" "xwindow_id") + ) +) + +(define-method prepare_xwindow_id + (of-object "GstXOverlay") + (c-name "gst_x_overlay_prepare_xwindow_id") + (return-type "none") +) \ No newline at end of file diff --git a/gst/xoverlay.override b/gst/xoverlay.override new file mode 100644 index 0000000..dd382e7 --- /dev/null +++ b/gst/xoverlay.override @@ -0,0 +1,24 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2004 Johan Dahlin + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + */ +%% +headers + +#include diff --git a/gstlibtoolimporter.py b/gstlibtoolimporter.py new file mode 100644 index 0000000..4b08de4 --- /dev/null +++ b/gstlibtoolimporter.py @@ -0,0 +1,112 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python +# Copyright (C) 2009 Alessandro Decina +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library 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 +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# +# Author: Alessandro Decina + +# importer for uninstalled setup, see PEP +# http://www.python.org/dev/peps/pep-0302/ + +import os +import sys +import imp + +class Loader(object): + def __init__(self, fileobj, filename, description): + self.fileobj = fileobj + self.filename = filename + self.description = description + + def find_real_filename(self): + dlname = None + installed = False + for line in self.fileobj: + if len(line) > 7 and line[:7] == 'dlname=': + dlname = line[8:-2] + elif len(line) > 10 and line[:10] == 'installed=': + installed = line[10:-1] == 'yes' + + if not dlname: + return None + + if installed or os.path.dirname(self.filename).endswith('.libs'): + filename = os.path.join(os.path.dirname(self.filename), dlname) + else: + filename = os.path.join(os.path.dirname(self.filename), '.libs', dlname) + + return filename + + def load_module(self, name): + try: + module = sys.modules[name] + self.fileobj.close() + + return module + except KeyError: + pass + + filename = self.find_real_filename() + self.fileobj.close() + if filename is None: + raise ImportError("No module named %s" % name) + + fileobj = file(filename, 'rb') + + module = imp.new_module(name) + sys.modules[name] = module + + imp.load_module(name, fileobj, filename, self.description) + fileobj.close() + + return module + +class Importer(object): + def find_module(self, name, path=None): + if path is None: + path = sys.path + + for directory in path: + fileobj, filename, description = self.find_libtool_module(name, directory) + if fileobj is not None: + return Loader(fileobj, filename, description) + + return None + + def find_libtool_module(self, name, directory): + name = name.split(".")[-1] + absname = os.path.join(directory, name) + for suffix in ('.la', '.module.la'): + filename = absname + suffix + try: + fileobj = file(filename, 'rb') + except IOError: + continue + + return fileobj, filename, (suffix, 'rb', imp.C_EXTENSION) + + return None, None, None + +importer = Importer() + +def install(): + sys.meta_path.append(importer) + +def uninstall(): + sys.meta_path.remove(importer) diff --git a/gstoptionmodule.c b/gstoptionmodule.c new file mode 100644 index 0000000..2e9009b --- /dev/null +++ b/gstoptionmodule.c @@ -0,0 +1,50 @@ +/* -*- Mode: C; ; c-file-style: "k&r"; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2007 Johan Dahlin + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Johan Dahlin + */ + +#include +#include +#include + +static PyObject * +_wrap_gstoption_get_group (PyObject *self) +{ + GOptionGroup *option_group; + + option_group = gst_init_get_option_group(); + return pyg_option_group_new(option_group); +} + +static PyMethodDef pygstoption_functions[] = { + { "get_group", (PyCFunction)_wrap_gstoption_get_group, METH_NOARGS, NULL }, + { NULL, NULL, 0, NULL } +}; + +DL_EXPORT(void) +initgstoption (void) +{ + init_pygobject (); + + if (!g_thread_supported ()) + g_thread_init (NULL); + + Py_InitModule ("gstoption", pygstoption_functions); +} diff --git a/install-sh b/install-sh new file mode 100755 index 0000000..6781b98 --- /dev/null +++ b/install-sh @@ -0,0 +1,520 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2009-04-28.21; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +no_target_directory= + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call `install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + trap '(exit $?); exit' 1 2 13 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names starting with `-'. + case $src in + -*) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + + dst=$dst_arg + # Protect names starting with `-'. + case $dst in + -*) dst=./$dst;; + esac + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writeable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + -*) prefix='./';; + *) prefix='';; + esac + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test -z "$d" && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/ltmain.sh b/ltmain.sh new file mode 100755 index 0000000..c7bf234 --- /dev/null +++ b/ltmain.sh @@ -0,0 +1,9642 @@ + +# libtool (GNU libtool) 2.4 +# Written by Gordon Matzigkeit , 1996 + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, +# 2007, 2008, 2009, 2010 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool 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 +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, +# or obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# Usage: $progname [OPTION]... [MODE-ARG]... +# +# Provide generalized library-building support services. +# +# --config show all configuration variables +# --debug enable verbose shell tracing +# -n, --dry-run display commands without modifying any files +# --features display basic configuration information and exit +# --mode=MODE use operation mode MODE +# --preserve-dup-deps don't remove duplicate dependency libraries +# --quiet, --silent don't print informational messages +# --no-quiet, --no-silent +# print informational messages (default) +# --tag=TAG use configuration variables from tag TAG +# -v, --verbose print more informational messages than default +# --no-verbose don't print the extra informational messages +# --version print version information +# -h, --help, --help-all print short, long, or detailed help message +# +# MODE must be one of the following: +# +# clean remove files from the build directory +# compile compile a source file into a libtool object +# execute automatically set library path, then run a program +# finish complete the installation of libtool libraries +# install install libraries or executables +# link create a library or an executable +# uninstall remove libraries from an installed directory +# +# MODE-ARGS vary depending on the MODE. When passed as first option, +# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. +# Try `$progname --help --mode=MODE' for a more detailed description of MODE. +# +# When reporting a bug, please describe a test case to reproduce it and +# include the following information: +# +# host-triplet: $host +# shell: $SHELL +# compiler: $LTCC +# compiler flags: $LTCFLAGS +# linker: $LD (gnu? $with_gnu_ld) +# $progname: (GNU libtool) 2.4 Debian-2.4-4 +# automake: $automake_version +# autoconf: $autoconf_version +# +# Report bugs to . +# GNU libtool home page: . +# General help using GNU software: . + +PROGRAM=libtool +PACKAGE=libtool +VERSION="2.4 Debian-2.4-4" +TIMESTAMP="" +package_revision=1.3293 + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# NLS nuisances: We save the old values to restore during execute mode. +lt_user_locale= +lt_safe_locale= +for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test \"\${$lt_var+set}\" = set; then + save_$lt_var=\$$lt_var + $lt_var=C + export $lt_var + lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" + lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" + fi" +done +LC_ALL=C +LANGUAGE=C +export LANGUAGE LC_ALL + +$lt_unset CDPATH + + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + + + +: ${CP="cp -f"} +test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} +: ${EGREP="/bin/grep -E"} +: ${FGREP="/bin/grep -F"} +: ${GREP="/bin/grep"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SED="/bin/sed"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} +: ${Xsed="$SED -e 1s/^X//"} + +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +exit_status=$EXIT_SUCCESS + +# Make sure IFS has a sensible default +lt_nl=' +' +IFS=" $lt_nl" + +dirname="s,/[^/]*$,," +basename="s,^.*/,," + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} # func_dirname may be replaced by extended shell implementation + + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "${1}" | $SED "$basename"` +} # func_basename may be replaced by extended shell implementation + + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi + func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` +} # func_dirname_and_basename may be replaced by extended shell implementation + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname may be replaced by extended shell implementation + + +# These SED scripts presuppose an absolute path with a trailing slash. +pathcar='s,^/\([^/]*\).*$,\1,' +pathcdr='s,^/[^/]*,,' +removedotparts=':dotsl + s@/\./@/@g + t dotsl + s,/\.$,/,' +collapseslashes='s@/\{1,\}@/@g' +finalslash='s,/*$,/,' + +# func_normal_abspath PATH +# Remove doubled-up and trailing slashes, "." path components, +# and cancel out any ".." path components in PATH after making +# it an absolute path. +# value returned in "$func_normal_abspath_result" +func_normal_abspath () +{ + # Start from root dir and reassemble the path. + func_normal_abspath_result= + func_normal_abspath_tpath=$1 + func_normal_abspath_altnamespace= + case $func_normal_abspath_tpath in + "") + # Empty path, that just means $cwd. + func_stripname '' '/' "`pwd`" + func_normal_abspath_result=$func_stripname_result + return + ;; + # The next three entries are used to spot a run of precisely + # two leading slashes without using negated character classes; + # we take advantage of case's first-match behaviour. + ///*) + # Unusual form of absolute path, do nothing. + ;; + //*) + # Not necessarily an ordinary path; POSIX reserves leading '//' + # and for example Cygwin uses it to access remote file shares + # over CIFS/SMB, so we conserve a leading double slash if found. + func_normal_abspath_altnamespace=/ + ;; + /*) + # Absolute path, do nothing. + ;; + *) + # Relative path, prepend $cwd. + func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath + ;; + esac + # Cancel out all the simple stuff to save iterations. We also want + # the path to end with a slash for ease of parsing, so make sure + # there is one (and only one) here. + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` + while :; do + # Processed it all yet? + if test "$func_normal_abspath_tpath" = / ; then + # If we ascended to the root using ".." the result may be empty now. + if test -z "$func_normal_abspath_result" ; then + func_normal_abspath_result=/ + fi + break + fi + func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$pathcar"` + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$pathcdr"` + # Figure out what to do with it + case $func_normal_abspath_tcomponent in + "") + # Trailing empty path component, ignore it. + ;; + ..) + # Parent dir; strip last assembled component from result. + func_dirname "$func_normal_abspath_result" + func_normal_abspath_result=$func_dirname_result + ;; + *) + # Actual path component, append it. + func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent + ;; + esac + done + # Restore leading double-slash if one was found on entry. + func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result +} + +# func_relative_path SRCDIR DSTDIR +# generates a relative path from SRCDIR to DSTDIR, with a trailing +# slash if non-empty, suitable for immediately appending a filename +# without needing to append a separator. +# value returned in "$func_relative_path_result" +func_relative_path () +{ + func_relative_path_result= + func_normal_abspath "$1" + func_relative_path_tlibdir=$func_normal_abspath_result + func_normal_abspath "$2" + func_relative_path_tbindir=$func_normal_abspath_result + + # Ascend the tree starting from libdir + while :; do + # check if we have found a prefix of bindir + case $func_relative_path_tbindir in + $func_relative_path_tlibdir) + # found an exact match + func_relative_path_tcancelled= + break + ;; + $func_relative_path_tlibdir*) + # found a matching prefix + func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" + func_relative_path_tcancelled=$func_stripname_result + if test -z "$func_relative_path_result"; then + func_relative_path_result=. + fi + break + ;; + *) + func_dirname $func_relative_path_tlibdir + func_relative_path_tlibdir=${func_dirname_result} + if test "x$func_relative_path_tlibdir" = x ; then + # Have to descend all the way to the root! + func_relative_path_result=../$func_relative_path_result + func_relative_path_tcancelled=$func_relative_path_tbindir + break + fi + func_relative_path_result=../$func_relative_path_result + ;; + esac + done + + # Now calculate path; take care to avoid doubling-up slashes. + func_stripname '' '/' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + func_stripname '/' '/' "$func_relative_path_tcancelled" + if test "x$func_stripname_result" != x ; then + func_relative_path_result=${func_relative_path_result}/${func_stripname_result} + fi + + # Normalisation. If bindir is libdir, return empty string, + # else relative path ending with a slash; either way, target + # file name can be directly appended. + if test ! -z "$func_relative_path_result"; then + func_stripname './' '' "$func_relative_path_result/" + func_relative_path_result=$func_stripname_result + fi +} + +# The name of this program: +func_dirname_and_basename "$progpath" +progname=$func_basename_result + +# Make sure we have an absolute path for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=$func_dirname_result + progdir=`cd "$progdir" && pwd` + progpath="$progdir/$progname" + ;; + *) + save_IFS="$IFS" + IFS=: + for progdir in $PATH; do + IFS="$save_IFS" + test -x "$progdir/$progname" && break + done + IFS="$save_IFS" + test -n "$progdir" || progdir=`pwd` + progpath="$progdir/$progname" + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed="${SED}"' -e 1s/^X//' +sed_quote_subst='s/\([`"$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution that turns a string into a regex matching for the +# string literally. +sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' + +# Sed substitution that converts a w32 file name or path +# which contains forward slashes, into one that contains +# (escaped) backslashes. A very naive implementation. +lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + +# Re-`\' parameter expansions in output of double_quote_subst that were +# `\'-ed in input to the same. If an odd number of `\' preceded a '$' +# in input to double_quote_subst, that '$' was protected from expansion. +# Since each input `\' is now two `\'s, look for any number of runs of +# four `\'s followed by two `\'s and then a '$'. `\' that '$'. +bs='\\' +bs2='\\\\' +bs4='\\\\\\\\' +dollar='\$' +sed_double_backslash="\ + s/$bs4/&\\ +/g + s/^$bs2$dollar/$bs&/ + s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g + s/\n//g" + +# Standard options: +opt_dry_run=false +opt_help=false +opt_quiet=false +opt_verbose=false +opt_warning=: + +# func_echo arg... +# Echo program name prefixed message, along with the current mode +# name if it has been set yet. +func_echo () +{ + $ECHO "$progname: ${opt_mode+$opt_mode: }$*" +} + +# func_verbose arg... +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $opt_verbose && func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +# func_error arg... +# Echo program name prefixed message to standard error. +func_error () +{ + $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 +} + +# func_warning arg... +# Echo program name prefixed warning message to standard error. +func_warning () +{ + $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 + + # bash bug again: + : +} + +# func_fatal_error arg... +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + +# func_fatal_help arg... +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + func_error ${1+"$@"} + func_fatal_error "$help" +} +help="Try \`$progname --help' for more information." ## default + + +# func_grep expression filename +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_mkdir_p directory-path +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + my_directory_path="$1" + my_dir_list= + + if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then + + # Protect directory names starting with `-' + case $my_directory_path in + -*) my_directory_path="./$my_directory_path" ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$my_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + my_dir_list="$my_directory_path:$my_dir_list" + + # If the last portion added has no slash in it, the list is done + case $my_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` + done + my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` + + save_mkdir_p_IFS="$IFS"; IFS=':' + for my_dir in $my_dir_list; do + IFS="$save_mkdir_p_IFS" + # mkdir can fail with a `File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$my_dir" 2>/dev/null || : + done + IFS="$save_mkdir_p_IFS" + + # Bail out if we (or some other process) failed to create a directory. + test -d "$my_directory_path" || \ + func_fatal_error "Failed to create \`$1'" + fi +} + + +# func_mktempdir [string] +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, STRING is the basename for that directory. +func_mktempdir () +{ + my_template="${TMPDIR-/tmp}/${1-$progname}" + + if test "$opt_dry_run" = ":"; then + # Return a directory name, but don't create it in dry-run mode + my_tmpdir="${my_template}-$$" + else + + # If mktemp works, use that first and foremost + my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` + + if test ! -d "$my_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + my_tmpdir="${my_template}-${RANDOM-0}$$" + + save_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$my_tmpdir" + umask $save_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$my_tmpdir" || \ + func_fatal_error "cannot create temporary directory \`$my_tmpdir'" + fi + + $ECHO "$my_tmpdir" +} + + +# func_quote_for_eval arg +# Aesthetically quote ARG to be evaled later. +# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT +# is double-quoted, suitable for a subsequent eval, whereas +# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters +# which are still active within double quotes backslashified. +func_quote_for_eval () +{ + case $1 in + *[\\\`\"\$]*) + func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; + *) + func_quote_for_eval_unquoted_result="$1" ;; + esac + + case $func_quote_for_eval_unquoted_result in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and and variable + # expansion for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" + ;; + *) + func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" + esac +} + + +# func_quote_for_expand arg +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + case $1 in + *[\\\`\"]*) + my_arg=`$ECHO "$1" | $SED \ + -e "$double_quote_subst" -e "$sed_double_backslash"` ;; + *) + my_arg="$1" ;; + esac + + case $my_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + my_arg="\"$my_arg\"" + ;; + esac + + func_quote_for_expand_result="$my_arg" +} + + +# func_show_eval cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$my_cmd" + my_status=$? + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + +# func_show_eval_locale cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$lt_user_locale + $my_cmd" + my_status=$? + eval "$lt_safe_locale" + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + +# func_tr_sh +# Turn $1 into a string suitable for a shell variable name. +# Result is stored in $func_tr_sh_result. All characters +# not in the set a-zA-Z0-9_ are replaced with '_'. Further, +# if $1 begins with a digit, a '_' is prepended as well. +func_tr_sh () +{ + case $1 in + [0-9]* | *[!a-zA-Z0-9_]*) + func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` + ;; + * ) + func_tr_sh_result=$1 + ;; + esac +} + + +# func_version +# Echo version message to standard output and exit. +func_version () +{ + $opt_debug + + $SED -n '/(C)/!b go + :more + /\./!{ + N + s/\n# / / + b more + } + :go + /^# '$PROGRAM' (GNU /,/# warranty; / { + s/^# // + s/^# *$// + s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ + p + }' < "$progpath" + exit $? +} + +# func_usage +# Echo short help message to standard output and exit. +func_usage () +{ + $opt_debug + + $SED -n '/^# Usage:/,/^# *.*--help/ { + s/^# // + s/^# *$// + s/\$progname/'$progname'/ + p + }' < "$progpath" + echo + $ECHO "run \`$progname --help | more' for full usage" + exit $? +} + +# func_help [NOEXIT] +# Echo long help message to standard output and exit, +# unless 'noexit' is passed as argument. +func_help () +{ + $opt_debug + + $SED -n '/^# Usage:/,/# Report bugs to/ { + :print + s/^# // + s/^# *$// + s*\$progname*'$progname'* + s*\$host*'"$host"'* + s*\$SHELL*'"$SHELL"'* + s*\$LTCC*'"$LTCC"'* + s*\$LTCFLAGS*'"$LTCFLAGS"'* + s*\$LD*'"$LD"'* + s/\$with_gnu_ld/'"$with_gnu_ld"'/ + s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ + s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ + p + d + } + /^# .* home page:/b print + /^# General help using/b print + ' < "$progpath" + ret=$? + if test -z "$1"; then + exit $ret + fi +} + +# func_missing_arg argname +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + $opt_debug + + func_error "missing argument for $1." + exit_cmd=exit +} + + +# func_split_short_opt shortopt +# Set func_split_short_opt_name and func_split_short_opt_arg shell +# variables after splitting SHORTOPT after the 2nd character. +func_split_short_opt () +{ + my_sed_short_opt='1s/^\(..\).*$/\1/;q' + my_sed_short_rest='1s/^..\(.*\)$/\1/;q' + + func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` + func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` +} # func_split_short_opt may be replaced by extended shell implementation + + +# func_split_long_opt longopt +# Set func_split_long_opt_name and func_split_long_opt_arg shell +# variables after splitting LONGOPT at the `=' sign. +func_split_long_opt () +{ + my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' + my_sed_long_arg='1s/^--[^=]*=//' + + func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` + func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` +} # func_split_long_opt may be replaced by extended shell implementation + +exit_cmd=: + + + + + +magic="%%%MAGIC variable%%%" +magic_exe="%%%MAGIC EXE variable%%%" + +# Global variables. +nonopt= +preserve_args= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" +extracted_archives= +extracted_serial=0 + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "${1}=\$${1}\${2}" +} # func_append may be replaced by extended shell implementation + +# func_append_quoted var value +# Quote VALUE and append to the end of shell variable VAR, separated +# by a space. +func_append_quoted () +{ + func_quote_for_eval "${2}" + eval "${1}=\$${1}\\ \$func_quote_for_eval_result" +} # func_append_quoted may be replaced by extended shell implementation + + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "${@}"` +} # func_arith may be replaced by extended shell implementation + + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` +} # func_len may be replaced by extended shell implementation + + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` +} # func_lo2o may be replaced by extended shell implementation + + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` +} # func_xform may be replaced by extended shell implementation + + +# func_fatal_configuration arg... +# Echo program name prefixed message to standard error, followed by +# a configuration failure hint, and exit. +func_fatal_configuration () +{ + func_error ${1+"$@"} + func_error "See the $PACKAGE documentation for more information." + func_fatal_error "Fatal configuration error." +} + + +# func_config +# Display the configuration for all the tags in this script. +func_config () +{ + re_begincf='^# ### BEGIN LIBTOOL' + re_endcf='^# ### END LIBTOOL' + + # Default configuration. + $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" + + # Now print the configurations for the tags. + for tagname in $taglist; do + $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" + done + + exit $? +} + +# func_features +# Display the features supported by this script. +func_features () +{ + echo "host: $host" + if test "$build_libtool_libs" = yes; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + + exit $? +} + +# func_enable_tag tagname +# Verify that TAGNAME is valid, and either flag an error and exit, or +# enable the TAGNAME tag. We also add TAGNAME to the global $taglist +# variable here. +func_enable_tag () +{ + # Global variable: + tagname="$1" + + re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" + re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" + sed_extractcf="/$re_begincf/,/$re_endcf/p" + + # Validate tagname. + case $tagname in + *[!-_A-Za-z0-9,/]*) + func_fatal_error "invalid tag name: $tagname" + ;; + esac + + # Don't test for the "default" C tag, as we know it's + # there but not specially marked. + case $tagname in + CC) ;; + *) + if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + +# func_check_version_match +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +# Shorthand for --mode=foo, only valid as the first argument +case $1 in +clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; +compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; +execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; +finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; +install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; +link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; +uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; +esac + + + +# Option defaults: +opt_debug=: +opt_dry_run=false +opt_config=false +opt_preserve_dup_deps=false +opt_features=false +opt_finish=false +opt_help=false +opt_help_all=false +opt_silent=: +opt_verbose=: +opt_silent=false +opt_verbose=false + + +# Parse options once, thoroughly. This comes as soon as possible in the +# script to make things like `--version' happen as quickly as we can. +{ + # this just eases exit handling + while test $# -gt 0; do + opt="$1" + shift + case $opt in + --debug|-x) opt_debug='set -x' + func_echo "enabling shell trace mode" + $opt_debug + ;; + --dry-run|--dryrun|-n) + opt_dry_run=: + ;; + --config) + opt_config=: +func_config + ;; + --dlopen|-dlopen) + optarg="$1" + opt_dlopen="${opt_dlopen+$opt_dlopen +}$optarg" + shift + ;; + --preserve-dup-deps) + opt_preserve_dup_deps=: + ;; + --features) + opt_features=: +func_features + ;; + --finish) + opt_finish=: +set dummy --mode finish ${1+"$@"}; shift + ;; + --help) + opt_help=: + ;; + --help-all) + opt_help_all=: +opt_help=': help-all' + ;; + --mode) + test $# = 0 && func_missing_arg $opt && break + optarg="$1" + opt_mode="$optarg" +case $optarg in + # Valid mode arguments: + clean|compile|execute|finish|install|link|relink|uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $opt" + exit_cmd=exit + break + ;; +esac + shift + ;; + --no-silent|--no-quiet) + opt_silent=false +func_append preserve_args " $opt" + ;; + --no-verbose) + opt_verbose=false +func_append preserve_args " $opt" + ;; + --silent|--quiet) + opt_silent=: +func_append preserve_args " $opt" + opt_verbose=false + ;; + --verbose|-v) + opt_verbose=: +func_append preserve_args " $opt" +opt_silent=false + ;; + --tag) + test $# = 0 && func_missing_arg $opt && break + optarg="$1" + opt_tag="$optarg" +func_append preserve_args " $opt $optarg" +func_enable_tag "$optarg" + shift + ;; + + -\?|-h) func_usage ;; + --help) func_help ;; + --version) func_version ;; + + # Separate optargs to long options: + --*=*) + func_split_long_opt "$opt" + set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} + shift + ;; + + # Separate non-argument short options: + -\?*|-h*|-n*|-v*) + func_split_short_opt "$opt" + set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + --) break ;; + -*) func_fatal_help "unrecognized option \`$opt'" ;; + *) set dummy "$opt" ${1+"$@"}; shift; break ;; + esac + done + + # Validate options: + + # save first non-option argument + if test "$#" -gt 0; then + nonopt="$opt" + shift + fi + + # preserve --debug + test "$opt_debug" = : || func_append preserve_args " --debug" + + case $host in + *cygwin* | *mingw* | *pw32* | *cegcc*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps + ;; + esac + + $opt_help || { + # Sanity checks first: + func_check_version_match + + if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + func_fatal_configuration "not configured to build any kind of library" + fi + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$opt_dlopen" && test "$opt_mode" != execute; then + func_error "unrecognized option \`-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$progname --help --mode=$opt_mode' for more information." + } + + + # Bail if the options were screwed + $exit_cmd $EXIT_FAILURE +} + + + + +## ----------- ## +## Main. ## +## ----------- ## + +# func_lalib_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null \ + | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if `file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case "$lalib_p_line" in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test "$lalib_p" = yes +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + func_lalib_p "$1" +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $opt_debug + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$save_ifs + eval cmd=\"$cmd\" + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# `FILE.' does not work on cygwin managed mounts. +func_source () +{ + $opt_debug + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_resolve_sysroot PATH +# Replace a leading = in PATH with a sysroot. Store the result into +# func_resolve_sysroot_result +func_resolve_sysroot () +{ + func_resolve_sysroot_result=$1 + case $func_resolve_sysroot_result in + =*) + func_stripname '=' '' "$func_resolve_sysroot_result" + func_resolve_sysroot_result=$lt_sysroot$func_stripname_result + ;; + esac +} + +# func_replace_sysroot PATH +# If PATH begins with the sysroot, replace it with = and +# store the result into func_replace_sysroot_result. +func_replace_sysroot () +{ + case "$lt_sysroot:$1" in + ?*:"$lt_sysroot"*) + func_stripname "$lt_sysroot" '' "$1" + func_replace_sysroot_result="=$func_stripname_result" + ;; + *) + # Including no sysroot. + func_replace_sysroot_result=$1 + ;; + esac +} + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $opt_debug + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case "$@ " in + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with \`--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=${1} + if test "$build_libtool_libs" = yes; then + write_lobj=\'${2}\' + else + write_lobj=none + fi + + if test "$build_old_libs" = yes; then + write_oldobj=\'${3}\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T </dev/null` + if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then + func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | + $SED -e "$lt_sed_naive_backslashify"` + else + func_convert_core_file_wine_to_w32_result= + fi + fi +} +# end: func_convert_core_file_wine_to_w32 + + +# func_convert_core_path_wine_to_w32 ARG +# Helper function used by path conversion functions when $build is *nix, and +# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly +# configured wine environment available, with the winepath program in $build's +# $PATH. Assumes ARG has no leading or trailing path separator characters. +# +# ARG is path to be converted from $build format to win32. +# Result is available in $func_convert_core_path_wine_to_w32_result. +# Unconvertible file (directory) names in ARG are skipped; if no directory names +# are convertible, then the result may be empty. +func_convert_core_path_wine_to_w32 () +{ + $opt_debug + # unfortunately, winepath doesn't convert paths, only file names + func_convert_core_path_wine_to_w32_result="" + if test -n "$1"; then + oldIFS=$IFS + IFS=: + for func_convert_core_path_wine_to_w32_f in $1; do + IFS=$oldIFS + func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" + if test -n "$func_convert_core_file_wine_to_w32_result" ; then + if test -z "$func_convert_core_path_wine_to_w32_result"; then + func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" + else + func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" + fi + fi + done + IFS=$oldIFS + fi +} +# end: func_convert_core_path_wine_to_w32 + + +# func_cygpath ARGS... +# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when +# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) +# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or +# (2), returns the Cygwin file name or path in func_cygpath_result (input +# file name or path is assumed to be in w32 format, as previously converted +# from $build's *nix or MSYS format). In case (3), returns the w32 file name +# or path in func_cygpath_result (input file name or path is assumed to be in +# Cygwin format). Returns an empty string on error. +# +# ARGS are passed to cygpath, with the last one being the file name or path to +# be converted. +# +# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH +# environment variable; do not put it in $PATH. +func_cygpath () +{ + $opt_debug + if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then + func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` + if test "$?" -ne 0; then + # on failure, ensure result is empty + func_cygpath_result= + fi + else + func_cygpath_result= + func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" + fi +} +#end: func_cygpath + + +# func_convert_core_msys_to_w32 ARG +# Convert file name or path ARG from MSYS format to w32 format. Return +# result in func_convert_core_msys_to_w32_result. +func_convert_core_msys_to_w32 () +{ + $opt_debug + # awkward: cmd appends spaces to result + func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` +} +#end: func_convert_core_msys_to_w32 + + +# func_convert_file_check ARG1 ARG2 +# Verify that ARG1 (a file name in $build format) was converted to $host +# format in ARG2. Otherwise, emit an error message, but continue (resetting +# func_to_host_file_result to ARG1). +func_convert_file_check () +{ + $opt_debug + if test -z "$2" && test -n "$1" ; then + func_error "Could not determine host file name corresponding to" + func_error " \`$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_file_result="$1" + fi +} +# end func_convert_file_check + + +# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH +# Verify that FROM_PATH (a path in $build format) was converted to $host +# format in TO_PATH. Otherwise, emit an error message, but continue, resetting +# func_to_host_file_result to a simplistic fallback value (see below). +func_convert_path_check () +{ + $opt_debug + if test -z "$4" && test -n "$3"; then + func_error "Could not determine the host path corresponding to" + func_error " \`$3'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This is a deliberately simplistic "conversion" and + # should not be "improved". See libtool.info. + if test "x$1" != "x$2"; then + lt_replace_pathsep_chars="s|$1|$2|g" + func_to_host_path_result=`echo "$3" | + $SED -e "$lt_replace_pathsep_chars"` + else + func_to_host_path_result="$3" + fi + fi +} +# end func_convert_path_check + + +# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG +# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT +# and appending REPL if ORIG matches BACKPAT. +func_convert_path_front_back_pathsep () +{ + $opt_debug + case $4 in + $1 ) func_to_host_path_result="$3$func_to_host_path_result" + ;; + esac + case $4 in + $2 ) func_append func_to_host_path_result "$3" + ;; + esac +} +# end func_convert_path_front_back_pathsep + + +################################################## +# $build to $host FILE NAME CONVERSION FUNCTIONS # +################################################## +# invoked via `$to_host_file_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# Result will be available in $func_to_host_file_result. + + +# func_to_host_file ARG +# Converts the file name ARG from $build format to $host format. Return result +# in func_to_host_file_result. +func_to_host_file () +{ + $opt_debug + $to_host_file_cmd "$1" +} +# end func_to_host_file + + +# func_to_tool_file ARG LAZY +# converts the file name ARG from $build format to toolchain format. Return +# result in func_to_tool_file_result. If the conversion in use is listed +# in (the comma separated) LAZY, no conversion takes place. +func_to_tool_file () +{ + $opt_debug + case ,$2, in + *,"$to_tool_file_cmd",*) + func_to_tool_file_result=$1 + ;; + *) + $to_tool_file_cmd "$1" + func_to_tool_file_result=$func_to_host_file_result + ;; + esac +} +# end func_to_tool_file + + +# func_convert_file_noop ARG +# Copy ARG to func_to_host_file_result. +func_convert_file_noop () +{ + func_to_host_file_result="$1" +} +# end func_convert_file_noop + + +# func_convert_file_msys_to_w32 ARG +# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_file_result. +func_convert_file_msys_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_to_host_file_result="$func_convert_core_msys_to_w32_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_w32 + + +# func_convert_file_cygwin_to_w32 ARG +# Convert file name ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_file_cygwin_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + # because $build is cygwin, we call "the" cygpath in $PATH; no need to use + # LT_CYGPATH in this case. + func_to_host_file_result=`cygpath -m "$1"` + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_cygwin_to_w32 + + +# func_convert_file_nix_to_w32 ARG +# Convert file name ARG from *nix to w32 format. Requires a wine environment +# and a working winepath. Returns result in func_to_host_file_result. +func_convert_file_nix_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_file_wine_to_w32 "$1" + func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_w32 + + +# func_convert_file_msys_to_cygwin ARG +# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_file_msys_to_cygwin () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_cygpath -u "$func_convert_core_msys_to_w32_result" + func_to_host_file_result="$func_cygpath_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_cygwin + + +# func_convert_file_nix_to_cygwin ARG +# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed +# in a wine environment, working winepath, and LT_CYGPATH set. Returns result +# in func_to_host_file_result. +func_convert_file_nix_to_cygwin () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. + func_convert_core_file_wine_to_w32 "$1" + func_cygpath -u "$func_convert_core_file_wine_to_w32_result" + func_to_host_file_result="$func_cygpath_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_cygwin + + +############################################# +# $build to $host PATH CONVERSION FUNCTIONS # +############################################# +# invoked via `$to_host_path_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# The result will be available in $func_to_host_path_result. +# +# Path separators are also converted from $build format to $host format. If +# ARG begins or ends with a path separator character, it is preserved (but +# converted to $host format) on output. +# +# All path conversion functions are named using the following convention: +# file name conversion function : func_convert_file_X_to_Y () +# path conversion function : func_convert_path_X_to_Y () +# where, for any given $build/$host combination the 'X_to_Y' value is the +# same. If conversion functions are added for new $build/$host combinations, +# the two new functions must follow this pattern, or func_init_to_host_path_cmd +# will break. + + +# func_init_to_host_path_cmd +# Ensures that function "pointer" variable $to_host_path_cmd is set to the +# appropriate value, based on the value of $to_host_file_cmd. +to_host_path_cmd= +func_init_to_host_path_cmd () +{ + $opt_debug + if test -z "$to_host_path_cmd"; then + func_stripname 'func_convert_file_' '' "$to_host_file_cmd" + to_host_path_cmd="func_convert_path_${func_stripname_result}" + fi +} + + +# func_to_host_path ARG +# Converts the path ARG from $build format to $host format. Return result +# in func_to_host_path_result. +func_to_host_path () +{ + $opt_debug + func_init_to_host_path_cmd + $to_host_path_cmd "$1" +} +# end func_to_host_path + + +# func_convert_path_noop ARG +# Copy ARG to func_to_host_path_result. +func_convert_path_noop () +{ + func_to_host_path_result="$1" +} +# end func_convert_path_noop + + +# func_convert_path_msys_to_w32 ARG +# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_path_result. +func_convert_path_msys_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # Remove leading and trailing path separator characters from ARG. MSYS + # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; + # and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result="$func_convert_core_msys_to_w32_result" + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_msys_to_w32 + + +# func_convert_path_cygwin_to_w32 ARG +# Convert path ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_path_cygwin_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_cygwin_to_w32 + + +# func_convert_path_nix_to_w32 ARG +# Convert path ARG from *nix to w32 format. Requires a wine environment and +# a working winepath. Returns result in func_to_host_file_result. +func_convert_path_nix_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_nix_to_w32 + + +# func_convert_path_msys_to_cygwin ARG +# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_path_msys_to_cygwin () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_msys_to_w32_result" + func_to_host_path_result="$func_cygpath_result" + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_msys_to_cygwin + + +# func_convert_path_nix_to_cygwin ARG +# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a +# a wine environment, working winepath, and LT_CYGPATH set. Returns result in +# func_to_host_file_result. +func_convert_path_nix_to_cygwin () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" + func_to_host_path_result="$func_cygpath_result" + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_nix_to_cygwin + + +# func_mode_compile arg... +func_mode_compile () +{ + $opt_debug + # Get the compilation command and the source file. + base_compile= + srcfile="$nonopt" # always keep a non-empty value in "srcfile" + suppress_opt=yes + suppress_output= + arg_mode=normal + libobj= + later= + pie_flag= + + for arg + do + case $arg_mode in + arg ) + # do not "continue". Instead, add this to base_compile + lastarg="$arg" + arg_mode=normal + ;; + + target ) + libobj="$arg" + arg_mode=normal + continue + ;; + + normal ) + # Accept any command-line options. + case $arg in + -o) + test -n "$libobj" && \ + func_fatal_error "you cannot specify \`-o' more than once" + arg_mode=target + continue + ;; + + -pie | -fpie | -fPIE) + func_append pie_flag " $arg" + continue + ;; + + -shared | -static | -prefer-pic | -prefer-non-pic) + func_append later " $arg" + continue + ;; + + -no-suppress) + suppress_opt=no + continue + ;; + + -Xcompiler) + arg_mode=arg # the next one goes into the "base_compile" arg list + continue # The current "srcfile" will either be retained or + ;; # replaced later. I would guess that would be a bug. + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + lastarg= + save_ifs="$IFS"; IFS=',' + for arg in $args; do + IFS="$save_ifs" + func_append_quoted lastarg "$arg" + done + IFS="$save_ifs" + func_stripname ' ' '' "$lastarg" + lastarg=$func_stripname_result + + # Add the arguments to base_compile. + func_append base_compile " $lastarg" + continue + ;; + + *) + # Accept the current argument as the source file. + # The previous "srcfile" becomes the current argument. + # + lastarg="$srcfile" + srcfile="$arg" + ;; + esac # case $arg + ;; + esac # case $arg_mode + + # Aesthetically quote the previous argument. + func_append_quoted base_compile "$lastarg" + done # for arg + + case $arg_mode in + arg) + func_fatal_error "you must specify an argument for -Xcompile" + ;; + target) + func_fatal_error "you must specify a target with \`-o'" + ;; + *) + # Get the name of the library object. + test -z "$libobj" && { + func_basename "$srcfile" + libobj="$func_basename_result" + } + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + case $libobj in + *.[cCFSifmso] | \ + *.ada | *.adb | *.ads | *.asm | \ + *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ + *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup) + func_xform "$libobj" + libobj=$func_xform_result + ;; + esac + + case $libobj in + *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; + *) + func_fatal_error "cannot determine name of library object from \`$libobj'" + ;; + esac + + func_infer_tag $base_compile + + for arg in $later; do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + continue + ;; + + -static) + build_libtool_libs=no + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + esac + done + + func_quote_for_eval "$libobj" + test "X$libobj" != "X$func_quote_for_eval_result" \ + && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ + && func_warning "libobj name \`$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname="$func_basename_result" + xdir="$func_dirname_result" + lobj=${xdir}$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + func_append removelist " $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + func_append removelist " $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 + srcfile=$func_to_tool_file_result + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test "$pic_mode" != no; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + func_append command " -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test "$suppress_opt" = yes; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + if test "$pic_mode" != yes; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test "$compiler_c_o" = yes; then + func_append command " -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + func_append command "$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test "$need_locks" != no; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { + test "$opt_mode" = compile && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $opt_mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to build PIC objects only + -prefer-non-pic try to build non-PIC objects only + -shared do not build a \`.o' file suitable for static linking + -static only build a \`.o' file suitable for static linking + -Wc,FLAG pass FLAG directly to the compiler + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -bindir BINDIR specify path to binaries directory (for systems where + libraries must be found in the PATH setting at runtime) + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE Use a list of object files found in FILE to specify objects + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + -Wc,FLAG + -Xcompiler FLAG pass linker-specific FLAG directly to the compiler + -Wl,FLAG + -Xlinker FLAG pass linker-specific FLAG directly to the linker + -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode \`$opt_mode'" + ;; + esac + + echo + $ECHO "Try \`$progname --help' for more information about other modes." +} + +# Now that we've collected a possible --mode arg, show help if necessary +if $opt_help; then + if test "$opt_help" = :; then + func_mode_help + else + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + func_mode_help + done + } | sed -n '1p; 2,$s/^Usage:/ or: /p' + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + echo + func_mode_help + done + } | + sed '1d + /^When reporting/,/^Report/{ + H + d + } + $x + /information about other modes/d + /more detailed .*MODE/d + s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' + fi + exit $? +fi + + +# func_mode_execute arg... +func_mode_execute () +{ + $opt_debug + # The first argument is the command name. + cmd="$nonopt" + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $opt_dlopen; do + test -f "$file" \ + || func_fatal_help "\`$file' is not a file" + + dir= + case $file in + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "\`$file' was not linked with \`-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir="$func_dirname_result" + + if test -f "$dir/$objdir/$dlname"; then + func_append dir "/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir="$func_dirname_result" + ;; + + *) + func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -* | *.la | *.lo ) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file="$progdir/$program" + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_append_quoted args "$file" + done + + if test "X$opt_dry_run" = Xfalse; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + echo "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + fi +} + +test "$opt_mode" = execute && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $opt_debug + libs= + libdirs= + admincmds= + + for opt in "$nonopt" ${1+"$@"} + do + if test -d "$opt"; then + func_append libdirs " $opt" + + elif test -f "$opt"; then + if func_lalib_unsafe_p "$opt"; then + func_append libs " $opt" + else + func_warning "\`$opt' is not a valid libtool archive" + fi + + else + func_fatal_error "invalid argument \`$opt'" + fi + done + + if test -n "$libs"; then + if test -n "$lt_sysroot"; then + sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` + sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" + else + sysroot_cmd= + fi + + # Remove sysroot references + if $opt_dry_run; then + for lib in $libs; do + echo "removing references to $lt_sysroot and \`=' prefixes from $lib" + done + else + tmpdir=`func_mktempdir` + for lib in $libs; do + sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ + > $tmpdir/tmp-la + mv -f $tmpdir/tmp-la $lib + done + ${RM}r "$tmpdir" + fi + fi + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || func_append admincmds " + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_silent && exit $EXIT_SUCCESS + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use the \`-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the \`$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + echo + + echo "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" + echo "pages." + ;; + *) + echo "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + echo "----------------------------------------------------------------------" + fi + exit $EXIT_SUCCESS +} + +test "$opt_mode" = finish && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $opt_debug + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + case $nonopt in *shtool*) :;; *) false;; esac; then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + func_append install_prog "$func_quote_for_eval_result" + install_shared_prog=$install_prog + case " $install_prog " in + *[\\\ /]cp\ *) install_cp=: ;; + *) install_cp=false ;; + esac + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + no_mode=: + for arg + do + arg2= + if test -n "$dest"; then + func_append files " $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) + if $install_cp; then :; else + prev=$arg + fi + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + if test "x$prev" = x-m && test -n "$install_override_mode"; then + arg2=$install_override_mode + no_mode=false + fi + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + func_append install_prog " $func_quote_for_eval_result" + if test -n "$arg2"; then + func_quote_for_eval "$arg2" + fi + func_append install_shared_prog " $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the \`$prev' option requires an argument" + + if test -n "$install_override_mode" && $no_mode; then + if $install_cp; then :; else + func_quote_for_eval "$install_override_mode" + func_append install_shared_prog " -m $func_quote_for_eval_result" + fi + fi + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir="$func_dirname_result" + destname="$func_basename_result" + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "\`$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "\`$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + func_append staticlibs " $file" + ;; + + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) func_append current_libdirs " $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) func_append future_libdirs " $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir="$func_dirname_result" + func_append dir "$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking \`$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname="$1" + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme="$stripme" + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme="" + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try `ln -sf' first, because the `ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name="$func_basename_result" + instname="$dir/$name"i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && func_append staticlibs " $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to \`$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext="" + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script \`$wrapper'" + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "\`$lib' has not been installed in \`$libdir'" + finalize=no + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + $opt_dry_run || { + if test "$finalize" = yes; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file="$func_basename_result" + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_silent || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink \`$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file="$outputname" + else + func_warning "cannot relink \`$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name="$func_basename_result" + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run \`$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test "$opt_mode" = install && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $opt_debug + my_outputname="$1" + my_originator="$2" + my_pic_p="${3-no}" + my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms="${my_outputname}S.c" + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${my_outputname}.nm" + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) +#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" +#endif + +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + func_verbose "generating symbol list for \`$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_to_tool_file "$progfile" func_convert_file_msys_to_w32 + func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" + $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$outputname.exp" + $opt_dry_run || { + $RM $export_symbols + eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from \`$dlprefile'" + func_basename "$dlprefile" + name="$func_basename_result" + case $host in + *cygwin* | *mingw* | *cegcc* ) + # if an import library, we need to obtain dlname + if func_win32_import_lib_p "$dlprefile"; then + func_tr_sh "$dlprefile" + eval "curr_lafile=\$libfile_$func_tr_sh_result" + dlprefile_dlbasename="" + if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then + # Use subshell, to avoid clobbering current variable values + dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` + if test -n "$dlprefile_dlname" ; then + func_basename "$dlprefile_dlname" + dlprefile_dlbasename="$func_basename_result" + else + # no lafile. user explicitly requested -dlpreopen . + $sharedlib_from_linklib_cmd "$dlprefile" + dlprefile_dlbasename=$sharedlib_from_linklib_result + fi + fi + $opt_dry_run || { + if test -n "$dlprefile_dlbasename" ; then + eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' + else + func_warning "Could not compute DLL name from $name" + eval '$ECHO ": $name " >> "$nlist"' + fi + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | + $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" + } + else # not an import lib + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + fi + ;; + *) + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + ;; + esac + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + echo >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +extern LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[]; +LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{\ + { \"$my_originator\", (void *) 0 }," + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + echo >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + if test "X$my_pic_p" != Xno; then + pic_flag_for_symtable=" $pic_flag" + fi + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) func_append symtab_cflags " $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' + + # Transform the symbol file into the correct name. + symfileobj="$output_objdir/${my_outputname}S.$objext" + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for \`$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` + fi +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +# Despite the name, also deal with 64 bit binaries. +func_win32_libid () +{ + $opt_debug + win32_libid_type="unknown" + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then + func_to_tool_file "$1" func_convert_file_msys_to_w32 + win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | + $SED -n -e ' + 1,100{ + / I /{ + s,.*,import, + p + q + } + }'` + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + +# func_cygming_dll_for_implib ARG +# +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib () +{ + $opt_debug + sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` +} + +# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs +# +# The is the core of a fallback implementation of a +# platform-specific function to extract the name of the +# DLL associated with the specified import library LIBNAME. +# +# SECTION_NAME is either .idata$6 or .idata$7, depending +# on the platform and compiler that created the implib. +# +# Echos the name of the DLL associated with the +# specified import library. +func_cygming_dll_for_implib_fallback_core () +{ + $opt_debug + match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` + $OBJDUMP -s --section "$1" "$2" 2>/dev/null | + $SED '/^Contents of section '"$match_literal"':/{ + # Place marker at beginning of archive member dllname section + s/.*/====MARK====/ + p + d + } + # These lines can sometimes be longer than 43 characters, but + # are always uninteresting + /:[ ]*file format pe[i]\{,1\}-/d + /^In archive [^:]*:/d + # Ensure marker is printed + /^====MARK====/p + # Remove all lines with less than 43 characters + /^.\{43\}/!d + # From remaining lines, remove first 43 characters + s/^.\{43\}//' | + $SED -n ' + # Join marker and all lines until next marker into a single line + /^====MARK====/ b para + H + $ b para + b + :para + x + s/\n//g + # Remove the marker + s/^====MARK====// + # Remove trailing dots and whitespace + s/[\. \t]*$// + # Print + /./p' | + # we now have a list, one entry per line, of the stringified + # contents of the appropriate section of all members of the + # archive which possess that section. Heuristic: eliminate + # all those which have a first or second character that is + # a '.' (that is, objdump's representation of an unprintable + # character.) This should work for all archives with less than + # 0x302f exports -- but will fail for DLLs whose name actually + # begins with a literal '.' or a single character followed by + # a '.'. + # + # Of those that remain, print the first one. + $SED -e '/^\./d;/^.\./d;q' +} + +# func_cygming_gnu_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is a GNU/binutils-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_gnu_implib_p () +{ + $opt_debug + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` + test -n "$func_cygming_gnu_implib_tmp" +} + +# func_cygming_ms_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is an MS-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_ms_implib_p () +{ + $opt_debug + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` + test -n "$func_cygming_ms_implib_tmp" +} + +# func_cygming_dll_for_implib_fallback ARG +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# +# This fallback implementation is for use when $DLLTOOL +# does not support the --identify-strict option. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib_fallback () +{ + $opt_debug + if func_cygming_gnu_implib_p "$1" ; then + # binutils import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` + elif func_cygming_ms_implib_p "$1" ; then + # ms-generated import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` + else + # unknown + sharedlib_from_linklib_result="" + fi +} + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $opt_debug + f_ex_an_ar_dir="$1"; shift + f_ex_an_ar_oldlib="$1" + if test "$lock_old_archive_extraction" = yes; then + lockfile=$f_ex_an_ar_oldlib.lock + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + fi + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ + 'stat=$?; rm -f "$lockfile"; exit $stat' + if test "$lock_old_archive_extraction" = yes; then + $opt_dry_run || rm -f "$lockfile" + fi + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $opt_debug + my_gentop="$1"; shift + my_oldlibs=${1+"$@"} + my_oldobjs="" + my_xlib="" + my_xabs="" + my_xdir="" + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib="$func_basename_result" + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir="$my_gentop/$my_xlib_u" + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + darwin_base_archive=`basename "$darwin_archive"` + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches ; do + func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" + $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" + cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" + func_extract_an_archive "`pwd`" "${darwin_base_archive}" + cd "$darwin_curdir" + $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` + done + + func_extract_archives_result="$my_oldobjs" +} + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory in which it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=${1-no} + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + file=\"\$0\"" + + qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` + $ECHO "\ + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + ECHO=\"$qECHO\" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ which is used only on +# windows platforms, and (c) all begin with the string "--lt-" +# (application programs are unlikely to have options which match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's $0 value, followed by "$@". +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=\$0 + shift + for lt_opt + do + case \"\$lt_opt\" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` + test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. + lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` + cat \"\$lt_dump_D/\$lt_dump_F\" + exit 0 + ;; + --lt-*) + \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n \"\$lt_option_debug\"; then + echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" + lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from \$@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + for lt_wr_arg + do + case \$lt_wr_arg in + --lt-*) ;; + *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; + esac + shift + done + func_exec_program_core \${1+\"\$@\"} +} + + # Parse options + func_parse_lt_options \"\$0\" \${1+\"\$@\"} + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # fixup the dll searchpath if we need to. + # + # Fix the DLL searchpath if we need to. Do this before prepending + # to shlibpath, because on Windows, both are PATH and uninstalled + # libraries must come first. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` + + export $shlibpath_var +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + func_exec_program \${1+\"\$@\"} + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} + + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat < +#include +#ifdef _MSC_VER +# include +# include +# include +#else +# include +# include +# ifdef __CYGWIN__ +# include +# endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +/* declarations of non-ANSI functions */ +#if defined(__MINGW32__) +# ifdef __STRICT_ANSI__ +int _putenv (const char *); +# endif +#elif defined(__CYGWIN__) +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +/* #elif defined (other platforms) ... */ +#endif + +/* portability defines, excluding path handling macros */ +#if defined(_MSC_VER) +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +# define S_IXUSR _S_IEXEC +# ifndef _INTPTR_T_DEFINED +# define _INTPTR_T_DEFINED +# define intptr_t int +# endif +#elif defined(__MINGW32__) +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +#elif defined(__CYGWIN__) +# define HAVE_SETENV +# define FOPEN_WB "wb" +/* #elif defined (other platforms) ... */ +#endif + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +/* path handling portability macros */ +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +#if defined(LT_DEBUGWRAPPER) +static int lt_debug = 1; +#else +static int lt_debug = 0; +#endif + +const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_debugprintf (const char *file, int line, const char *fmt, ...); +void lt_fatal (const char *file, int line, const char *message, ...); +static const char *nonnull (const char *s); +static const char *nonempty (const char *s); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); +char **prepare_spawn (char **argv); +void lt_dump_script (FILE *f); +EOF + + cat <= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", + nonempty (path)); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + int tmp_len; + char *concat_name; + + lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", + nonempty (wrapper)); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = q - p; + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + lt_debugprintf (__FILE__, __LINE__, + "checking path component for symlinks: %s\n", + tmp_pathspec); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + lt_fatal (__FILE__, __LINE__, + "error accessing file \"%s\": %s", + tmp_pathspec, nonnull (strerror (errno))); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal (__FILE__, __LINE__, + "could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (strcmp (str, pat) == 0) + *str = '\0'; + } + return str; +} + +void +lt_debugprintf (const char *file, int line, const char *fmt, ...) +{ + va_list args; + if (lt_debug) + { + (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); + } +} + +static void +lt_error_core (int exit_status, const char *file, + int line, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *file, int line, const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); + va_end (ap); +} + +static const char * +nonnull (const char *s) +{ + return s ? s : "(null)"; +} + +static const char * +nonempty (const char *s) +{ + return (s && !*s) ? "(empty)" : nonnull (s); +} + +void +lt_setenv (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_setenv) setting '%s' to '%s'\n", + nonnull (name), nonnull (value)); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + int len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + int orig_value_len = strlen (orig_value); + int add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + int len = strlen (new_value); + while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[len-1] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +EOF + case $host_os in + mingw*) + cat <<"EOF" + +/* Prepares an argument vector before calling spawn(). + Note that spawn() does not by itself call the command interpreter + (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : + ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&v); + v.dwPlatformId == VER_PLATFORM_WIN32_NT; + }) ? "cmd.exe" : "command.com"). + Instead it simply concatenates the arguments, separated by ' ', and calls + CreateProcess(). We must quote the arguments since Win32 CreateProcess() + interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a + special way: + - Space and tab are interpreted as delimiters. They are not treated as + delimiters if they are surrounded by double quotes: "...". + - Unescaped double quotes are removed from the input. Their only effect is + that within double quotes, space and tab are treated like normal + characters. + - Backslashes not followed by double quotes are not special. + - But 2*n+1 backslashes followed by a double quote become + n backslashes followed by a double quote (n >= 0): + \" -> " + \\\" -> \" + \\\\\" -> \\" + */ +#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +char ** +prepare_spawn (char **argv) +{ + size_t argc; + char **new_argv; + size_t i; + + /* Count number of arguments. */ + for (argc = 0; argv[argc] != NULL; argc++) + ; + + /* Allocate new argument vector. */ + new_argv = XMALLOC (char *, argc + 1); + + /* Put quoted arguments into the new argument vector. */ + for (i = 0; i < argc; i++) + { + const char *string = argv[i]; + + if (string[0] == '\0') + new_argv[i] = xstrdup ("\"\""); + else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) + { + int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); + size_t length; + unsigned int backslashes; + const char *s; + char *quoted_string; + char *p; + + length = 0; + backslashes = 0; + if (quote_around) + length++; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + length += backslashes + 1; + length++; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + length += backslashes + 1; + + quoted_string = XMALLOC (char, length + 1); + + p = quoted_string; + backslashes = 0; + if (quote_around) + *p++ = '"'; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + { + unsigned int j; + for (j = backslashes + 1; j > 0; j--) + *p++ = '\\'; + } + *p++ = c; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + { + unsigned int j; + for (j = backslashes; j > 0; j--) + *p++ = '\\'; + *p++ = '"'; + } + *p = '\0'; + + new_argv[i] = quoted_string; + } + else + new_argv[i] = (char *) string; + } + new_argv[argc] = NULL; + + return new_argv; +} +EOF + ;; + esac + + cat <<"EOF" +void lt_dump_script (FILE* f) +{ +EOF + func_emit_wrapper yes | + $SED -e 's/\([\\"]\)/\\\1/g' \ + -e 's/^/ fputs ("/' -e 's/$/\\n", f);/' + + cat <<"EOF" +} +EOF +} +# end: func_emit_cwrapperexe_src + +# func_win32_import_lib_p ARG +# True if ARG is an import lib, as indicated by $file_magic_cmd +func_win32_import_lib_p () +{ + $opt_debug + case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in + *import*) : ;; + *) false ;; + esac +} + +# func_mode_link arg... +func_mode_link () +{ + $opt_debug + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # which system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll which has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + bindir= + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=no + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module="${wl}-single_module" + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg="$1" + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac + + case $prev in + bindir) + bindir="$arg" + prev= + continue + ;; + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + func_append dlfiles " $arg" + else + func_append dlprefiles " $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + test -f "$arg" \ + || func_fatal_error "symbol file \`$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) func_append deplibs " $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# func_append moreargs " $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file \`$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + precious_regex) + precious_files_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) func_append rpath " $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) func_append xrpath " $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds="$arg" + prev= + continue + ;; + weak) + func_append weak_libs " $arg" + prev= + continue + ;; + xcclinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "\`-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -bindir) + prev=bindir + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname "-L" '' "$arg" + if test -z "$func_stripname_result"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between \`-L' and \`$1'" + else + func_fatal_error "need path for \`-L' option" + fi + fi + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of \`$dir'" + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "* | *" $arg "*) + # Will only happen for absolute or sysroot arguments + ;; + *) + # Preserve sysroot, but never include relative directories + case $dir in + [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; + *) func_append deplibs " -L$dir" ;; + esac + func_append lib_search_path " $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) func_append dllsearchpath ":$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + func_append deplibs " System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test "X$arg" = "X-lc" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test "X$arg" = "X-lc" && continue + ;; + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + func_append deplibs " $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot|--sysroot) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) func_append new_inherited_linker_flags " $arg" ;; + esac + continue + ;; + + -multi_module) + single_module="${wl}-multi_module" + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "\`-no-install' is ignored for $host" + func_warning "assuming \`-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + =*) + func_stripname '=' '' "$dir" + dir=$lt_sysroot$func_stripname_result + ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + func_append arg " $func_quote_for_eval_result" + func_append compiler_flags " $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + func_append arg " $wl$func_quote_for_eval_result" + func_append compiler_flags " $wl$func_quote_for_eval_result" + func_append linker_flags " $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + # Flags to be passed through unchanged, with rationale: + # -64, -mips[0-9] enable 64-bit mode for the SGI compiler + # -r[0-9][0-9]* specify processor for the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler + # +DA*, +DD* enable 64-bit mode for the HP compiler + # -q* compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* architecture-specific flags for GCC + # -F/path path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* profiling flags for GCC + # @file GCC response files + # -tp=* Portland pgcc target processor selection + # --sysroot=* for sysroot support + # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ + -O*|-flto*|-fwhopr*|-fuse-linker-plugin) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + func_append compile_command " $arg" + func_append finalize_command " $arg" + func_append compiler_flags " $arg" + continue + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + *.$objext) + # A standard object. + func_append objs " $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + func_append deplibs " $arg" + func_append old_deplibs " $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + func_resolve_sysroot "$arg" + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + func_append dlfiles " $func_resolve_sysroot_result" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + func_append dlprefiles " $func_resolve_sysroot_result" + prev= + else + func_append deplibs " $func_resolve_sysroot_result" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the \`$prevarg' option requires an argument" + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname="$func_basename_result" + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + func_dirname "$output" "/" "" + output_objdir="$func_dirname_result$objdir" + func_to_tool_file "$output_objdir/" + tool_output_objdir=$func_to_tool_file_result + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_preserve_dup_deps ; then + case "$libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append libs " $deplib" + done + + if test "$linkmode" = lib; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; + esac + func_append pre_post_deps " $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test "$linkmode,$pass" = "lib,link"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs="$tmp_deplibs" + fi + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) + libs="$deplibs %DEPLIBS%" + test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" + ;; + esac + fi + if test "$linkmode,$pass" = "lib,dlpreopen"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + func_resolve_sysroot "$lib" + case $lib in + *.la) func_source "$func_resolve_sysroot_result" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + func_basename "$deplib" + deplib_base=$func_basename_result + case " $weak_libs " in + *" $deplib_base "*) ;; + *) func_append deplibs " $deplib" ;; + esac + done + done + libs="$dlprefiles" + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + + for deplib in $libs; do + lib= + found=no + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append compiler_flags " $deplib" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + func_warning "\`-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test "$linkmode" = lib; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib="$searchdir/lib${name}${search_ext}" + if test -f "$lib"; then + if test "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + *.ltframework) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + *) + func_warning "\`-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + func_stripname '-R' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) + func_resolve_sysroot "$deplib" + lib=$func_resolve_sysroot_result + ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=no + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=yes + fi + ;; + pass_all) + valid_a_lib=yes + ;; + esac + if test "$valid_a_lib" != yes; then + echo + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because the file extensions .$libext of this argument makes me believe" + echo "*** that it is just a static archive that I should not use here." + else + echo + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + ;; + esac + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + func_append newdlprefiles " $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append newdlfiles " $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + + if test "$found" = yes || test -f "$lib"; then : + else + func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" + fi + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "\`$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && func_append dlfiles " $dlopen" + test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + # It is a libtool convenience library, so add in its objects. + func_append convenience " $ladir/$objdir/$old_library" + func_append old_convenience " $ladir/$objdir/$old_library" + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done + elif test "$linkmode" != prog && test "$linkmode" != lib; then + func_fatal_error "\`$lib' is not a convenience library" + fi + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + if test -n "$old_library" && + { test "$prefer_static_libs" = yes || + test "$prefer_static_libs,$installed" = "built,no"; }; then + linklib=$old_library + else + for l in $old_library $library_names; do + linklib="$l" + done + fi + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + func_fatal_error "cannot -dlopen a convenience library: \`$lib'" + fi + if test -z "$dlname" || + test "$dlopen_support" != yes || + test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + func_append dlprefiles " $lib $dependency_libs" + else + func_append newdlfiles " $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of \`$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir="$ladir" + fi + ;; + esac + func_basename "$lib" + laname="$func_basename_result" + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library \`$lib' was moved." + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$lt_sysroot$libdir" + absdir="$lt_sysroot$libdir" + fi + test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir="$ladir" + absdir="$abs_ladir" + # Remove this search path later + func_append notinst_path " $abs_ladir" + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + func_append notinst_path " $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir" && test "$linkmode" = prog; then + func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" + fi + case "$host" in + # special handling for platforms with PE-DLLs. + *cygwin* | *mingw* | *cegcc* ) + # Linker will automatically link against shared library if both + # static and shared are present. Therefore, ensure we extract + # symbols from the import library if a shared library is present + # (otherwise, the dlopen module name will be incorrect). We do + # this by putting the import library name into $newdlprefiles. + # We recover the dlopen module name by 'saving' the la file + # name in a special purpose variable, and (later) extracting the + # dlname from the la file. + if test -n "$dlname"; then + func_tr_sh "$dir/$linklib" + eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" + func_append newdlprefiles " $dir/$linklib" + else + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + fi + ;; + * ) + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + func_append newdlprefiles " $dir/$dlname" + else + func_append newdlprefiles " $dir/$linklib" + fi + ;; + esac + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test "$linkmode" = prog && test "$pass" != link; then + func_append newlib_search_path " $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { { test "$prefer_static_libs" = no || + test "$prefer_static_libs,$installed" = "built,yes"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath:" in + *"$absdir:"*) ;; + *) func_append temp_rpath "$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test "$use_static_libs" = built && test "$installed" = yes; then + use_static_libs=no + fi + if test -n "$library_names" && + { test "$use_static_libs" = no || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc*) + # No point in relinking DLLs because paths are not encoded + func_append notinst_deplibs " $lib" + need_relink=no + ;; + *) + if test "$installed" = no; then + func_append notinst_deplibs " $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule="" + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule="$dlpremoduletest" + break + fi + done + if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then + echo + if test "$linkmode" = prog; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test "$linkmode" = lib && + test "$hardcode_into_libs" = yes; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname="$1" + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc*) + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + func_basename "$soroot" + soname="$func_basename_result" + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from \`$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for \`$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test "$linkmode" = prog || test "$opt_mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + case $host in + *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; + *-*-sysv4*uw2*) add_dir="-L$dir" ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we can not + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null ; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library" ; then + echo + echo "*** And there doesn't seem to be a static archive available" + echo "*** The link will probably fail, sorry" + else + add="$dir/$old_library" + fi + elif test -n "$old_library"; then + add="$dir/$old_library" + fi + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$dir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) func_append compile_shlibpath "$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && + test "$hardcode_minus_L" != yes && + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$opt_mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib" ; then + add="$inst_prefix_dir$libdir/$linklib" + else + add="$libdir/$linklib" + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test "$linkmode" = prog; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + echo + $ECHO "*** Warning: This system can not link to static lib archive $lib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + echo "*** But as you try to build a module library, libtool will still create " + echo "*** a static module, that should work as long as the dlopening application" + echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || + test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) func_append xrpath " $temp_xrpath";; + esac;; + *) func_append temp_deplibs " $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + func_append newlib_search_path " $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result";; + *) func_resolve_sysroot "$deplib" ;; + esac + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $func_resolve_sysroot_result "*) + func_append specialdeplibs " $func_resolve_sysroot_result" ;; + esac + fi + func_append tmp_libs " $func_resolve_sysroot_result" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + path= + case $deplib in + -L*) path="$deplib" ;; + *.la) + func_resolve_sysroot "$deplib" + deplib=$func_resolve_sysroot_result + func_dirname "$deplib" "" "." + dir=$func_dirname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of \`$dir'" + absdir="$dir" + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names" ; then + for tmp in $deplibrary_names ; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl" ; then + depdepl="$absdir/$objdir/$depdepl" + darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" + func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" + path= + fi + fi + ;; + *) + path="-L$absdir/$objdir" + ;; + esac + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "\`$deplib' seems to be moved" + + path="-L$absdir" + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test "$pass" = link; then + if test "$linkmode" = "prog"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) func_append lib_search_path " $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) func_append tmp_libs " $deplib" ;; + esac + ;; + *) func_append tmp_libs " $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs ; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i="" + ;; + esac + if test -n "$i" ; then + func_append tmp_libs " $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + fi + if test "$linkmode" = prog || test "$linkmode" = lib; then + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "\`-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "\`-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + func_append objs "$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test "$module" = no && \ + func_fatal_help "libtool library \`$output' must begin with \`lib'" + + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" + else + echo + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + func_append libobjs " $objs" + fi + fi + + test "$dlself" != no && \ + func_warning "\`-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test "$#" -gt 1 && \ + func_warning "ignoring multiple \`-rpath's for a libtool library" + + install_libdir="$1" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + # Some compilers have problems with a `.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "\`-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + shift + IFS="$save_ifs" + + test -n "$7" && \ + func_fatal_help "too many parameters to \`-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major="$1" + number_minor="$2" + number_revision="$3" + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # which has an extra 1 added just for fun + # + case $version_type in + darwin|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|qnx|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_minor" + lt_irix_increment=no + ;; + *) + func_fatal_configuration "$modename: unknown library version type \`$version_type'" + ;; + esac + ;; + no) + current="$1" + revision="$2" + age="$3" + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT \`$current' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION \`$revision' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE \`$age' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE \`$age' is greater than the current interface number \`$current'" + func_fatal_error "\`$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current" + ;; + + irix | nonstopux) + if test "X$lt_irix_increment" = "Xno"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test "$loop" -ne 0; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + func_append verstring ":${current}.0" + ;; + + qnx) + major=".$current" + versuffix=".$current" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + + *) + func_fatal_configuration "unknown library version type \`$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + func_warning "undefined symbols not allowed in $host shared libraries" + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + + fi + + func_generate_dlsyms "$libname" "$libname" "yes" + func_append libobjs " $symfileobj" + test "X$libobjs" = "X " && libobjs= + + if test "$opt_mode" != relink; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + if test "X$precious_files_regex" != "X"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + func_append removelist " $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + func_append oldlibs " $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` + # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` + # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + func_replace_sysroot "$libdir" + func_append temp_xrpath " -R$func_replace_sysroot_result" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) func_append dlfiles " $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) func_append dlprefiles " $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + func_append deplibs " System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + func_append deplibs " -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c </dev/null` + $nocaseglob + else + potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` + fi + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + func_append newdeplibs " $a_deplib" + a_deplib="" + ;; + esac + fi + if test -n "$a_deplib" ; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check above in file_magic test + if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` + done + fi + case $tmp_deplibs in + *[!\ \ ]*) + echo + if test "X$deplibs_check_method" = "Xnone"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + ;; + esac + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + + if test "$allow_undefined" = no; then + echo + echo "*** Since this library must not contain undefined symbols," + echo "*** because either the platform does not support them or" + echo "*** it was explicitly requested with -no-undefined," + echo "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + deplibs="$new_libs" + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$opt_mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + func_replace_sysroot "$libdir" + libdir=$func_replace_sysroot_result + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append dep_rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_apped perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + if test -n "$hardcode_libdir_flag_spec_ld"; then + eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" + else + eval dep_rpath=\"$hardcode_libdir_flag_spec\" + fi + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname="$1" + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib="$output_objdir/$realname" + linknames= + for link + do + func_append linknames " $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols="$output_objdir/$libname.uexp" + func_append delfiles " $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + if test "x`$SED 1q $export_symbols`" != xEXPORTS; then + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols="$export_symbols" + export_symbols= + always_export_symbols=yes + fi + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd1 in $cmds; do + IFS="$save_ifs" + # Take the normal branch if the nm_file_list_spec branch + # doesn't work or if tool conversion is not needed. + case $nm_file_list_spec~$to_tool_file_cmd in + *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) + try_normal_branch=yes + eval cmd=\"$cmd1\" + func_len " $cmd" + len=$func_len_result + ;; + *) + try_normal_branch=no + ;; + esac + if test "$try_normal_branch" = yes \ + && { test "$len" -lt "$max_cmd_len" \ + || test "$max_cmd_len" -le -1; } + then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + elif test -n "$nm_file_list_spec"; then + func_basename "$output" + output_la=$func_basename_result + save_libobjs=$libobjs + save_output=$output + output=${output_objdir}/${output_la}.nm + func_to_tool_file "$output" + libobjs=$nm_file_list_spec$func_to_tool_file_result + func_append delfiles " $output" + func_verbose "creating $NM input file list: $output" + for obj in $save_libobjs; do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > "$output" + eval cmd=\"$cmd1\" + func_show_eval "$cmd" 'exit $?' + output=$save_output + libobjs=$save_libobjs + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + func_append tmp_deplibs " $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test "$compiler_needs_object" = yes && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + func_append linker_flags " $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$opt_mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test "X$skipped_export" != "X:" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + func_basename "$output" + output_la=$func_basename_result + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then + output=${output_objdir}/${output_la}.lnkscript + func_verbose "creating GNU ld script: $output" + echo 'INPUT (' > $output + for obj in $save_libobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + echo ')' >> $output + func_append delfiles " $output" + func_to_tool_file "$output" + output=$func_to_tool_file_result + elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then + output=${output_objdir}/${output_la}.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test "$compiler_needs_object" = yes; then + firstobj="$1 " + shift + fi + for obj + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + func_append delfiles " $output" + func_to_tool_file "$output" + output=$firstobj\"$file_list_spec$func_to_tool_file_result\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-${k}.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test "X$objlist" = X || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + reload_objs=$objlist + eval concat_cmds=\"$reload_cmds\" + else + # All subsequent reloadable object files will link in + # the last one created. + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-${k}.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-${k}.$objext + objlist=" $obj" + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\${concat_cmds}$reload_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" + fi + func_append delfiles " $output" + + else + output= + fi + + if ${skipped_export-false}; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + fi + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + if ${skipped_export-false}; then + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + fi + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "\`-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object \`$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec and hope we can get by with + # turning comma into space.. + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + else + gentop="$output_objdir/${obj}x" + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # If we're not building shared, we need to use non_pic_objs + test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "\`-release' is ignored for programs" + + test "$preload" = yes \ + && test "$dlopen_support" = unknown \ + && test "$dlopen_self" = unknown \ + && test "$dlopen_self_static" = unknown && \ + func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test "$tagname" = CXX ; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + func_append compile_command " ${wl}-bind_at_load" + func_append finalize_command " ${wl}-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + compile_deplibs="$new_libs" + + + func_append compile_command " $compile_deplibs" + func_append finalize_command " $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) func_append dllsearchpath ":$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) func_append finalize_perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" "no" + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=yes + case $host in + *cegcc* | *mingw32ce*) + # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. + wrappers_required=no + ;; + *cygwin* | *mingw* ) + if test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + *) + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + esac + if test "$wrappers_required" = no; then + # Replace the output file specification. + compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.${objext}"; then + func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' + fi + + exit $exit_status + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + func_append rpath "$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + exit $EXIT_SUCCESS + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "\`$output' will be relinked during installation" + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output_objdir/$outputname" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource="$output_path/$objdir/lt-$output_name.c" + cwrapper="$output_path/$output_name.exe" + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host" ; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save $symfileobj" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + if test "$preload" = yes && test -f "$symfileobj"; then + func_append oldobjs " $symfileobj" + fi + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $addlibs + func_append oldobjs " $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append oldobjs " $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + echo "copying selected object files to avoid basename conflicts..." + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase="$func_basename_result" + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + func_append oldobjs " $gentop/$newobj" + ;; + *) func_append oldobjs " $obj" ;; + esac + done + fi + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + elif test -n "$archiver_list_spec"; then + func_verbose "using command file archive linking..." + for obj in $oldobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > $output_objdir/$libname.libcmd + func_to_tool_file "$output_objdir/$libname.libcmd" + oldobjs=" $archiver_list_spec$func_to_tool_file_result" + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj" ; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" + ;; + -L*) + func_stripname -L '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -L$func_replace_sysroot_result" + ;; + -R*) + func_stripname -R '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -R$func_replace_sysroot_result" + ;; + *) func_append newdependency_libs " $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" + ;; + *) func_append newdlfiles " $lib" ;; + esac + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" + ;; + esac + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlfiles " $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlprefiles " $abs" + done + dlprefiles="$newdlprefiles" + fi + $RM $output + # place dlname in correct position for cygwin + # In fact, it would be nice if we could use this code for all target + # systems that can't hard-code library paths into their executables + # and that have no shared library path variable independent of PATH, + # but it turns out we can't easily determine that from inspecting + # libtool variables, so we have to hard-code the OSs to which it + # applies here; at the moment, that means platforms that use the PE + # object format with DLL files. See the long comment at the top of + # tests/bindir.at for full details. + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) + # If a -bindir argument was supplied, place the dll there. + if test "x$bindir" != x ; + then + func_relative_path "$install_libdir" "$bindir" + tdlname=$func_relative_path_result$dlname + else + # Otherwise fall back on heuristic. + tdlname=../bin/$dlname + fi + ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that can not go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test "$need_relink" = yes; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +{ test "$opt_mode" = link || test "$opt_mode" = relink; } && + func_mode_link ${1+"$@"} + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $opt_debug + RM="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) func_append RM " $arg"; rmforce=yes ;; + -*) func_append RM " $arg" ;; + *) func_append files " $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + for file in $files; do + func_dirname "$file" "" "." + dir="$func_dirname_result" + if test "X$dir" = X.; then + odir="$objdir" + else + odir="$dir/$objdir" + fi + func_basename "$file" + name="$func_basename_result" + test "$opt_mode" = uninstall && odir="$dir" + + # Remember odir for removal later, being careful to avoid duplicates + if test "$opt_mode" = clean; then + case " $rmdirs " in + *" $odir "*) ;; + *) func_append rmdirs " $odir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + func_append rmfiles " $odir/$n" + done + test -n "$old_library" && func_append rmfiles " $odir/$old_library" + + case "$opt_mode" in + clean) + case " $library_names " in + *" $dlname "*) ;; + *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; + esac + test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && + test "$pic_object" != none; then + func_append rmfiles " $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && + test "$non_pic_object" != none; then + func_append rmfiles " $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$opt_mode" = clean ; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + func_append rmfiles " $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + func_append rmfiles " $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + func_append rmfiles " $odir/$name $odir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + func_append rmfiles " $odir/lt-$name" + fi + if test "X$noexename" != "X$name" ; then + func_append rmfiles " $odir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && + func_mode_uninstall ${1+"$@"} + +test -z "$opt_mode" && { + help="$generic_help" + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode \`$opt_mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# in which we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: +# vi:sw=2 + diff --git a/m4/libtool.m4 b/m4/libtool.m4 new file mode 100644 index 0000000..8ff3c76 --- /dev/null +++ b/m4/libtool.m4 @@ -0,0 +1,7851 @@ +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, +# Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, +# Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +]) + +# serial 57 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT +AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_CC_BASENAME(CC) +# ------------------- +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +m4_defun([_LT_CC_BASENAME], +[for cc_temp in $1""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl + +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_WITH_SYSROOT])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PREPARE_SED_QUOTE_VARS +# -------------------------- +# Define a few sed substitution that help us do robust quoting. +m4_defun([_LT_PREPARE_SED_QUOTE_VARS], +[# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' +]) + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from `configure', and `config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# `config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain="$ac_aux_dir/ltmain.sh" +])# _LT_PROG_LTMAIN + + +## ------------------------------------- ## +## Accumulate code for creating libtool. ## +## ------------------------------------- ## + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the `libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + +## ------------------------ ## +## FIXME: Eliminate VARNAME ## +## ------------------------ ## + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to `config.status' so that its +# declaration there will have the same value as in `configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags="_LT_TAGS"dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into `config.status', and then the shell code to quote escape them in +# for loops in `config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$[]1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +_LT_OUTPUT_LIBTOOL_INIT +]) + +# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) +# ------------------------------------ +# Generate a child script FILE with all initialization necessary to +# reuse the environment learned by the parent script, and make the +# file executable. If COMMENT is supplied, it is inserted after the +# `#!' sequence but before initialization text begins. After this +# macro, additional text can be appended to FILE to form the body of +# the child script. The macro ends with non-zero status if the +# file could not be fully written (such as if the disk is full). +m4_ifdef([AS_INIT_GENERATED], +[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], +[m4_defun([_LT_GENERATED_FILE_INIT], +[m4_require([AS_PREPARE])]dnl +[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl +[lt_write_fail=0 +cat >$1 <<_ASEOF || lt_write_fail=1 +#! $SHELL +# Generated by $as_me. +$2 +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$1 <<\_ASEOF || lt_write_fail=1 +AS_SHELL_SANITIZE +_AS_PREPARE +exec AS_MESSAGE_FD>&1 +_ASEOF +test $lt_write_fail = 0 && chmod +x $1[]dnl +m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], +[# Run this file to recreate a libtool stub with the current configuration.]) + +cat >>"$CONFIG_LT" <<\_LTEOF +lt_cl_silent=false +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +\`$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test $[#] != 0 +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try \`$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try \`$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +lt_cl_success=: +test "$silent" = yes && + lt_config_lt_args="$lt_config_lt_args --quiet" +exec AS_MESSAGE_LOG_FD>/dev/null +$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false +exec AS_MESSAGE_LOG_FD>>config.log +$lt_cl_success || AS_EXIT(1) +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +_LT_COPYING +_LT_LIBTOOL_TAGS + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + _LT_PROG_REPLACE_SHELLFNS + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) +dnl AC_DEFUN([AC_LIBTOOL_RC], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS="$save_LDFLAGS" + ]) + AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], + [lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD + echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD + $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD + echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD + $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[[012]]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES +# -------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + m4_if([$1], [CXX], +[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) +# ---------------------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +# Store the results from the different compilers for each TAGNAME. +# Allow to override them for all tags through lt_cv_aix_libpath. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], + [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ + lt_aix_libpath_sed='[ + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }]' + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi],[]) + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" + fi + ]) + aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) +fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[m4_divert_text([M4SH-INIT], [$1 +])])# _LT_SHELL_INIT + + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Find how we can fake an echo command that does not interpret backslash. +# In particular, with Autoconf 2.60 or later we add some code to the start +# of the generated configure script which will find a shell with a builtin +# printf (which we can use as an echo command). +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +AC_MSG_CHECKING([how to print strings]) +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$[]1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +case "$ECHO" in + printf*) AC_MSG_RESULT([printf]) ;; + print*) AC_MSG_RESULT([print -r]) ;; + *) AC_MSG_RESULT([cat]) ;; +esac + +m4_ifdef([_AS_DETECT_SUGGESTED], +[_AS_DETECT_SUGGESTED([ + test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test "X`printf %s $ECHO`" = "X$ECHO" \ + || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) + +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_WITH_SYSROOT +# ---------------- +AC_DEFUN([_LT_WITH_SYSROOT], +[AC_MSG_CHECKING([for sysroot]) +AC_ARG_WITH([sysroot], +[ --with-sysroot[=DIR] Search for dependent libraries within DIR + (or the compiler's sysroot if not specified).], +[], [with_sysroot=no]) + +dnl lt_sysroot will always be passed unquoted. We quote it here +dnl in case the user passed a directory name. +lt_sysroot= +case ${with_sysroot} in #( + yes) + if test "$GCC" = yes; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + AC_MSG_RESULT([${with_sysroot}]) + AC_MSG_ERROR([The sysroot must be an absolute path.]) + ;; +esac + + AC_MSG_RESULT([${lt_sysroot:-no}]) +_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl +[dependent libraries, and in which our libraries should be installed.])]) + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" +])# _LT_ENABLE_LOCK + + +# _LT_PROG_AR +# ----------- +m4_defun([_LT_PROG_AR], +[AC_CHECK_TOOLS(AR, [ar], false) +: ${AR=ar} +: ${AR_FLAGS=cru} +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) + +AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], + [lt_cv_ar_at_file=no + AC_COMPILE_IFELSE([AC_LANG_PROGRAM], + [echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([lt_ar_try]) + if test "$ac_status" -eq 0; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + AC_TRY_EVAL([lt_ar_try]) + if test "$ac_status" -ne 0; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + ]) + ]) + +if test "x$lt_cv_ar_at_file" = xno; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi +_LT_DECL([], [archiver_list_spec], [1], + [How to feed a file listing to the archiver]) +])# _LT_PROG_AR + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[_LT_PROG_AR + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +_LT_DECL([], [lock_old_archive_extraction], [0], + [Whether to use a lock for old archive extraction]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test x"[$]$2" = xyes; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "$cross_compiling" = yes; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links="nottested" +if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test "$hard_links" = no; then + AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", + [Define to the sub-directory in which libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || + test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; + *) lt_sed_strip_eq="s,=/,/,g" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[[4-9]]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[123]]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[[3-9]]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], + [lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [lt_cv_shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + ]) + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [install_override_mode], [1], + [Permission mode override for installation of shared libraries]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], + [Run-time system search path for libraries]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program which can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program which can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PROG_ECHO_BACKSLASH])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method = "file_magic"]) +_LT_DECL([], [file_magic_glob], [1], + [How to find potential files when deplibs_check_method = "file_magic"]) +_LT_DECL([], [want_nocaseglob], [1], + [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi]) +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + AC_SUBST([DUMPBIN]) + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + +# _LT_CHECK_SHAREDLIB_FROM_LINKLIB +# -------------------------------- +# how to determine the name of the shared library +# associated with a specific link library. +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +m4_require([_LT_DECL_DLLTOOL]) +AC_CACHE_CHECK([how to associate runtime and link libraries], +lt_cv_sharedlib_from_linklib_cmd, +[lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh + # decide which to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd="$ECHO" + ;; +esac +]) +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + +_LT_DECL([], [sharedlib_from_linklib_cmd], [1], + [Command to associate shared and link libraries]) +])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB + + +# _LT_PATH_MANIFEST_TOOL +# ---------------------- +# locate the manifest tool +m4_defun([_LT_PATH_MANIFEST_TOOL], +[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], + [lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&AS_MESSAGE_LOG_FD + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest*]) +if test "x$lt_cv_path_mainfest_tool" != xyes; then + MANIFEST_TOOL=: +fi +_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl +])# _LT_PATH_MANIFEST_TOOL + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then + case $cc_basename in + nvcc*) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; + *) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; + esac + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx]" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT@&t@_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT@&t@_DLSYM_CONST +#else +# define LT@&t@_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT@&t@_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +_LT_DECL([], [nm_file_list_spec], [1], + [Specify filename containing input files for $NM]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test "$GCC" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Xcompiler -fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ F* | *Sun*Fortran*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac + +AC_CACHE_CHECK([for $compiler option to produce PIC], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global defined + # symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + ;; + esac + ;; + linux* | k*bsd*-gnu | gnu*) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu | gnu*) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; + esac + + _LT_TAGVAR(ld_shlibs, $1)=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test "$with_gnu_ld" = yes; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; + *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test "$lt_use_gnu_ld_interface" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' + _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global + # defined symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + _LT_TAGVAR(link_all_deplibs, $1)=no + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + esac + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + freebsd1*) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + m4_if($1, [], [ + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + _LT_LINKER_OPTION([if $CC understands -b], + _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], + [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) + ;; + esac + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], + [lt_cv_irix_exported_symbol], + [save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + AC_LINK_IFELSE( + [AC_LANG_SOURCE( + [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], + [C++], [[int foo (void) { return 0; }]], + [Fortran 77], [[ + subroutine foo + end]], + [Fortran], [[ + subroutine foo + end]])])], + [lt_cv_irix_exported_symbol=yes], + [lt_cv_irix_exported_symbol=no]) + LDFLAGS="$save_LDFLAGS"]) + if test "$lt_cv_irix_exported_symbol" = yes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + fi + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_CACHE_CHECK([whether -lc should be explicitly linked in], + [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), + [$RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + ]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], + [[If ld is used when linking, flag to hardcode $libdir into a binary + during linking. This must work even if $libdir does not exist]]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting ${shlibpath_var} if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [postlink_cmds], [2], + [Commands necessary for finishing linking programs]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC="$CC" +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report which library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC="$lt_save_CC" +])# _LT_LANG_C_CONFIG + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd[[12]]*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + gnu*) + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ + '"$_LT_TAGVAR(old_archive_cmds, $1)" + _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ + '"$_LT_TAGVAR(reload_cmds, $1)" + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + + _LT_TAGVAR(GCC, $1)="$GXX" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_FUNC_STRIPNAME_CNF +# ---------------------- +# func_stripname_cnf prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# +# This function is identical to the (non-XSI) version of func_stripname, +# except this one can be used by m4 code that may be executed by configure, +# rather than the libtool script. +m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl +AC_REQUIRE([_LT_DECL_SED]) +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) +func_stripname_cnf () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname_cnf +])# _LT_FUNC_STRIPNAME_CNF + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +]) + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +esac + +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case ${prev}${p} in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test "$pre_test_object_deps_done" = no; then + case ${prev} in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)="${prev}${p}" + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)="$p" + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)="$p" + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC* | sunCC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_LANG_PUSH(Fortran 77) +if test -z "$F77" || test "X$F77" = "Xno"; then + _lt_disable_F77=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_F77" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${F77-"f77"} + CFLAGS=$FFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$G77" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" + CFLAGS="$lt_save_CFLAGS" +fi # test "$_lt_disable_F77" != yes + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_LANG_PUSH(Fortran) + +if test -z "$FC" || test "X$FC" = "Xno"; then + _lt_disable_FC=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_FC" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${FC-"f95"} + CFLAGS=$FCFLAGS + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test "$_lt_disable_FC" != yes + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +CFLAGS=$GCJFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)="$LD" +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +CFLAGS= +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + +# _LT_DECL_DLLTOOL +# ---------------- +# Ensure DLLTOOL variable is set. +m4_defun([_LT_DECL_DLLTOOL], +[AC_CHECK_TOOL(DLLTOOL, dlltool, false) +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) +AC_SUBST([DLLTOOL]) +]) + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,b/c, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +AC_MSG_RESULT([$xsi_shell]) +_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) + +AC_MSG_CHECKING([whether the shell understands "+="]) +lt_shell_append=no +( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +AC_MSG_RESULT([$lt_shell_append]) +_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) +# ------------------------------------------------------ +# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and +# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. +m4_defun([_LT_PROG_FUNCTION_REPLACE], +[dnl { +sed -e '/^$1 ()$/,/^} # $1 /c\ +$1 ()\ +{\ +m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) +} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: +]) + + +# _LT_PROG_REPLACE_SHELLFNS +# ------------------------- +# Replace existing portable implementations of several shell functions with +# equivalent extended shell implementations where those features are available.. +m4_defun([_LT_PROG_REPLACE_SHELLFNS], +[if test x"$xsi_shell" = xyes; then + _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac]) + + _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl + func_basename_result="${1##*/}"]) + + _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}"]) + + _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"}]) + + _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl + func_split_long_opt_name=${1%%=*} + func_split_long_opt_arg=${1#*=}]) + + _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl + func_split_short_opt_arg=${1#??} + func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) + + _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac]) + + _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) + + _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) + + _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) +fi + +if test x"$lt_shell_append" = xyes; then + _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) + + _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl + func_quote_for_eval "${2}" +dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ + eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) + + # Save a `func_append' function call where possible by direct use of '+=' + sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +else + # Save a `func_append' function call even when '+=' is not available + sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +fi + +if test x"$_lt_function_replace_fail" = x":"; then + AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) +fi +]) + +# _LT_PATH_CONVERSION_FUNCTIONS +# ----------------------------- +# Determine which file name conversion functions should be used by +# func_to_host_file (and, implicitly, by func_to_host_path). These are needed +# for certain cross-compile configurations and native mingw. +m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_MSG_CHECKING([how to convert $build file names to $host format]) +AC_CACHE_VAL(lt_cv_to_host_file_cmd, +[case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac +]) +to_host_file_cmd=$lt_cv_to_host_file_cmd +AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) +_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], + [0], [convert $build file names to $host format])dnl + +AC_MSG_CHECKING([how to convert $build file names to toolchain format]) +AC_CACHE_VAL(lt_cv_to_tool_file_cmd, +[#assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac +]) +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) +_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], + [0], [convert $build files to toolchain format])dnl +])# _LT_PATH_CONVERSION_FUNCTIONS diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4 new file mode 100644 index 0000000..17cfd51 --- /dev/null +++ b/m4/ltoptions.m4 @@ -0,0 +1,369 @@ +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 7 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option `$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl `shared' nor `disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + ]) +])# _LT_SET_OPTIONS + + +## --------------------------------- ## +## Macros to handle LT_INIT options. ## +## --------------------------------- ## + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [1], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the `shared' and +# `disable-shared' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the `static' and +# `disable-static' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the `fast-install' +# and `disable-fast-install' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the `pic-only' and `no-pic' +# LT_INIT options. +# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [pic_mode="$withval"], + [pic_mode=default]) + +test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + +## ----------------- ## +## LTDL_INIT Options ## +## ----------------- ## + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4 new file mode 100644 index 0000000..9000a05 --- /dev/null +++ b/m4/ltsugar.m4 @@ -0,0 +1,123 @@ +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59 which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) diff --git a/m4/ltversion.m4 b/m4/ltversion.m4 new file mode 100644 index 0000000..9c7b5d4 --- /dev/null +++ b/m4/ltversion.m4 @@ -0,0 +1,23 @@ +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# @configure_input@ + +# serial 3293 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.4]) +m4_define([LT_PACKAGE_REVISION], [1.3293]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.4' +macro_revision='1.3293' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4 new file mode 100644 index 0000000..c573da9 --- /dev/null +++ b/m4/lt~obsolete.m4 @@ -0,0 +1,98 @@ +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 5 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) +m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) +m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) +m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) +m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) +m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) +m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) diff --git a/missing b/missing new file mode 100755 index 0000000..28055d2 --- /dev/null +++ b/missing @@ -0,0 +1,376 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. + +scriptversion=2009-04-28.21; # UTC + +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, +# 2008, 2009 Free Software Foundation, Inc. +# Originally by Fran,cois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program 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 General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: +sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' +sed_minuso='s/.* -o \([^ ]*\).*/\1/p' + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +msg="missing on your system" + +case $1 in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + # Exit code 63 means version mismatch. This often happens + # when the user try to use an ancient version of a tool on + # a file that requires a minimum version. In this case we + # we should proceed has if the program had been absent, or + # if --run hadn't been passed. + if test $? = 63; then + run=: + msg="probably too old" + fi + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + autom4te touch the output file, or create a stub one + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch] + +Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and +\`g' are ignored when checking the name. + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + +esac + +# normalize program name to check for. +program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + +# Now exit if we have it, but it failed. Also exit now if we +# don't have it and --version was passed (most likely to detect +# the program). This is about non-GNU programs, so use $1 not +# $program. +case $1 in + lex*|yacc*) + # Not GNU programs, they don't have --version. + ;; + + tar*) + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + exit 1 + fi + ;; + + *) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + # Could not run --version or --help. This is probably someone + # running `$TOOL --version' or `$TOOL --help' to check whether + # $TOOL exists and not knowing $TOOL uses missing. + exit 1 + fi + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case $program in + aclocal*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case $f in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te*) + echo 1>&2 "\ +WARNING: \`$1' is needed, but is $msg. + You might have modified some files without having the + proper tools for further handling them. + You can get \`$1' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison*|yacc*) + echo 1>&2 "\ +WARNING: \`$1' $msg. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if test ! -f y.tab.h; then + echo >y.tab.h + fi + if test ! -f y.tab.c; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex*|flex*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if test ! -f lex.yy.c; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit $? + fi + ;; + + makeinfo*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + # The file to touch is that specified with -o ... + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -z "$file"; then + # ... or it is the one specified with @setfilename ... + infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n ' + /^@setfilename/{ + s/.* \([^ ]*\) *$/\1/ + p + q + }' $infile` + # ... or it is derived from the source name (dir/f.texi becomes f.info) + test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info + fi + # If the file does not exist, the user really needs makeinfo; + # let's fail without touching anything. + test -f $file || exit 1 + touch $file + ;; + + tar*) + shift + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case $firstarg in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case $firstarg in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and is $msg. + You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequisites for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/packaging/gstreamer-python.changes b/packaging/gstreamer-python.changes new file mode 100644 index 0000000..458c8ce --- /dev/null +++ b/packaging/gstreamer-python.changes @@ -0,0 +1,2 @@ +* Fri Aug 31 22:00:58 UTC 2012 - jimmy.huang@intel.com +- Intial import from upstream. diff --git a/packaging/gstreamer-python.spec b/packaging/gstreamer-python.spec new file mode 100644 index 0000000..51a5ba9 --- /dev/null +++ b/packaging/gstreamer-python.spec @@ -0,0 +1,60 @@ +Name: gstreamer-python +Summary: Python bindings for GStreamer +Version: 0.10.22 +Release: 1 +Group: System/Libraries +License: LGPLv2+ +URL: http://gstreamer.freedesktop.org/ +Source: http://gstreamer.freedesktop.org/src/gst-python/gst-python-%{version}.tar.gz +BuildRequires: pkgconfig(python) +BuildRequires: pkgconfig(gstreamer-0.10) +BuildRequires: pkgconfig(gstreamer-plugins-base-0.10) +BuildRequires: pkgconfig(pygobject-2.0) +Requires: pygobject +Requires: gstreamer +Requires: gst-plugins-base + +%description +This module contains a wrapper that allows GStreamer applications +to be written in Python. + + + +%package devel +Summary: Headers for developing programs that will use %{name} +Group: Development/Libraries +Requires: %{name} = %{version}-%{release} +Requires: pkgconfig +Requires: gstreamer-devel + +%description devel +This package contains the static libraries and header files needed for +developing gstreamer-python applications. + + + +%prep +%setup -q -n gst-python-%{version} + +%build +%configure --disable-static +make %{?jobs:-j%jobs} + +%install +rm -rf %{buildroot} +%make_install + +find $RPM_BUILD_ROOT -type f -name "*.la" -exec rm -f {} ';' + +%files +%defattr(-,root,root,-) +%doc AUTHORS COPYING ChangeLog NEWS README +%{_libdir}/gstreamer-0.10/libgstpython.so +%{python_sitelib}/* +%dir %{_datadir}/gst-python +%{_datadir}/gst-python + +%files devel +%defattr(-,root,root,-) +%{_includedir}/gstreamer-0.10/gst/*.h +%{_libdir}/pkgconfig/*.pc diff --git a/pkgconfig/Makefile.am b/pkgconfig/Makefile.am new file mode 100644 index 0000000..e11e4cd --- /dev/null +++ b/pkgconfig/Makefile.am @@ -0,0 +1,27 @@ +### all of the standard pc files we need to generate +pcfiles = \ + gst-python-@GST_MAJORMINOR@.pc + +pcfiles_uninstalled = \ + gst-python-@GST_MAJORMINOR@-uninstalled.pc + +all-local: $(pcfiles) $(pcfiles_uninstalled) + +cp_verbose = $(cp_verbose_$(V)) +cp_verbose_ = $(cp_verbose_$(AM_DEFAULT_VERBOSITY)) +cp_verbose_0 = @echo " CP $@"; + +### how to generate pc files +$(pcfiles): %-@GST_MAJORMINOR@.pc: %.pc + $(cp_verbose_0)cp $< $@ +$(pcfiles_uninstalled): %-@GST_MAJORMINOR@-uninstalled.pc: %-uninstalled.pc + $(cp_verbose_0)cp $< $@ + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = $(pcfiles) + +EXTRA_DIST = \ + gst-python.pc.in \ + gst-python-uninstalled.pc.in + +CLEANFILES = $(pcfiles) $(pcfiles_uninstalled) diff --git a/pkgconfig/Makefile.in b/pkgconfig/Makefile.in new file mode 100644 index 0000000..0840456 --- /dev/null +++ b/pkgconfig/Makefile.in @@ -0,0 +1,543 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = pkgconfig +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/gst-python-uninstalled.pc.in \ + $(srcdir)/gst-python.pc.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ + $(top_srcdir)/common/m4/as-compiler-flag.m4 \ + $(top_srcdir)/common/m4/as-version.m4 \ + $(top_srcdir)/common/m4/gst-args.m4 \ + $(top_srcdir)/common/m4/gst-error.m4 \ + $(top_srcdir)/common/m4/gst-feature.m4 \ + $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ + $(top_srcdir)/common/m4/gst-plugindir.m4 \ + $(top_srcdir)/common/m4/gst-valgrind.m4 \ + $(top_srcdir)/common/m4/gst.m4 $(top_srcdir)/common/m4/pkg.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = gst-python.pc gst-python-uninstalled.pc +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(pkgconfigdir)" +DATA = $(pkgconfig_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ERROR_CFLAGS = @ERROR_CFLAGS@ +EXEEXT = @EXEEXT@ +FFLAGS = @FFLAGS@ +FGREP = @FGREP@ +GCOV = @GCOV@ +GCOV_CFLAGS = @GCOV_CFLAGS@ +GCOV_LIBS = @GCOV_LIBS@ +GLIB_REQ = @GLIB_REQ@ +GREP = @GREP@ +GSTPB_REQ = @GSTPB_REQ@ +GST_BASE_CFLAGS = @GST_BASE_CFLAGS@ +GST_BASE_LIBS = @GST_BASE_LIBS@ +GST_CFLAGS = @GST_CFLAGS@ +GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@ +GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@ +GST_DISABLE_ALLOC_TRACE = @GST_DISABLE_ALLOC_TRACE@ +GST_DISABLE_GST_DEBUG = @GST_DISABLE_GST_DEBUG@ +GST_DISABLE_LOADSAVE = @GST_DISABLE_LOADSAVE@ +GST_DISABLE_PARSE = @GST_DISABLE_PARSE@ +GST_DISABLE_PLUGIN = @GST_DISABLE_PLUGIN@ +GST_DISABLE_REGISTRY = @GST_DISABLE_REGISTRY@ +GST_DISABLE_TRACE = @GST_DISABLE_TRACE@ +GST_DISABLE_XML = @GST_DISABLE_XML@ +GST_DP_CFLAGS = @GST_DP_CFLAGS@ +GST_DP_LIBS = @GST_DP_LIBS@ +GST_LIBS = @GST_LIBS@ +GST_MAJORMINOR = @GST_MAJORMINOR@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ +GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ +GST_OPTION_LIBS = @GST_OPTION_LIBS@ +GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@ +GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@ +GST_REQ = @GST_REQ@ +GTK_REQ = @GTK_REQ@ +IGNORE_GST_0_10_21 = @IGNORE_GST_0_10_21@ +IGNORE_GST_0_10_22 = @IGNORE_GST_0_10_22@ +IGNORE_GST_0_10_23 = @IGNORE_GST_0_10_23@ +IGNORE_GST_0_10_24 = @IGNORE_GST_0_10_24@ +IGNORE_GST_0_10_25 = @IGNORE_GST_0_10_25@ +IGNORE_GST_0_10_26 = @IGNORE_GST_0_10_26@ +IGNORE_GST_0_10_29 = @IGNORE_GST_0_10_29@ +IGNORE_GST_0_10_30 = @IGNORE_GST_0_10_30@ +IGNORE_GST_0_10_31 = @IGNORE_GST_0_10_31@ +IGNORE_GST_0_10_32 = @IGNORE_GST_0_10_32@ +IGNORE_GST_LOADSAVE = @IGNORE_GST_LOADSAVE@ +IGNORE_GST_PB_0_10_23 = @IGNORE_GST_PB_0_10_23@ +IGNORE_GST_PB_0_10_25 = @IGNORE_GST_PB_0_10_25@ +IGNORE_GST_PB_0_10_26 = @IGNORE_GST_PB_0_10_26@ +IGNORE_GST_PB_0_10_29 = @IGNORE_GST_PB_0_10_29@ +IGNORE_GST_PB_0_10_30 = @IGNORE_GST_PB_0_10_30@ +IGNORE_GST_PB_0_10_31 = @IGNORE_GST_PB_0_10_31@ +IGNORE_GST_PB_0_10_32 = @IGNORE_GST_PB_0_10_32@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@ +PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@ +PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@ +PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@ +PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PLUGINDIR = @PLUGINDIR@ +PYEXECDIR = @PYEXECDIR@ +PYGOBJECT_2_12_CFLAGS = @PYGOBJECT_2_12_CFLAGS@ +PYGOBJECT_2_12_LIBS = @PYGOBJECT_2_12_LIBS@ +PYGOBJECT_2_16_CFLAGS = @PYGOBJECT_2_16_CFLAGS@ +PYGOBJECT_2_16_LIBS = @PYGOBJECT_2_16_LIBS@ +PYGOBJECT_CFLAGS = @PYGOBJECT_CFLAGS@ +PYGOBJECT_LIBS = @PYGOBJECT_LIBS@ +PYGOBJECT_REQ = @PYGOBJECT_REQ@ +PYGST_CFLAGS = @PYGST_CFLAGS@ +PYGTK_CFLAGS = @PYGTK_CFLAGS@ +PYGTK_LIBS = @PYGTK_LIBS@ +PYGTK_REQ = @PYGTK_REQ@ +PYTHON = @PYTHON@ +PYTHONDIR = @PYTHONDIR@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_LIB_LOC = @PYTHON_LIB_LOC@ +PYTHON_LIB_SUFFIX = @PYTHON_LIB_SUFFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VALGRIND_PATH = @VALGRIND_PATH@ +VERSION = @VERSION@ +WARNING_CFLAGS = @WARNING_CFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +plugindir = @plugindir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ + +### all of the standard pc files we need to generate +pcfiles = \ + gst-python-@GST_MAJORMINOR@.pc + +pcfiles_uninstalled = \ + gst-python-@GST_MAJORMINOR@-uninstalled.pc + +cp_verbose = $(cp_verbose_$(V)) +cp_verbose_ = $(cp_verbose_$(AM_DEFAULT_VERBOSITY)) +cp_verbose_0 = @echo " CP $@"; +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = $(pcfiles) +EXTRA_DIST = \ + gst-python.pc.in \ + gst-python-uninstalled.pc.in + +CLEANFILES = $(pcfiles) $(pcfiles_uninstalled) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu pkgconfig/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu pkgconfig/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +gst-python.pc: $(top_builddir)/config.status $(srcdir)/gst-python.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +gst-python-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/gst-python-uninstalled.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ + done + +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) all-local +installdirs: + for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-pkgconfigDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-pkgconfigDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am all-local check check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-pkgconfigDATA install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-pkgconfigDATA + + +all-local: $(pcfiles) $(pcfiles_uninstalled) + +### how to generate pc files +$(pcfiles): %-@GST_MAJORMINOR@.pc: %.pc + $(cp_verbose_0)cp $< $@ +$(pcfiles_uninstalled): %-@GST_MAJORMINOR@-uninstalled.pc: %-uninstalled.pc + $(cp_verbose_0)cp $< $@ + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/pkgconfig/gst-python-uninstalled.pc.in b/pkgconfig/gst-python-uninstalled.pc.in new file mode 100644 index 0000000..13168b2 --- /dev/null +++ b/pkgconfig/gst-python-uninstalled.pc.in @@ -0,0 +1,16 @@ +# the standard variables don't make sense for an uninstalled copy +#prefix= +#exec_prefix= +#datadir=${pcfiledir}/.. +pyexecdir=${pcfiledir}/.. + +# same here. Useful when calling the code generator in addon packages. +pygstincludedir=@abs_top_builddir@ +#defsdir=${datadir}/gst-python/@GST_MAJORMINOR@/defs +#codegendir=${datadir}/pygst/0.10/codegen + +Name: gst-python uninstalled +Description: Python bindings for GStreamer, not installed +Requires: pygobject-2.0, gstreamer-@GST_MAJORMINOR@ +Version: @VERSION@ +Cflags: -I${pygstincludedir} diff --git a/pkgconfig/gst-python.pc.in b/pkgconfig/gst-python.pc.in new file mode 100644 index 0000000..4c5e1f1 --- /dev/null +++ b/pkgconfig/gst-python.pc.in @@ -0,0 +1,15 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +datadir=@datadir@ +pyexecdir=@pyexecdir@ + +# same here. Useful when calling the code generator in addon packages. +pygstincludedir=@includedir@/gstreamer-@GST_MAJORMINOR@ +defsdir=${datadir}/gst-python/@GST_MAJORMINOR@/defs +codegendir=${datadir}/pygst/0.10/codegen + +Name: gst-python +Description: Python bindings for GStreamer +Requires: pygobject-2.0, gstreamer-@GST_MAJORMINOR@ +Version: @VERSION@ +Cflags: -I${pygstincludedir} diff --git a/plugin/Makefile.am b/plugin/Makefile.am new file mode 100644 index 0000000..d4a42c0 --- /dev/null +++ b/plugin/Makefile.am @@ -0,0 +1,11 @@ +plugin_LTLIBRARIES = libgstpython.la + +INCLUDES = $(PYGOBJECT_CFLAGS) $(GST_CFLAGS)\ + -DPYTHON_VERSION=\"$(PYTHON_VERSION)\" \ + -DPY_LIB_LOC="\"$(PYTHON_LIB_LOC)\"" \ + -DPY_LIB_SUFFIX=$(PYTHON_LIB_SUFFIX) \ + $(PYTHON_INCLUDES) + +libgstpython_la_SOURCES = gstpythonplugin.c +libgstpython_la_LDFLAGS = -module -avoid-version +libgstpython_la_LIBADD = $(GST_LIBS) diff --git a/plugin/Makefile.in b/plugin/Makefile.in new file mode 100644 index 0000000..7d7b32c --- /dev/null +++ b/plugin/Makefile.in @@ -0,0 +1,652 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = plugin +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ + $(top_srcdir)/common/m4/as-compiler-flag.m4 \ + $(top_srcdir)/common/m4/as-version.m4 \ + $(top_srcdir)/common/m4/gst-args.m4 \ + $(top_srcdir)/common/m4/gst-error.m4 \ + $(top_srcdir)/common/m4/gst-feature.m4 \ + $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ + $(top_srcdir)/common/m4/gst-plugindir.m4 \ + $(top_srcdir)/common/m4/gst-valgrind.m4 \ + $(top_srcdir)/common/m4/gst.m4 $(top_srcdir)/common/m4/pkg.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(plugindir)" +LTLIBRARIES = $(plugin_LTLIBRARIES) +am__DEPENDENCIES_1 = +libgstpython_la_DEPENDENCIES = $(am__DEPENDENCIES_1) +am_libgstpython_la_OBJECTS = gstpythonplugin.lo +libgstpython_la_OBJECTS = $(am_libgstpython_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +libgstpython_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libgstpython_la_LDFLAGS) $(LDFLAGS) \ + -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(libgstpython_la_SOURCES) +DIST_SOURCES = $(libgstpython_la_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ERROR_CFLAGS = @ERROR_CFLAGS@ +EXEEXT = @EXEEXT@ +FFLAGS = @FFLAGS@ +FGREP = @FGREP@ +GCOV = @GCOV@ +GCOV_CFLAGS = @GCOV_CFLAGS@ +GCOV_LIBS = @GCOV_LIBS@ +GLIB_REQ = @GLIB_REQ@ +GREP = @GREP@ +GSTPB_REQ = @GSTPB_REQ@ +GST_BASE_CFLAGS = @GST_BASE_CFLAGS@ +GST_BASE_LIBS = @GST_BASE_LIBS@ +GST_CFLAGS = @GST_CFLAGS@ +GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@ +GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@ +GST_DISABLE_ALLOC_TRACE = @GST_DISABLE_ALLOC_TRACE@ +GST_DISABLE_GST_DEBUG = @GST_DISABLE_GST_DEBUG@ +GST_DISABLE_LOADSAVE = @GST_DISABLE_LOADSAVE@ +GST_DISABLE_PARSE = @GST_DISABLE_PARSE@ +GST_DISABLE_PLUGIN = @GST_DISABLE_PLUGIN@ +GST_DISABLE_REGISTRY = @GST_DISABLE_REGISTRY@ +GST_DISABLE_TRACE = @GST_DISABLE_TRACE@ +GST_DISABLE_XML = @GST_DISABLE_XML@ +GST_DP_CFLAGS = @GST_DP_CFLAGS@ +GST_DP_LIBS = @GST_DP_LIBS@ +GST_LIBS = @GST_LIBS@ +GST_MAJORMINOR = @GST_MAJORMINOR@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ +GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ +GST_OPTION_LIBS = @GST_OPTION_LIBS@ +GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@ +GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@ +GST_REQ = @GST_REQ@ +GTK_REQ = @GTK_REQ@ +IGNORE_GST_0_10_21 = @IGNORE_GST_0_10_21@ +IGNORE_GST_0_10_22 = @IGNORE_GST_0_10_22@ +IGNORE_GST_0_10_23 = @IGNORE_GST_0_10_23@ +IGNORE_GST_0_10_24 = @IGNORE_GST_0_10_24@ +IGNORE_GST_0_10_25 = @IGNORE_GST_0_10_25@ +IGNORE_GST_0_10_26 = @IGNORE_GST_0_10_26@ +IGNORE_GST_0_10_29 = @IGNORE_GST_0_10_29@ +IGNORE_GST_0_10_30 = @IGNORE_GST_0_10_30@ +IGNORE_GST_0_10_31 = @IGNORE_GST_0_10_31@ +IGNORE_GST_0_10_32 = @IGNORE_GST_0_10_32@ +IGNORE_GST_LOADSAVE = @IGNORE_GST_LOADSAVE@ +IGNORE_GST_PB_0_10_23 = @IGNORE_GST_PB_0_10_23@ +IGNORE_GST_PB_0_10_25 = @IGNORE_GST_PB_0_10_25@ +IGNORE_GST_PB_0_10_26 = @IGNORE_GST_PB_0_10_26@ +IGNORE_GST_PB_0_10_29 = @IGNORE_GST_PB_0_10_29@ +IGNORE_GST_PB_0_10_30 = @IGNORE_GST_PB_0_10_30@ +IGNORE_GST_PB_0_10_31 = @IGNORE_GST_PB_0_10_31@ +IGNORE_GST_PB_0_10_32 = @IGNORE_GST_PB_0_10_32@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@ +PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@ +PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@ +PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@ +PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PLUGINDIR = @PLUGINDIR@ +PYEXECDIR = @PYEXECDIR@ +PYGOBJECT_2_12_CFLAGS = @PYGOBJECT_2_12_CFLAGS@ +PYGOBJECT_2_12_LIBS = @PYGOBJECT_2_12_LIBS@ +PYGOBJECT_2_16_CFLAGS = @PYGOBJECT_2_16_CFLAGS@ +PYGOBJECT_2_16_LIBS = @PYGOBJECT_2_16_LIBS@ +PYGOBJECT_CFLAGS = @PYGOBJECT_CFLAGS@ +PYGOBJECT_LIBS = @PYGOBJECT_LIBS@ +PYGOBJECT_REQ = @PYGOBJECT_REQ@ +PYGST_CFLAGS = @PYGST_CFLAGS@ +PYGTK_CFLAGS = @PYGTK_CFLAGS@ +PYGTK_LIBS = @PYGTK_LIBS@ +PYGTK_REQ = @PYGTK_REQ@ +PYTHON = @PYTHON@ +PYTHONDIR = @PYTHONDIR@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_LIB_LOC = @PYTHON_LIB_LOC@ +PYTHON_LIB_SUFFIX = @PYTHON_LIB_SUFFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VALGRIND_PATH = @VALGRIND_PATH@ +VERSION = @VERSION@ +WARNING_CFLAGS = @WARNING_CFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +plugindir = @plugindir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +plugin_LTLIBRARIES = libgstpython.la +INCLUDES = $(PYGOBJECT_CFLAGS) $(GST_CFLAGS)\ + -DPYTHON_VERSION=\"$(PYTHON_VERSION)\" \ + -DPY_LIB_LOC="\"$(PYTHON_LIB_LOC)\"" \ + -DPY_LIB_SUFFIX=$(PYTHON_LIB_SUFFIX) \ + $(PYTHON_INCLUDES) + +libgstpython_la_SOURCES = gstpythonplugin.c +libgstpython_la_LDFLAGS = -module -avoid-version +libgstpython_la_LIBADD = $(GST_LIBS) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu plugin/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu plugin/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)" + @list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \ + } + +uninstall-pluginLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \ + done + +clean-pluginLTLIBRARIES: + -test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES) + @list='$(plugin_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libgstpython.la: $(libgstpython_la_OBJECTS) $(libgstpython_la_DEPENDENCIES) + $(AM_V_CCLD)$(libgstpython_la_LINK) -rpath $(plugindir) $(libgstpython_la_OBJECTS) $(libgstpython_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gstpythonplugin.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(plugindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-pluginLTLIBRARIES + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-pluginLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-pluginLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-pluginLTLIBRARIES \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-pluginLTLIBRARIES + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/plugin/gstpythonplugin.c b/plugin/gstpythonplugin.c new file mode 100644 index 0000000..2a08d19 --- /dev/null +++ b/plugin/gstpythonplugin.c @@ -0,0 +1,426 @@ +/* gst-python + * Copyright (C) 2009 Edward Hervey + * 2005 Benjamin Otte + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +/* include this first, before NO_IMPORT_PYGOBJECT is defined */ +#include +#include +#include + +void *_PyGstElement_Type; + +GST_DEBUG_CATEGORY_STATIC (pyplugindebug); +#define GST_CAT_DEFAULT pyplugindebug + +#define GST_ORIGIN "http://gstreamer.freedesktop.org" + +static PyObject *element; + +static inline gboolean +np_init_pygobject (void) +{ + gboolean res = FALSE; + PyObject *gobject = NULL; + PyObject *main_module = NULL; + PyObject *mdict = NULL; + PyObject *pygtk = NULL; + PyObject *cobject; + + pygtk = PyImport_ImportModule ("pygtk"); + if (pygtk == NULL) { + PyErr_Print (); + GST_WARNING ("could not import pygtk"); + goto beach; + } + + if (!(PyObject_CallMethod (pygtk, "require", "s", "2.0"))) { + GST_WARNING ("could not run pygtk.require"); + PyErr_Print (); + goto beach; + } + + gobject = PyImport_ImportModule ("gobject"); + if (gobject == NULL) { + PyErr_Print (); + GST_WARNING ("could not import gobject"); + goto beach; + } + + main_module = PyImport_AddModule ("__main__"); + mdict = PyModule_GetDict (gobject); + + cobject = PyMapping_GetItemString (mdict, "_PyGObject_API"); + if (cobject == NULL) { + GST_WARNING ("could not find _PyGObject_API"); + goto beach; + } + + _PyGObject_API = + (struct _PyGObject_Functions *) PyCObject_AsVoidPtr (cobject); + if (_PyGObject_API == NULL) { + PyErr_Print (); + GST_WARNING ("_PyGObject_API is not a valid CObject"); + goto beach; + } + + if (!(PyObject_CallMethod (gobject, "threads_init", NULL, NULL))) { + PyErr_Print (); + GST_WARNING ("could not initialize threads"); + goto beach; + } + + res = TRUE; + +beach: + Py_XDECREF (pygtk); + Py_XDECREF (gobject); + + return res; +} + +static gboolean +gst_python_plugin_load_file (GstPlugin * plugin, const char *name) +{ + PyObject *main_module, *main_locals; + PyObject *elementfactory; + int pos = 0; + GType gtype; + PyObject *module; + const gchar *facname; + guint rank; + PyObject *class; + + GST_DEBUG ("loading plugin %s", name); + + main_module = PyImport_AddModule ("__main__"); + if (main_module == NULL) { + GST_WARNING ("Could not get __main__, ignoring plugin %s", name); + PyErr_Print (); + PyErr_Clear (); + return FALSE; + } + + main_locals = PyModule_GetDict (main_module); + module = + PyImport_ImportModuleEx ((char *) name, main_locals, main_locals, NULL); + if (!module) { + GST_DEBUG ("Could not load module, ignoring plugin %s", name); + PyErr_Print (); + PyErr_Clear (); + return FALSE; + } + + /* Get __gstelementfactory__ from file */ + elementfactory = PyObject_GetAttrString (module, "__gstelementfactory__"); + if (!elementfactory) { + GST_DEBUG ("python file doesn't contain __gstelementfactory__"); + PyErr_Clear (); + return FALSE; + } + + /* parse tuple : name, rank, gst.ElementClass */ + if (!PyArg_ParseTuple (elementfactory, "sIO", &facname, &rank, &class)) { + GST_WARNING ("__gstelementfactory__ isn't correctly formatted"); + PyErr_Print (); + PyErr_Clear (); + Py_DECREF (elementfactory); + return FALSE; + } + + if (!(PyObject_IsSubclass (class, (PyObject *) _PyGstElement_Type))) { + GST_WARNING ("the class provided isn't a subclass of gst.Element"); + PyErr_Print (); + PyErr_Clear (); + Py_DECREF (elementfactory); + Py_DECREF (class); + return FALSE; + } + + GST_LOG ("Valid plugin"); + Py_DECREF (elementfactory); + + return gst_element_register (plugin, facname, rank, + pyg_type_from_object (class)); +} + +static gboolean +gst_python_load_directory (GstPlugin * plugin, gchar * path) +{ + GST_LOG ("Checking for python plugins in %s", path); + GDir *dir; + const gchar *file; + GError *error = NULL; + gboolean ret = TRUE; + + dir = g_dir_open (path, 0, &error); + if (!dir) { + /*retval should probably be depending on error, but since we ignore it... */ + GST_WARNING ("Couldn't open Python plugin dir: %s", error->message); + g_error_free (error); + return FALSE; + } + while ((file = g_dir_read_name (dir))) { + /* FIXME : go down in subdirectories */ + if (g_str_has_suffix (file, ".py")) { + gsize len = strlen (file) - 3; + gchar *name = g_strndup (file, len); + ret &= gst_python_plugin_load_file (plugin, name); + g_free (name); + } + } + return TRUE; +} + +static gboolean +gst_python_plugin_load (GstPlugin * plugin) +{ + PyObject *sys_path; + const gchar *plugin_path; + gboolean ret = TRUE; + + sys_path = PySys_GetObject ("path"); + + /* Mimic the order in which the registry is checked in core */ + + /* 1. check env_variable GST_PLUGIN_PATH */ + plugin_path = g_getenv ("GST_PLUGIN_PATH"); + if (plugin_path) { + char **list; + int i; + + GST_DEBUG ("GST_PLUGIN_PATH set to %s", plugin_path); + list = g_strsplit (plugin_path, G_SEARCHPATH_SEPARATOR_S, 0); + for (i = 0; list[i]; i++) { + gchar *sysdir = g_build_filename (list[i], "python", NULL); + PyList_Insert (sys_path, 0, PyString_FromString (sysdir)); + gst_python_load_directory (plugin, sysdir); + g_free (sysdir); + } + + g_strfreev (list); + } + + /* 2. Check for GST_PLUGIN_SYSTEM_PATH */ + plugin_path = g_getenv ("GST_PLUGIN_SYSTEM_PATH"); + if (plugin_path == NULL) { + char *home_plugins; + + /* 2.a. Scan user and system-wide plugin directory */ + GST_DEBUG ("GST_PLUGIN_SYSTEM_PATH not set"); + + /* plugins in the user's home directory take precedence over + * system-installed ones */ + home_plugins = g_build_filename (g_get_home_dir (), + ".gstreamer-" GST_MAJORMINOR, "plugins", "python", NULL); + PyList_Insert (sys_path, 0, PyString_FromString (home_plugins)); + gst_python_load_directory (plugin, home_plugins); + g_free (home_plugins); + + /* add the main (installed) library path */ + PyList_Insert (sys_path, 0, PyString_FromString (PLUGINDIR "/python")); + gst_python_load_directory (plugin, PLUGINDIR "/python"); + } else { + gchar **list; + gint i; + + /* 2.b. Scan GST_PLUGIN_SYSTEM_PATH */ + GST_DEBUG ("GST_PLUGIN_SYSTEM_PATH set to %s", plugin_path, plugin_path); + list = g_strsplit (plugin_path, G_SEARCHPATH_SEPARATOR_S, 0); + for (i = 0; list[i]; i++) { + gchar *sysdir; + + sysdir = g_build_filename (list[i], "python", NULL); + + PyList_Insert (sys_path, 0, PyString_FromString (sysdir)); + gst_python_load_directory (plugin, sysdir); + g_free (sysdir); + } + g_strfreev (list); + } + + + return ret; +} + +/** + *pygst_require: + * @version: the version required + * + * Checks if the pygst/gst python modules are available. + * Requests the specified version. + * + * Returns: the gst-python module, or NULL if there was an error. + */ + +static PyObject * +pygst_require (gchar * version) +{ + PyObject *pygst, *gst; + PyObject *require; + PyObject *modules; + gboolean doupdate = TRUE; + const gchar *regupd; + + modules = PySys_GetObject ("modules"); + /* Try to see if 'gst' is already imported */ + if (!(gst = PyMapping_GetItemString (modules, "gst"))) { + PyErr_Clear (); + + /* if not, see if 'pygst' was already imported. If so, we assume that + * 'pygst.require' has already been called. */ + if (!(pygst = PyMapping_GetItemString (modules, "pygst"))) { + PyErr_Clear (); + + if (!(pygst = PyImport_ImportModule ("pygst"))) { + GST_ERROR ("the pygst module is not available!"); + goto error; + } + + if (!(PyObject_CallMethod (pygst, "require", "s", version))) { + GST_ERROR ("the required version, %s, of gst-python is not available!", + version); + Py_DECREF (pygst); + goto error; + } + } + + /* We don't want the registry to be loaded when we import gst */ + if ((regupd = g_getenv ("GST_REGISTRY_UPDATE")) + && (!strcmp (regupd, "no"))) + doupdate = FALSE; + g_setenv ("GST_REGISTRY_UPDATE", "no", TRUE); + + if (!(gst = PyImport_ImportModule ("gst"))) { + GST_ERROR ("couldn't import the gst module"); + Py_DECREF (pygst); + if (doupdate) + g_unsetenv ("GST_REGISTRY_UPDATE"); + goto error; + } + } + + if (doupdate) + g_unsetenv ("GST_REGISTRY_UPDATE"); + +#define IMPORT(x, y) \ + _PyGst##x##_Type = (void *)PyObject_GetAttrString(gst, y); \ + if (_PyGst##x##_Type == NULL) { \ + PyErr_Print(); \ + return NULL; \ + } + IMPORT (Element, "Element"); + + return gst; + +error: + { + PyErr_Print (); + PyErr_Clear (); + return NULL; + } +} + +static gboolean +plugin_init (GstPlugin * plugin) +{ + PyGILState_STATE state; + PyObject *gst, *dict, *pyplugin; + gboolean we_initialized = FALSE; + GModule *libpython; + gpointer has_python = NULL; + + GST_DEBUG_CATEGORY_INIT (pyplugindebug, "pyplugin", 0, + "Python plugin loader"); + + gst_plugin_add_dependency_simple (plugin, + "HOME/.gstreamer-0.10/plugins/python:GST_PLUGIN_SYSTEM_PATH/python:GST_PLUGIN_PATH/python", + PLUGINDIR "/python:HOME/.gstreamer-0.10/plugins/python:" + "GST_PLUGIN_SYSTEM_PATH/python:GST_PLUGIN_PATH/python", NULL, + GST_PLUGIN_DEPENDENCY_FLAG_NONE); + + GST_LOG ("Checking to see if libpython is already loaded"); + g_module_symbol (g_module_open (NULL, G_MODULE_BIND_LOCAL), "_Py_NoneStruct", + &has_python); + if (has_python) { + GST_LOG ("libpython is already loaded"); + } else { + GST_LOG ("loading libpython"); + libpython = + g_module_open (PY_LIB_LOC "/libpython" PYTHON_VERSION "." + PY_LIB_SUFFIX, 0); + if (!libpython) { + GST_WARNING ("Couldn't g_module_open libpython. Reason: %s", + g_module_error ()); + return FALSE; + } + } + + if (!Py_IsInitialized ()) { + GST_LOG ("python wasn't initialized"); + /* set the correct plugin for registering stuff */ + Py_Initialize (); + we_initialized = TRUE; + } else { + GST_LOG ("python was already initialized"); + state = PyGILState_Ensure (); + } + + GST_LOG ("initializing pygobject"); + if (!np_init_pygobject ()) { + GST_WARNING ("pygobject initialization failed"); + return FALSE; + } + + if (!(gst = pygst_require ("0.10"))) { + return FALSE; + } + + if (we_initialized) { + pyplugin = pygobject_new (G_OBJECT (plugin)); + if (!pyplugin || PyModule_AddObject (gst, "__plugin__", pyplugin) != 0) { + g_warning ("Couldn't set plugin"); + Py_DECREF (pyplugin); + } + } + + dict = PyModule_GetDict (gst); + if (!dict) { + GST_ERROR ("no dict?!"); + return FALSE; + } + + gst_python_plugin_load (plugin); + + if (we_initialized) { + /* We need to release the GIL since we're going back to C land */ + PyEval_SaveThread (); + } else + PyGILState_Release (state); + return TRUE; +} + +GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, + GST_VERSION_MINOR, + "python", + "loader for plugins written in python", + plugin_init, VERSION, "LGPL", PACKAGE_NAME, GST_ORIGIN) diff --git a/py-compile b/py-compile new file mode 100755 index 0000000..3f9d05b --- /dev/null +++ b/py-compile @@ -0,0 +1,146 @@ +#!/bin/sh +# py-compile - Compile a Python program + +scriptversion=2009-04-28.21; # UTC + +# Copyright (C) 2000, 2001, 2003, 2004, 2005, 2008, 2009 Free Software +# Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program 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 General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +if [ -z "$PYTHON" ]; then + PYTHON=python +fi + +basedir= +destdir= +files= +while test $# -ne 0; do + case "$1" in + --basedir) + basedir=$2 + if test -z "$basedir"; then + echo "$0: Missing argument to --basedir." 1>&2 + exit 1 + fi + shift + ;; + --destdir) + destdir=$2 + if test -z "$destdir"; then + echo "$0: Missing argument to --destdir." 1>&2 + exit 1 + fi + shift + ;; + -h|--h*) + cat <<\EOF +Usage: py-compile [--help] [--version] [--basedir DIR] [--destdir DIR] FILES..." + +Byte compile some python scripts FILES. Use --destdir to specify any +leading directory path to the FILES that you don't want to include in the +byte compiled file. Specify --basedir for any additional path information you +do want to be shown in the byte compiled file. + +Example: + py-compile --destdir /tmp/pkg-root --basedir /usr/share/test test.py test2.py + +Report bugs to . +EOF + exit $? + ;; + -v|--v*) + echo "py-compile $scriptversion" + exit $? + ;; + *) + files="$files $1" + ;; + esac + shift +done + +if test -z "$files"; then + echo "$0: No files given. Try \`$0 --help' for more information." 1>&2 + exit 1 +fi + +# if basedir was given, then it should be prepended to filenames before +# byte compilation. +if [ -z "$basedir" ]; then + pathtrans="path = file" +else + pathtrans="path = os.path.join('$basedir', file)" +fi + +# if destdir was given, then it needs to be prepended to the filename to +# byte compile but not go into the compiled file. +if [ -z "$destdir" ]; then + filetrans="filepath = path" +else + filetrans="filepath = os.path.normpath('$destdir' + os.sep + path)" +fi + +$PYTHON -c " +import sys, os, py_compile + +files = '''$files''' + +sys.stdout.write('Byte-compiling python modules...\n') +for file in files.split(): + $pathtrans + $filetrans + if not os.path.exists(filepath) or not (len(filepath) >= 3 + and filepath[-3:] == '.py'): + continue + sys.stdout.write(file) + sys.stdout.flush() + py_compile.compile(filepath, filepath + 'c', path) +sys.stdout.write('\n')" || exit $? + +# this will fail for python < 1.5, but that doesn't matter ... +$PYTHON -O -c " +import sys, os, py_compile + +files = '''$files''' +sys.stdout.write('Byte-compiling python modules (optimized versions) ...\n') +for file in files.split(): + $pathtrans + $filetrans + if not os.path.exists(filepath) or not (len(filepath) >= 3 + and filepath[-3:] == '.py'): + continue + sys.stdout.write(file) + sys.stdout.flush() + py_compile.compile(filepath, filepath + 'o', path) +sys.stdout.write('\n')" 2>/dev/null || : + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/pygst.py.in b/pygst.py.in new file mode 100644 index 0000000..a55a552 --- /dev/null +++ b/pygst.py.in @@ -0,0 +1,63 @@ +# -*- Mode: Python; py-indent-offset: 4 -*- +# pygst - Python bindings for the GStreamer multimedia framework. +# Copyright (C) 1998-2002 James Henstridge +# (C) 2005 Edward Hervey +# +# pygst.py: pygst version selection code. +# +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library 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 +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# +# This allows parallel installation of gst-python +# +# In order to have backward compatibility + +import sys + +__all__ = ['require'] + +_pygst_dir = '@PYGSTDIR@' + +_pygst_version = '@GST_MAJORMINOR@' + +_pygst_required_version = None + +class RequiredVersionError(ValueError, AssertionError): + # AssertionError is subclassed for compatibility reasons. + pass + + +def require(version): + global _pygst_required_version + + if _pygst_required_version != None: + if _pygst_required_version != version: + raise RequiredVersionError, "a different version of gst was already required" + else: + return + + if sys.modules.has_key('gst'): + raise RequiredVersionError, "pygst.require() must be called before importing gst" + + if version != _pygst_version: + raise RequiredVersionError, "Only version '%s' is available" % _pygst_version + + # move the pygst path to the front + while _pygst_dir in sys.path: + sys.path.remove(_pygst_dir) + sys.path.insert(0, _pygst_dir) + + _pygst_required_version = version diff --git a/testsuite/Makefile.am b/testsuite/Makefile.am new file mode 100644 index 0000000..0ab6377 --- /dev/null +++ b/testsuite/Makefile.am @@ -0,0 +1,140 @@ +INCLUDES = \ + $(PYTHON_INCLUDES) \ + $(PYGOBJET_CFLAGS) \ + $(PYGST_CFLAGS) \ + $(GST_CFLAGS) + +noinst_LTLIBRARIES = testhelper.la +linked_LIBS = testhelper.la + +testhelper_la_LDFLAGS = -module -avoid-version +testhelper_la_LIBADD = $(GLIB_LIBS) +testhelper_la_CFLAGS = $(PYGOBJECT_CFLAGS) +testhelper_la_SOURCES = \ + testhelpermodule.c \ + test-object.c + +# This is a hack to make sure a shared library is built +testhelper.la: $(testhelper_la_OBJECTS) $(testhelper_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) -rpath $(pkgpyexecdir) $(testhelper_la_LDFLAGS) $(testhelper_la_OBJECTS) $(testhelper_la_LIBADD) $(LIBS) + +tests = \ + test_adapter.py \ + test_audio.py \ + test_bin.py \ + test_buffer.py \ + test_caps.py \ + test_element.py \ + test_event.py \ + test_ghostpad.py \ + test_interface.py \ + test_message.py \ + test_pad.py \ + test_pipeline.py \ + test_registry.py \ + test_struct.py \ + test_segment.py \ + test_taglist.py \ + test_xml.py \ + test_pbutils.py \ + test_gst.py + +check-local: testhelper.la + @PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) $(PYTHON) $(srcdir)/cleanup.py + @PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) $(PYTHON) $(srcdir)/runtests.py + @rm -fr *.pyc + +check-verbose: testhelper.la + @VERBOSE=yes PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) $(PYTHON) $(srcdir)/cleanup.py + @VERBOSE=yes PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) $(PYTHON) $(srcdir)/runtests.py + @rm -fr *.pyc + +EXTRA_DIST = $(tests) common.py cleanup.py runtests.py test-object.h python.supp gstpython.supp + +if HAVE_VALGRIND +check-valgrind: + $(PYTHON) cleanup.py + make valgrind +else +check-valgrind: + @true +endif + +GSTSUPP = $(top_srcdir)/common/gst.supp +PYTHONSUPP = $(top_srcdir)/testsuite/python.supp +GSTPYTHONSUPP = $(top_srcdir)/testsuite/gstpython.supp +TESTS_ENVIRONMENT = PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) LC_ALL=C + +# gdb any given test_x.py by running make test_x.py.gdb +%.gdb: % + $(TESTS_ENVIRONMENT) \ + gdb --args \ + $(PYTHON) \ + $* + +# valgrind any given test_x.py by running make test_x.py.valgrind +%.valgrind: % + $(TESTS_ENVIRONMENT) \ + G_DEBUG=gc-friendly G_SLICE=always-malloc \ + $(VALGRIND_PATH) -q \ + --suppressions=$(GSTSUPP) \ + --suppressions=$(PYTHONSUPP) \ + --suppressions=$(GSTPYTHONSUPP) \ + --tool=memcheck --leak-check=full --trace-children=yes \ + --leak-resolution=high --num-callers=50 \ + $(PYTHON) \ + $* 2>&1 | tee valgrind.log + @if grep "tely lost" valgrind.log; then \ + rm valgrind.log; \ + exit 1; \ + fi + @rm valgrind.log + +# valgrind any given test_x.py by running make test_x.py.valgrind +%.gen-suppressions: % + $(TESTS_ENVIRONMENT) \ + G_DEBUG=gc-friendly G_SLICE=always-malloc \ + $(VALGRIND_PATH) -q \ + --suppressions=$(GSTSUPP) \ + --suppressions=$(PYTHONSUPP) \ + --suppressions=$(GSTPYTHONSUPP) \ + --tool=memcheck --leak-check=full --trace-children=yes \ + --leak-resolution=high --num-callers=50 \ + --gen-suppressions=all \ + $(PYTHON) \ + $* 2>&1 | tee valgrind.log + @if grep "tely lost" valgrind.log; then \ + rm valgrind.log; \ + exit 1; \ + fi + @rm valgrind.log + +%.check: % + @PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) $(PYTHON) $(srcdir)/cleanup.py + @PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) $(PYTHON) $(srcdir)/runtests.py $* + @rm -fr *.pyc + +%.forever: % + @PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) $(PYTHON) $(srcdir)/cleanup.py + @while true; do \ + PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) \ + $(PYTHON) $(srcdir)/runtests.py $* || break; done + @rm -fr *.pyc + +# valgrind all tests +valgrind: $(tests) + @echo "Valgrinding tests ..." + @failed=0; \ + for t in $(filter-out $(VALGRIND_TESTS_DISABLE),$(tests)); do \ + make $$t.valgrind; \ + if test "$$?" -ne 0; then \ + echo "Valgrind error for test $$t"; \ + failed=`expr $$failed + 1`; \ + whicht="$$whicht $$t"; \ + fi; \ + done; \ + if test "$$failed" -ne 0; then \ + echo "$$failed tests had leaks under valgrind:"; \ + echo "$$whicht"; \ + false; \ + fi diff --git a/testsuite/Makefile.in b/testsuite/Makefile.in new file mode 100644 index 0000000..87c24af --- /dev/null +++ b/testsuite/Makefile.in @@ -0,0 +1,745 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = testsuite +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ + $(top_srcdir)/common/m4/as-compiler-flag.m4 \ + $(top_srcdir)/common/m4/as-version.m4 \ + $(top_srcdir)/common/m4/gst-args.m4 \ + $(top_srcdir)/common/m4/gst-error.m4 \ + $(top_srcdir)/common/m4/gst-feature.m4 \ + $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ + $(top_srcdir)/common/m4/gst-plugindir.m4 \ + $(top_srcdir)/common/m4/gst-valgrind.m4 \ + $(top_srcdir)/common/m4/gst.m4 $(top_srcdir)/common/m4/pkg.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +testhelper_la_DEPENDENCIES = +am_testhelper_la_OBJECTS = testhelper_la-testhelpermodule.lo \ + testhelper_la-test-object.lo +testhelper_la_OBJECTS = $(am_testhelper_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +testhelper_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(testhelper_la_CFLAGS) \ + $(CFLAGS) $(testhelper_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(testhelper_la_SOURCES) +DIST_SOURCES = $(testhelper_la_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ERROR_CFLAGS = @ERROR_CFLAGS@ +EXEEXT = @EXEEXT@ +FFLAGS = @FFLAGS@ +FGREP = @FGREP@ +GCOV = @GCOV@ +GCOV_CFLAGS = @GCOV_CFLAGS@ +GCOV_LIBS = @GCOV_LIBS@ +GLIB_REQ = @GLIB_REQ@ +GREP = @GREP@ +GSTPB_REQ = @GSTPB_REQ@ +GST_BASE_CFLAGS = @GST_BASE_CFLAGS@ +GST_BASE_LIBS = @GST_BASE_LIBS@ +GST_CFLAGS = @GST_CFLAGS@ +GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@ +GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@ +GST_DISABLE_ALLOC_TRACE = @GST_DISABLE_ALLOC_TRACE@ +GST_DISABLE_GST_DEBUG = @GST_DISABLE_GST_DEBUG@ +GST_DISABLE_LOADSAVE = @GST_DISABLE_LOADSAVE@ +GST_DISABLE_PARSE = @GST_DISABLE_PARSE@ +GST_DISABLE_PLUGIN = @GST_DISABLE_PLUGIN@ +GST_DISABLE_REGISTRY = @GST_DISABLE_REGISTRY@ +GST_DISABLE_TRACE = @GST_DISABLE_TRACE@ +GST_DISABLE_XML = @GST_DISABLE_XML@ +GST_DP_CFLAGS = @GST_DP_CFLAGS@ +GST_DP_LIBS = @GST_DP_LIBS@ +GST_LIBS = @GST_LIBS@ +GST_MAJORMINOR = @GST_MAJORMINOR@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ +GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ +GST_OPTION_LIBS = @GST_OPTION_LIBS@ +GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@ +GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@ +GST_REQ = @GST_REQ@ +GTK_REQ = @GTK_REQ@ +IGNORE_GST_0_10_21 = @IGNORE_GST_0_10_21@ +IGNORE_GST_0_10_22 = @IGNORE_GST_0_10_22@ +IGNORE_GST_0_10_23 = @IGNORE_GST_0_10_23@ +IGNORE_GST_0_10_24 = @IGNORE_GST_0_10_24@ +IGNORE_GST_0_10_25 = @IGNORE_GST_0_10_25@ +IGNORE_GST_0_10_26 = @IGNORE_GST_0_10_26@ +IGNORE_GST_0_10_29 = @IGNORE_GST_0_10_29@ +IGNORE_GST_0_10_30 = @IGNORE_GST_0_10_30@ +IGNORE_GST_0_10_31 = @IGNORE_GST_0_10_31@ +IGNORE_GST_0_10_32 = @IGNORE_GST_0_10_32@ +IGNORE_GST_LOADSAVE = @IGNORE_GST_LOADSAVE@ +IGNORE_GST_PB_0_10_23 = @IGNORE_GST_PB_0_10_23@ +IGNORE_GST_PB_0_10_25 = @IGNORE_GST_PB_0_10_25@ +IGNORE_GST_PB_0_10_26 = @IGNORE_GST_PB_0_10_26@ +IGNORE_GST_PB_0_10_29 = @IGNORE_GST_PB_0_10_29@ +IGNORE_GST_PB_0_10_30 = @IGNORE_GST_PB_0_10_30@ +IGNORE_GST_PB_0_10_31 = @IGNORE_GST_PB_0_10_31@ +IGNORE_GST_PB_0_10_32 = @IGNORE_GST_PB_0_10_32@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@ +PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@ +PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@ +PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@ +PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PLUGINDIR = @PLUGINDIR@ +PYEXECDIR = @PYEXECDIR@ +PYGOBJECT_2_12_CFLAGS = @PYGOBJECT_2_12_CFLAGS@ +PYGOBJECT_2_12_LIBS = @PYGOBJECT_2_12_LIBS@ +PYGOBJECT_2_16_CFLAGS = @PYGOBJECT_2_16_CFLAGS@ +PYGOBJECT_2_16_LIBS = @PYGOBJECT_2_16_LIBS@ +PYGOBJECT_CFLAGS = @PYGOBJECT_CFLAGS@ +PYGOBJECT_LIBS = @PYGOBJECT_LIBS@ +PYGOBJECT_REQ = @PYGOBJECT_REQ@ +PYGST_CFLAGS = @PYGST_CFLAGS@ +PYGTK_CFLAGS = @PYGTK_CFLAGS@ +PYGTK_LIBS = @PYGTK_LIBS@ +PYGTK_REQ = @PYGTK_REQ@ +PYTHON = @PYTHON@ +PYTHONDIR = @PYTHONDIR@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_LIB_LOC = @PYTHON_LIB_LOC@ +PYTHON_LIB_SUFFIX = @PYTHON_LIB_SUFFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VALGRIND_PATH = @VALGRIND_PATH@ +VERSION = @VERSION@ +WARNING_CFLAGS = @WARNING_CFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +plugindir = @plugindir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +INCLUDES = \ + $(PYTHON_INCLUDES) \ + $(PYGOBJET_CFLAGS) \ + $(PYGST_CFLAGS) \ + $(GST_CFLAGS) + +noinst_LTLIBRARIES = testhelper.la +linked_LIBS = testhelper.la +testhelper_la_LDFLAGS = -module -avoid-version +testhelper_la_LIBADD = $(GLIB_LIBS) +testhelper_la_CFLAGS = $(PYGOBJECT_CFLAGS) +testhelper_la_SOURCES = \ + testhelpermodule.c \ + test-object.c + +tests = \ + test_adapter.py \ + test_audio.py \ + test_bin.py \ + test_buffer.py \ + test_caps.py \ + test_element.py \ + test_event.py \ + test_ghostpad.py \ + test_interface.py \ + test_message.py \ + test_pad.py \ + test_pipeline.py \ + test_registry.py \ + test_struct.py \ + test_segment.py \ + test_taglist.py \ + test_xml.py \ + test_pbutils.py \ + test_gst.py + +EXTRA_DIST = $(tests) common.py cleanup.py runtests.py test-object.h python.supp gstpython.supp +GSTSUPP = $(top_srcdir)/common/gst.supp +PYTHONSUPP = $(top_srcdir)/testsuite/python.supp +GSTPYTHONSUPP = $(top_srcdir)/testsuite/gstpython.supp +TESTS_ENVIRONMENT = PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) LC_ALL=C +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu testsuite/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu testsuite/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testhelper_la-test-object.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testhelper_la-testhelpermodule.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +testhelper_la-testhelpermodule.lo: testhelpermodule.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testhelper_la_CFLAGS) $(CFLAGS) -MT testhelper_la-testhelpermodule.lo -MD -MP -MF $(DEPDIR)/testhelper_la-testhelpermodule.Tpo -c -o testhelper_la-testhelpermodule.lo `test -f 'testhelpermodule.c' || echo '$(srcdir)/'`testhelpermodule.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/testhelper_la-testhelpermodule.Tpo $(DEPDIR)/testhelper_la-testhelpermodule.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='testhelpermodule.c' object='testhelper_la-testhelpermodule.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testhelper_la_CFLAGS) $(CFLAGS) -c -o testhelper_la-testhelpermodule.lo `test -f 'testhelpermodule.c' || echo '$(srcdir)/'`testhelpermodule.c + +testhelper_la-test-object.lo: test-object.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testhelper_la_CFLAGS) $(CFLAGS) -MT testhelper_la-test-object.lo -MD -MP -MF $(DEPDIR)/testhelper_la-test-object.Tpo -c -o testhelper_la-test-object.lo `test -f 'test-object.c' || echo '$(srcdir)/'`test-object.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/testhelper_la-test-object.Tpo $(DEPDIR)/testhelper_la-test-object.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='test-object.c' object='testhelper_la-test-object.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testhelper_la_CFLAGS) $(CFLAGS) -c -o testhelper_la-test-object.lo `test -f 'test-object.c' || echo '$(srcdir)/'`test-object.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-local +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am check-local clean \ + clean-generic clean-libtool clean-noinstLTLIBRARIES ctags \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am + + +# This is a hack to make sure a shared library is built +testhelper.la: $(testhelper_la_OBJECTS) $(testhelper_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) -rpath $(pkgpyexecdir) $(testhelper_la_LDFLAGS) $(testhelper_la_OBJECTS) $(testhelper_la_LIBADD) $(LIBS) + +check-local: testhelper.la + @PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) $(PYTHON) $(srcdir)/cleanup.py + @PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) $(PYTHON) $(srcdir)/runtests.py + @rm -fr *.pyc + +check-verbose: testhelper.la + @VERBOSE=yes PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) $(PYTHON) $(srcdir)/cleanup.py + @VERBOSE=yes PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) $(PYTHON) $(srcdir)/runtests.py + @rm -fr *.pyc + +@HAVE_VALGRIND_TRUE@check-valgrind: +@HAVE_VALGRIND_TRUE@ $(PYTHON) cleanup.py +@HAVE_VALGRIND_TRUE@ make valgrind +@HAVE_VALGRIND_FALSE@check-valgrind: +@HAVE_VALGRIND_FALSE@ @true + +# gdb any given test_x.py by running make test_x.py.gdb +%.gdb: % + $(TESTS_ENVIRONMENT) \ + gdb --args \ + $(PYTHON) \ + $* + +# valgrind any given test_x.py by running make test_x.py.valgrind +%.valgrind: % + $(TESTS_ENVIRONMENT) \ + G_DEBUG=gc-friendly G_SLICE=always-malloc \ + $(VALGRIND_PATH) -q \ + --suppressions=$(GSTSUPP) \ + --suppressions=$(PYTHONSUPP) \ + --suppressions=$(GSTPYTHONSUPP) \ + --tool=memcheck --leak-check=full --trace-children=yes \ + --leak-resolution=high --num-callers=50 \ + $(PYTHON) \ + $* 2>&1 | tee valgrind.log + @if grep "tely lost" valgrind.log; then \ + rm valgrind.log; \ + exit 1; \ + fi + @rm valgrind.log + +# valgrind any given test_x.py by running make test_x.py.valgrind +%.gen-suppressions: % + $(TESTS_ENVIRONMENT) \ + G_DEBUG=gc-friendly G_SLICE=always-malloc \ + $(VALGRIND_PATH) -q \ + --suppressions=$(GSTSUPP) \ + --suppressions=$(PYTHONSUPP) \ + --suppressions=$(GSTPYTHONSUPP) \ + --tool=memcheck --leak-check=full --trace-children=yes \ + --leak-resolution=high --num-callers=50 \ + --gen-suppressions=all \ + $(PYTHON) \ + $* 2>&1 | tee valgrind.log + @if grep "tely lost" valgrind.log; then \ + rm valgrind.log; \ + exit 1; \ + fi + @rm valgrind.log + +%.check: % + @PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) $(PYTHON) $(srcdir)/cleanup.py + @PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) $(PYTHON) $(srcdir)/runtests.py $* + @rm -fr *.pyc + +%.forever: % + @PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) $(PYTHON) $(srcdir)/cleanup.py + @while true; do \ + PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) \ + $(PYTHON) $(srcdir)/runtests.py $* || break; done + @rm -fr *.pyc + +# valgrind all tests +valgrind: $(tests) + @echo "Valgrinding tests ..." + @failed=0; \ + for t in $(filter-out $(VALGRIND_TESTS_DISABLE),$(tests)); do \ + make $$t.valgrind; \ + if test "$$?" -ne 0; then \ + echo "Valgrind error for test $$t"; \ + failed=`expr $$failed + 1`; \ + whicht="$$whicht $$t"; \ + fi; \ + done; \ + if test "$$failed" -ne 0; then \ + echo "$$failed tests had leaks under valgrind:"; \ + echo "$$whicht"; \ + false; \ + fi + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/testsuite/cleanup.py b/testsuite/cleanup.py new file mode 100644 index 0000000..6673d56 --- /dev/null +++ b/testsuite/cleanup.py @@ -0,0 +1,4 @@ +import pygst +pygst.require('0.10') +import gst + diff --git a/testsuite/common.py b/testsuite/common.py new file mode 100644 index 0000000..eca4877 --- /dev/null +++ b/testsuite/common.py @@ -0,0 +1,204 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2002 David I. Lehn +# Copyright (C) 2004 Johan Dahlin +# Copyright (C) 2005 Edward Hervey +# +# 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.1 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +try: + from dl import RTLD_LAZY, RTLD_GLOBAL +except ImportError: + # dl doesn't seem to be available on 64bit systems + try: + from DLFCN import RTLD_LAZY, RTLD_GLOBAL + except ImportError: + pass +import os +import sys +import gc +import unittest + +import pygtk +pygtk.require('2.0') + +import gobject +try: + gobject.threads_init() +except: + print "WARNING: gobject doesn't have threads_init, no threadsafety" + +# Detect the version of pygobject +# In pygobject >= 2.13.0 the refcounting of objects has changed. +pgmaj,pgmin,pgmac = gobject.pygobject_version +if pgmaj >= 2 and pgmin >= 13: + pygobject_2_13 = True +else: + pygobject_2_13 = False + +# Don't insert before . +# sys.path.insert(1, os.path.join('..')) + +# Load GST and make sure we load it from the current build +sys.setdlopenflags(RTLD_LAZY | RTLD_GLOBAL) + +topbuilddir = os.path.abspath(os.path.join('..')) +topsrcdir = os.path.abspath(os.path.join('..')) +if topsrcdir.endswith('_build'): + topsrcdir = os.path.dirname(topsrcdir) + +# gst's __init__.py is in topbuilddir/gst +path = os.path.abspath(os.path.join(topbuilddir, 'gst')) +import gst +file = gst.__file__ +assert file.startswith(path), 'bad gst path: %s' % file + +# gst's interfaces is in topbuilddir/gst +path = os.path.abspath(os.path.join(topbuilddir, 'gst')) +try: + import gst.interfaces +except ImportError: + # hack: we import it from our builddir/gst/.libs instead; ugly + import interfaces + gst.interfaces = interfaces +file = gst.interfaces.__file__ +assert file.startswith(path), 'bad gst.interfaces path: %s' % file + +# gst's tags is in topbuilddir/gst +path = os.path.abspath(os.path.join(topbuilddir, 'gst')) +try: + import gst.tag +except ImportError: + # hack: we import it from our builddir/gst/.libs instead; ugly + import tag + gst.tag = tag +file = gst.tag.__file__ +assert file.startswith(path), 'bad gst.tag path: %s' % file + +# gst's pbutils is in topbuilddir/gst +path = os.path.abspath(os.path.join(topbuilddir, 'gst')) +try: + import gst.pbutils +except ImportError: + # hack: we import it from our builddir/gst/.libs instead; ugly + import pbutils + gst.pbutils = pbutils +file = gst.pbutils.__file__ +assert file.startswith(path), 'bad gst.pbutils path: %s' % file + +# testhelper needs gstlibtoolimporter +import gstlibtoolimporter +gstlibtoolimporter.install() +import testhelper +gstlibtoolimporter.uninstall() + +_stderr = None + +def disable_stderr(): + global _stderr + _stderr = file('/tmp/stderr', 'w+') + sys.stderr = os.fdopen(os.dup(2), 'w') + os.close(2) + os.dup(_stderr.fileno()) + +def enable_stderr(): + global _stderr + + os.close(2) + os.dup(sys.stderr.fileno()) + _stderr.seek(0, 0) + data = _stderr.read() + _stderr.close() + os.remove('/tmp/stderr') + return data + +def run_silent(function, *args, **kwargs): + disable_stderr() + + try: + function(*args, **kwargs) + except Exception, exc: + enable_stderr() + raise exc + + output = enable_stderr() + + return output + +class TestCase(unittest.TestCase): + + _types = [gst.Object, gst.MiniObject] + + def gccollect(self): + # run the garbage collector + ret = 0 + gst.debug('garbage collecting') + while True: + c = gc.collect() + ret += c + if c == 0: break + gst.debug('done garbage collecting, %d objects' % ret) + return ret + + def gctrack(self): + # store all gst objects in the gc in a tracking dict + # call before doing any allocation in your test, from setUp + gst.debug('tracking gc GstObjects for types %r' % self._types) + self.gccollect() + self._tracked = {} + for c in self._types: + self._tracked[c] = [o for o in gc.get_objects() if isinstance(o, c)] + + def gcverify(self): + # verify no new gst objects got added to the gc + # call after doing all cleanup in your test, from tearDown + gst.debug('verifying gc GstObjects for types %r' % self._types) + new = [] + for c in self._types: + objs = [o for o in gc.get_objects() if isinstance(o, c)] + new.extend([o for o in objs if o not in self._tracked[c]]) + + self.failIf(new, new) + #self.failIf(new, ["%r:%d" % (type(o), id(o)) for o in new]) + del self._tracked + + def setUp(self): + """ + Override me by chaining up to me at the start of your setUp. + """ + # Using private variables is BAD ! this variable changed name in + # python 2.5 + try: + methodName = self.__testMethodName + except: + methodName = self._testMethodName + gst.debug('%s.%s' % (self.__class__.__name__, methodName)) + self.gctrack() + + def tearDown(self): + """ + Override me by chaining up to me at the end of your tearDown. + """ + # Using private variables is BAD ! this variable changed name in + # python 2.5 + try: + methodName = self.__testMethodName + except: + methodName = self._testMethodName + gst.debug('%s.%s' % (self.__class__.__name__, methodName)) + self.gccollect() + self.gcverify() diff --git a/testsuite/gstpython.supp b/testsuite/gstpython.supp new file mode 100644 index 0000000..d3b9abc --- /dev/null +++ b/testsuite/gstpython.supp @@ -0,0 +1,241 @@ +{ + pthread leak + Memcheck:Leak + fun:calloc + fun:allocate_dtv + fun:_dl_allocate_tls* +} + +{ + pthread leak 2 + Memcheck:Leak + fun:memalign + fun:_dl_allocate_tls* +} + +{ + popt leak + Memcheck:Leak + fun:malloc + fun:nss_parse_service_list + fun:__nss_database_lookup + obj:* + obj:* + fun:getpwuid_r@@GLIBC_2.2.5 + fun:g_get_any_init_do + fun:g_get_home_dir + fun:init_post + fun:init_popt_callback +} + +{ + pygobject init leak + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:type_node_* + fun:type_node_* + fun:* + fun:* + fun:g_type_init* + fun:initgobject +} + +{ + borked pthread creation + Memcheck:Param + write(buf) + fun:__pthread_initialize_manager + fun:pthread_create@@GLIBC_2.2.5 + fun:g_thread_create* + fun:g_thread_create* +} + +{ + borked pthread creation 2 + Memcheck:Param + write(buf) + fun:pthread_create@@GLIBC_2.2.5 + fun:* + fun:* + fun:* + fun:* + fun:gst_task_start +} + +{ + Syscall param clone(child_tidptr) contains uninitialised byte(s) + Memcheck:Param + clone(child_tidptr) + fun:clone +} + +{ + memory loss when creating thread + Memcheck:Leak + fun:malloc + fun:__pthread_initialize_manager + fun:pthread_create* +} + +# pyg_enable_threads memleak + +{ + memleak in pyg_enable_threads + Memcheck:Leak + fun:malloc + fun:* + fun:* + fun:* + fun:* + fun:* + fun:pyg_enable_threads +} + + +{ + memleak in pyg_enable_threads 2 + Memcheck:Leak + fun:malloc + fun:* + fun:* + fun:* + fun:* + fun:pyg_enable_threads +} + +{ + memleak in pyg_enable_threads 3 + Memcheck:Leak + fun:malloc + fun:* + fun:* + fun:* + fun:pyg_enable_threads +} + +#pygobject leaks + +{ + PyType_Ready leak + Memcheck:Leak + fun:malloc + fun:PyObject_Malloc + fun:_PyObject_GC_Malloc + fun:PyType_GenericAlloc + fun:* + fun:* + fun:PyType_Ready +} + +#gst debug category new leak +{ + gst debug category new leak + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_strdup + fun:_gst_debug_category_new +} + +# memleak in gst_element_state_get_name that we can't get rid of +{ + gst_element_state_get_name + Memcheck:Leak + fun:malloc + fun:* + fun:g_vasprintf + fun:g_strdup* + fun:g_strdup* + fun:_wrap_gst_element_state_get_name +} + +#memleak in pygobject_new_with_interfaces +# weird, cos it seems to free the return value of g_type_interfaces +{ + _gst_element_factory_make + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_type_interfaces +} + +#memleak in static_pad_template +{ + gst_static_pad_template_get + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:g_type_create_instance + fun:g_object_constructor + fun:gst_object_constructor + fun:* + fun:* + fun:* + fun:gst_static_pad_template_get +} + +#leak in libxml +{ + xml_parse_memory leak + Memcheck:Leak + fun:malloc + fun:* + fun:xml* +} + +# FIXME : This is an awful leak that has do to with the gst_pad_set_*_function wrappers +{ + leak in gst_pad_set_*_function wrappers + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:pad_private +} + +# python leak in runtime compiler +{ + python leak in runtime compiler + Memcheck:Leak + fun:malloc + fun:_PyObject_GC_Malloc + fun:_PyObject_GC_New* + fun:PyDict_New + fun:PySymtableEntry_New + fun:symtable_* + fun:symtable_* + fun:jcompile +} + +#FIXME : These leaks are in core. See bug #344761 +{ + leak in init_gst, when creating the argv to give to gst_init_check() + Memcheck:Leak + fun:* + fun:g_malloc + fun:init_gst +} + +{ + The GOption context is leaking in gst_init_check + Memcheck:Leak + fun:* + fun:g_malloc0 + fun:g_option_context_new + fun:gst_init_check + fun:init_gst +} + +{ + The GDir is leaked. + Memcheck:Leak + fun:* + fun:g_malloc + fun:g_dir_open + fun:gst_registry_scan_path_level + fun:gst_registry_scan_path + fun:init_post + fun:g_option_context_parse + fun:gst_init_check + fun:init_gst +} diff --git a/testsuite/python.supp b/testsuite/python.supp new file mode 100644 index 0000000..87fd226 --- /dev/null +++ b/testsuite/python.supp @@ -0,0 +1,520 @@ +# +# This is a valgrind suppression file that should be used when using valgrind. +# +# Here's an example of running valgrind: +# +# cd python/dist/src +# valgrind --tool=memcheck --suppressions=Misc/valgrind-python.supp \ +# ./python -E -tt ./Lib/test/regrtest.py -u bsddb,network +# +# You must edit Objects/obmalloc.c and uncomment Py_USING_MEMORY_DEBUGGER +# to use the preferred suppressions with Py_ADDRESS_IN_RANGE. +# +# If you do not want to recompile Python, you can uncomment +# suppressions for PyObject_Free and PyObject_Realloc. +# +# See Misc/README.valgrind for more information. + +# all tool names: Addrcheck,Memcheck,cachegrind,helgrind,massif +{ + ADDRESS_IN_RANGE/Invalid read of size 4 + Memcheck:Addr4 + fun:Py_ADDRESS_IN_RANGE +} + +{ + ADDRESS_IN_RANGE/Invalid read of size 4 + Memcheck:Value4 + fun:Py_ADDRESS_IN_RANGE +} + +{ + ADDRESS_IN_RANGE/Invalid read of size 8 (x86_64) + Memcheck:Value8 + fun:Py_ADDRESS_IN_RANGE +} + +{ + ADDRESS_IN_RANGE/Conditional jump or move depends on uninitialised value + Memcheck:Cond + fun:Py_ADDRESS_IN_RANGE +} + +{ + ADDRESS_IN_RANGE/Invalid read of size 4 + Memcheck:Addr4 + fun:PyObject_Free +} + +{ + ADDRESS_IN_RANGE/Invalid read of size 8 (x86_64) + Memcheck:Addr8 + fun:PyObject_Free +} + +{ + ADDRESS_IN_RANGE/Invalid read of size 4 + Memcheck:Value4 + fun:PyObject_Free +} + +{ + ADDRESS_IN_RANGE/Invalid read of size 8 (x86_64) + Memcheck:Value8 + fun:PyObject_Free +} + +{ + ADDRESS_IN_RANGE/Conditional jump or move depends on uninitialised value + Memcheck:Cond + fun:PyObject_Free +} + +{ + ADDRESS_IN_RANGE/Invalid read of size 4 + Memcheck:Addr4 + fun:PyObject_Realloc +} + +{ + ADDRESS_IN_RANGE/Invalid read of size 8 (x86_64) + Memcheck:Addr8 + fun:PyObject_Realloc +} + +{ + ADDRESS_IN_RANGE/Invalid read of size 4 + Memcheck:Value4 + fun:PyObject_Realloc +} + +{ + ADDRESS_IN_RANGE/Invalid read of size 8 (x86_64) + Memcheck:Value8 + fun:PyObject_Realloc +} + +{ + ADDRESS_IN_RANGE/Conditional jump or move depends on uninitialised value + Memcheck:Cond + fun:PyObject_Realloc +} + +### +### All the suppressions below are for errors that occur within libraries +### that Python uses. The problems to not appear to be related to Python's +### use of the libraries. +### +{ + GDBM problems, see test_gdbm + Memcheck:Param + write(buf) + fun:write + fun:gdbm_open + +} + +{ + Avoid problem in libc on gentoo + Memcheck:Cond + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so +} + +{ + Avoid problem in glibc on gentoo + Memcheck:Addr8 + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/libc-2.3.4.so + obj:/lib/ld-2.3.4.so + fun:_dl_open + obj:/lib/libdl-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/libdl-2.3.4.so + fun:dlopen +} + +{ + Avoid problem in glibc on gentoo + Memcheck:Addr8 + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/libc-2.3.4.so + obj:/lib/ld-2.3.4.so + fun:_dl_open + obj:/lib/libdl-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/libdl-2.3.4.so + fun:dlopen +} + +{ + Avoid problem in glibc on gentoo + Memcheck:Cond + obj:/lib/ld-2.3.4.so + obj:/lib/libc-2.3.4.so + obj:/lib/ld-2.3.4.so + fun:_dl_open + obj:/lib/libdl-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/libdl-2.3.4.so + fun:dlopen +} + +{ + Avoid problem in glibc on gentoo + Memcheck:Cond + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/libc-2.3.4.so + obj:/lib/ld-2.3.4.so + fun:_dl_open + obj:/lib/libdl-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/libdl-2.3.4.so + fun:dlopen +} + +{ + Avoid problems w/readline doing a putenv and leaking on exit + Memcheck:Leak + fun:malloc + fun:xmalloc + fun:sh_set_lines_and_columns + fun:_rl_get_screen_size + fun:_rl_init_terminal_io + obj:/lib/libreadline.so.4.3 + fun:rl_initialize + fun:setup_readline + fun:initreadline + fun:_PyImport_LoadDynamicModule + fun:load_module + fun:import_submodule + fun:load_next + fun:import_module_ex + fun:PyImport_ImportModuleEx +} + +{ + Mysterious leak that seems to deal w/pthreads + Memcheck:Leak + fun:calloc + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so + fun:_dl_allocate_tls + fun:__pthread_initialize_minimal +} + +{ + Mysterious leak that seems to deal w/pthreads + Memcheck:Leak + fun:memalign + obj:/lib/ld-2.3.4.so + fun:_dl_allocate_tls + fun:__pthread_initialize_minimal +} + +### +### These occur from somewhere within the SSL, when running +### test_socket_sll. They are too general to leave on by default. +### +###{ +### somewhere in SSL stuff +### Memcheck:Cond +### fun:memset +###} +###{ +### somewhere in SSL stuff +### Memcheck:Value4 +### fun:memset +###} +### +###{ +### somewhere in SSL stuff +### Memcheck:Cond +### fun:MD5_Update +###} +### +###{ +### somewhere in SSL stuff +### Memcheck:Value4 +### fun:MD5_Update +###} + +# +# All of these problems come from using test_socket_ssl +# +{ + from test_socket_ssl + Memcheck:Cond + fun:BN_bin2bn +} + +{ + from test_socket_ssl + Memcheck:Cond + fun:BN_num_bits_word +} + +{ + from test_socket_ssl + Memcheck:Value4 + fun:BN_num_bits_word +} + +{ + from test_socket_ssl + Memcheck:Cond + fun:BN_mod_exp_mont_word +} + +{ + from test_socket_ssl + Memcheck:Cond + fun:BN_mod_exp_mont +} + +{ + from test_socket_ssl + Memcheck:Param + write(buf) + fun:write + obj:/usr/lib/libcrypto.so.0.9.7 +} + +{ + from test_socket_ssl + Memcheck:Cond + fun:RSA_verify +} + +{ + from test_socket_ssl + Memcheck:Value4 + fun:RSA_verify +} + +{ + from test_socket_ssl + Memcheck:Value4 + fun:DES_set_key_unchecked +} + +{ + from test_socket_ssl + Memcheck:Value4 + fun:DES_encrypt2 +} + +{ + from test_socket_ssl + Memcheck:Cond + obj:/usr/lib/libssl.so.0.9.7 +} + +{ + from test_socket_ssl + Memcheck:Value4 + obj:/usr/lib/libssl.so.0.9.7 +} + +{ + from test_socket_ssl + Memcheck:Cond + fun:BUF_MEM_grow_clean +} + +{ + from test_socket_ssl + Memcheck:Cond + fun:memcpy + fun:ssl3_read_bytes +} + +{ + from test_socket_ssl + Memcheck:Cond + fun:SHA1_Update +} + +{ + from test_socket_ssl + Memcheck:Value4 + fun:SHA1_Update +} + + +# python init memleak +{ + Py_Main memleak + Memcheck:Leak + fun:malloc + fun:PyObject_Malloc + fun:_PyObject_GC_Malloc + fun:_PyObject_GC_* + fun:* + fun:* + fun:* + fun:* + fun:Py_InitializeEx +} + +{ + Py_Main memleak + Memcheck:Leak + fun:malloc + fun:PyObject_Malloc + fun:_PyObject_GC_Malloc + fun:_PyObject_GC_* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:Py_InitializeEx +} + +{ + Py_Main memleak v2 + Memcheck:Leak + fun:malloc + fun:_PyObject_GC_Malloc + fun:_PyObject_GC_New + fun:* + fun:* + fun:* + fun:* + fun:* + fun:Py_InitializeEx +} + +{ + Read compiled module memleak + Memcheck:Leak + fun:malloc + fun:PyObject_Malloc + fun:_PyObject_GC_Malloc + fun:_PyObject_GC_NewVar + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:read_compiled_module +} + +{ + PyRun_SimpleFileExFlags memleak + Memcheck:Leak + fun:malloc + fun:_PyObject_GC_Malloc + fun:_PyObject_GC_New* + fun:* + fun:* + fun:* + fun:PyRun_SimpleFileExFlags +} + +# memleak in update_keyword_args +{ + update_keyword_args + Memcheck:Leak + fun:malloc + fun:_PyObject_GC_Malloc + fun:* + fun:* + fun:update_keyword_args +} + +# memleaks/conds in import_submodule +{ + memleak in import_submodule + Memcheck:Cond + fun:strcpy + fun:find_module +} + +{ + wrong jump in import_submodule + Memcheck:Cond + fun:find_module + fun:import_submodule +} + +{ + wrong jump in import_submodule + Memcheck:Cond + fun:find_module + fun:load_package + fun:load_module + fun:import_submodule +} + +{ + Use of uninitialised value of size 4 + Memcheck:Value4 + fun:strcpy + fun:find_module +} + +## KNOWN MEMORY LEAK in gst_element_state_get_name +## See gstreamer/gst/gstutils.c +{ + Known leak in gst_element_state_get_name + Memcheck:Leak + fun:* + fun:* + fun:* + fun:* + fun:g_strdup_printf + fun:gst_element_state_get_name +} + +## Suppressions for FC5 64bit + +{ + Wrong jump in PyImport_ImportModuleEx + Memcheck:Cond + fun:__strcpy_chk + obj:/usr/lib64/libpython2.4.so.1.0 + obj:/usr/lib64/libpython2.4.so.1.0 + obj:/usr/lib64/libpython2.4.so.1.0 + fun:PyImport_ImportModuleEx +} + +{ + Wrong jump in PyImport_ImportModuleEx + Memcheck:Cond + fun:__strcpy_chk + fun:PyImport_ImportModuleEx +} + +{ + Wrong jump in PyImport_ImportModuleEx + Memcheck:Cond + fun:__strcpy_chk + obj:/usr/lib64/libpython2.4.so.1.0 + obj:/usr/lib64/libpython2.4.so.1.0 + fun:PyObject_Call + fun:PyObject_CallFunction + obj:/usr/lib64/libpython2.4.so.1.0 + obj:/usr/lib64/libpython2.4.so.1.0 + obj:/usr/lib64/libpython2.4.so.1.0 + fun:PyImport_ImportModuleEx +} diff --git a/testsuite/runtests.py b/testsuite/runtests.py new file mode 100644 index 0000000..592a4e3 --- /dev/null +++ b/testsuite/runtests.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2002 David I. Lehn +# Copyright (C) 2004 Johan Dahlin +# Copyright (C) 2005 Edward Hervey +# +# 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.1 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import glob +import os +import sys +import unittest + +SKIP_FILES = ['common', 'runtests'] + +os.environ['LC_MESSAGES'] = 'C' + +def gettestnames(which): + if not which: + dir = os.path.split(os.path.abspath(__file__))[0] + which = [os.path.basename(p) for p in glob.glob('%s/test_*.py' % dir)] + + names = map(lambda x: x[:-3], which) + for f in SKIP_FILES: + if f in names: + names.remove(f) + return names + +suite = unittest.TestSuite() +loader = unittest.TestLoader() + +for name in gettestnames(sys.argv[1:]): + suite.addTest(loader.loadTestsFromName(name)) + +descriptions = 1 +verbosity = 1 +if os.environ.has_key('VERBOSE'): + descriptions = 2 + verbosity = 2 + +testRunner = unittest.TextTestRunner(descriptions=descriptions, + verbosity=verbosity) +result = testRunner.run(suite) +if result.failures or result.errors: + sys.exit(1) diff --git a/testsuite/test-object.c b/testsuite/test-object.c new file mode 100644 index 0000000..738f568 --- /dev/null +++ b/testsuite/test-object.c @@ -0,0 +1,25 @@ +#include "test-object.h" + +enum +{ + /* FILL ME */ + SIGNAL_EVENT, + LAST_SIGNAL +}; + + +static guint test_object_signals[LAST_SIGNAL] = { 0 }; + +G_DEFINE_TYPE(TestObject, test_object, G_TYPE_OBJECT); + +static void test_object_init (TestObject *self) {} +static void test_object_class_init (TestObjectClass *klass) +{ + test_object_signals[SIGNAL_EVENT] = + g_signal_new ("event", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (TestObjectClass, event), NULL, NULL, + g_cclosure_marshal_VOID__BOXED, G_TYPE_NONE, 1, + GST_TYPE_EVENT); + +} + diff --git a/testsuite/test-object.h b/testsuite/test-object.h new file mode 100644 index 0000000..973cfc1 --- /dev/null +++ b/testsuite/test-object.h @@ -0,0 +1,23 @@ +#include +#include + +/* TestObject */ + +typedef struct { + GObject parent; +} TestObject; + +typedef struct { + GObjectClass parent_class; + /* signals */ + void (*event) (TestObject *object, GstEvent *event); +} TestObjectClass; + +#define TEST_TYPE_OBJECT (test_object_get_type()) +#define TEST_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TEST_TYPE_OBJECT, TestObject)) +#define TEST_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TEST_TYPE_OBJECT, TestObjectClass)) +#define TEST_IS_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TEST_TYPE_OBJECT)) +#define TEST_IS_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TEST_TYPE_OBJECT)) +#define TEST_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), TEST_TYPE_OBJECT, TestObjectClass)) + +GType test_object_get_type (void); diff --git a/testsuite/test_adapter.py b/testsuite/test_adapter.py new file mode 100644 index 0000000..dc0f248 --- /dev/null +++ b/testsuite/test_adapter.py @@ -0,0 +1,83 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2009 Edward Hervey +# +# 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.1 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +from common import gobject, gst, unittest, TestCase + +class AdapterTest(TestCase): + + def setUp(self): + TestCase.setUp(self) + self.adapter = gst.Adapter() + + def tearDown(self): + self.adapter = None + TestCase.tearDown(self) + + def testAvailable(self): + # starts empty + self.assertEquals(self.adapter.available(), 0) + self.assertEquals(self.adapter.available_fast(), 0) + + # let's give it 4 bytes + self.adapter.push(gst.Buffer("1234")) + self.assertEquals(self.adapter.available_fast(), 4) + + # let's give it another 5 bytes + self.adapter.push(gst.Buffer("56789")) + # we now have 9 bytes + self.assertEquals(self.adapter.available(), 9) + # but can only do a fast take of 4 bytes (the first buffer) + self.assertEquals(self.adapter.available_fast(), 4) + + def testPeek(self): + self.adapter.push(gst.Buffer("0123456789")) + + # let's peek at 5 bytes + b = self.adapter.peek(5) + # it can return more than 5 bytes + self.assert_(len(b) >= 5) + self.assertEquals(b, "01234") + + # it's still 10 bytes big + self.assertEquals(self.adapter.available(), 10) + + # if we try to peek more than what's available, we'll have None + self.assertEquals(self.adapter.peek(11), None) + + def testFlush(self): + self.adapter.push(gst.Buffer("0123456789")) + self.assertEquals(self.adapter.available(), 10) + + self.adapter.flush(5) + self.assertEquals(self.adapter.available(), 5) + + # it flushed the first 5 bytes + self.assertEquals(self.adapter.peek(5), "56789") + + self.adapter.flush(5) + self.assertEquals(self.adapter.available(), 0) + + def testTake(self): + self.adapter.push(gst.Buffer("0123456789")) + self.assertEquals(self.adapter.available(), 10) + + s = self.adapter.take(5) + self.assertEquals(s, "01234") + self.assertEquals(self.adapter.available(), 5) diff --git a/testsuite/test_audio.py b/testsuite/test_audio.py new file mode 100644 index 0000000..60321c8 --- /dev/null +++ b/testsuite/test_audio.py @@ -0,0 +1,38 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2009 Edward Hervey +# +# 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.1 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +from common import gobject, gst, unittest, TestCase + +class Audio(TestCase): + + def testBufferclip(self): + assert hasattr(gst.audio, "buffer_clip") + # create a segment + segment = gst.Segment() + gst.debug("Created the new segment") + # we'll put a new segment of 500ms to 1000ms + segment.set_newsegment(False, 1.0, gst.FORMAT_TIME, 0, -1, 0) + gst.debug("Initialized the new segment") + # create a new dummy buffer + b = gst.Buffer("this is a really useless line") + gst.debug("Created the buffer") + # clip... which shouldn't do anything + b2 = gst.audio.buffer_clip(b, segment, 44100, 8) + gst.debug("DONE !") diff --git a/testsuite/test_bin.py b/testsuite/test_bin.py new file mode 100644 index 0000000..d10ceac --- /dev/null +++ b/testsuite/test_bin.py @@ -0,0 +1,196 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2002 David I. Lehn +# Copyright (C) 2004 Johan Dahlin +# Copyright (C) 2005 Edward Hervey +# Copyright (C) 2005 Thomas Vander Stichele +# +# 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.1 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +from common import gobject, gst, unittest, TestCase, pygobject_2_13 + +import sys +import time + +# see +# http://www.sicem.biz/personal/lgs/docs/gobject-python/gobject-tutorial.html +class MyBin(gst.Bin): + _state_changed = False + + def __init__(self, name): + # we need to call GObject's init to be able to do self.do_* + gobject.GObject.__init__(self) + # since we can't chain up to our parent's __init__, we set the + # name manually + self.set_property('name', name) + + def do_change_state(self, state_change): + if state_change == gst.STATE_CHANGE_PAUSED_TO_PLAYING: + self._state_changed = True + # FIXME: it seems a vmethod increases the refcount without unreffing + # print self.__gstrefcount__ + # print self.__grefcount__ + + # chain up to parent + return gst.Bin.do_change_state(self, state_change) + +# we need to register the type for PyGTK < 2.8 +gobject.type_register(MyBin) + +# FIXME: fix leak in vmethods before removing overriding fixture +class BinSubclassTest(TestCase): + def setUp(self): + pass + + def tearDown(self): + pass + + def testStateChange(self): + bin = MyBin("mybin") + self.assertEquals(bin.__gstrefcount__, 1) + self.assertEquals(sys.getrefcount(bin), pygobject_2_13 and 2 or 3) + + self.assertEquals(bin.get_name(), "mybin") + self.assertEquals(bin.__gstrefcount__, 1) + + # test get_state with no timeout + (ret, state, pending) = bin.get_state() + self.failIfEqual(ret, gst.STATE_CHANGE_FAILURE) + self.assertEquals(bin.__gstrefcount__, 1) + + # set to playing + bin.set_state(gst.STATE_PLAYING) + self.failUnless(bin._state_changed) + + # test get_state with no timeout + (ret, state, pending) = bin.get_state() + self.failIfEqual(ret, gst.STATE_CHANGE_FAILURE) + + if ret == gst.STATE_CHANGE_SUCCESS: + self.assertEquals(state, gst.STATE_PLAYING) + self.assertEquals(pending, gst.STATE_VOID_PENDING) + + # test get_state with a timeout + (ret, state, pending) = bin.get_state(1) + self.failIfEqual(ret, gst.STATE_CHANGE_FAILURE) + + if ret == gst.STATE_CHANGE_SUCCESS: + self.assertEquals(state, gst.STATE_PLAYING) + self.assertEquals(pending, gst.STATE_VOID_PENDING) + + (ret, state, pending) = bin.get_state(timeout=gst.SECOND) + + # back to NULL + bin.set_state(gst.STATE_NULL) + +class BinAddRemove(TestCase): + def setUp(self): + TestCase.setUp(self) + self.bin = gst.Bin('bin') + + def tearDown(self): + del self.bin + TestCase.tearDown(self) + + def testError(self): + gst.info("creating fakesrc") + src = gst.element_factory_make('fakesrc', 'name') + gst.info("creating fakesink") + sink = gst.element_factory_make('fakesink', 'name') + gst.info("adding src:%d to bin" % src.__gstrefcount__) + self.assertEqual(src.__gstrefcount__, 1) + self.bin.add(src) + self.assertEqual(src.__gstrefcount__, 2) + gst.info("added src:%d" % src.__gstrefcount__) + self.assertRaises(gst.AddError, self.bin.add, sink) + self.assertRaises(gst.AddError, self.bin.add, src) + self.assertRaises(gst.RemoveError, self.bin.remove, sink) + gst.info("removing src") + self.bin.remove(src) + gst.info("removed") + self.assertRaises(gst.RemoveError, self.bin.remove, src) + + def testMany(self): + src = gst.element_factory_make('fakesrc') + sink = gst.element_factory_make('fakesink') + self.bin.add(src, sink) + self.assertRaises(gst.AddError, self.bin.add, src, sink) + self.bin.remove(src, sink) + self.assertRaises(gst.RemoveError, self.bin.remove, src, sink) + +class Preroll(TestCase): + def setUp(self): + TestCase.setUp(self) + self.bin = gst.Bin('bin') + + def tearDown(self): + # FIXME: wait for state change thread to settle down + while self.bin.__gstrefcount__ > 1: + time.sleep(0.1) + self.assertEquals(self.bin.__gstrefcount__, 1) + del self.bin + TestCase.tearDown(self) + + def testFake(self): + src = gst.element_factory_make('fakesrc') + sink = gst.element_factory_make('fakesink') + self.bin.add(src) + + # bin will go to paused, src pad task will start and error out + self.bin.set_state(gst.STATE_PAUSED) + ret = self.bin.get_state() + self.assertEquals(ret[0], gst.STATE_CHANGE_SUCCESS) + self.assertEquals(ret[1], gst.STATE_PAUSED) + self.assertEquals(ret[2], gst.STATE_VOID_PENDING) + + # adding the sink will cause the bin to go in preroll mode + gst.debug('adding sink and setting to PAUSED, should cause preroll') + self.bin.add(sink) + sink.set_state(gst.STATE_PAUSED) + ret = self.bin.get_state(timeout=0) + self.assertEquals(ret[0], gst.STATE_CHANGE_ASYNC) + self.assertEquals(ret[1], gst.STATE_PAUSED) + self.assertEquals(ret[2], gst.STATE_PAUSED) + + # to actually complete preroll, we need to link and re-enable fakesrc + src.set_state(gst.STATE_READY) + src.link(sink) + src.set_state(gst.STATE_PAUSED) + ret = self.bin.get_state() + self.assertEquals(ret[0], gst.STATE_CHANGE_SUCCESS) + self.assertEquals(ret[1], gst.STATE_PAUSED) + self.assertEquals(ret[2], gst.STATE_VOID_PENDING) + + self.bin.set_state(gst.STATE_NULL) + self.bin.get_state() + +class ConstructorTest(TestCase): + def testGood(self): + bin = gst.Bin() + bin = gst.Bin(None) + bin = gst.Bin('') + bin = gst.Bin('myname') + + def testBad(self): + # these are now valid. pygobject will take care of converting + # the arguments to a string. + #self.assertRaises(TypeError, gst.Bin, 0) + #self.assertRaises(TypeError, gst.Bin, gst.Bin()) + pass + +if __name__ == "__main__": + unittest.main() diff --git a/testsuite/test_buffer.py b/testsuite/test_buffer.py new file mode 100644 index 0000000..b4a5fb2 --- /dev/null +++ b/testsuite/test_buffer.py @@ -0,0 +1,178 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2002 David I. Lehn +# Copyright (C) 2004 Johan Dahlin +# Copyright (C) 2005 Edward Hervey +# +# 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.1 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import sys +import gc +from common import gobject, gst, unittest, TestCase + +class BufferTest(TestCase): + def testBufferBuffer(self): + buf = gst.Buffer('test') + assert str(buffer(buf)) == 'test' + + def testBufferStr(self): + buffer = gst.Buffer('test') + assert str(buffer) == 'test' + + def testBufferAlloc(self): + bla = 'mooooooo' + buffer = gst.Buffer(bla + '12345') + gc.collect () + assert str(buffer) == 'mooooooo12345' + + def testBufferBadConstructor(self): + self.assertRaises(TypeError, gst.Buffer, 'test', 0) + + def testBufferStrNull(self): + test_string = 't\0e\0s\0t\0' + buffer = gst.Buffer(test_string) + assert str(buffer) == test_string + + def testBufferSize(self): + test_string = 'a little string' + buffer = gst.Buffer(test_string) + assert len(buffer) == len(test_string) + assert hasattr(buffer, 'size') + assert buffer.size == len(buffer) + + def testBufferCreateSub(self): + s = '' + for i in range(64): + s += '%02d' % i + + buffer = gst.Buffer(s) + self.assertEquals(len(buffer), 128) + + sub = buffer.create_sub(16, 16) + self.assertEquals(sub.size, 16) + self.assertEquals(sub.data, buffer.data[16:32]) + self.assertEquals(sub.offset, gst.CLOCK_TIME_NONE) + + def testBufferMerge(self): + buffer1 = gst.Buffer('foo') + buffer2 = gst.Buffer('bar') + + merged_buffer = buffer1.merge(buffer2) + assert str(merged_buffer) == 'foobar' + + def testBufferJoin(self): + buffer1 = gst.Buffer('foo') + buffer2 = gst.Buffer('bar') + + joined_buffer = buffer1.merge(buffer2) + assert str(joined_buffer) == 'foobar' + + def testBufferSpan(self): + buffer1 = gst.Buffer('foo') + buffer2 = gst.Buffer('bar') + + spaned_buffer = buffer1.span(0L, buffer2, 6L) + assert str(spaned_buffer) == 'foobar' + def testBufferCopyOnWrite(self): + s='test_vector' + buffer = gst.Buffer(s) + sub = buffer.create_sub(0, buffer.size) + self.assertEquals(sub.size, buffer.size) + out = sub.copy_on_write () + self.assertEquals(out.size, sub.size) + assert str(out) == str(buffer) + out[5] = 'w' + assert str(out) == 'test_wector' + + def testBufferFlagIsSet(self): + buffer = gst.Buffer() + # Off by default + assert not buffer.flag_is_set(gst.BUFFER_FLAG_READONLY) + + # Try switching on and off + buffer.flag_set(gst.BUFFER_FLAG_READONLY) + assert buffer.flag_is_set(gst.BUFFER_FLAG_READONLY) + buffer.flag_unset(gst.BUFFER_FLAG_READONLY) + assert not buffer.flag_is_set(gst.BUFFER_FLAG_READONLY) + + # Try switching on and off + buffer.flag_set(gst.BUFFER_FLAG_IN_CAPS) + assert buffer.flag_is_set(gst.BUFFER_FLAG_IN_CAPS) + buffer.flag_unset(gst.BUFFER_FLAG_IN_CAPS) + assert not buffer.flag_is_set(gst.BUFFER_FLAG_IN_CAPS) + + def testAttrFlags(self): + buffer = gst.Buffer() + assert hasattr(buffer, "flags") + assert isinstance(buffer.flags, int) + + def testAttrTimestamp(self): + buffer = gst.Buffer() + assert hasattr(buffer, "timestamp") + assert isinstance(buffer.timestamp, long) + + assert buffer.timestamp == gst.CLOCK_TIME_NONE + buffer.timestamp = 0 + assert buffer.timestamp == 0 + buffer.timestamp = 2**64 - 1 + assert buffer.timestamp == 2**64 - 1 + + def testAttrDuration(self): + buffer = gst.Buffer() + assert hasattr(buffer, "duration") + assert isinstance(buffer.duration, long) + + assert buffer.duration == gst.CLOCK_TIME_NONE + buffer.duration = 0 + assert buffer.duration == 0 + buffer.duration = 2**64 - 1 + assert buffer.duration == 2**64 - 1 + + def testAttrOffset(self): + buffer = gst.Buffer() + assert hasattr(buffer, "offset") + assert isinstance(buffer.offset, long) + + assert buffer.offset == gst.CLOCK_TIME_NONE + buffer.offset = 0 + assert buffer.offset == 0 + buffer.offset = 2**64 - 1 + assert buffer.offset == 2**64 - 1 + + def testAttrOffset_end(self): + buffer = gst.Buffer() + assert hasattr(buffer, "offset_end") + assert isinstance(buffer.offset_end, long) + + assert buffer.offset_end == gst.CLOCK_TIME_NONE + buffer.offset_end = 0 + assert buffer.offset_end == 0 + buffer.offset_end = 2**64 - 1 + assert buffer.offset_end == 2**64 - 1 + + def testBufferCaps(self): + buffer = gst.Buffer() + caps = gst.caps_from_string('foo/blah') + gst.info("before settings caps") + buffer.set_caps(caps) + gst.info("after settings caps") + c = buffer.get_caps() + gst.info("after getting caps") + self.assertEquals(caps, c) + +if __name__ == "__main__": + unittest.main() diff --git a/testsuite/test_caps.py b/testsuite/test_caps.py new file mode 100644 index 0000000..dddc507 --- /dev/null +++ b/testsuite/test_caps.py @@ -0,0 +1,196 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2002 David I. Lehn +# Copyright (C) 2004 Johan Dahlin +# Copyright (C) 2005 Edward Hervey +# +# 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.1 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import sys +from common import gst, unittest, TestCase + +class CapsTest(TestCase): + def setUp(self): + TestCase.setUp(self) + self.caps = gst.caps_from_string('video/x-raw-yuv,width=10,framerate=5/1;video/x-raw-rgb,width=15,framerate=10/1') + self.assertEquals(self.caps.__refcount__, 1) + self.structure = self.caps[0] + self.any = gst.Caps("ANY") + self.assertEquals(self.any.__refcount__, 1) + self.empty = gst.Caps() + self.assertEquals(self.empty.__refcount__, 1) + + def testCapsMime(self): + mime = self.structure.get_name() + assert mime == 'video/x-raw-yuv' + + def testCapsList(self): + 'check if we can access Caps as a list' + structure = self.caps[0] + mime = structure.get_name() + assert mime == 'video/x-raw-yuv' + structure = self.caps[1] + mime = structure.get_name() + assert mime == 'video/x-raw-rgb' + + def testCapsContainingMiniObjects(self): + # buffer contains hex encoding of ascii 'abcd' + caps = gst.Caps("video/x-raw-yuv, buf=(buffer)61626364") + buf = caps[0]['buf'] + assert isinstance(buf, gst.Buffer) + assert buf.data == "abcd" + + buf = gst.Buffer("1234") + caps[0]['buf2'] = buf + buf2 = caps[0]['buf2'] + assert buf2 == buf + + def testCapsConstructEmpty(self): + caps = gst.Caps() + assert isinstance(caps, gst.Caps) + + def testCapsConstructFromString(self): + caps = gst.Caps('video/x-raw-yuv,width=10') + assert isinstance(caps, gst.Caps) + assert len(caps) == 1 + assert isinstance(caps[0], gst.Structure) + assert caps[0].get_name() == 'video/x-raw-yuv' + assert isinstance(caps[0]['width'], int) + assert caps[0]['width'] == 10 + + def testCapsConstructFromStructure(self): + struct = gst.structure_from_string('video/x-raw-yuv,width=10,framerate=[0/1, 25/3]') + caps = gst.Caps(struct) + assert isinstance(caps, gst.Caps) + assert len(caps) == 1 + assert isinstance(caps[0], gst.Structure) + assert caps[0].get_name() == 'video/x-raw-yuv' + assert isinstance(caps[0]['width'], int) + assert caps[0]['width'] == 10 + assert isinstance(caps[0]['framerate'], gst.FractionRange) + + def testCapsConstructFromStructures(self): + struct1 = gst.structure_from_string('video/x-raw-yuv,width=10') + struct2 = gst.structure_from_string('video/x-raw-rgb,height=20.0') + caps = gst.Caps(struct1, struct2) + assert isinstance(caps, gst.Caps) + assert len(caps) == 2 + struct = caps[0] + assert isinstance(struct, gst.Structure), struct + assert struct.get_name() == 'video/x-raw-yuv', struct.get_name() + assert struct.has_key('width') + assert isinstance(struct['width'], int) + assert struct['width'] == 10 + struct = caps[1] + assert isinstance(struct, gst.Structure), struct + assert struct.get_name() == 'video/x-raw-rgb', struct.get_name() + assert struct.has_key('height') + assert isinstance(struct['height'], float) + assert struct['height'] == 20.0 + + def testCapsReferenceStructs(self): + 'test that shows why it\'s not a good idea to use structures by reference' + caps = gst.Caps('hi/mom,width=0') + structure = caps[0] + del caps + assert structure['width'] == 0 + + + def testCapsStructureChange(self): + 'test if changing the structure of the caps works by reference' + assert self.structure['width'] == 10 + self.structure['width'] = 5 + assert self.structure['width'] == 5.0 + # check if we changed the caps as well + structure = self.caps[0] + assert structure['width'] == 5.0 + + def testCapsBadConstructor(self): + struct = gst.structure_from_string('video/x-raw-yuv,width=10') + self.assertRaises(TypeError, gst.Caps, None) + self.assertRaises(TypeError, gst.Caps, 1) + self.assertRaises(TypeError, gst.Caps, 2.0) + self.assertRaises(TypeError, gst.Caps, object) + self.assertRaises(TypeError, gst.Caps, 1, 2, 3) + + # This causes segfault! + #self.assertRaises(TypeError, gst.Caps, struct, 10, None) + + def testTrueFalse(self): + 'test that comparisons using caps work the intended way' + assert self.any # not empty even though it has no structures + assert not self.empty + assert not gst.Caps('EMPTY') # also empty + assert gst.Caps('your/mom') + + def testComparisons(self): + assert self.empty < self.any + assert self.empty < self.structure + assert self.empty < self.caps + assert self.caps < self.any + assert self.empty <= self.empty + assert self.caps <= self.caps + assert self.caps <= self.any + assert self.empty == "EMPTY" + assert self.caps != self.any + assert self.empty != self.any + assert self.any > self.empty + assert self.any >= self.empty + + def testFilters(self): + name = 'video/x-raw-yuv' + filtercaps = gst.Caps(*[struct for struct in self.caps if struct.get_name() == name]) + intersection = self.caps & 'video/x-raw-yuv' + assert filtercaps == intersection + + def doSubtract(self, set, subset): + '''mimic the test in GStreamer core's testsuite/caps/subtract.c''' + assert not set - set + assert not subset - subset + assert not subset - set + test = set - subset + assert test + test2 = test | subset + test = test2 - set + assert not test + #our own extensions foolow here + assert subset == set & subset + assert set == set | subset + assert set - subset == set ^ subset + + def testSubtract(self): + self.doSubtract( + gst.Caps ("some/mime, _int = [ 1, 2 ], list = { \"A\", \"B\", \"C\" }"), + gst.Caps ("some/mime, _int = 1, list = \"A\"")) + self.doSubtract( + gst.Caps ("some/mime, _double = (double) 1.0; other/mime, _int = { 1, 2 }"), + gst.Caps ("some/mime, _double = (double) 1.0")) + + def testNoneValue(self): + caps = gst.Caps("foo") + + def invalid_assignment(): + caps[0]["bar"] = None + self.assertRaises(TypeError, invalid_assignment) + + def invalid_set_value(): + caps[0].set_value("bar", None) + self.assertRaises(TypeError, invalid_set_value) + + +if __name__ == "__main__": + unittest.main() diff --git a/testsuite/test_element.py b/testsuite/test_element.py new file mode 100644 index 0000000..3c84e1a --- /dev/null +++ b/testsuite/test_element.py @@ -0,0 +1,268 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2002 David I. Lehn +# Copyright (C) 2004 Johan Dahlin +# Copyright (C) 2005 Edward Hervey +# +# 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.1 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +from common import gst, unittest, TestCase, pygobject_2_13 + +import sys + +# since I can't subclass gst.Element for some reason, I use a bin here +# it don't matter to Jesus +class TestElement(gst.Bin): + def break_it_down(self): + self.debug('Hammer Time') + +class ElementTest(TestCase): + name = 'fakesink' + alias = 'sink' + + def testGoodConstructor(self): + element = gst.element_factory_make(self.name, self.alias) + assert element is not None, 'element is None' + assert isinstance(element, gst.Element) + assert element.get_name() == self.alias + +## FIXME : Make a new test for state changes, using bus signals + +## class FakeSinkTest(ElementTest): +## FAKESINK_STATE_ERROR_NONE = "0" +## FAKESINK_STATE_ERROR_NULL_READY, = "1" +## FAKESINK_STATE_ERROR_READY_PAUSED, = "2" +## FAKESINK_STATE_ERROR_PAUSED_PLAYING = "3" +## FAKESINK_STATE_ERROR_PLAYING_PAUSED = "4" +## FAKESINK_STATE_ERROR_PAUSED_READY = "5" +## FAKESINK_STATE_ERROR_READY_NULL = "6" + +## name = 'fakesink' +## alias = 'sink' +## def setUp(self): +## ElementTest.setUp(self) +## self.element = gst.element_factory_make('fakesink', 'sink') + +## def tearDown(self): +## self.element.set_state(gst.STATE_NULL) +## del self.element +## ElementTest.tearDown(self) + +## def checkError(self, old_state, state, name): +## assert self.element.get_state() == gst.STATE_NULL +## assert self.element.set_state(old_state) +## assert self.element.get_state() == old_state +## self.element.set_property('state-error', name) +## self.error = False +## def error_cb(element, source, gerror, debug): +## assert isinstance(element, gst.Element) +## assert element == self.element +## assert isinstance(source, gst.Element) +## assert source == self.element +## assert isinstance(gerror, gst.GError) +## self.error = True + +## self.element.connect('error', error_cb) +## self.element.set_state (state) +## assert self.error, 'error not set' +## #assert error_message.find('ERROR') != -1 + +## self.element.get_state() == old_state, 'state changed' + +## def testStateErrorNullReady(self): +## self.checkError(gst.STATE_NULL, gst.STATE_READY, +## self.FAKESINK_STATE_ERROR_NULL_READY) + +## def testStateErrorReadyPaused(self): +## self.checkError(gst.STATE_READY, gst.STATE_PAUSED, +## self.FAKESINK_STATE_ERROR_READY_PAUSED) + +## def testStateErrorPausedPlaying(self): +## self.checkError(gst.STATE_PAUSED, gst.STATE_PLAYING, +## self.FAKESINK_STATE_ERROR_PAUSED_PLAYING) + +## def testStateErrorPlayingPaused(self): +## self.checkError(gst.STATE_PLAYING, gst.STATE_PAUSED, +## self.FAKESINK_STATE_ERROR_PLAYING_PAUSED) + +## def testStateErrorPausedReady(self): +## self.checkError(gst.STATE_PAUSED, gst.STATE_READY, +## self.FAKESINK_STATE_ERROR_PAUSED_READY) + +## def testStateErrorReadyNull(self): +## self.checkError(gst.STATE_READY, gst.STATE_NULL, +## self.FAKESINK_STATE_ERROR_READY_NULL) + +## def checkStateChange(self, old, new): +## def state_change_cb(element, old_s, new_s): +## assert isinstance(element, gst.Element) +## assert element == self.element +## assert old_s == old +## assert new_s == new + +## assert self.element.set_state(old) +## assert self.element.get_state(0.0)[1] == old + +## # FIXME: replace with messages +## # self.element.connect('state-change', state_change_cb) + +## assert self.element.set_state(new) +## assert self.element.get_state(0.0)[1] == new + +## def testStateChangeNullReady(self): +## self.checkStateChange(gst.STATE_NULL, gst.STATE_READY) + +## def testStateChangeReadyPaused(self): +## self.checkStateChange(gst.STATE_READY, gst.STATE_PAUSED) + +## def testStateChangePausedPlaying(self): +## self.checkStateChange(gst.STATE_PAUSED, gst.STATE_PLAYING) + +## def testStateChangePlayingPaused(self): +## self.checkStateChange(gst.STATE_PLAYING, gst.STATE_PAUSED) + +## def testStateChangePausedReady(self): +## self.checkStateChange(gst.STATE_PAUSED, gst.STATE_READY) + +## def testStateChangeReadyNull(self): +## self.checkStateChange(gst.STATE_READY, gst.STATE_NULL) + +class NonExistentTest(ElementTest): + name = 'this-element-does-not-exist' + alias = 'no-alias' + + testGoodConstructor = lambda s: None + testGoodConstructor2 = lambda s: None + +class FileSrcTest(ElementTest): + name = 'filesrc' + alias = 'source' + +class FileSinkTest(ElementTest): + name = 'filesink' + alias = 'sink' + +class ElementName(TestCase): + def testElementStateGetName(self): + get_name = gst.element_state_get_name + for state in ('NULL', + 'READY', + 'PLAYING', + 'PAUSED'): + name = 'STATE_' + state + assert hasattr(gst, name) + attr = getattr(gst, name) + assert get_name(attr) == state + + assert get_name(gst.STATE_VOID_PENDING) == 'VOID_PENDING' + assert get_name(-1) == 'UNKNOWN!(-1)' + self.assertRaises(TypeError, get_name, '') + +class QueryTest(TestCase): + def setUp(self): + TestCase.setUp(self) + self.pipeline = gst.parse_launch('fakesrc name=source ! fakesink') + self.assertEquals(self.pipeline.__gstrefcount__, 1) + + self.element = self.pipeline.get_by_name('source') + self.assertEquals(self.pipeline.__gstrefcount__, 1) + self.assertEquals(self.element.__gstrefcount__, 2) + self.assertEquals(sys.getrefcount(self.element), pygobject_2_13 and 2 or 3) + + def tearDown(self): + del self.pipeline + del self.element + TestCase.tearDown(self) + + def testQuery(self): + gst.debug('querying fakesrc in FORMAT_BYTES') + res = self.element.query_position(gst.FORMAT_BYTES) + self.assertEquals(self.pipeline.__gstrefcount__, 1) + self.assertEquals(sys.getrefcount(self.pipeline), pygobject_2_13 and 2 or 3) + self.assertEquals(self.element.__gstrefcount__, 2) + self.assertEquals(sys.getrefcount(self.element), pygobject_2_13 and 2 or 3) + assert res + assert res[0] == 0 + self.assertRaises(gst.QueryError, self.element.query_position, + gst.FORMAT_TIME) + self.gccollect() + +class QueueTest(TestCase): + def testConstruct(self): + queue = gst.element_factory_make('queue') + assert queue.get_name() == 'queue0' + self.assertEquals(queue.__gstrefcount__, 1) + +class DebugTest(TestCase): + def testDebug(self): + e = gst.element_factory_make('fakesrc') + e.error('I am an error string') + e.warning('I am a warning string') + e.info('I am an info string') + e.debug('I am a debug string') + e.log('I am a log string') + e.debug('I am a formatted %s %s' % ('log', 'string')) + + def testElementDebug(self): + e = TestElement("testelement") + e.set_property("name", "testelement") + e.break_it_down() + +class LinkTest(TestCase): + def testLinkNoPads(self): + src = gst.Bin() + sink = gst.Bin() + self.assertRaises(gst.LinkError, src.link, sink) + + def testLink(self): + src = gst.element_factory_make('fakesrc') + sink = gst.element_factory_make('fakesink') + self.failUnless(src.link(sink)) + # FIXME: this unlink leaks, no idea why + # src.unlink(sink) + # print src.__gstrefcount__ + + def testLinkPads(self): + src = gst.element_factory_make('fakesrc') + sink = gst.element_factory_make('fakesink') + # print src.__gstrefcount__ + self.failUnless(src.link_pads("src", sink, "sink")) + src.unlink_pads("src", sink, "sink") + + def testLinkFiltered(self): + # a filtered link uses capsfilter and thus needs a bin + bin = gst.Bin() + src = gst.element_factory_make('fakesrc') + sink = gst.element_factory_make('fakesink') + bin.add(src, sink) + caps = gst.caps_from_string("audio/x-raw-int") + + self.failUnless(src.link(sink, caps)) + + # DANGER WILL. src is not actually connected to sink, since + # there's a capsfilter in the way. What a leaky abstraction. + # FIXME + # src.unlink(sink) + + # instead, mess with pads directly + pad = src.get_pad('src') + pad.unlink(pad.get_peer()) + pad = sink.get_pad('sink') + pad.get_peer().unlink(pad) + +if __name__ == "__main__": + unittest.main() diff --git a/testsuite/test_event.py b/testsuite/test_event.py new file mode 100644 index 0000000..6a4860d --- /dev/null +++ b/testsuite/test_event.py @@ -0,0 +1,244 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2002 David I. Lehn +# Copyright (C) 2004 Johan Dahlin +# Copyright (C) 2005 Edward Hervey +# +# 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.1 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import os +import sys +import time +import tempfile + +from common import gst, unittest, testhelper, TestCase + +class EventTest(TestCase): + def setUp(self): + TestCase.setUp(self) + self.pipeline = gst.parse_launch('fakesrc ! fakesink name=sink') + self.sink = self.pipeline.get_by_name('sink') + self.pipeline.set_state(gst.STATE_PLAYING) + + def tearDown(self): + gst.debug('setting pipeline to NULL') + self.pipeline.set_state(gst.STATE_NULL) + gst.debug('set pipeline to NULL') + # FIXME: wait for state change thread to die + while self.pipeline.__gstrefcount__ > 1: + gst.debug('waiting for self.pipeline G rc to drop to 1') + time.sleep(0.1) + self.assertEquals(self.pipeline.__gstrefcount__, 1) + + del self.sink + del self.pipeline + TestCase.tearDown(self) + + def testEventSeek(self): + # this event only serves to change the rate of data transfer + event = gst.event_new_seek(1.0, gst.FORMAT_BYTES, gst.SEEK_FLAG_FLUSH, + gst.SEEK_TYPE_NONE, 0, gst.SEEK_TYPE_NONE, 0) + # FIXME: but basesrc goes into an mmap/munmap spree, needs to be fixed + + event = gst.event_new_seek(1.0, gst.FORMAT_BYTES, gst.SEEK_FLAG_FLUSH, + gst.SEEK_TYPE_SET, 0, gst.SEEK_TYPE_NONE, 0) + assert event + gst.debug('sending event') + self.sink.send_event(event) + gst.debug('sent event') + + self.assertEqual(event.parse_seek(), (1.0, gst.FORMAT_BYTES, gst.SEEK_FLAG_FLUSH, + gst.SEEK_TYPE_SET, 0, gst.SEEK_TYPE_NONE, 0)) + + def testWrongEvent(self): + buffer = gst.Buffer() + self.assertRaises(TypeError, self.sink.send_event, buffer) + number = 1 + self.assertRaises(TypeError, self.sink.send_event, number) + + +class EventFileSrcTest(TestCase): + + def setUp(self): + TestCase.setUp(self) + gst.info("start") + self.filename = tempfile.mktemp() + open(self.filename, 'w').write(''.join(map(str, range(10)))) + + self.pipeline = gst.parse_launch('filesrc name=source location=%s blocksize=1 ! fakesink signal-handoffs=1 name=sink' % self.filename) + self.source = self.pipeline.get_by_name('source') + self.sink = self.pipeline.get_by_name('sink') + self.sigid = self.sink.connect('handoff', self.handoff_cb) + self.bus = self.pipeline.get_bus() + + def tearDown(self): + self.pipeline.set_state(gst.STATE_NULL) + self.sink.disconnect(self.sigid) + if os.path.exists(self.filename): + os.remove(self.filename) + del self.bus + del self.pipeline + del self.source + del self.sink + del self.handoffs + TestCase.tearDown(self) + + def handoff_cb(self, element, buffer, pad): + self.handoffs.append(str(buffer)) + + def playAndIter(self): + self.handoffs = [] + self.pipeline.set_state(gst.STATE_PLAYING) + assert self.pipeline.set_state(gst.STATE_PLAYING) + while 42: + msg = self.bus.pop() + if msg and msg.type == gst.MESSAGE_EOS: + break + assert self.pipeline.set_state(gst.STATE_PAUSED) + handoffs = self.handoffs + self.handoffs = [] + return handoffs + + def sink_seek(self, offset, method=gst.SEEK_TYPE_SET): + self.sink.seek(1.0, gst.FORMAT_BYTES, gst.SEEK_FLAG_FLUSH, + method, offset, + gst.SEEK_TYPE_NONE, 0) + + def testSimple(self): + handoffs = self.playAndIter() + assert handoffs == map(str, range(10)) + + def testSeekCur(self): + self.sink_seek(8) + self.playAndIter() + +class TestEmit(TestCase): + def testEmit(self): + object = testhelper.get_object() + object.connect('event', self._event_cb) + + # First emit from C + testhelper.emit_event(object) + + # Then emit from Python + object.emit('event', gst.event_new_eos()) + + def _event_cb(self, obj, event): + assert isinstance(event, gst.Event) + + +class TestDelayedEventProbe(TestCase): + # this test: + # starts a pipeline with only a source + # adds an event probe to catch the (first) new-segment + # adds a buffer probe to "autoplug" and send out this event + def setUp(self): + TestCase.setUp(self) + self.pipeline = gst.Pipeline() + self.src = gst.element_factory_make('fakesrc') + self.src.set_property('num-buffers', 10) + self.pipeline.add(self.src) + self.srcpad = self.src.get_pad('src') + + def tearDown(self): + gst.debug('setting pipeline to NULL') + self.pipeline.set_state(gst.STATE_NULL) + gst.debug('set pipeline to NULL') + # FIXME: wait for state change thread to die + while self.pipeline.__gstrefcount__ > 1: + gst.debug('waiting for self.pipeline G rc to drop to 1') + time.sleep(0.1) + self.assertEquals(self.pipeline.__gstrefcount__, 1) + + def testProbe(self): + self.srcpad.add_event_probe(self._event_probe_cb) + self._buffer_probe_id = self.srcpad.add_buffer_probe( + self._buffer_probe_cb) + + self._newsegment = None + self._eos = None + self._had_buffer = False + + self.pipeline.set_state(gst.STATE_PLAYING) + + while not self._eos: + time.sleep(0.1) + + # verify if our newsegment event is still around and valid + self.failUnless(self._newsegment) + self.assertEquals(self._newsegment.type, gst.EVENT_NEWSEGMENT) + self.assertEquals(self._newsegment.__grefcount__, 1) + + # verify if our eos event is still around and valid + self.failUnless(self._eos) + self.assertEquals(self._eos.type, gst.EVENT_EOS) + self.assertEquals(self._eos.__grefcount__, 1) + + def _event_probe_cb(self, pad, event): + if event.type == gst.EVENT_NEWSEGMENT: + self._newsegment = event + self.assertEquals(event.__grefcount__, 3) + # drop the event, we're storing it for later sending + return False + + if event.type == gst.EVENT_EOS: + self._eos = event + # we also want fakesink to get it + return True + + # sinks now send Latency events upstream + if event.type == gst.EVENT_LATENCY: + return True + + self.fail("Got an unknown event %r" % event) + + def _buffer_probe_cb(self, pad, buffer): + self.failUnless(self._newsegment) + + # fake autoplugging by now putting in a fakesink + sink = gst.element_factory_make('fakesink') + self.pipeline.add(sink) + self.src.link(sink) + sink.set_state(gst.STATE_PLAYING) + + pad = sink.get_pad('sink') + pad.send_event(self._newsegment) + + # we don't want to be called again + self.srcpad.remove_buffer_probe(self._buffer_probe_id) + + self._had_buffer = True + # now let the buffer through + return True + +class TestEventCreationParsing(TestCase): + + def testEventStep(self): + if hasattr(gst.Event, "parse_step"): + e = gst.event_new_step(gst.FORMAT_TIME, 42, 1.0, True, True) + + self.assertEquals(e.type, gst.EVENT_STEP) + + fmt, amount, rate, flush, intermediate = e.parse_step() + self.assertEquals(fmt, gst.FORMAT_TIME) + self.assertEquals(amount, 42) + self.assertEquals(rate, 1.0) + self.assertEquals(flush, True) + self.assertEquals(intermediate, True) + +if __name__ == "__main__": + unittest.main() diff --git a/testsuite/test_ghostpad.py b/testsuite/test_ghostpad.py new file mode 100644 index 0000000..8a390df --- /dev/null +++ b/testsuite/test_ghostpad.py @@ -0,0 +1,194 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2002 David I. Lehn +# Copyright (C) 2004 Johan Dahlin +# Copyright (C) 2005 Edward Hervey +# +# 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.1 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +from common import gst, unittest, TestCase, pygobject_2_13 + +import sys +import gc +import gobject + +class SrcBin(gst.Bin): + def prepare(self): + src = gst.element_factory_make('fakesrc') + self.add(src) + pad = src.get_pad("src") + ghostpad = gst.GhostPad("src", pad) + self.add_pad(ghostpad) +gobject.type_register(SrcBin) + +class SinkBin(gst.Bin): + def prepare(self): + sink = gst.element_factory_make('fakesink') + self.add(sink) + pad = sink.get_pad("sink") + ghostpad = gst.GhostPad("sink", pad) + self.add_pad(ghostpad) + self.sink = sink + + def connect_handoff(self, cb, *args, **kwargs): + self.sink.set_property('signal-handoffs', True) + self.sink.connect('handoff', cb, *args, **kwargs) + +gobject.type_register(SinkBin) + + +class PipeTest(TestCase): + def setUp(self): + gst.info("setUp") + TestCase.setUp(self) + self.pipeline = gst.Pipeline() + self.assertEquals(self.pipeline.__gstrefcount__, 1) + self.assertEquals(sys.getrefcount(self.pipeline), pygobject_2_13 and 2 or 3) + + self.src = SrcBin() + self.src.prepare() + self.sink = SinkBin() + self.sink.prepare() + self.assertEquals(self.src.__gstrefcount__, 1) + self.assertEquals(sys.getrefcount(self.src), pygobject_2_13 and 2 or 3) + self.assertEquals(self.sink.__gstrefcount__, 1) + self.assertEquals(sys.getrefcount(self.sink), pygobject_2_13 and 2 or 3) + gst.info("end of SetUp") + + def tearDown(self): + gst.info("tearDown") + self.assertTrue (self.pipeline.__gstrefcount__ >= 1 and self.pipeline.__gstrefcount__ <= 2) + self.assertEquals(sys.getrefcount(self.pipeline), pygobject_2_13 and 2 or 3) + self.assertEquals(self.src.__gstrefcount__, 2) + self.assertEquals(sys.getrefcount(self.src), pygobject_2_13 and 2 or 3) + self.assertEquals(self.sink.__gstrefcount__, 2) + self.assertEquals(sys.getrefcount(self.sink), 3) + gst.debug('deleting pipeline') + del self.pipeline + self.gccollect() + + self.assertEquals(self.src.__gstrefcount__, 1) # parent gone + self.assertEquals(self.sink.__gstrefcount__, 1) # parent gone + self.assertEquals(sys.getrefcount(self.src), pygobject_2_13 and 2 or 3) + self.assertEquals(sys.getrefcount(self.sink), pygobject_2_13 and 2 or 3) + gst.debug('deleting src') + del self.src + self.gccollect() + gst.debug('deleting sink') + del self.sink + self.gccollect() + + TestCase.tearDown(self) + + def testBinState(self): + self.pipeline.add(self.src, self.sink) + self.src.link(self.sink) + self.sink.connect_handoff(self._sink_handoff_cb) + self._handoffs = 0 + + self.assertTrue(self.pipeline.set_state(gst.STATE_PLAYING) != gst.STATE_CHANGE_FAILURE) + while True: + (ret, cur, pen) = self.pipeline.get_state() + if ret == gst.STATE_CHANGE_SUCCESS and cur == gst.STATE_PLAYING: + break + + while self._handoffs < 10: + pass + + self.assertEquals(self.pipeline.set_state(gst.STATE_NULL), gst.STATE_CHANGE_SUCCESS) + while True: + (ret, cur, pen) = self.pipeline.get_state() + if ret == gst.STATE_CHANGE_SUCCESS and cur == gst.STATE_NULL: + break + +## def testProbedLink(self): +## self.pipeline.add(self.src) +## pad = self.src.get_pad("src") + +## self.sink.connect_handoff(self._sink_handoff_cb) +## self._handoffs = 0 + +## # FIXME: adding a probe to the ghost pad does not work atm +## # id = pad.add_buffer_probe(self._src_buffer_probe_cb) +## realpad = pad.get_target() +## self._probe_id = realpad.add_buffer_probe(self._src_buffer_probe_cb) + +## self._probed = False + +## while True: +## (ret, cur, pen) = self.pipeline.get_state() +## if ret == gst.STATE_CHANGE_SUCCESS and cur == gst.STATE_PLAYING: +## break + +## while not self._probed: +## pass + +## while self._handoffs < 10: +## pass + +## self.pipeline.set_state(gst.STATE_NULL) +## while True: +## (ret, cur, pen) = self.pipeline.get_state() +## if ret == gst.STATE_CHANGE_SUCCESS and cur == gst.STATE_NULL: +## break + + def _src_buffer_probe_cb(self, pad, buffer): + gst.debug("received probe on pad %r" % pad) + self._probed = True + gst.debug('adding sink bin') + self.pipeline.add(self.sink) + # this seems to get rid of the warnings about pushing on an unactivated + # pad + gst.debug('setting sink state') + + # FIXME: attempt one: sync to current pending state of bin + (res, cur, pen) = self.pipeline.get_state(timeout=0) + target = pen + if target == gst.STATE_VOID_PENDING: + target = cur + gst.debug("setting sink state to %r" % target) + # FIXME: the following print can cause a lock-up; why ? + # print target + # if we don't set async, it will possibly end up in PAUSED + self.sink.set_state(target) + + gst.debug('linking') + self.src.link(self.sink) + gst.debug('removing buffer probe id %r' % self._probe_id) + pad.remove_buffer_probe(self._probe_id) + self._probe_id = None + gst.debug('done') + + def _sink_handoff_cb(self, sink, buffer, pad): + gst.debug('received handoff on pad %r' % pad) + self._handoffs += 1 + +class TargetTest(TestCase): + def test_target(self): + src = gst.Pad("src", gst.PAD_SRC) + + ghost = gst.GhostPad("ghost_src", src) + self.failUnless(ghost.get_target() is src) + + ghost.set_target(None) + self.failUnless(ghost.get_target() is None) + + ghost.set_target(src) + self.failUnless(ghost.get_target() is src) + +if __name__ == "__main__": + unittest.main() diff --git a/testsuite/test_gst.py b/testsuite/test_gst.py new file mode 100644 index 0000000..6ad50f4 --- /dev/null +++ b/testsuite/test_gst.py @@ -0,0 +1,36 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# Copyright (C) 2009 Thomas Vander Stichele +# +# 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.1 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +from common import gst, TestCase, unittest + +class TimeArgsTest(TestCase): + def testNoneTime(self): + self.assertRaises(TypeError, gst.TIME_ARGS, None) + + def testStringTime(self): + self.assertRaises(TypeError, gst.TIME_ARGS, "String") + + def testClockTimeNone(self): + self.assertEquals(gst.TIME_ARGS(gst.CLOCK_TIME_NONE), 'CLOCK_TIME_NONE') + + def testOneSecond(self): + self.assertEquals(gst.TIME_ARGS(gst.SECOND), '0:00:01.000000000') + +if __name__ == "__main__": + unittest.main() diff --git a/testsuite/test_interface.py b/testsuite/test_interface.py new file mode 100644 index 0000000..a89e0e8 --- /dev/null +++ b/testsuite/test_interface.py @@ -0,0 +1,92 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2002 David I. Lehn +# Copyright (C) 2004 Johan Dahlin +# Copyright (C) 2005 Edward Hervey +# +# 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.1 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +from common import gst, unittest, TestCase + +import gobject + +def find_mixer_element(): + """ Searches for an element implementing the mixer interface """ + allmix = [x for x in gst.registry_get_default().get_feature_list(gst.ElementFactory) + if x.has_interface("GstMixer") and x.has_interface("GstPropertyProbe")] + if allmix == []: + return None + return allmix[0] + +class Availability(TestCase): + def testXOverlay(self): + assert hasattr(gst.interfaces, 'XOverlay') + assert issubclass(gst.interfaces.XOverlay, gobject.GInterface) + + def testMixer(self): + assert hasattr(gst.interfaces, 'Mixer') + assert issubclass(gst.interfaces.Mixer, gobject.GInterface) + +class FunctionCall(TestCase): + def FIXME_testXOverlay(self): + # obviously a testsuite is not allowed to instantiate this + # since it needs a running X or will fail. find some way to + # deal with that. + element = gst.element_factory_make('xvimagesink') + assert isinstance(element, gst.Element) + assert isinstance(element, gst.interfaces.XOverlay) + element.set_xwindow_id(0L) + +class MixerTest(TestCase): + def setUp(self): + TestCase.setUp(self) + amix = find_mixer_element() + if amix: + self.mixer = amix.create() + else: + self.mixer = None + + def tearDown(self): + del self.mixer + TestCase.tearDown(self) + + def testGetProperty(self): + if self.mixer == None: + return + self.failUnless(self.mixer.probe_get_property('device')) + self.assertRaises(ValueError, + self.mixer.probe_get_property, 'non-existent') + + def testGetProperties(self): + if self.mixer == None: + return + properties = self.mixer.probe_get_properties() + self.failUnless(properties) + self.assertEqual(type(properties), list) + prop = properties[0] + self.assertEqual(prop.name, 'device') + self.assertEqual(prop.value_type, gobject.TYPE_STRING) + + def testGetValuesName(self): + if self.mixer == None: + return + values = self.mixer.probe_get_values_name('device') + self.assertEqual(type(values), list) + + +if __name__ == "__main__": + unittest.main() diff --git a/testsuite/test_message.py b/testsuite/test_message.py new file mode 100644 index 0000000..5d34b5e --- /dev/null +++ b/testsuite/test_message.py @@ -0,0 +1,202 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2005 Thomas Vander Stichele +# +# 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.1 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import sys +from common import gobject, gst, unittest, TestCase +import gc + +class NewTest(TestCase): + def testEOS(self): + gst.info("creating new bin") + b = gst.Bin() + gst.info("creating new EOS message from that bin") + m = gst.message_new_eos(b) + gst.info("got message : %s" % m) + + def message_application_cb(self, bus, message): + gst.info("got application message") + self.got_message = True + self.loop.quit() + + def testApplication(self): + self.loop = gobject.MainLoop() + gst.info("creating new pipeline") + bin = gst.Pipeline() + bus = bin.get_bus() + bus.add_signal_watch() + self.got_message = False + bus.connect('message::application', self.message_application_cb) + + struc = gst.Structure("foo") + msg = gst.message_new_application(bin, struc) + # the bus is flushing in NULL, so we need to set the pipeline to READY + bin.set_state(gst.STATE_READY) + bus.post(msg) + self.loop.run() + bus.remove_signal_watch() + bin.set_state(gst.STATE_NULL) + self.failUnless(self.got_message == True) + self.gccollect() + +class TestCreateMessages(TestCase): + + def setUp(self): + TestCase.setUp(self) + self.element = gst.Bin() + + def tearDown(self): + del self.element + + def testCustomMessage(self): + # create two custom messages using the same structure + s = gst.Structure("something") + assert s != None + e1 = gst.message_new_custom(gst.MESSAGE_APPLICATION, self.element, s) + assert e1 + e2 = gst.message_new_custom(gst.MESSAGE_APPLICATION, self.element, s) + assert e2 + + # make sure the two structures are equal + self.assertEquals(e1.structure.to_string(), + e2.structure.to_string()) + + def testTagMessage(self): + # Create a taglist + t = gst.TagList() + t['something'] = "else" + t['another'] = 42 + + # Create two messages using that same taglist + m1 = gst.message_new_tag(self.element, t) + assert m1 + m2 = gst.message_new_tag(self.element, t) + assert m2 + + # make sure the two messages have the same taglist + t1 = m1.parse_tag() + assert t1 + keys = t1.keys() + keys.sort() + self.assertEquals(keys, ['another', 'something']) + self.assertEquals(t1['something'], "else") + self.assertEquals(t1['another'], 42) + t2 = m2.parse_tag() + assert t2 + keys = t2.keys() + keys.sort() + self.assertEquals(keys, ['another', 'something']) + self.assertEquals(t2['something'], "else") + self.assertEquals(t2['another'], 42) + + def testTagFullMessage(self): + if hasattr(gst.Message, 'parse_tag_full'): + p = gst.Pad("blahblah", gst.PAD_SRC) + # Create a taglist + t = gst.TagList() + t['something'] = "else" + t['another'] = 42 + + # Create two messages using that same taglist + m1 = gst.message_new_tag_full(self.element, p, t) + assert m1 + m2 = gst.message_new_tag_full(self.element, p, t) + assert m2 + + # make sure the two messages have the same taglist + p1, t1 = m1.parse_tag_full() + assert t1 + keys = t1.keys() + keys.sort() + self.assertEquals(p1, p) + self.assertEquals(keys, ['another', 'something']) + self.assertEquals(t1['something'], "else") + self.assertEquals(t1['another'], 42) + p2, t2 = m2.parse_tag_full() + assert t2 + keys = t2.keys() + keys.sort() + self.assertEquals(p2, p) + self.assertEquals(keys, ['another', 'something']) + self.assertEquals(t2['something'], "else") + self.assertEquals(t2['another'], 42) + + def testStepStartMessage(self): + if hasattr(gst, 'message_new_step_start'): + m = gst.message_new_step_start(self.element, True, + gst.FORMAT_TIME, 42, 1.0, + True, True) + self.assertEquals(m.type, gst.MESSAGE_STEP_START) + active, format, amount, rate, flush, intermediate = m.parse_step_start() + self.assertEquals(active, True) + self.assertEquals(format, gst.FORMAT_TIME) + self.assertEquals(amount, 42) + self.assertEquals(rate, 1.0) + self.assertEquals(flush, True) + self.assertEquals(intermediate, True) + + def testStepDoneMessage(self): + if hasattr(gst, 'message_new_step_done'): + m = gst.message_new_step_done(self.element, gst.FORMAT_TIME, 42, + 1.0, True, True, 54, True) + self.assertEquals(m.type, gst.MESSAGE_STEP_DONE) + + fmt, am, rat, flu, inter, dur, eos = m.parse_step_done() + self.assertEquals(fmt, gst.FORMAT_TIME) + self.assertEquals(am, 42) + self.assertEquals(rat, 1.0) + self.assertEquals(flu, True) + self.assertEquals(inter, True) + self.assertEquals(dur, 54) + self.assertEquals(eos, True) + + def testStructureChangeMessage(self): + if hasattr(gst, 'message_new_structure_change'): + p = gst.Pad("blah", gst.PAD_SINK) + m = gst.message_new_structure_change(p, + gst.STRUCTURE_CHANGE_TYPE_PAD_LINK, + self.element, True) + + self.assertEquals(m.type, gst.MESSAGE_STRUCTURE_CHANGE) + sct, owner, busy = m.parse_structure_change() + self.assertEquals(sct, gst.STRUCTURE_CHANGE_TYPE_PAD_LINK) + self.assertEquals(owner, self.element) + self.assertEquals(busy, True) + + def testRequestStateMessage(self): + if hasattr(gst, 'message_new_request_state'): + m = gst.message_new_request_state(self.element, gst.STATE_NULL) + self.assertEquals(m.type, gst.MESSAGE_REQUEST_STATE) + self.assertEquals(m.parse_request_state(), gst.STATE_NULL) + + def testBufferingStatsMessage(self): + if hasattr(gst.Message, 'set_buffering_stats'): + gst.debug("Creating buffering message") + m = gst.message_new_buffering(self.element, 50) + gst.debug("Setting stats") + m.set_buffering_stats(gst.BUFFERING_LIVE, 30, 1024, 123456) + self.assertEquals(m.type, gst.MESSAGE_BUFFERING) + mode, ain, aout, left = m.parse_buffering_stats() + self.assertEquals(mode, gst.BUFFERING_LIVE) + self.assertEquals(ain, 30) + self.assertEquals(aout, 1024) + self.assertEquals(left, 123456) + +if __name__ == "__main__": + unittest.main() diff --git a/testsuite/test_pad.py b/testsuite/test_pad.py new file mode 100644 index 0000000..f82f47f --- /dev/null +++ b/testsuite/test_pad.py @@ -0,0 +1,568 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2002 David I. Lehn +# Copyright (C) 2004 Johan Dahlin +# Copyright (C) 2005 Edward Hervey +# +# 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.1 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +from common import gst, unittest, TestCase, pygobject_2_13 + +import sys +import time + +class PadTemplateTest(TestCase): + def testConstructor(self): + template = gst.PadTemplate("template", gst.PAD_SINK, + gst.PAD_ALWAYS, gst.caps_from_string("audio/x-raw-int")) + self.failUnless(template) + self.assertEquals(sys.getrefcount(template), pygobject_2_13 and 2 or 3) + #self.assertEquals(template.__gstrefcount__, 1) + +class PadPushUnlinkedTest(TestCase): + def setUp(self): + TestCase.setUp(self) + self.src = gst.Pad("src", gst.PAD_SRC) + self.sink = gst.Pad("sink", gst.PAD_SINK) + + def tearDown(self): + self.assertEquals(sys.getrefcount(self.src), pygobject_2_13 and 2 or 3) + self.assertEquals(self.src.__gstrefcount__, 1) + del self.src + self.assertEquals(sys.getrefcount(self.sink), pygobject_2_13 and 2 or 3) + self.assertEquals(self.sink.__gstrefcount__, 1) + del self.sink + TestCase.tearDown(self) + + def testNoProbe(self): + self.buffer = gst.Buffer() + self.assertEquals(self.buffer.__grefcount__, 1) + self.assertEquals(self.src.push(self.buffer), gst.FLOW_NOT_LINKED) + # pushing it takes a ref in the python wrapper to keep buffer + # alive afterwards; but the core unrefs the ref it receives + self.assertEquals(self.buffer.__grefcount__, 1) + + def testFalseProbe(self): + id = self.src.add_buffer_probe(self._probe_handler, False) + self.buffer = gst.Buffer() + self.assertEquals(self.buffer.__grefcount__, 1) + self.assertEquals(self.src.push(self.buffer), gst.FLOW_OK) + self.assertEquals(self.buffer.__grefcount__, 1) + self.src.remove_buffer_probe(id) + + def testTrueProbe(self): + id = self.src.add_buffer_probe(self._probe_handler, True) + self.buffer = gst.Buffer() + self.assertEquals(self.buffer.__grefcount__, 1) + self.assertEquals(self.src.push(self.buffer), gst.FLOW_NOT_LINKED) + self.assertEquals(self.buffer.__grefcount__, 1) + self.src.remove_buffer_probe(id) + + def _probe_handler(self, pad, buffer, ret): + return ret + +class PadPushLinkedTest(TestCase): + def setUp(self): + TestCase.setUp(self) + self.src = gst.Pad("src", gst.PAD_SRC) + self.sink = gst.Pad("sink", gst.PAD_SINK) + caps = gst.caps_from_string("foo/bar") + self.src.set_caps(caps) + self.sink.set_caps(caps) + self.sink.set_chain_function(self._chain_func) + self.src.set_active(True) + self.sink.set_active(True) + self.src.link(self.sink) + self.buffers = [] + + def tearDown(self): + self.assertEquals(sys.getrefcount(self.src), pygobject_2_13 and 2 or 3) + self.assertEquals(self.src.__gstrefcount__, 1) + self.src.set_caps(None) + del self.src + self.assertEquals(sys.getrefcount(self.sink), pygobject_2_13 and 2 or 3) + self.assertEquals(self.sink.__gstrefcount__, 1) + self.sink.set_caps(None) + del self.sink + TestCase.tearDown(self) + + def _chain_func(self, pad, buffer): + gst.debug('got buffer %r, id %x, with GMO rc %d'% ( + buffer, id(buffer), buffer.__grefcount__)) + self.buffers.append(buffer) + + return gst.FLOW_OK + + def testNoProbe(self): + self.buffer = gst.Buffer() + gst.debug('created new buffer %r, id %x' % ( + self.buffer, id(self.buffer))) + self.assertEquals(self.buffer.__grefcount__, 1) + gst.debug('pushing buffer on linked pad, no probe') + self.assertEquals(self.src.push(self.buffer), gst.FLOW_OK) + gst.debug('pushed buffer on linked pad, no probe') + # one refcount is held by our scope, another is held on + # self.buffers through _chain_func + self.assertEquals(self.buffer.__grefcount__, 2) + self.assertEquals(len(self.buffers), 1) + self.buffers = None + self.assertEquals(self.buffer.__grefcount__, 1) + + def testFalseProbe(self): + id = self.src.add_buffer_probe(self._probe_handler, False) + self.buffer = gst.Buffer() + self.assertEquals(self.buffer.__grefcount__, 1) + self.assertEquals(self.src.push(self.buffer), gst.FLOW_OK) + self.assertEquals(self.buffer.__grefcount__, 1) + self.src.remove_buffer_probe(id) + self.assertEquals(len(self.buffers), 0) + + def testTrueProbe(self): + probe_id = self.src.add_buffer_probe(self._probe_handler, True) + self.buffer = gst.Buffer() + self.assertEquals(self.buffer.__grefcount__, 1) + self.assertEquals(self.src.push(self.buffer), gst.FLOW_OK) + # one refcount is held by our scope, another is held on + # self.buffers through _chain_func + self.assertEquals(self.buffer.__grefcount__, 2) + + # they are not the same Python object ... + self.failIf(self.buffer is self.buffers[0]) + self.failIf(id(self.buffer) == id(self.buffers[0])) + # ... but they wrap the same GstBuffer + self.failUnless(self.buffer == self.buffers[0]) + self.assertEquals(repr(self.buffer), repr(self.buffers[0])) + + self.src.remove_buffer_probe(probe_id) + self.assertEquals(len(self.buffers), 1) + self.buffers = None + self.assertEquals(self.buffer.__grefcount__, 1) + + def _probe_handler(self, pad, buffer, ret): + return ret + +# test for event probes with linked pads +class PadPushEventLinkedTest(TestCase): + def setUp(self): + TestCase.setUp(self) + self.src = gst.Pad("src", gst.PAD_SRC) + self.sink = gst.Pad("sink", gst.PAD_SINK) + caps = gst.caps_from_string("foo/bar") + self.src.set_caps(caps) + self.sink.set_caps(caps) + self.sink.set_chain_function(self._chain_func) + self.src.set_active(True) + self.sink.set_active(True) + self.src.link(self.sink) + self.events = [] + + def tearDown(self): + self.assertEquals(sys.getrefcount(self.src), pygobject_2_13 and 2 or 3) + self.assertEquals(self.src.__gstrefcount__, 1) + self.src.set_caps(None) + del self.src + self.assertEquals(sys.getrefcount(self.sink), pygobject_2_13 and 2 or 3) + self.assertEquals(self.sink.__gstrefcount__, 1) + self.sink.set_caps(None) + del self.sink + TestCase.tearDown(self) + + def _chain_func(self, pad, buffer): + gst.debug('got buffer %r, id %x, with GMO rc %d'% ( + buffer, id(buffer), buffer.__grefcount__)) + self.buffers.append(buffer) + + return gst.FLOW_OK + + def testNoProbe(self): + self.event = gst.event_new_eos() + gst.debug('created new eos %r, id %x' % ( + self.event, id(self.event))) + self.assertEquals(self.event.__grefcount__, 1) + gst.debug('pushing event on linked pad, no probe') + self.assertEquals(self.src.push_event(self.event), True) + gst.debug('pushed event on linked pad, no probe') + # one refcount is held by our scope + self.assertEquals(self.event.__grefcount__, 1) + # the event has reffed the src pad as the src of the event + self.assertEquals(self.src.__grefcount__, 2) + # clear it + self.event = None + self.assertEquals(self.src.__grefcount__, 1) + + def testFalseProbe(self): + probe_id = self.src.add_event_probe(self._probe_handler, False) + self.event = gst.event_new_eos() + gst.debug('created new eos %r, id %x' % ( + self.event, id(self.event))) + self.assertEquals(self.event.__grefcount__, 1) + # a false probe return drops the event and returns False + self.assertEquals(self.src.push_event(self.event), False) + # one ref in our local scope, another in self.events + self.assertEquals(self.event.__grefcount__, 2) + self.assertEquals(self.sink.__grefcount__, 1) + # the event has reffed the src pad as the src of the event + self.assertEquals(self.src.__grefcount__, 2) + # remove the event from existence + self.event = None + self.events = None + self.assertEquals(self.src.__grefcount__, 1) + self.src.remove_buffer_probe(probe_id) + + def testTrueProbe(self): + probe_id = self.src.add_event_probe(self._probe_handler, True) + self.event = gst.event_new_eos() + gst.debug('created new eos %r, id %x' % ( + self.event, id(self.event))) + self.assertEquals(self.event.__grefcount__, 1) + # a True probe lets it pass + self.assertEquals(self.src.push_event(self.event), True) + + # one refcount is held by our scope, another is held on + # self.events through _probe + self.assertEquals(self.event.__grefcount__, 2) + + # they are not the same Python object ... + self.failIf(self.event is self.events[0]) + self.failIf(id(self.event) == id(self.events[0])) + # ... but they wrap the same GstEvent + self.assertEquals(repr(self.event), repr(self.events[0])) + self.failUnless(self.event == self.events[0]) + + self.src.remove_buffer_probe(probe_id) + self.assertEquals(len(self.events), 1) + self.events = None + self.assertEquals(self.event.__grefcount__, 1) + + # the event has reffed the src pad as the src of the event + self.assertEquals(self.src.__grefcount__, 2) + # clear it + self.event = None + self.assertEquals(self.src.__grefcount__, 1) + + def _probe_handler(self, pad, event, ret): + gst.debug("probed, pad %r, event %r" % (pad, event)) + self.events.append(event) + return ret + +# a test to show that we can link a pad from the probe handler + +class PadPushProbeLinkTest(TestCase): + def setUp(self): + TestCase.setUp(self) + self.src = gst.Pad("src", gst.PAD_SRC) + self.sink = gst.Pad("sink", gst.PAD_SINK) + caps = gst.caps_from_string("foo/bar") + self.src.set_caps(caps) + self.sink.set_caps(caps) + self.src.set_active(True) + self.sink.set_active(True) + self.sink.set_chain_function(self._chain_func) + self.buffers = [] + + def tearDown(self): + self.assertEquals(sys.getrefcount(self.src), pygobject_2_13 and 2 or 3) + self.assertEquals(self.src.__gstrefcount__, 1) + self.src.set_caps(None) + del self.src + self.assertEquals(sys.getrefcount(self.sink), pygobject_2_13 and 2 or 3) + self.assertEquals(self.sink.__gstrefcount__, 1) + self.sink.set_caps(None) + del self.sink + TestCase.tearDown(self) + + def _chain_func(self, pad, buffer): + self.buffers.append(buffer) + + return gst.FLOW_OK + + def testProbeLink(self): + id = self.src.add_buffer_probe(self._probe_handler) + self.buffer = gst.Buffer() + self.assertEquals(self.buffer.__grefcount__, 1) + gst.debug('pushing buffer on linked pad, no probe') + self.assertEquals(self.src.push(self.buffer), gst.FLOW_OK) + gst.debug('pushed buffer on linked pad, no probe') + # one refcount is held by our scope, another is held on + # self.buffers through _chain_func + self.assertEquals(self.buffer.__grefcount__, 2) + self.assertEquals(len(self.buffers), 1) + self.buffers = None + self.assertEquals(self.buffer.__grefcount__, 1) + + + def _probe_handler(self, pad, buffer): + self.src.link(self.sink) + return True + + +class PadTest(TestCase): + def testConstructor(self): + # first style uses gst_pad_new + gst.debug('creating pad with name src') + pad = gst.Pad("src", gst.PAD_SRC) + self.failUnless(pad) + self.assertEquals(sys.getrefcount(pad), pygobject_2_13 and 2 or 3) + self.assertEquals(pad.__gstrefcount__, 1) + + gst.debug('creating pad with no name') + self.failUnless(gst.Pad(None, gst.PAD_SRC)) + self.failUnless(gst.Pad(name=None, direction=gst.PAD_SRC)) + self.failUnless(gst.Pad(direction=gst.PAD_SRC, name=None)) + self.failUnless(gst.Pad(direction=gst.PAD_SRC, name="src")) + + # second uses gst_pad_new_from_template + #template = gst.PadTemplate() + +class PadPipelineTest(TestCase): + def setUp(self): + TestCase.setUp(self) + self.pipeline = gst.parse_launch('fakesrc name=source ! fakesink') + src = self.pipeline.get_by_name('source') + self.srcpad = src.get_pad('src') + + def tearDown(self): + del self.pipeline + del self.srcpad + TestCase.tearDown(self) + +# FIXME: now that GstQuery is a miniobject with various _new_ factory +# functions, we need to figure out a way to deal with them in python +# def testQuery(self): +# assert self.sink.query(gst.QUERY_TOTAL, gst.FORMAT_BYTES) == -1 +# assert self.srcpad.query(gst.QUERY_POSITION, gst.FORMAT_BYTES) == 0 +# assert self.srcpad.query(gst.QUERY_POSITION, gst.FORMAT_TIME) == 0 + + +class PadProbePipeTest(TestCase): + def setUp(self): + TestCase.setUp(self) + self.pipeline = gst.Pipeline() + self.assertEquals(self.pipeline.__gstrefcount__, 1) + self.assertEquals(sys.getrefcount(self.pipeline), pygobject_2_13 and 2 or 3) + + self.fakesrc = gst.element_factory_make('fakesrc') + self.fakesink = gst.element_factory_make('fakesink') + self.assertEquals(self.fakesrc.__gstrefcount__, 1) + self.assertEquals(sys.getrefcount(self.fakesrc), pygobject_2_13 and 2 or 3) + + self.pipeline.add(self.fakesrc, self.fakesink) + self.assertEquals(self.fakesrc.__gstrefcount__, 2) # added + self.assertEquals(sys.getrefcount(self.fakesrc), pygobject_2_13 and 2 or 3) + self.assertEquals(self.fakesink.__gstrefcount__, 2) # added + self.assertEquals(sys.getrefcount(self.fakesink), pygobject_2_13 and 2 or 3) + + self.fakesrc.link(self.fakesink) + + self.assertEquals(self.pipeline.__gstrefcount__, 1) + self.assertEquals(sys.getrefcount(self.pipeline), pygobject_2_13 and 2 or 3) + self.assertEquals(self.fakesrc.__gstrefcount__, 2) + self.assertEquals(sys.getrefcount(self.fakesrc), pygobject_2_13 and 2 or 3) + self.assertEquals(self.fakesink.__gstrefcount__, 2) + self.assertEquals(sys.getrefcount(self.fakesink), pygobject_2_13 and 2 or 3) + + def tearDown(self): + # Refcount must be either 1 or 2, to allow for a possibly still running + # state-recalculation thread + self.assertTrue (self.pipeline.__gstrefcount__ >= 1 and self.pipeline.__gstrefcount__ <= 2) + + self.assertEquals(sys.getrefcount(self.pipeline), pygobject_2_13 and 2 or 3) + self.assertEquals(self.fakesrc.__gstrefcount__, 2) + self.assertEquals(sys.getrefcount(self.fakesrc), pygobject_2_13 and 2 or 3) + gst.debug('deleting pipeline') + del self.pipeline + self.gccollect() + + self.assertEquals(self.fakesrc.__gstrefcount__, 1) # parent gone + self.assertEquals(self.fakesink.__gstrefcount__, 1) # parent gone + self.assertEquals(sys.getrefcount(self.fakesrc), pygobject_2_13 and 2 or 3) + self.assertEquals(sys.getrefcount(self.fakesink), pygobject_2_13 and 2 or 3) + gst.debug('deleting fakesrc') + del self.fakesrc + self.gccollect() + gst.debug('deleting fakesink') + del self.fakesink + self.gccollect() + + TestCase.tearDown(self) + + def testFakeSrcProbeOnceKeep(self): + self.fakesrc.set_property('num-buffers', 1) + + self.fakesink.set_property('signal-handoffs', True) + self.fakesink.connect('handoff', self._handoff_callback_fakesink) + + pad = self.fakesrc.get_pad('src') + id = pad.add_buffer_probe(self._probe_callback_fakesrc) + self._got_fakesrc_buffer = 0 + self._got_fakesink_buffer = 0 + self.pipeline.set_state(gst.STATE_PLAYING) + while not self._got_fakesrc_buffer: + gst.debug('waiting for fakesrc buffer') + pass + while not self._got_fakesink_buffer: + gst.debug('waiting for fakesink buffer') + pass + + gst.debug('got buffers from fakesrc and fakesink') + self.assertEquals(self._got_fakesink_buffer, 1) + pad.remove_buffer_probe(id) + + self.pipeline.set_state(gst.STATE_NULL) + + def testFakeSrcProbeMany(self): + self.fakesrc.set_property('num-buffers', 1000) + + pad = self.fakesrc.get_pad('src') + id = pad.add_buffer_probe(self._probe_callback_fakesrc) + self._got_fakesrc_buffer = 0 + self.pipeline.set_state(gst.STATE_PLAYING) + while not self._got_fakesrc_buffer == 1000: + import time + # allow for context switching; a busy loop here locks up the + # streaming thread too much + time.sleep(.0001) + pad.remove_buffer_probe(id) + + self.pipeline.set_state(gst.STATE_NULL) + + def _probe_callback_fakesrc(self, pad, buffer): + self.failUnless(isinstance(pad, gst.Pad)) + self.failUnless(isinstance(buffer, gst.Buffer)) + self._got_fakesrc_buffer += 1 + gst.debug('fakesrc sent buffer %r, %d total sent' % ( + buffer, self._got_fakesrc_buffer)) + return True + + def _handoff_callback_fakesink(self, sink, buffer, pad): + self.failUnless(isinstance(buffer, gst.Buffer)) + self.failUnless(isinstance(pad, gst.Pad)) + self._got_fakesink_buffer += 1 + gst.debug('fakesink got buffer %r, %d total received' % ( + buffer, self._got_fakesrc_buffer)) + gst.debug('pad %r, py refcount %d, go rc %d, gst rc %d' % ( + pad, sys.getrefcount(pad), pad.__grefcount__, pad.__gstrefcount__)) + return True + + def testRemovingProbe(self): + self.fakesrc.set_property('num-buffers', 10) + + handle = None + self._num_times_called = 0 + def buffer_probe(pad, buffer, data): + self._num_times_called += 1 + pad.remove_buffer_probe(handle) + return True + + pad = self.fakesrc.get_pad('src') + data = [] + handle = pad.add_buffer_probe(buffer_probe, data) + self.pipeline.set_state(gst.STATE_PLAYING) + m = self.pipeline.get_bus().poll(gst.MESSAGE_EOS, -1) + assert m + assert self._num_times_called == 1 + self.pipeline.set_state(gst.STATE_NULL) + assert sys.getrefcount(buffer_probe) == 2 + assert sys.getrefcount(data) == 2 + # FIXME: having m going out of scope doesn't seem to be enough + # to get it gc collected, and it keeps a ref to the pipeline. + # Look for a way to not have to do this explicitly + del m + self.gccollect() + +class PadRefCountTest(TestCase): + def testAddPad(self): + # add a pad to an element + e = gst.element_factory_make('fakesrc') + self.assertEquals(sys.getrefcount(e), pygobject_2_13 and 2 or 3) + self.assertEquals(e.__gstrefcount__, 1) + + gst.debug('creating pad with name mypad') + pad = gst.Pad("mypad", gst.PAD_SRC) + self.failUnless(pad) + self.assertEquals(sys.getrefcount(pad), pygobject_2_13 and 2 or 3) + self.assertEquals(pad.__gstrefcount__, 1) + + gst.debug('adding pad to element') + e.add_pad(pad) + self.assertEquals(sys.getrefcount(e), pygobject_2_13 and 2 or 3) + self.assertEquals(e.__gstrefcount__, 1) + self.assertEquals(sys.getrefcount(pad), pygobject_2_13 and 2 or 3) + self.assertEquals(pad.__gstrefcount__, 2) # added to element + + gst.debug('deleting element and collecting') + self.gccollect() + del e + if not pygobject_2_13: + # the element will be collected at 'del e' if we're using + # pygobject >= 2.13.0 + self.assertEquals(self.gccollect(), 1) # collected the element + self.assertEquals(sys.getrefcount(pad), pygobject_2_13 and 2 or 3) + self.assertEquals(pad.__gstrefcount__, 1) # removed from element + + gst.debug('deleting pad and collecting') + del pad + if not pygobject_2_13: + # the pad will be collected at 'del pad' if we're using + # pygobject >= 2.13.0 + self.assertEquals(self.gccollect(), 1) # collected the pad + gst.debug('going into teardown') + +class PadBlockTest(TestCase): + def testCallbackFlush(self): + # check that the same block callback can be called more than once (weird + # test but it was broken) + + def blocked_cb(pad, blocked): + pad.push_event(gst.event_new_flush_start()) + + pad = gst.Pad('src', gst.PAD_SRC) + pad.set_active(True) + pad.set_blocked_async(True, blocked_cb) + + for i in xrange(10): + buf = gst.Buffer('ciao') + pad.push(buf) + pad.push_event(gst.event_new_flush_stop()) + + def testCallbackRefcount(self): + def blocked_cb(pad, blocked): + pad.set_blocked_async(False, unblocked_cb) + + def unblocked_cb(pad, blocked): + pass + + cb_refcount = sys.getrefcount(blocked_cb) + # sys.getrefcount() returns refcount + 1 + self.assertEquals(cb_refcount, 2) + + pad = gst.Pad('src', gst.PAD_SRC) + pad.set_active(True) + pad.set_blocked_async(True, blocked_cb) + # set_blocked_async refs the callback + self.assertEquals(sys.getrefcount(blocked_cb), 3) + + buf = gst.Buffer('ciao') + pad.push(buf) + + # in blocked_cb() we called set_blocked_async() with a different + # callback, so blocked_cb() should have been unreffed + cb_refcount_after = sys.getrefcount(blocked_cb) + self.assertEquals(sys.getrefcount(blocked_cb), cb_refcount) + +if __name__ == "__main__": + unittest.main() diff --git a/testsuite/test_pbutils.py b/testsuite/test_pbutils.py new file mode 100644 index 0000000..94325e3 --- /dev/null +++ b/testsuite/test_pbutils.py @@ -0,0 +1,63 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2008 Edward Hervey +# +# 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.1 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +from common import gobject, gst, unittest, TestCase + +class Descriptions(TestCase): + + def testSourceDescription(self): + assert hasattr(gst.pbutils, 'get_source_description') + self.assertEquals(gst.pbutils.get_source_description("file"), + "FILE protocol source") + + def testSinkDescription(self): + assert hasattr(gst.pbutils, 'get_sink_description') + self.assertEquals(gst.pbutils.get_sink_description("file"), + "FILE protocol sink") + + def testDecoderDescription(self): + assert hasattr(gst.pbutils, 'get_decoder_description') + self.assertEquals(gst.pbutils.get_decoder_description(gst.caps_from_string("audio/mpeg,mpegversion=1,layer=3")), + 'MPEG-1 Layer 3 (MP3) decoder') + + def testCodecDescription(self): + assert hasattr(gst.pbutils, 'get_codec_description') + self.assertEquals(gst.pbutils.get_codec_description(gst.caps_from_string("audio/mpeg,mpegversion=1,layer=3")), + 'MPEG-1 Layer 3 (MP3)') + + def testEncoderDescription(self): + assert hasattr(gst.pbutils, 'get_encoder_description') + self.assertEquals(gst.pbutils.get_encoder_description(gst.caps_from_string("audio/mpeg,mpegversion=1,layer=3")), + 'MPEG-1 Layer 3 (MP3) encoder') + + def testElementDescription(self): + assert hasattr(gst.pbutils, 'get_element_description') + self.assertEquals(gst.pbutils.get_element_description("something"), + "GStreamer element something") + + def testAddCodecDescription(self): + assert hasattr(gst.pbutils, 'add_codec_description_to_tag_list') + +# TODO +# Add tests for the other parts of pbutils: +# * missing-plugins +# * install-plugins (and detect if there weren't compiled because of a version +# of plugins-base too low) + diff --git a/testsuite/test_pipeline.py b/testsuite/test_pipeline.py new file mode 100644 index 0000000..a57c7f9 --- /dev/null +++ b/testsuite/test_pipeline.py @@ -0,0 +1,250 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2002 David I. Lehn +# Copyright (C) 2004 Johan Dahlin +# Copyright (C) 2005 Edward Hervey +# +# 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.1 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import time + +from common import gst, unittest, TestCase, pygobject_2_13 + +import gobject + +class TestConstruction(TestCase): + def setUp(self): + self.gctrack() + + def tearDown(self): + self.gccollect() + self.gcverify() + + def testGoodConstructor(self): + name = 'test-pipeline' + pipeline = gst.Pipeline(name) + self.assertEquals(pipeline.__gstrefcount__, 1) + assert pipeline is not None, 'pipeline is None' + self.failUnless(isinstance(pipeline, gst.Pipeline), + 'pipeline is not a GstPipline') + assert pipeline.get_name() == name, 'pipelines name is wrong' + self.assertEquals(pipeline.__gstrefcount__, 1) + + def testParseLaunch(self): + pipeline = gst.parse_launch('fakesrc ! fakesink') + +class Pipeline(TestCase): + def setUp(self): + self.gctrack() + self.pipeline = gst.Pipeline('test-pipeline') + source = gst.element_factory_make('fakesrc', 'source') + source.set_property('num-buffers', 5) + sink = gst.element_factory_make('fakesink', 'sink') + self.pipeline.add(source, sink) + gst.element_link_many(source, sink) + + def tearDown(self): + del self.pipeline + self.gccollect() + self.gcverify() + + def testRun(self): + self.assertEqual(self.pipeline.get_state()[1], gst.STATE_NULL) + self.pipeline.set_state(gst.STATE_PLAYING) + self.assertEqual(self.pipeline.get_state()[1], gst.STATE_PLAYING) + + time.sleep(1) + + self.assertEqual(self.pipeline.get_state()[1], gst.STATE_PLAYING) + self.pipeline.set_state(gst.STATE_NULL) + self.assertEqual(self.pipeline.get_state()[1], gst.STATE_NULL) + +class PipelineTags(TestCase): + def setUp(self): + self.gctrack() + self.pipeline = gst.parse_launch('audiotestsrc num-buffers=100 ! vorbisenc name=encoder ! oggmux name=muxer ! fakesink') + + def tearDown(self): + del self.pipeline + self.gccollect() + self.gcverify() + + def testRun(self): + # in 0.10.15.1, this triggers + # sys:1: gobject.Warning: g_value_get_uint: assertion `G_VALUE_HOLDS_UINT (value)' failed + # during pipeline playing + + l = gst.TagList() + l[gst.TAG_ARTIST] = 'artist' + l[gst.TAG_TRACK_NUMBER] = 1 + encoder = self.pipeline.get_by_name('encoder') + encoder.merge_tags(l, gst.TAG_MERGE_APPEND) + + self.assertEqual(self.pipeline.get_state()[1], gst.STATE_NULL) + self.pipeline.set_state(gst.STATE_PLAYING) + self.assertEqual(self.pipeline.get_state()[1], gst.STATE_PLAYING) + + time.sleep(1) + + self.assertEqual(self.pipeline.get_state()[1], gst.STATE_PLAYING) + self.pipeline.set_state(gst.STATE_NULL) + self.assertEqual(self.pipeline.get_state()[1], gst.STATE_NULL) + + +class Bus(TestCase): + def testGet(self): + pipeline = gst.Pipeline('test') + self.assertEquals(pipeline.__gstrefcount__, 1) + bus = pipeline.get_bus() + self.assertEquals(pipeline.__gstrefcount__, 1) + # one for python and one for the pipeline + self.assertEquals(bus.__gstrefcount__, 2) + + del pipeline + if not pygobject_2_13: + self.failUnless(self.gccollect()) + self.assertEquals(bus.__gstrefcount__, 1) + +class PipelineAndBus(TestCase): + def setUp(self): + TestCase.setUp(self) + self.pipeline = gst.Pipeline('test-pipeline') + source = gst.element_factory_make('fakesrc', 'source') + sink = gst.element_factory_make('fakesink', 'sink') + self.pipeline.add(source, sink) + gst.element_link_many(source, sink) + + self.bus = self.pipeline.get_bus() + self.assertEquals(self.bus.__gstrefcount__, 2) + self.handler = self.bus.add_watch(self._message_received) + self.assertEquals(self.bus.__gstrefcount__, 3) + self.assertEquals(self.pipeline.__gstrefcount__, 1) + + self.loop = gobject.MainLoop() + + def tearDown(self): + # FIXME: fix the refcount issues with the bus/pipeline + # flush the bus to be able to assert on the pipeline refcount + #while self.pipeline.__gstrefcount__ > 1: + self.gccollect() + + # one for the pipeline, two for the snake + # three for the watch now shake shake shake but don't you + self.assertEquals(self.bus.__gstrefcount__, 3) + self.failUnless(gobject.source_remove(self.handler)) + self.assertEquals(self.bus.__gstrefcount__, 2) + self.gccollect() + + gst.debug('THOMAS: pipeline rc %d' % self.pipeline.__gstrefcount__) + #self.assertEquals(self.pipeline.__gstrefcount__, 1) + del self.pipeline + self.gccollect() + #self.assertEquals(self.bus.__gstrefcount__, 2) + del self.bus + self.gccollect() + + # the async thread can be holding a ref, Wim is going to work on this + #TestCase.tearDown(self) + + def _message_received(self, bus, message): + gst.debug('received message: %s, %s' % ( + message.src.get_path_string(), message.type.value_nicks[1])) + t = message.type + if t == gst.MESSAGE_STATE_CHANGED: + old, new, pen = message.parse_state_changed() + gst.debug('%r state change from %r to %r' % ( + message.src.get_path_string(), old, new)) + if message.src == self.pipeline and new == self.final: + self.loop.quit() + + return True + + def testPlaying(self): + self.final = gst.STATE_PLAYING + ret = self.pipeline.set_state(gst.STATE_PLAYING) + self.assertEquals(ret, gst.STATE_CHANGE_ASYNC) + + # go into a main loop to wait for messages + self.loop.run() + + # we go to READY so we get messages; going to NULL would set + # the bus flushing + self.final = gst.STATE_READY + ret = self.pipeline.set_state(gst.STATE_READY) + self.assertEquals(ret, gst.STATE_CHANGE_SUCCESS) + self.loop.run() + + # FIXME: not setting to NULL causes a deadlock; we might want to + # fix this in the bindings + self.assertEquals(self.pipeline.set_state(gst.STATE_NULL), + gst.STATE_CHANGE_SUCCESS) + self.assertEquals(self.pipeline.get_state(), + (gst.STATE_CHANGE_SUCCESS, gst.STATE_NULL, gst.STATE_VOID_PENDING)) + self.gccollect() + +class TestPipeSub(gst.Pipeline): + def do_handle_message(self, message): + self.debug('do_handle_message') + gst.Pipeline.do_handle_message(self, message) + self.type = message.type +gobject.type_register(TestPipeSub) + +class TestPipeSubSub(TestPipeSub): + def do_handle_message(self, message): + self.debug('do_handle_message') + TestPipeSub.do_handle_message(self, message) +gobject.type_register(TestPipeSubSub) + + +# see http://bugzilla.gnome.org/show_bug.cgi?id=577735 +class TestSubClass(TestCase): + def setUp(self): + self.gctrack() + + def tearDown(self): + self.gccollect() + self.gcverify() + + def testSubClass(self): + p = TestPipeSub() + u = gst.element_factory_make('uridecodebin') + self.assertEquals(u.__grefcount__, 1) + self.failIf(getattr(p, 'type', None)) + # adding uridecodebin triggers a clock-provide message; + # this message should be dropped, and thus not affect + # the refcount of u beyond the parenting. + p.add(u) + self.assertEquals(getattr(p, 'type', None), gst.MESSAGE_CLOCK_PROVIDE) + self.assertEquals(u.__grefcount__, 2) + del p + self.assertEquals(u.__grefcount__, 1) + + def testSubSubClass(self): + # Edward is worried that a subclass of a subclass will screw up + # the refcounting wrt. GST_BUS_DROP + p = TestPipeSubSub() + u = gst.element_factory_make('uridecodebin') + self.assertEquals(u.__grefcount__, 1) + self.failIf(getattr(p, 'type', None)) + p.add(u) + self.assertEquals(getattr(p, 'type', None), gst.MESSAGE_CLOCK_PROVIDE) + self.assertEquals(u.__grefcount__, 2) + del p + self.assertEquals(u.__grefcount__, 1) + +if __name__ == "__main__": + unittest.main() diff --git a/testsuite/test_registry.py b/testsuite/test_registry.py new file mode 100644 index 0000000..521463a --- /dev/null +++ b/testsuite/test_registry.py @@ -0,0 +1,68 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2002 David I. Lehn +# Copyright (C) 2004 Johan Dahlin +# Copyright (C) 2005 Edward Hervey +# +# 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.1 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import sys +import gc +from common import gst, unittest, TestCase + +class RegistryTest(TestCase): + def setUp(self): + self.registry = gst.registry_get_default() + self.plugins = self.registry.get_plugin_list() + TestCase.setUp(self) + + def testGetDefault(self): + assert(self.registry) + + def testPluginList(self): + names = map(lambda p: p.get_name(), self.plugins) + self.failUnless('staticelements' in names) + + def testGetPathList(self): + # FIXME: this returns an empty list; probably due to core; + # examine problem + + paths = self.registry.get_path_list() + +class RegistryFeatureTest(TestCase): + def setUp(self): + self.registry = gst.registry_get_default() + self.plugins = self.registry.get_plugin_list() + self.efeatures = self.registry.get_feature_list(gst.TYPE_ELEMENT_FACTORY) + self.tfeatures = self.registry.get_feature_list(gst.TYPE_TYPE_FIND_FACTORY) + self.ifeatures = self.registry.get_feature_list(gst.TYPE_INDEX_FACTORY) + TestCase.setUp(self) + + def testFeatureList(self): + self.assertRaises(TypeError, self.registry.get_feature_list, "kaka") + + elements = map(lambda f: f.get_name(), self.efeatures) + self.failUnless('fakesink' in elements) + + typefinds = map(lambda f: f.get_name(), self.tfeatures) + + indexers = map(lambda f: f.get_name(), self.ifeatures) + self.failUnless('memindex' in indexers) + + +if __name__ == "__main__": + unittest.main() diff --git a/testsuite/test_segment.py b/testsuite/test_segment.py new file mode 100644 index 0000000..c96dded --- /dev/null +++ b/testsuite/test_segment.py @@ -0,0 +1,62 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2006 Edward Hervey +# +# 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.1 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +from common import gst, unittest, TestCase + +class SegmentTest(TestCase): + def testSeekNoSize(self): + segment = gst.Segment() + segment.init(gst.FORMAT_BYTES) + + # configure segment to start at 100 with no defined stop position + update = segment.set_seek(1.0, gst.FORMAT_BYTES, gst.SEEK_FLAG_NONE, + gst.SEEK_TYPE_SET, 100, + gst.SEEK_TYPE_NONE, -1) + self.assertEquals(update, True) + self.assertEquals(segment.start, 100) + self.assertEquals(segment.stop, -1) + + # configure segment to stop relative, should not do anything since + # size is unknown + update = segment.set_seek(1.0, gst.FORMAT_BYTES, gst.SEEK_FLAG_NONE, + gst.SEEK_TYPE_NONE, 200, + gst.SEEK_TYPE_CUR, -100) + + # the update flag is deprecated, we cannot check for proper behaviour. + #self.assertEquals(update, False) + self.assertEquals(segment.start, 100) + self.assertEquals(segment.stop, -1) + + # clipping on outside range, always returns False + res, cstart, cstop = segment.clip(gst.FORMAT_BYTES, 0, 50) + self.assertEquals(res, False) + + # touching lower bound but outside + res, cstart, cstop = segment.clip(gst.FORMAT_BYTES, 50, 100) + self.assertEquals(res, False) + + # partially inside + res, cstart, cstop = segment.clip(gst.FORMAT_BYTES, 50, 150) + self.assertEquals(res, True) + self.assertEquals(cstart, 100) + self.assertEquals(cstop, 150) + +if __name__ == "__main__": + unittest.main() diff --git a/testsuite/test_struct.py b/testsuite/test_struct.py new file mode 100644 index 0000000..5ab75d3 --- /dev/null +++ b/testsuite/test_struct.py @@ -0,0 +1,123 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2002 David I. Lehn +# Copyright (C) 2004 Johan Dahlin +# Copyright (C) 2005 Edward Hervey +# +# 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.1 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import sys +from common import gst, unittest, TestCase + +class StructureTest(TestCase): + def setUp(self): + TestCase.setUp(self) + self.struct = gst.structure_from_string('video/x-raw-yuv,width=10,foo="bar",pixel-aspect-ratio=1/2,framerate=5/1,boolean=(boolean)true') + + def testName(self): + assert self.struct.get_name() == 'video/x-raw-yuv' + self.struct.set_name('foobar') + assert self.struct.get_name() == 'foobar' + + def testInt(self): + assert self.struct.has_key('width') + assert isinstance(self.struct['width'], int) + assert self.struct['width'] == 10, self.struct['width'] + self.struct['width'] = 5 + assert self.struct.has_key('width') + assert isinstance(self.struct['width'], int) + assert self.struct['width'] == 5, self.struct['width'] + + def testString(self): + assert self.struct.has_key('foo') + assert isinstance(self.struct['foo'], unicode) + assert self.struct['foo'] == 'bar', self.struct['foo'] + self.struct['foo'] = 'baz' + assert self.struct.has_key('foo') + assert isinstance(self.struct['foo'], unicode) + assert self.struct['foo'] == 'baz', self.struct['foo'] + + def testBoolean(self): + assert self.struct.has_key('boolean') + assert isinstance(self.struct['boolean'], bool) + assert self.struct['boolean'] == True, self.struct['boolean'] + self.struct['boolean'] = False + assert self.struct.has_key('boolean') + assert isinstance(self.struct['boolean'], bool) + assert self.struct['boolean'] == False, self.struct['boolean'] + + def testCreateInt(self): + self.struct['integer'] = 5 + assert self.struct.has_key('integer') + assert isinstance(self.struct['integer'], int) + assert self.struct['integer'] == 5, self.struct['integer'] + + def testGstValue(self): + s = self.struct + s['fourcc'] = gst.Fourcc('XVID') + assert s['fourcc'].fourcc == 'XVID' + s['frac'] = gst.Fraction(3,4) + assert s['frac'].num == 3 + assert s['frac'].denom == 4 + s['fracrange'] = gst.FractionRange(gst.Fraction(0,1), + gst.Fraction(25,3)) + assert s['fracrange'].low.num == 0 + assert s['fracrange'].low.denom == 1 + assert s['fracrange'].high.num == 25 + assert s['fracrange'].high.denom == 3 + s['intrange'] = gst.IntRange(5,21) + assert s['intrange'].low == 5 + assert s['intrange'].high == 21 + s['doublerange'] = gst.DoubleRange(6.,21.) + assert s['doublerange'].low == 6. + assert s['doublerange'].high == 21. + s['fixedlist'] = (4, 5, 6) + assert isinstance(s['fixedlist'], tuple) + assert s['fixedlist'] == (4, 5, 6) + s['list'] = [4, 5, 6] + assert isinstance(s['list'], list) + assert s['list'] == [4, 5, 6] + s['boolean'] = True + assert isinstance(s['boolean'], bool) + assert s['boolean'] == True + + # finally, some recursive tests + s['rflist'] = ([(['a', 'b'], ['c', 'd']),'e'], ['f', 'g']) + assert s['rflist'] == ([(['a', 'b'], ['c', 'd']),'e'], ['f', 'g']) + s['rlist'] = [([(['a', 'b'], ['c', 'd']),'e'], ['f', 'g']), 'h'] + assert s['rlist'] == [([(['a', 'b'], ['c', 'd']),'e'], ['f', 'g']), 'h'] + + def testStructureChange(self): + assert self.struct['framerate'] == gst.Fraction(5, 1) + self.struct['framerate'] = gst.Fraction(10, 1) + assert self.struct['framerate'] == gst.Fraction(10, 1) + self.struct['pixel-aspect-ratio'] = gst.Fraction(4, 2) + assert self.struct['pixel-aspect-ratio'].num == 2 + assert self.struct['pixel-aspect-ratio'].denom == 1 + + def testKeys(self): + k = self.struct.keys() + self.failUnless(k) + self.assertEquals(len(k), 5) + self.failUnless("width" in k) + self.failUnless("foo" in k) + self.failUnless("framerate" in k) + self.failUnless("pixel-aspect-ratio" in k) + self.failUnless("boolean" in k) + +if __name__ == "__main__": + unittest.main() diff --git a/testsuite/test_taglist.py b/testsuite/test_taglist.py new file mode 100644 index 0000000..2b94918 --- /dev/null +++ b/testsuite/test_taglist.py @@ -0,0 +1,71 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2007 Johan Dahlin +# +# 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.1 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +from common import gst, TestCase + + +class TestTagList(TestCase): + def testContains(self): + taglist = gst.TagList() + self.failIf('key' in taglist) + taglist['key'] = 'value' + self.failUnless('key' in taglist) + + def testLength(self): + taglist = gst.TagList() + self.assertEqual(len(taglist), 0) + taglist['key1'] = 'value' + taglist['key2'] = 'value' + self.assertEqual(len(taglist), 2) + + def testKeys(self): + taglist = gst.TagList() + self.assertEqual(taglist.keys(), []) + taglist['key1'] = 'value' + taglist['key2'] = 'value' + keys = taglist.keys() + keys.sort() + self.assertEqual(keys, ['key1', 'key2']) + + def testUnicode(self): + taglist = gst.TagList() + + # normal ASCII text + taglist[gst.TAG_ARTIST] = 'Artist' + self.failUnless(isinstance(taglist[gst.TAG_ARTIST], unicode)) + self.assertEquals(taglist[gst.TAG_ARTIST], u'Artist') + self.assertEquals(taglist[gst.TAG_ARTIST], 'Artist') + + # normal ASCII text as unicode + taglist[gst.TAG_ARTIST] = u'Artist' + self.failUnless(isinstance(taglist[gst.TAG_ARTIST], unicode)) + self.assertEquals(taglist[gst.TAG_ARTIST], u'Artist') + self.assertEquals(taglist[gst.TAG_ARTIST], 'Artist') + + # real unicode + taglist[gst.TAG_ARTIST] = u'S\xc3\xadgur R\xc3\xb3s' + self.failUnless(isinstance(taglist[gst.TAG_ARTIST], unicode)) + self.assertEquals(taglist[gst.TAG_ARTIST], u'S\xc3\xadgur R\xc3\xb3s') + + def testUnsignedInt(self): + taglist = gst.TagList() + taglist[gst.TAG_TRACK_NUMBER] = 1 + vorbis = gst.tag.to_vorbis_comments(taglist, gst.TAG_TRACK_NUMBER) + self.assertEquals(vorbis, ['TRACKNUMBER=1']) diff --git a/testsuite/test_xml.py b/testsuite/test_xml.py new file mode 100644 index 0000000..615a41a --- /dev/null +++ b/testsuite/test_xml.py @@ -0,0 +1,53 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2002 David I. Lehn +# Copyright (C) 2004 Johan Dahlin +# Copyright (C) 2005 Edward Hervey +# +# 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.1 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +from common import gst, unittest, TestCase + +class PadTest(TestCase): + + def testQuery(self): + # don't run this test if we don't have the libxml2 module + try: + import libxml2 + except: + return + xml = gst.XML() + xml.parse_memory(""" + + + test-pipeline + pipeline + + name + test-pipeline + + +""") + elements = xml.get_topelements() + assert len(elements) == 1 + element = elements[0] + assert isinstance(element, gst.Pipeline) + assert element.get_name() == 'test-pipeline' + +if __name__ == "__main__": + unittest.main() + diff --git a/testsuite/testhelpermodule.c b/testsuite/testhelpermodule.c new file mode 100644 index 0000000..1325262 --- /dev/null +++ b/testsuite/testhelpermodule.c @@ -0,0 +1,56 @@ +#include "pygobject.h" +#include "test-object.h" + +#include +#include + +static PyObject * +_wrap_get_object (PyObject * self) +{ + GObject *obj; + obj = g_object_new (TEST_TYPE_OBJECT, NULL); + if (!obj) { + return NULL; + } + + return pygobject_new(obj); +} + +static PyObject * +_wrap_emit_event (PyObject * self, PyObject *args) +{ + PyGObject *obj; + GstEventType event_type = GST_EVENT_UNKNOWN; + GstEvent *event; + + if (!PyArg_ParseTuple(args, "O|i", &obj, &event_type)) + return NULL; + + event = gst_event_new_custom(event_type, NULL); + + g_signal_emit_by_name(G_OBJECT(obj->obj), "event", event); + + gst_mini_object_unref(GST_MINI_OBJECT(event)); + + Py_INCREF(Py_None); + return Py_None; +} + +static PyMethodDef testhelper_methods[] = { + { "get_object", (PyCFunction)_wrap_get_object, METH_NOARGS }, + { "emit_event", (PyCFunction)_wrap_emit_event, METH_VARARGS }, + { NULL, NULL } +}; + +void +inittesthelper () +{ + PyObject *m, *d; + + init_pygobject(); + gst_init(NULL, NULL); + + m = Py_InitModule ("testhelper", testhelper_methods); + + d = PyModule_GetDict(m); +} diff --git a/win32/MANIFEST b/win32/MANIFEST new file mode 100644 index 0000000..295ff5c --- /dev/null +++ b/win32/MANIFEST @@ -0,0 +1,6 @@ +win32/MANIFEST +win32/common/config.h +win32/common/config.h.in +win32/vs6/gst_python.dsw +win32/vs6/libgstpython.dsp +win32/vs6/pygenfiles.dsp \ No newline at end of file diff --git a/win32/common/config.h b/win32/common/config.h new file mode 100644 index 0000000..7f90c9f --- /dev/null +++ b/win32/common/config.h @@ -0,0 +1,88 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Defined if gcov is enabled to force a rebuild due to config.h changing */ +#undef GST_GCOV_ENABLED + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* We can use the plugins-install methods */ +#define HAVE_PLUGINS_INSTALL 1 + +/* Defined if we have a 2.12 series pygobject */ +#undef HAVE_PYGOBJECT_2_12 + +/* Defined if we have a 2.16 series pygobject */ +#undef HAVE_PYGOBJECT_2_16 + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define if valgrind should be used */ +#undef HAVE_VALGRIND + +/* We can use the videoorientation interface */ +#define HAVE_VIDEO_ORIENTATION_INTERFACE 1 + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +#undef NO_MINUS_C_MINUS_O + +/* Name of package */ +#define PACKAGE "gst-python" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "GStreamer Python Bindings" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "GStreamer Python Bindings 0.10.22" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "gst-python" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "0.10.22" + +/* PyGst major version */ +#define PYGST_MAJOR_VERSION 0 + +/* PyGst micro version */ +#define PYGST_MICRO_VERSION 22 + +/* PyGst minor version */ +#define PYGST_MINOR_VERSION 10 + +/* PyGst nano version */ +#define PYGST_NANO_VERSION 0 + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#define VERSION "0.10.22" diff --git a/win32/common/config.h.in b/win32/common/config.h.in new file mode 100644 index 0000000..6407204 --- /dev/null +++ b/win32/common/config.h.in @@ -0,0 +1,88 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Defined if gcov is enabled to force a rebuild due to config.h changing */ +#undef GST_GCOV_ENABLED + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* We can use the plugins-install methods */ +#define HAVE_PLUGINS_INSTALL 1 + +/* Defined if we have a 2.12 series pygobject */ +#undef HAVE_PYGOBJECT_2_12 + +/* Defined if we have a 2.16 series pygobject */ +#undef HAVE_PYGOBJECT_2_16 + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define if valgrind should be used */ +#undef HAVE_VALGRIND + +/* We can use the videoorientation interface */ +#define HAVE_VIDEO_ORIENTATION_INTERFACE 1 + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +#undef NO_MINUS_C_MINUS_O + +/* Name of package */ +#define PACKAGE "@PACKAGE@" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "@PACKAGE_NAME@" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "@PACKAGE_STRING@" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "@PACKAGE_TARNAME@" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "@PACKAGE_VERSION@" + +/* PyGst major version */ +#define PYGST_MAJOR_VERSION @PACKAGE_VERSION_MAJOR@ + +/* PyGst micro version */ +#define PYGST_MICRO_VERSION @PACKAGE_VERSION_MICRO@ + +/* PyGst minor version */ +#define PYGST_MINOR_VERSION @PACKAGE_VERSION_MINOR@ + +/* PyGst nano version */ +#define PYGST_NANO_VERSION @PACKAGE_VERSION_NANO@ + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#define VERSION "@VERSION@" diff --git a/win32/vs6/gst_python.dsw b/win32/vs6/gst_python.dsw new file mode 100644 index 0000000..16b4194 --- /dev/null +++ b/win32/vs6/gst_python.dsw @@ -0,0 +1,41 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "libgstpython"=".\libgstpython.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "pygenfiles"=".\pygenfiles.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/win32/vs6/libgstpython.dsp b/win32/vs6/libgstpython.dsp new file mode 100644 index 0000000..e010dd8 --- /dev/null +++ b/win32/vs6/libgstpython.dsp @@ -0,0 +1,205 @@ +# Microsoft Developer Studio Project File - Name="libgstpython" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=libgstpython - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "libgstpython.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "libgstpython.mak" CFG="libgstpython - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "libgstpython - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "libgstpython - Win32 Release python24" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "libgstpython - Win32 Release python25" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "libgstpython - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTPYTHON_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../../gst-plugins-base/" /I "../../../gstreamer" /I "../../../gstreamer/libs" /I "../common" /I "../../../gst-plugins-base/gst-libs" /I "C:\Python24\include" /I "C:\Python24\include\pygtk-2.0" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTPYTHON_EXPORTS" /D "HAVE_CONFIG_H" /D "HAVE_VIDEO_ORIENTATION_INTERFACE" /FD /GZ /c +# SUBTRACT CPP /YX +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x40c /d "_DEBUG" +# ADD RSC /l 0x40c /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 glib-2.0D.lib gobject-2.0D.lib libgstreamer-0.10.lib libgstbase-0.10.lib libgstinterfaces-0.10.lib libgstdataprotocol-0.10.lib libgstcontroller-0.10.lib libxml2.lib libgstnet-0.10.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"../../../gst-plugins-base/win32/vs6/debug" /libpath:"C:\Python24\libs\\" +# Begin Special Build Tool +TargetPath=.\Debug\libgstpython.dll +SOURCE="$(InputPath)" +PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\lib\gstreamer-0.10 +# End Special Build Tool + +!ELSEIF "$(CFG)" == "libgstpython - Win32 Release python24" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "libgstpython___Win32_Release_python24" +# PROP BASE Intermediate_Dir "libgstpython___Win32_Release_python24" +# PROP BASE Ignore_Export_Lib 0 +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release_python24" +# PROP Intermediate_Dir "Release_python24" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MD /W3 /O1 /I "../../../gstreamer" /I "../../../gstreamer/libs" /I "../common" /I "../../../gst-plugins-base/gst-libs" /I "C:\Python24\include\pygtk-2.0" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTPYTHON_EXPORTS" /D "HAVE_CONFIG_H" /D "HAVE_VIDEO_ORIENTATION_INTERFACE" /FR /FD /c +# SUBTRACT BASE CPP /YX +# ADD CPP /nologo /MD /W3 /O1 /I "../../../gstreamer" /I "../../../gstreamer/libs" /I "../common" /I "../../../gst-plugins-base/gst-libs" /I "C:\Python24\include\pygtk-2.0" /I "C:\Python24\include\\" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTPYTHON_EXPORTS" /D "HAVE_CONFIG_H" /D "HAVE_VIDEO_ORIENTATION_INTERFACE" /FR /FD /c +# SUBTRACT CPP /YX +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x40c /d "NDEBUG" +# ADD RSC /l 0x40c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib libgstinterfaces-0.10.lib libgstdataprotocol-0.10.lib libgstcontroller-0.10.lib glib-2.0.lib gobject-2.0.lib libxml2.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"../../../gst-plugins-base/win32/vs6/release" +# ADD LINK32 glib-2.0.lib gobject-2.0.lib libgstreamer-0.10.lib libgstbase-0.10.lib libgstinterfaces-0.10.lib libgstdataprotocol-0.10.lib libgstcontroller-0.10.lib libxml2.lib libgstnet-0.10.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"../../../gst-plugins-base/win32/vs6/release" /libpath:"C:\Python24\libs\\" +# Begin Special Build Tool +TargetPath=.\Release_python24\libgstpython.dll +SOURCE="$(InputPath)" +PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10 +# End Special Build Tool + +!ELSEIF "$(CFG)" == "libgstpython - Win32 Release python25" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "libgstpython___Win32_Release_python25" +# PROP BASE Intermediate_Dir "libgstpython___Win32_Release_python25" +# PROP BASE Ignore_Export_Lib 0 +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release_python25" +# PROP Intermediate_Dir "Release_python25" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MD /W3 /O1 /I "../../../gstreamer" /I "../../../gstreamer/libs" /I "../common" /I "../../../gst-plugins-base/gst-libs" /I "C:\Python24\include\pygtk-2.0" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTPYTHON_EXPORTS" /D "HAVE_CONFIG_H" /D "HAVE_VIDEO_ORIENTATION_INTERFACE" /FR /FD /c +# SUBTRACT BASE CPP /YX +# ADD CPP /nologo /MD /W3 /O1 /I "../../../gstreamer" /I "../../../gstreamer/libs" /I "../common" /I "../../../gst-plugins-base/gst-libs" /I "C:\Python25\include\pygtk-2.0" /I "C:\Python25\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTPYTHON_EXPORTS" /D "HAVE_CONFIG_H" /D "HAVE_VIDEO_ORIENTATION_INTERFACE" /FR /FD /c +# SUBTRACT CPP /YX +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x40c /d "NDEBUG" +# ADD RSC /l 0x40c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib libgstinterfaces-0.10.lib libgstdataprotocol-0.10.lib libgstcontroller-0.10.lib glib-2.0.lib gobject-2.0.lib libxml2.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"../../../gst-plugins-base/win32/vs6/release" +# ADD LINK32 glib-2.0.lib gobject-2.0.lib libgstreamer-0.10.lib libgstbase-0.10.lib libgstinterfaces-0.10.lib libgstdataprotocol-0.10.lib libgstcontroller-0.10.lib libxml2.lib libgstnet-0.10.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"../../../gst-plugins-base/win32/vs6/release" /libpath:"C:\Python25\libs" +# Begin Special Build Tool +TargetPath=.\Release_python25\libgstpython.dll +SOURCE="$(InputPath)" +PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10 +# End Special Build Tool + +!ENDIF + +# Begin Target + +# Name "libgstpython - Win32 Debug" +# Name "libgstpython - Win32 Release python24" +# Name "libgstpython - Win32 Release python25" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE="..\..\gst\gst-argtypes.c" +# End Source File +# Begin Source File + +SOURCE=..\..\gst\gst.c +# End Source File +# Begin Source File + +SOURCE=..\..\gst\gstmodule.c +# End Source File +# Begin Source File + +SOURCE=..\..\gst\interfaces.c +# End Source File +# Begin Source File + +SOURCE=..\..\gst\interfacesmodule.c +# End Source File +# Begin Source File + +SOURCE=..\..\gst\pygstexception.c +# End Source File +# Begin Source File + +SOURCE=..\..\gst\pygstiterator.c +# End Source File +# Begin Source File + +SOURCE=..\..\gst\pygstminiobject.c +# End Source File +# Begin Source File + +SOURCE=..\..\gst\pygstvalue.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\gst\common.h +# End Source File +# Begin Source File + +SOURCE=..\..\gst\pygstexception.h +# End Source File +# Begin Source File + +SOURCE=..\..\gst\pygstminiobject.h +# End Source File +# Begin Source File + +SOURCE=..\..\gst\pygstvalue.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/win32/vs6/pygenfiles.dsp b/win32/vs6/pygenfiles.dsp new file mode 100644 index 0000000..af295ca --- /dev/null +++ b/win32/vs6/pygenfiles.dsp @@ -0,0 +1,123 @@ +# Microsoft Developer Studio Project File - Name="pygenfiles" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Generic Project" 0x010a + +CFG=pygenfiles - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "pygenfiles.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "pygenfiles.mak" CFG="pygenfiles - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "pygenfiles - Win32 Release" (based on "Win32 (x86) Generic Project") +!MESSAGE "pygenfiles - Win32 Debug" (based on "Win32 (x86) Generic Project") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +MTL=midl.exe + +!IF "$(CFG)" == "pygenfiles - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" + +!ELSEIF "$(CFG)" == "pygenfiles - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" + +!ENDIF + +# Begin Target + +# Name "pygenfiles - Win32 Release" +# Name "pygenfiles - Win32 Debug" +# Begin Source File + +SOURCE=..\..\gst\gst.override + +!IF "$(CFG)" == "pygenfiles - Win32 Release" + +# Begin Custom Build +InputPath=..\..\gst\gst.override + +"gst_output" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + C:\Python24\python.exe ..\..\codegen/codegen.py --load-types ..\..\gst\arg-types.py --register ..\..\gst\gst-types.defs --override ..\..\gst\gst.override --extendpath ..\..\gst\ --extendpath ..\..\gst\ --prefix pygst ..\..\gst\gst.defs > ..\..\gst\gen-gst.c + move ..\..\gst\gen-gst.c ..\..\gst\gst.c + +# End Custom Build + +!ELSEIF "$(CFG)" == "pygenfiles - Win32 Debug" + +# Begin Custom Build +InputPath=..\..\gst\gst.override + +"gst_output" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + C:\Python24\python.exe ..\..\codegen/codegen.py --load-types ..\..\gst\arg-types.py --register ..\..\gst\gst-types.defs --override ..\..\gst\gst.override --extendpath ..\..\gst\ --extendpath ..\..\gst\ --prefix pygst ..\..\gst\gst.defs > ..\..\gst\gen-gst.c + move ..\..\gst\gen-gst.c ..\..\gst\gst.c + +# End Custom Build + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=..\..\gst\interfaces.override + +!IF "$(CFG)" == "pygenfiles - Win32 Release" + +# Begin Custom Build +InputPath=..\..\gst\interfaces.override + +"interfaces_output" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + C:\Python24\python.exe ..\..\codegen/codegen.py --load-types ..\..\gst\arg-types.py --register ..\..\gst\gst-types.defs --override ..\..\gst\interfaces.override --extendpath ..\..\gst\ --extendpath ..\..\gst\ --prefix pyinterfaces ..\..\gst\interfaces.defs > ..\..\gst\gen-interfaces.c + move ..\..\gst\gen-interfaces.c ..\..\gst\interfaces.c + + +# End Custom Build + +!ELSEIF "$(CFG)" == "pygenfiles - Win32 Debug" + +# Begin Custom Build +InputPath=..\..\gst\interfaces.override + +"interfaces_output" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + C:\Python24\python.exe ..\..\codegen/codegen.py --load-types ..\..\gst\arg-types.py --register ..\..\gst\gst-types.defs --override ..\..\gst\interfaces.override --extendpath ..\..\gst\ --extendpath ..\..\gst\ --prefix pyinterfaces ..\..\gst\interfaces.defs > ..\..\gst\gen-interfaces.c + move ..\..\gst\gen-interfaces.c ..\..\gst\interfaces.c + + +# End Custom Build + +!ENDIF + +# End Source File +# End Target +# End Project